aboutsummaryrefslogtreecommitdiff
path: root/lib/Daffm/Action/Cmdline.hs
blob: 34e5e41fc47e604628d4d0bb5382eaeac5aec842 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
module Daffm.Action.Cmdline where

import qualified Brick.Widgets.Edit as Editor
import Control.Monad.State (gets, modify)
import qualified Control.Monad.State.Strict as StateStrict
import Daffm.Types
import Daffm.Utils (trimStart)
import qualified Data.Text as Text
import qualified Data.Text.Zipper as Z
import qualified Data.Text.Zipper as Zipper

getCmdlineText :: AppEvent Text.Text
getCmdlineText = StateStrict.gets cmdtext
  where
    cmdtext = trimStart . Text.unlines . Editor.getEditContents . stateCmdlineEditor

leaveCmdline :: AppEvent ()
leaveCmdline = clearCmdline >> modify (\st -> st {stateFocusTarget = FocusMain})

enterCmdline :: AppEvent ()
enterCmdline = modify (\st -> st {stateFocusTarget = FocusCmdline})

setCmdlineText :: Text.Text -> AppEvent ()
setCmdlineText text =
  applyCmdlineEdit (const $ Z.textZipper [text] (Just 1))

clearCmdline :: AppEvent ()
clearCmdline = applyCmdlineEdit Z.clearZipper

applyCmdlineEdit :: (Zipper.TextZipper Text.Text -> Zipper.TextZipper Text.Text) -> AppEvent ()
applyCmdlineEdit zipper = do
  editor <- gets stateCmdlineEditor
  let editor' = Editor.applyEdit zipper editor
  modify (\s -> s {stateCmdlineEditor = editor'})