yi-0.6.2.3: src/Yi/Config.hs
module Yi.Config where
import qualified Data.Map as M
import Data.Prototype
import Yi.Buffer
import {-# source #-} Yi.Keymap
import {-# source #-} Yi.Editor
import Data.Dynamic
import Yi.Event
import Yi.Style
import Yi.Style.Library
import {-# source #-} Yi.UI.Common
import qualified Yi.Interact as I
data UIConfig = UIConfig {
configVtyEscDelay :: Int,
configFontName :: Maybe String, -- ^ Font name, for the UI that support it.
configFontSize :: Maybe Int, -- ^ Font size, for the UI that support it.
configLeftSideScrollBar :: Bool, -- ^ Should the scrollbar be shown on the left side?
configAutoHideScrollBar :: Bool, -- ^ Hide scrollbar automatically if text fits on one page.
configAutoHideTabBar :: Bool, -- ^ Hide the tabbar automatically if only one tab is present
configLineWrap :: Bool, -- ^ Wrap lines at the edge of the window if too long to display.
configWindowFill :: Char,
-- ^ The char with which to fill empty window space. Usually '~' for vi-like
-- editors, ' ' for everything else.
configTheme :: Theme -- ^ UI colours
}
configStyle :: UIConfig -> UIStyle
configStyle = extractValue . configTheme
-- | Configuration record. All Yi hooks can be set here.
data Config = Config {startFrontEnd :: UIBoot,
-- ^ UI to use.
configUI :: UIConfig,
-- ^ UI-specific configuration.
startActions :: [Action],
-- ^ Actions to run when the editor is started.
initialActions :: [Action],
-- ^ Actions to run after startup (after startActions) or reload.
defaultKm :: KeymapSet,
-- ^ Default keymap to use.
configInputPreprocess :: I.P Event Event,
modeTable :: [AnyMode],
-- ^ List modes by order of preference.
publishedActions :: M.Map String [Data.Dynamic.Dynamic],
-- ^ Actions available in the "interpreter" (akin to M-x in emacs)
debugMode :: Bool,
-- ^ Produce a .yi.dbg file with a lot of debug information.
configRegionStyle :: RegionStyle,
-- ^ Set to 'Exclusive' for an emacs-like behaviour.
configKillringAccumulate :: Bool,
-- ^ Set to 'True' for an emacs-like behaviour, where
-- all deleted text is accumulated in a killring.
bufferUpdateHandler :: [([Update] -> BufferM ())]
}
configFundamentalMode :: Config -> AnyMode
configFundamentalMode = last . modeTable
configTopLevelKeymap :: Config -> Keymap
configTopLevelKeymap = extractTopKeymap . defaultKm
type UIBoot = Config -> (Event -> IO ()) -> ([Action] -> IO ()) -> Editor -> IO UI