packages feed

ribosome-0.4.0.0: lib/Ribosome/Api/Option.hs

module Ribosome.Api.Option where

import Control.Exception.Lifted (bracket)
import Data.Text (splitOn)

import Ribosome.Control.Monad.Ribo (NvimE)
import Ribosome.Msgpack.Encode (MsgpackEncode(toMsgpack))
import Ribosome.Nvim.Api.IO (vimGetOption, vimSetOption)

optionCat :: NvimE e m => Text -> Text -> m ()
optionCat name extra = do
  current <- vimGetOption name
  vimSetOption name $ toMsgpack $ current <> "," <> extra

rtpCat :: NvimE e m => Text -> m ()
rtpCat = optionCat "runtimepath"

optionString :: NvimE e m => Text -> m Text
optionString = vimGetOption

optionList :: NvimE e m => Text -> m [Text]
optionList name = do
  s <- vimGetOption name
  return $ splitOn "," s

withOption ::
  NvimE e m =>
  MsgpackEncode a =>
  MonadBaseControl IO m =>
  Text ->
  a ->
  m b ->
  m b
withOption name value =
  bracket set reset . const
  where
    set =
      vimGetOption name <* vimSetOption name (toMsgpack value)
    reset =
      vimSetOption name