From 80f503c87353468c6e33ac3a74ee8add00fe7957 Mon Sep 17 00:00:00 2001 From: voidlizard Date: Wed, 5 Feb 2025 19:02:14 +0300 Subject: [PATCH] bf6: suckless-script call:proc:raw --- .../lib/Data/Config/Suckless/Almost/RPC.hs | 24 +++++++++++++++++++ .../Data/Config/Suckless/Script/Internal.hs | 11 +++++++++ 2 files changed, 35 insertions(+) diff --git a/miscellaneous/suckless-conf/lib/Data/Config/Suckless/Almost/RPC.hs b/miscellaneous/suckless-conf/lib/Data/Config/Suckless/Almost/RPC.hs index 5b00b9ad..80517059 100644 --- a/miscellaneous/suckless-conf/lib/Data/Config/Suckless/Almost/RPC.hs +++ b/miscellaneous/suckless-conf/lib/Data/Config/Suckless/Almost/RPC.hs @@ -50,6 +50,30 @@ callProc name params syn = do parseTop s & either (liftIO . throwIO) pure +-- FIXME: to-suckless-script +callProcRaw :: forall m . MonadIO m + => FilePath + -> [String] + -> m Text + +callProcRaw name params = do + -- let input = fmap (LBS.fromStrict . TE.encodeUtf8 . T.pack . show . pretty) syn + -- & LBS8.unlines + -- & byteStringInput + + -- let what = proc name params & setStderr closed & setStdin input + let what = proc name params & setStderr closed & setStdin closed + (code, i, o) <- readProcess what + + unless (code == ExitSuccess) do + liftIO $ hPrint stderr ( pretty $ LBS8.unpack o ) + liftIO $ throwIO (CallProcException code) + + let s = TE.decodeUtf8With TE.lenientDecode (LBS.toStrict i) + + pure s + + pipeProcText :: forall m . MonadIO m => FilePath -> [String] diff --git a/miscellaneous/suckless-conf/lib/Data/Config/Suckless/Script/Internal.hs b/miscellaneous/suckless-conf/lib/Data/Config/Suckless/Script/Internal.hs index f3ef121a..8dcded22 100644 --- a/miscellaneous/suckless-conf/lib/Data/Config/Suckless/Script/Internal.hs +++ b/miscellaneous/suckless-conf/lib/Data/Config/Suckless/Script/Internal.hs @@ -1634,6 +1634,17 @@ internalEntries = do _ -> throwIO (BadFormException @c nil) + brief "calls external process" + $ entry $ bindMatch "call:proc:raw" \case + [StringLike what] -> lift do + callProcRaw what mempty <&> mkStr @c + + (StringLike x:xs) -> lift do + callProcRaw x (fmap (show.pretty) xs) <&> mkStr @c + + _ -> throwIO (BadFormException @c nil) + + brief "call external process as pipe" $ entry $ bindMatch "proc:pipe" \case