module Yi.Config.Users.Gwern (config) where
import Control.Lens
import Yi
import Yi.Hoogle (hoogle)
import Yi.Keymap.Emacs (defKeymap, _eKeymap, mkKeymap)
import qualified Yi.Mode.Haskell as H
import qualified Yi.Mode.IReader as IReader (ireaderMode)
config :: Config
config = defaultEmacsConfig
{ modeTable = AnyMode bestHaskellMode : AnyMode IReader.ireaderMode : modeTable defaultConfig,
defaultKm = myKeymap,
configUI = defaultUIConfig {configFontSize = Nothing, configWindowFill = ' '} }
where defaultUIConfig :: UIConfig
defaultUIConfig = configUI defaultConfig
bestHaskellMode =
H.cleverMode { modeKeymap =
topKeymapA %~ ((ctrlCh 'c' ?>> choice [ctrlCh 'l' ?>>! H.ghciLoadBuffer,
ctrl (char 'z') ?>>! H.ghciGet,
ctrl (char 'h') ?>>! hoogle,
ctrlCh 'r' ?>>! H.ghciSend ":r",
ctrlCh 't' ?>>! H.ghciInferType])
<||) }
myKeymap :: KeymapSet
myKeymap = mkKeymap $ override Yi.Keymap.Emacs.defKeymap $ \proto _self ->
proto { _eKeymap = _eKeymap proto ||>
(metaCh 'g' ?>>! gotoLn)
||> (spec KHome ?>>! moveNonspaceOrSol) }