-
Notifications
You must be signed in to change notification settings - Fork 201
/
Default.hs
135 lines (124 loc) · 5.18 KB
/
Default.hs
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
module Yi.Config.Default (defaultConfig) where
import Lens.Micro.Platform ((.~))
import qualified Data.HashMap.Strict as HM
import Data.Monoid
import Paths_yi_core
import System.FilePath
import Yi.Buffer
import Yi.Command (cabalBuildE, cabalConfigureE, grepFind,
makeBuild, reloadProjectE, searchSources,
shell)
import Yi.Config
import Yi.Core (errorEditor, quitEditor)
import Yi.Editor
import Yi.Eval (publishedActions)
import Yi.File
import qualified Yi.Interact as I
import Yi.Keymap
import Yi.Keymap.Keys
import Yi.Layout
import Yi.Mode.Common (fundamentalMode)
import qualified Yi.Rope as R
import Yi.Search
import Yi.Style.Library
import Yi.Utils
import Yi.Types ()
-- | List of published Actions
-- THIS MUST BE OF THE FORM:
-- ("symbol", box symbol")
-- ... so we can hope getting rid of this someday.
-- Failing to conform to this rule exposes the code to instant deletion.
--
-- TODO: String → Text/YiString
defaultPublishedActions :: HM.HashMap String Action
defaultPublishedActions = HM.fromList
[
("atBoundaryB" , box atBoundaryB)
, ("cabalBuildE" , box cabalBuildE)
, ("cabalConfigureE" , box cabalConfigureE)
, ("closeBufferE" , box closeBufferE)
, ("deleteB" , box deleteB)
, ("deleteBlankLinesB" , box deleteBlankLinesB)
, ("getSelectRegionB" , box getSelectRegionB)
, ("grepFind" , box grepFind)
, ("insertB" , box insertB)
, ("leftB" , box leftB)
, ("linePrefixSelectionB" , box linePrefixSelectionB)
, ("lineStreamB" , box lineStreamB)
-- , ("mkRegion" , box mkRegion) -- can't make 'instance Promptable Region'
, ("makeBuild" , box makeBuild)
, ("moveB" , box moveB)
, ("numberOfB" , box numberOfB)
, ("pointB" , box pointB)
, ("regionOfB" , box regionOfB)
, ("regionOfPartB" , box regionOfPartB)
, ("regionOfPartNonEmptyB" , box regionOfPartNonEmptyB)
, ("reloadProjectE" , box reloadProjectE)
, ("replaceString" , box replaceString)
, ("revertE" , box revertE)
, ("shell" , box shell)
, ("searchSources" , box searchSources)
, ("setAnyMode" , box setAnyMode)
, ("sortLines" , box sortLines)
, ("unLineCommentSelectionB", box unLineCommentSelectionB)
, ("writeB" , box writeB)
]
where
box :: (Show x, YiAction a x) => a -> Action
box = makeAction
defaultConfig :: Config
defaultConfig =
publishedActions .~ defaultPublishedActions $
Config { startFrontEnd = error "panic: no frontend compiled in! (configure with -fvty or another frontend.)"
, configUI = UIConfig
{ configFontSize = Just 10
, configFontName = Nothing
, configScrollWheelAmount = 4
, configScrollStyle = Nothing
, configCursorStyle = FatWhenFocusedAndInserting
, configLineWrap = True
, configLeftSideScrollBar = True
, configAutoHideScrollBar = False
, configAutoHideTabBar = True
, configWindowFill = ' '
, configTheme = defaultTheme
, configLineNumbers = False
}
, defaultKm = modelessKeymapSet nilKeymap
, startActions = mempty
, initialActions = mempty
, modeTable = [AnyMode fundamentalMode]
, debugMode = False
, configKillringAccumulate = False
, configCheckExternalChangesObsessively = True
, configRegionStyle = Exclusive
, configInputPreprocess = I.idAutomaton
, bufferUpdateHandler = mempty
, layoutManagers = [hPairNStack 1, vPairNStack 1, tall, wide]
, configVars = mempty
}
nilKeymap :: Keymap
nilKeymap = choice [
char 'q' ?>>! quitEditor,
char 'h' ?>>! configHelp
]
<|| (anyEvent >>! errorEditor "Keymap not defined, 'q' to quit, 'h' for help.")
where
configHelp :: YiM ()
configHelp = do
dataDir <- io getDataDir
let x <//> y = R.fromString (x </> y)
welcomeText = R.unlines
[ "This instance of Yi is not configured."
, ""
, "To get a standard reasonable keymap, you can run yi with"
, "either --as=cua, --as=vim or --as=emacs."
, ""
, "You should however create your own ~/.config/yi/yi.hs file."
, "As a starting point it's recommended to use one of the configs"
, "from " <> (dataDir <//> "example-configs/")
, ""
]
withEditor_ $ newBufferE (MemBuffer "configuration help") welcomeText