helic-0.4.0.0: lib/Helic/Interpreter/AgentTmux.hs
-- |Agent Interpreter for Tmux, Internal
module Helic.Interpreter.AgentTmux where
import Exon (exon)
import qualified Log
import Path (Abs, File, Path, toFilePath)
import qualified System.Process.Typed as Process
import System.Process.Typed (ProcessConfig)
import qualified Helic.Data.TmuxConfig as TmuxConfig
import Helic.Data.TmuxConfig (TmuxConfig)
import Helic.Effect.Agent (Agent (Update), AgentTmux)
import Helic.Interpreter (interpreting)
import Helic.Tmux (sendToTmux)
import Polysemy.Process (interpretProcessByteStringNative)
import Polysemy.Process.Data.ProcessError (ProcessError)
-- |Process definition for running `tmux load-buffer -`.
tmuxProc ::
Maybe (Path Abs File) ->
ProcessConfig () () ()
tmuxProc exe =
Process.proc cmd ["load-buffer", "-"]
where
cmd =
maybe "tmux" toFilePath exe
-- |Consult the config as to whether tmux should be used, defaulting to true.
enableTmux ::
Member (Reader TmuxConfig) r =>
Sem r Bool
enableTmux =
fromMaybe True <$> asks TmuxConfig.enable
-- |Interpret 'Agent' using a tmux server as the target.
interpretAgentTmux ::
Members [Reader TmuxConfig, Log, Async, Race, Resource, Embed IO] r =>
InterpreterFor (Tagged AgentTmux Agent) r
interpretAgentTmux sem = do
exe <- asks TmuxConfig.exe
interpretProcessByteStringNative True 64 (tmuxProc exe) $
interpreting (raiseUnder (untag sem)) \case
Update event ->
whenM enableTmux do
sendToTmux event !! \ (e :: ProcessError) ->
Log.error [exon|Sending to tmux: #{show e}|]