{-# OPTIONS_HADDOCK show-extensions #-}

-- |
-- Module      :  Yi.Boot.Internal
-- License     :  GPL-2
-- Maintainer  :  yi-devel@googlegroups.com
-- Stability   :  experimental
-- Portability :  portable
--
-- Internal use for Yi.Boot

module Yi.Boot.Internal where

import Config.Dyre.Relaunch (relaunchWithBinaryState)
import Control.Monad.Base   (liftBase)
import Control.Monad.State  (get)
import Yi.Keymap            (YiM, withUI)
import Yi.Types             (withEditor)
import Yi.UI.Common         (end)

-- | "reloads" the configuration
--
-- Serializes the editor state and relaunches Yi using the serialized
-- state. The launch of Yi will result in recompilation of the user's
-- custom Yi. This, in effect, "reloads" the configuration.
reload :: YiM ()
reload = do
  editor <- withEditor get
  withUI (`end` Nothing)
  liftBase $ relaunchWithBinaryState (Just editor) Nothing