packages feed

yi-0.6.2.2: src/Yi/Boot.hs

-- | Boot process of Yi, as an instanciation of Dyre
module Yi.Boot (yi, yiDriver, reload) where

import qualified Config.Dyre as Dyre
import Config.Dyre.Relaunch
import Control.Monad.State
import Control.Monad.Trans
import qualified Data.Rope as R
import System.Directory

import Yi.Config
import Yi.Editor
import Yi.Keymap
import qualified Yi.Main
import qualified Yi.UI.Common as UI

realMain :: Config -> IO ()
realMain config = do
    editor <- restoreBinaryState $ Nothing
    Yi.Main.main config editor

showErrorsInConf :: Config -> String -> Config
showErrorsInConf conf errs
    = conf {startActions = [makeAction $ newBufferE (Left "errors") (R.fromString errs)] ++ startActions conf}

yi, yiDriver :: Config -> IO ()

(yiDriver, yi) = (Dyre.wrapMain yiParams, Dyre.wrapMain yiParams {Dyre.configCheck = False})
  where yiParams = Dyre.defaultParams
             { Dyre.projectName  = "yi"
             , Dyre.realMain     = realMain
             , Dyre.showError    = showErrorsInConf
             , Dyre.configDir    = Just . getAppUserDataDirectory $ "yi"
             , Dyre.hidePackages = ["mtl"]
             , Dyre.ghcOpts = ["-threaded", "-O2"]
             }

reload :: YiM ()
reload = do
    editor <- withEditor get
    withUI (\ui -> UI.end ui False)
    liftIO $ relaunchWithBinaryState (Just editor) Nothing