slate-0.12.0.0: src/Command.hs
module Command
( parser
, Command(..)
) where
import Data.Semigroup ((<>))
import Options.Applicative
type Slate = String
type Note = String
type NoteId = Int
type Filter = String
data Command
= Add Slate
Note
| Done Slate
(Maybe NoteId)
| Todo Slate
(Maybe NoteId)
| Doing Slate
(Maybe NoteId)
| Remove Slate
NoteId
| Display Slate
Filter
| Rename Slate
Slate
| Wipe Slate
Filter
| Status Slate
| Sync
deriving (Eq, Show)
name :: Parser String
name =
option
str
(long "name" <> short 'n' <> metavar "SLATE" <> help "Name of the slate." <>
value "")
add :: Parser Command
add = Add <$> name <*> argument str (metavar "NOTE")
done :: Parser Command
done = Done <$> name <*> optional (argument auto (metavar "NOTE ID"))
todo :: Parser Command
todo = Todo <$> name <*> optional (argument auto (metavar "NOTE ID"))
doing :: Parser Command
doing = Doing <$> name <*> optional (argument auto (metavar "NOTE ID"))
remove :: Parser Command
remove = Remove <$> name <*> argument auto (metavar "NOTE ID")
display :: Parser Command
display =
Display <$> name <*>
option
str
(long "only" <> short 'o' <> help "Display only done / todo notes." <>
value "")
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 <*>
option
str
(long "only" <> short 'o' <> help "Wipe only done / todo notes." <> value "")
status :: Parser Command
status = Status <$> name
sync :: Command
sync = Sync
parser :: Parser Command
parser =
subparser
(command "add" (info add (progDesc "Add a note.")) <>
command
"done"
(info
done
(progDesc
"Mark a note as done when given a note ID, display done notes otherwise.")) <>
command
"todo"
(info
todo
(progDesc
"Mark a note as todo when given a note ID, display todo notes otherwise.")) <>
command
"doing"
(info
doing
(progDesc
"Toggle highlighting on a note when given a note ID, display notes marked as doing otherwise.")) <>
command "remove" (info remove (progDesc "Remove a note.")) <>
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.")))