packages feed

chiasma-0.12.2.0: lib/Chiasma/Data/ResizePaneParams.hs

module Chiasma.Data.ResizePaneParams where

import Chiasma.Class.CmdArgs (CmdArgs (cmdArgs), arg, flag1, optionArgs)
import Chiasma.Data.Axis (Axis (Horizontal, Vertical))
import Chiasma.Data.Direction (Direction)
import Chiasma.Data.Target (Target (Current))

data ResizeAbsolute =
  ResizeAbsolute Axis Int
  deriving stock (Eq, Show)

instance CmdArgs ResizeAbsolute where
  cmdArgs (ResizeAbsolute axis amount) =
    [axisArg axis, show amount]
    where
      axisArg = \case
        Horizontal -> "-x"
        Vertical -> "-y"

data Adjustment =
  Adjustment (Maybe Direction) (Maybe Int)
  deriving stock (Eq, Show)

instance CmdArgs Adjustment where
  cmdArgs (Adjustment dir amount) =
    optionArgs dir <> arg (show <$> amount)

data ResizePaneParams =
  ResizePaneParams {
    absolute :: Maybe ResizeAbsolute,
    adjustment :: Maybe Adjustment,
    zoom :: Bool,
    mouse :: Bool,
    target :: Target
  }
  deriving stock (Eq, Show)

instance Default ResizePaneParams where
  def =
    ResizePaneParams {
      absolute = Nothing,
      adjustment = Nothing,
      zoom = False,
      mouse = False,
      target = Current
    }

instance CmdArgs ResizePaneParams where
  cmdArgs ResizePaneParams {..} =
    optionArgs absolute
    <>
    flag1 "-Z" zoom
    <>
    flag1 "-M" mouse
    <>
    optionArgs adjustment
    <>
    cmdArgs target