packages feed

miv-0.4.9: src/Mapping.hs

module Mapping where

import Data.Default (Default(..))
import Data.Text (Text, null, unwords)
import Data.Text.Builder.Linear qualified as Builder
import Data.Text.Display (Display(..), display)
import Prelude hiding (null, unwords)

import Mode

data Mapping =
  Mapping {
    name   :: Text,
    repl   :: Text,
    unique :: Bool,
    silent :: Bool,
    mode   :: Mode
  } deriving Eq

instance Display Mapping where
  displayBuilder m =
    Builder.fromText $ unwords $ filter (not . null)
        [ display m.mode <> "noremap",
          (if m.unique then "<unique>" else "")
       <> (if m.silent then "<silent>" else ""),
          m.name,
          m.repl
        ]

instance Default Mapping where
  def = Mapping {
    name    = "",
    repl    = "",
    unique  = True,
    silent  = True,
    mode    = NormalMode
  }