about summary refs log tree commit diff stats
path: root/widgets/aerc.go
diff options
context:
space:
mode:
authorGalen Abell <galen@galenabell.com>2019-07-23 12:52:33 -0400
committerDrew DeVault <sir@cmpwn.com>2019-07-26 14:29:34 -0400
commit8635c70fda20b91f97c42f4e23e97bc01a14a89d (patch)
treeea70a40f7617782ca28060965ad253fa0e686161 /widgets/aerc.go
parent67fb0938a66605a0b6a837005804637b348b250d (diff)
downloadaerc-8635c70fda20b91f97c42f4e23e97bc01a14a89d.tar.gz
Add command history and cycling
Aerc will keep track of the previous 1000 commands, which the user can
cycle through using the arrow keys while in the ex-line. Pressing up
will move backwards in history while pressing down will move forward.
Diffstat (limited to 'widgets/aerc.go')
-rw-r--r--widgets/aerc.go13
1 files changed, 11 insertions, 2 deletions
diff --git a/widgets/aerc.go b/widgets/aerc.go
index 050ba77..458c2f9 100644
--- a/widgets/aerc.go
+++ b/widgets/aerc.go
@@ -11,6 +11,7 @@ import (
 	"github.com/google/shlex"
 
 	"git.sr.ht/~sircmpwn/aerc/config"
+	"git.sr.ht/~sircmpwn/aerc/lib"
 	"git.sr.ht/~sircmpwn/aerc/lib/ui"
 	libui "git.sr.ht/~sircmpwn/aerc/lib/ui"
 )
@@ -18,6 +19,7 @@ import (
 type Aerc struct {
 	accounts    map[string]*AccountView
 	cmd         func(cmd []string) error
+	cmdHistory  lib.History
 	complete    func(cmd string) []string
 	conf        *config.AercConfig
 	focused     libui.Interactive
@@ -31,7 +33,8 @@ type Aerc struct {
 }
 
 func NewAerc(conf *config.AercConfig, logger *log.Logger,
-	cmd func(cmd []string) error, complete func(cmd string) []string) *Aerc {
+	cmd func(cmd []string) error, complete func(cmd string) []string,
+	cmdHistory lib.History) *Aerc {
 
 	tabs := libui.NewTabs()
 
@@ -54,6 +57,7 @@ func NewAerc(conf *config.AercConfig, logger *log.Logger,
 		accounts:   make(map[string]*AccountView),
 		conf:       conf,
 		cmd:        cmd,
+		cmdHistory: cmdHistory,
 		complete:   complete,
 		grid:       grid,
 		logger:     logger,
@@ -323,6 +327,11 @@ func (aerc *Aerc) BeginExCommand() {
 			aerc.PushStatus(" "+err.Error(), 10*time.Second).
 				Color(tcell.ColorDefault, tcell.ColorRed)
 		}
+		// only add to history if this is an unsimulated command,
+		// ie one not executed from a keybinding
+		if aerc.simulating == 0 {
+			aerc.cmdHistory.Add(cmd)
+		}
 		aerc.statusbar.Pop()
 		aerc.focus(previous)
 	}, func() {
@@ -330,7 +339,7 @@ func (aerc *Aerc) BeginExCommand() {
 		aerc.focus(previous)
 	}, func(cmd string) []string {
 		return aerc.complete(cmd)
-	})
+	}, aerc.cmdHistory)
 	aerc.statusbar.Push(exline)
 	aerc.focus(exline)
 }