cornelis-0.2.0.0: src/Cornelis/Config.hs
{-# LANGUAGE OverloadedStrings #-}
module Cornelis.Config where
import Cornelis.Types
import Cornelis.Utils (objectToInt, objectToText)
import Data.Maybe (fromMaybe)
import qualified Data.Text as T
import Neovim
import Neovim.API.Text
import Control.Monad ((<=<))
------------------------------------------------------------------------------
-- | Attempt to get a variable from vim.
getVar :: Text -> Neovim env (Maybe Object)
getVar v
= catchNeovimException (Just <$> vim_get_var v)
$ const
$ pure Nothing
------------------------------------------------------------------------------
-- | Get the first variable from vim that succeeds. Useful for variable names
-- that have changed over time.
getVarWithAlternatives :: [Text] -> Neovim env (Maybe Object)
getVarWithAlternatives = fmap getFirst . foldMap (fmap First . getVar)
------------------------------------------------------------------------------
-- | Build a 'CornelisConfig' from .vimrc
getConfig :: Neovim env CornelisConfig
getConfig
= CornelisConfig
<$> fmap (fromMaybe 31 . (objectToInt =<<))
(getVar "cornelis_max_size")
<*> fmap (fromMaybe 31 . (objectToInt =<<))
(getVar "cornelis_max_width")
<*> (fromMaybe Horizontal . (>>= (readSplitLocation . T.unpack <=< objectToText)) <$>
getVarWithAlternatives ["cornelis_split_location", "cornelis_split_direction"])