yi-0.6.4.0: src/library/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 qualified Config.Dyre.Options as Dyre
import Config.Dyre.Relaunch
import Control.Monad.State
import qualified Data.Rope as R
import System.Directory
import System.Environment
import System.Exit
import Yi.Config
import Yi.Editor
import Yi.Keymap
import Yi.Main
import qualified Yi.UI.Common as UI
realMain :: (Config, ConsoleConfig) -> IO ()
realMain configs = do
editor <- restoreBinaryState Nothing
main configs editor
showErrorsInConf :: (Config, ConsoleConfig) -> String -> (Config, ConsoleConfig)
showErrorsInConf (conf, confcon) errs
= (conf { initialActions = (makeAction $ splitE >> newBufferE (Left "*errors*") (R.fromString errs)) : initialActions conf }
, confcon)
yi, yiDriver :: Config -> IO ()
yi = yiDriver
yiDriver cfg = do
args <- Dyre.withDyreOptions Dyre.defaultParams getArgs
-- we do the arg processing before dyre, so we can extract '--ghc-option=' and '--help' and so on.
case do_args cfg args of
Left (Err err code) ->
do putStrLn err
exitWith code
Right (finalCfg, cfgcon) ->
let yiParams = Dyre.defaultParams
{ Dyre.projectName = "yi"
, Dyre.realMain = realMain
, Dyre.showError = showErrorsInConf
, Dyre.configDir = Just . getAppUserDataDirectory $ "yi"
, Dyre.hidePackages = ["mtl"]
, Dyre.ghcOpts = ["-threaded", "-O2"] ++ ghcOptions cfgcon
}
in Dyre.wrapMain yiParams (finalCfg, cfgcon)
reload :: YiM ()
reload = do
editor <- withEditor get
withUI (\ui -> UI.end ui False)
liftIO $ relaunchWithBinaryState (Just editor) Nothing