packages feed

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

module Chiasma.Data.SplitParams where

import Chiasma.Class.CmdArgs (CmdArgs (cmdArgs), flag1, optionArgs)
import Chiasma.Data.Axis (Axis)
import Chiasma.Data.Target (Target (Current), formatTarget)

data SplitSize =
  Units Int
  |
  Percentage Int
  deriving stock (Eq, Show)

instance CmdArgs SplitSize where
  cmdArgs = \case
    Units n -> ["-l", show n]
    Percentage n -> ["-p", show n]

data SplitWindowParams =
  SplitWindowParams {
    axis :: Maybe Axis,
    size :: Maybe SplitSize,
    before :: Bool,
    fullSize :: Bool,
    readStdin :: Bool
  }
  deriving stock (Eq, Show)

instance Default SplitWindowParams where
  def =
    SplitWindowParams {
      axis = Nothing,
      size = Nothing,
      before = False,
      fullSize = False,
      readStdin = False
    }

instance CmdArgs SplitWindowParams where
  cmdArgs SplitWindowParams {..} =
    optionArgs axis
    <>
    optionArgs size
    <>
    flag1 "-b" before
    <>
    flag1 "-f" fullSize
    <>
    flag1 "-K" readStdin

data JoinPaneParams =
  JoinPaneParams {
    axis :: Maybe Axis,
    size :: Maybe SplitSize,
    before :: Bool,
    detach :: Bool,
    source :: Maybe Target,
    target :: Target
  }
  deriving stock (Eq, Show)

instance Default JoinPaneParams where
  def =
    JoinPaneParams {
      axis = Nothing,
      size = Nothing,
      before = False,
      detach = False,
      source = Nothing,
      target = Current
    }

instance CmdArgs JoinPaneParams where
  cmdArgs JoinPaneParams {..} =
    optionArgs axis
    <>
    optionArgs size
    <>
    flag1 "-b" before
    <>
    flag1 "-d" detach
    <>
    foldMap (formatTarget ["-s"]) source
    <>
    cmdArgs target