{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_HADDOCK show-extensions #-}
module Yi.Keymap.Vim.Ex.Commands.Number (parse) where
import qualified Data.Attoparsec.Text as P (string)
import Data.Monoid ((<>))
import Yi.Editor (printMsg, withCurrentBuffer)
import Yi.Keymap (Action (BufferA, EditorA))
import Yi.Keymap.Vim.Common (EventString)
import Yi.Keymap.Vim.Ex.Commands.Common (BoolOptionAction (..), parseBoolOption, pureExCommand)
import qualified Yi.Keymap.Vim.Ex.Commands.Common as Ex (parse)
import Yi.Keymap.Vim.Ex.Types (ExCommand (..), evStringToExCommand)
import Yi.String (showT)
import Yi.UI.LineNumbers (getDisplayLineNumbersLocal, setDisplayLineNumbersLocal)
parse :: EventString -> Maybe ExCommand
parse = evStringToExCommand
[ parseBoolOption "number" actionSet
, parseUnset
]
actionSet :: BoolOptionAction -> Action
actionSet BoolOptionAsk = EditorA $ do
mb <- withCurrentBuffer getDisplayLineNumbersLocal
printMsg $ "number = " <> case mb of
Nothing -> "<unset>"
Just b -> showT b
actionSet (BoolOptionSet b) = BufferA $ setDisplayLineNumbersLocal (Just b)
actionSet BoolOptionInvert = BufferA $ do
b <- getDisplayLineNumbersLocal
setDisplayLineNumbersLocal (fmap not b)
parseUnset :: EventString -> Maybe ExCommand
parseUnset = Ex.parse $ do
_ <- P.string "unset number"
return $ pureExCommand
{ cmdShow = "unset number"
, cmdAction = BufferA $ setDisplayLineNumbersLocal Nothing
}