diff options
Diffstat (limited to 'commands/msgview/next.go')
-rw-r--r-- | commands/msgview/next.go | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/commands/msgview/next.go b/commands/msgview/next.go index a69cb8ee..d8f046f8 100644 --- a/commands/msgview/next.go +++ b/commands/msgview/next.go @@ -3,6 +3,8 @@ package msgview import ( "errors" "fmt" + "strconv" + "strings" "git.sr.ht/~rjarry/aerc/app" "git.sr.ht/~rjarry/aerc/commands/account" @@ -11,12 +13,28 @@ import ( "git.sr.ht/~rjarry/aerc/worker/types" ) -type NextPrevMsg struct{} +type NextPrevMsg struct { + Amount int `opt:"n" default:"1" metavar:"N[%]" action:"ParseAmount"` + Percent bool +} func init() { register(NextPrevMsg{}) } +func (np *NextPrevMsg) ParseAmount(arg string) error { + if strings.HasSuffix(arg, "%") { + np.Percent = true + arg = strings.TrimSuffix(arg, "%") + } + i, err := strconv.ParseInt(arg, 10, 64) + if err != nil { + return err + } + np.Amount = int(i) + return nil +} + func (NextPrevMsg) Aliases() []string { return []string{"next", "next-message", "prev", "prev-message"} } @@ -25,11 +43,13 @@ func (NextPrevMsg) Complete(args []string) []string { return nil } -func (NextPrevMsg) Execute(args []string) error { - n, pct, err := account.ParseNextPrevMessage(args) +func (np NextPrevMsg) Execute(args []string) error { + cmd := account.NextPrevMsg{Amount: np.Amount, Percent: np.Percent} + err := cmd.Execute(args) if err != nil { return err } + mv, _ := app.SelectedTabContent().(*app.MessageViewer) acct := mv.SelectedAccount() if acct == nil { @@ -39,10 +59,6 @@ func (NextPrevMsg) Execute(args []string) error { if store == nil { return fmt.Errorf("Cannot perform action. No message store set.") } - err = account.ExecuteNextPrevMessage(args, acct, pct, n) - if err != nil { - return err - } executeNextPrev := func(nextMsg *models.MessageInfo) { lib.NewMessageStoreView(nextMsg, mv.MessageView().SeenFlagSet(), store, app.CryptoProvider(), app.DecryptKeys, |