slate-0.13.1.0: src/Command.hs
module Command
( parser
, Command(..)
, Slate
) where
import Data.Semigroup ((<>))
import Options.Applicative
type Slate = String
type Task = String
type TaskId = Int
type Filter = String
type Comment = String
data Command
= Add (Maybe Slate)
Task
| Display (Maybe Slate)
(Maybe Filter)
| Doing (Maybe Slate)
(Maybe TaskId)
| Done (Maybe Slate)
(Maybe TaskId)
(Maybe Comment)
| Edit (Maybe Slate)
| Remove (Maybe Slate)
TaskId
| Rename Slate
Slate
| Status (Maybe Slate)
| Sync
| Todo (Maybe Slate)
(Maybe TaskId)
| Wipe (Maybe Slate)
(Maybe Filter)
deriving (Eq, Show)
name :: Parser (Maybe Slate)
name =
optional
(option
str
(long "name" <> short 'n' <> metavar "SLATE" <> help "Name of the slate."))
taskId :: Parser TaskId
taskId = argument auto (metavar "TASK ID")
add :: Parser Command
add = Add <$> name <*> argument str (metavar "TASK")
done :: Parser Command
done =
Done <$> name <*> optional taskId <*>
optional
(option
str
(long "comment" <> short 'c' <> metavar "COMMENT" <>
help "Additional comment."))
todo :: Parser Command
todo = Todo <$> name <*> optional taskId
doing :: Parser Command
doing = Doing <$> name <*> optional taskId
edit :: Parser Command
edit = Edit <$> name
remove :: Parser Command
remove = Remove <$> name <*> taskId
display :: Parser Command
display =
Display <$> name <*>
optional
(option
str
(long "only" <> short 'o' <> help "Display only done / todo tasks."))
rename :: Parser Command
rename =
Rename <$> argument str (metavar "CURRENT" <> help "Current name.") <*>
argument str (metavar "NEW" <> help "New name.")
wipe :: Parser Command
wipe =
Wipe <$> name <*>
optional
(option
str
(long "only" <> short 'o' <> help "Wipe only done / todo tasks."))
status :: Parser Command
status = Status <$> name
sync :: Command
sync = Sync
parser :: Parser Command
parser =
subparser
(command "add" (info add (progDesc "Add a task.")) <>
command
"done"
(info
done
(progDesc
"Mark a task as done when given a task ID, display done tasks otherwise.")) <>
command
"todo"
(info
todo
(progDesc
"Mark a task as todo when given a task ID, display todo tasks otherwise.")) <>
command
"doing"
(info
doing
(progDesc
"Toggle highlighting on a task when given a task ID, display tasks marked as doing otherwise.")) <>
command
"edit"
(info edit (progDesc "Open the slate in the default editor.")) <>
command "remove" (info remove (progDesc "Remove a task.")) <>
command "display" (info display (progDesc "Display a slate.")) <>
command "rename" (info rename (progDesc "Rename a slate.")) <>
command "wipe" (info wipe (progDesc "Wipe a slate.")) <>
command "status" (info status (progDesc "Display the status of a slate.")) <>
command "sync" (info (pure sync) (progDesc "Sync every slate.")))