diff options
Diffstat (limited to 'commands/msg/mark.go')
-rw-r--r-- | commands/msg/mark.go | 66 |
1 files changed, 23 insertions, 43 deletions
diff --git a/commands/msg/mark.go b/commands/msg/mark.go index 51aa1eb4..68d12df6 100644 --- a/commands/msg/mark.go +++ b/commands/msg/mark.go @@ -4,10 +4,15 @@ import ( "fmt" "git.sr.ht/~rjarry/aerc/widgets" - "git.sr.ht/~sircmpwn/getopt" ) -type Mark struct{} +type Mark struct { + All bool `opt:"-a"` + Toggle bool `opt:"-t"` + Visual bool `opt:"-v"` + VisualClear bool `opt:"-V"` + Thread bool `opt:"-T"` +} func init() { register(Mark{}) @@ -21,7 +26,7 @@ func (Mark) Complete(aerc *widgets.Aerc, args []string) []string { return nil } -func (Mark) Execute(aerc *widgets.Aerc, args []string) error { +func (m Mark) Execute(aerc *widgets.Aerc, args []string) error { h := newHelper(aerc) OnSelectedMessage := func(fn func(uint32)) error { if fn == nil { @@ -39,63 +44,38 @@ func (Mark) Execute(aerc *widgets.Aerc, args []string) error { return err } marker := store.Marker() - opts, _, err := getopt.Getopts(args, "atvVT") - if err != nil { - return err - } - var all bool - var toggle bool - var visual bool - var clearVisual bool - var thread bool - for _, opt := range opts { - switch opt.Option { - case 'a': - all = true - case 'v': - visual = true - clearVisual = true - case 'V': - visual = true - case 't': - toggle = true - case 'T': - thread = true - } - } - if thread && all { + if m.Thread && m.All { return fmt.Errorf("-a and -T are mutually exclusive") } - if thread && visual { + if m.Thread && (m.Visual || m.VisualClear) { return fmt.Errorf("-v and -T are mutually exclusive") } + if m.Visual && m.All { + return fmt.Errorf("-a and -v are mutually exclusive") + } switch args[0] { case "mark": - if all && visual { - return fmt.Errorf("-a and -v are mutually exclusive") - } - var modFunc func(uint32) - if toggle { + if m.Toggle { modFunc = marker.ToggleMark } else { modFunc = marker.Mark } switch { - case all: + case m.All: uids := store.Uids() for _, uid := range uids { modFunc(uid) } return nil - case visual: - marker.ToggleVisualMark(clearVisual) + case m.Visual || m.VisualClear: + marker.ToggleVisualMark(m.VisualClear) return nil default: - if thread { + if m.Thread { threadPtr, err := store.SelectedThread() if err != nil { return err @@ -110,22 +90,22 @@ func (Mark) Execute(aerc *widgets.Aerc, args []string) error { } case "unmark": - if visual { + if m.Visual || m.VisualClear { return fmt.Errorf("visual mode not supported for this command") } switch { - case all && toggle: + case m.All && m.Toggle: uids := store.Uids() for _, uid := range uids { marker.ToggleMark(uid) } return nil - case all && !toggle: + case m.All && !m.Toggle: marker.ClearVisualMark() return nil default: - if thread { + if m.Thread { threadPtr, err := store.SelectedThread() if err != nil { return err @@ -139,7 +119,7 @@ func (Mark) Execute(aerc *widgets.Aerc, args []string) error { return nil } case "remark": - if all || visual || toggle || thread { + if m.All || m.Thread || m.Visual || m.Toggle || m.VisualClear { return fmt.Errorf("Usage: :remark") } marker.Remark() |