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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
module Daffm.Types where
import Brick (EventM)
import qualified Brick.Widgets.Edit as Editor
import qualified Brick.Widgets.List as L
import Control.Applicative ((<|>))
import qualified Data.Map as Map
import qualified Data.Set as Set
import qualified Data.Text as Text
import qualified Data.Vector as Vec
import qualified Graphics.Vty as V
import System.Posix.Types (FileMode, FileOffset)
data FileType
= RegularFile
| BlockDevice
| CharacterDevice
| NamedPipe
| Directory
| SymbolicLink
| UnixSocket
| UnknownFileType
deriving (Show)
type FilePathText = Text.Text
data FileInfo = FileInfo
{ fileName :: Text.Text,
filePath :: FilePathText,
fileSize :: FileOffset,
fileMode :: FileMode,
fileType :: FileType,
fileLinkType :: Maybe FileType,
fileLinkTarget :: Maybe FilePathText
}
deriving (Show)
data FocusTarget = FocusCmdline | FocusMain deriving (Show, Eq, Ord)
data AppState = AppState
{ stateCmdlineEditor :: CmdlineEditor,
stateCwd :: FilePathText,
stateCustomCommands :: Map.Map Text.Text Command,
stateFileSelections :: Set.Set FilePathText,
stateFiles :: L.List FocusTarget FileInfo,
stateMessage :: Maybe Text.Text,
stateFocusTarget :: FocusTarget,
stateKeyMap :: Keymap,
stateKeySequence :: KeySequence,
stateListPositionHistory :: Map.Map Text.Text Int,
stateOpenerScript :: Maybe Text.Text,
stateSearchTerm :: Maybe Text.Text,
stateSearchMatches :: Vec.Vector Int,
stateSearchIndex :: Int
}
deriving (Show)
type CustomArgs = Text.Text
type AppEvent = EventM FocusTarget AppState
type CmdlineEditor = Editor.Editor Text.Text FocusTarget
data KeyMatchResult = MatchSuccess Command | MatchPartial | MatchFailure
deriving (Show, Eq)
data MoveInc = MoveDown Int | MoveUp Int | MoveTo Int | MoveToEnd
deriving (Show, Eq)
data Command
= CmdShell Bool Text.Text
| CmdCommandShell Text.Text
| CmdQuit
| CmdSetCmdline Text.Text
| CmdEnterCmdline
| CmdLeaveCmdline
| CmdOpenSelection
| CmdChangeDir Text.Text
| CmdReload
| CmdToggleSelection
| CmdClearSelection
| CmdGoBack
| CmdChain [Command]
| CmdSearch Text.Text
| CmdSearchNext Int
| CmdKeymapSet [Key] Command
| CmdMove MoveInc
| CmdCustom Text.Text CustomArgs
| CmdNoop
deriving (Show, Eq)
type Key = V.Key
type Keymap = Map.Map [Key] Command
type KeySequence = [Key]
data Configuration = Configuration
{ configKeymap :: !Keymap,
configOpener :: !(Maybe Text.Text),
configExtend :: !(Maybe Text.Text),
configCommands :: !(Map.Map Text.Text Command)
}
deriving (Show)
instance Semigroup Configuration where
a <> b =
a
{ configKeymap = configKeymap a <> configKeymap b,
configOpener = configOpener a <|> configOpener b,
configCommands = configCommands a <> configCommands b
}
data Args = Args
{ argsDirOrFile :: Maybe Text.Text,
argsConfigFile :: Maybe FilePath,
argsHelp :: Bool
}
deriving (Show)
|