module Ribosome.Api.Mode where import Ribosome.Control.Monad.Ribo (NvimE) import Ribosome.Msgpack.Decode (MsgpackDecode(..), msgpackFromString) import Ribosome.Nvim.Api.IO (vimCallFunction) data NvimMode = Normal | Visual | Insert | Other Text deriving (NvimMode -> NvimMode -> Bool (NvimMode -> NvimMode -> Bool) -> (NvimMode -> NvimMode -> Bool) -> Eq NvimMode forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: NvimMode -> NvimMode -> Bool $c/= :: NvimMode -> NvimMode -> Bool == :: NvimMode -> NvimMode -> Bool $c== :: NvimMode -> NvimMode -> Bool Eq, Int -> NvimMode -> ShowS [NvimMode] -> ShowS NvimMode -> String (Int -> NvimMode -> ShowS) -> (NvimMode -> String) -> ([NvimMode] -> ShowS) -> Show NvimMode forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [NvimMode] -> ShowS $cshowList :: [NvimMode] -> ShowS show :: NvimMode -> String $cshow :: NvimMode -> String showsPrec :: Int -> NvimMode -> ShowS $cshowsPrec :: Int -> NvimMode -> ShowS Show) instance IsString NvimMode where fromString :: String -> NvimMode fromString String "n" = NvimMode Normal fromString String "v" = NvimMode Visual fromString String "V" = NvimMode Visual fromString String "CTRL-V" = NvimMode Visual fromString String "i" = NvimMode Insert fromString String a = Text -> NvimMode Other (String -> Text forall a. ToText a => a -> Text toText String a) instance MsgpackDecode NvimMode where fromMsgpack :: Object -> Either Err NvimMode fromMsgpack = Text -> Object -> Either Err NvimMode forall a. IsString a => Text -> Object -> Either Err a msgpackFromString Text "NvimMode" mode :: NvimE e m => m NvimMode mode :: m NvimMode mode = Text -> [Object] -> m NvimMode forall (m :: * -> *) e a. (Nvim m, MonadDeepError e RpcError m, MsgpackDecode a) => Text -> [Object] -> m a vimCallFunction Text "mode" [] visualModeActive :: NvimE e m => m Bool visualModeActive :: m Bool visualModeActive = (NvimMode -> NvimMode -> Bool forall a. Eq a => a -> a -> Bool == NvimMode Visual) (NvimMode -> Bool) -> m NvimMode -> m Bool forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> m NvimMode forall e (m :: * -> *). NvimE e m => m NvimMode mode