module Yi.Config where
import qualified Data.Map as M
import Data.Prototype
import Yi.Buffer
import Yi.Keymap
import Yi.Editor
import Data.Dynamic
import Yi.Event
import Yi.Style
import Yi.Style.Library
import Yi.UI.Common
import qualified Yi.Interact as I
data UIConfig = UIConfig {
configVtyEscDelay :: Int,
configFontName :: Maybe String,
configFontSize :: Maybe Int,
configLeftSideScrollBar :: Bool,
configAutoHideScrollBar :: Bool,
configAutoHideTabBar :: Bool,
configLineWrap :: Bool,
configWindowFill :: Char,
configTheme :: Theme
}
configStyle :: UIConfig -> UIStyle
configStyle = extractValue . configTheme
data Config = Config {startFrontEnd :: UIBoot,
configUI :: UIConfig,
startActions :: [Action],
initialActions :: [Action],
defaultKm :: KeymapSet,
configInputPreprocess :: I.P Event Event,
modeTable :: [AnyMode],
publishedActions :: M.Map String [Data.Dynamic.Dynamic],
debugMode :: Bool,
configRegionStyle :: RegionStyle,
configKillringAccumulate :: Bool,
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