-- | Boot process of Yi, as an instanciation of HConf module Yi.Boot (driver, yi, reloadEditor, defaultHConfParams, projectName) where import Control.Monad.State import qualified Data.Binary import HConf (HConf(HConf), getHConf) import qualified HConf import Yi.Config import Yi.Debug import Yi.Editor (newBufferE, Editor, withEditor) import Yi.Keymap (makeAction, withUI, YiM) import qualified Yi.UI.Common as UI import qualified Yi.Main import qualified Yi.Config.Default import qualified Data.Rope as R recoverState :: FilePath -> IO (Maybe Editor) recoverState = Data.Binary.decodeFile saveState :: FilePath -> Maybe Editor -> IO () saveState = Data.Binary.encodeFile realMain :: Config -> Maybe Editor -> IO () realMain staticConfig state = do when (debugMode staticConfig) $ initDebug ".yi.dbg" -- initialize here so we can see debug messages early, if -- the flag is set in the static configuration. Yi.Main.main staticConfig state initState :: Maybe Editor initState = Nothing reloadEditor :: YiM () reloadEditor = do editor <- withEditor get withUI (flip UI.end False) liftIO $ restart (Just editor) driver :: IO () yi :: Config -> IO () restart :: Maybe Editor -> IO () HConf driver yi restart = getHConf defaultHConfParams Yi.Config.Default.defaultConfig initState showErrorsInConf :: String -> Config -> Config showErrorsInConf errs conf = conf {startActions = [makeAction $ newBufferE (Left "errors") (R.fromString errs)]} projectName :: String projectName = "yi" defaultHConfParams :: HConf.HConfParams Config (Maybe Editor) defaultHConfParams = HConf.HConfParams { HConf.projectName = projectName , HConf.recoverState = recoverState , HConf.saveState = saveState , HConf.showErrorsInConf = showErrorsInConf , HConf.realMain = realMain -- monads-fd collide with mtl. -- Could not find module `Control.Monad.Writer': -- it was found in multiple packages: monads-fd-0.0.0.0 mtl-1.1.0.2 , HConf.ghcFlags = ["-hide-package", "mtl"] }