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