about summary refs log tree commit diff stats
path: root/widgets
diff options
context:
space:
mode:
authorBen Burwell <ben@benburwell.com>2019-07-29 10:50:02 -0400
committerDrew DeVault <sir@cmpwn.com>2019-07-29 15:01:49 -0400
commit152f8c9519ac1b7b35c3789b03f3d1cc3b1e8881 (patch)
tree0c8693aa2651955d0e12f090f5469c7183e190d3 /widgets
parent2804f000017c0ef6bcaf8d571627fa08784f48ac (diff)
downloadaerc-152f8c9519ac1b7b35c3789b03f3d1cc3b1e8881.tar.gz
Ring bell when new messages arrive 0.2.0
Add a "new-message-bell" option to the UI section of aerc.conf. A new
hook into the message store allows the msglist widget to detect new
messages being added to the displayed list. When new messages are
delivered, and the new-message-bell option is enabled (as it is by
default), the terminal will beep.
Diffstat (limited to 'widgets')
-rw-r--r--widgets/account.go4
-rw-r--r--widgets/aerc.go15
-rw-r--r--widgets/tabhost.go1
3 files changed, 20 insertions, 0 deletions
diff --git a/widgets/account.go b/widgets/account.go
index 86ec00c..de81ab8 100644
--- a/widgets/account.go
+++ b/widgets/account.go
@@ -205,6 +205,10 @@ func (acct *AccountView) onMessage(msg types.WorkerMessage) {
 				func(msg *models.MessageInfo) {
 					acct.conf.Triggers.ExecNewEmail(acct.acct,
 						acct.conf, msg)
+				}, func() {
+					if acct.conf.Ui.NewMessageBell {
+						acct.host.Beep()
+					}
 				})
 			acct.dirlist.SetMsgStore(msg.Info.Name, store)
 			store.OnUpdate(func(_ *lib.MessageStore) {
diff --git a/widgets/aerc.go b/widgets/aerc.go
index 90b56c8..23dac3e 100644
--- a/widgets/aerc.go
+++ b/widgets/aerc.go
@@ -30,6 +30,7 @@ type Aerc struct {
 	statusline  *StatusLine
 	pendingKeys []config.KeyStroke
 	tabs        *libui.Tabs
+	beep        func() error
 }
 
 func NewAerc(conf *config.AercConfig, logger *log.Logger,
@@ -84,6 +85,20 @@ func NewAerc(conf *config.AercConfig, logger *log.Logger,
 	return aerc
 }
 
+func (aerc *Aerc) OnBeep(f func() error) {
+	aerc.beep = f
+}
+
+func (aerc *Aerc) Beep() {
+	if aerc.beep == nil {
+		aerc.logger.Printf("should beep, but no beeper")
+		return
+	}
+	if err := aerc.beep(); err != nil {
+		aerc.logger.Printf("tried to beep, but could not: %v", err)
+	}
+}
+
 func (aerc *Aerc) Tick() bool {
 	more := false
 	for _, acct := range aerc.accounts {
diff --git a/widgets/tabhost.go b/widgets/tabhost.go
index 7c502cb..2c33cf8 100644
--- a/widgets/tabhost.go
+++ b/widgets/tabhost.go
@@ -8,4 +8,5 @@ type TabHost interface {
 	BeginExCommand()
 	SetStatus(status string) *StatusMessage
 	PushStatus(text string, expiry time.Duration) *StatusMessage
+	Beep()
 }