miv-0.4.8: src/Mode.hs
{-# LANGUAGE BlockArguments, LambdaCase, OverloadedStrings #-}
module Mode where
import Data.Text (unpack)
import Data.YAML
import ShowText
data Mode = NormalMode
| VisualSelectMode
| VisualMode
| SelectMode
| InsertMode
| CmdlineMode
| LangArgMode
| OperatorPendingMode
| TerminalMode
deriving (Eq, Ord)
instance ShowText Mode where
show NormalMode = "n"
show VisualSelectMode = "v"
show VisualMode = "x"
show SelectMode = "s"
show InsertMode = "i"
show CmdlineMode = "c"
show LangArgMode = "l"
show OperatorPendingMode = "o"
show TerminalMode = "t"
instance FromYAML Mode where
parseYAML = withStr "!!str" \case
"n" -> return NormalMode
"v" -> return VisualSelectMode
"x" -> return VisualMode
"s" -> return SelectMode
"i" -> return InsertMode
"c" -> return CmdlineMode
"l" -> return LangArgMode
"o" -> return OperatorPendingMode
"t" -> return TerminalMode
x -> fail $ unpack $ "failed to parse mode: " <> x