summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Culverhouse <tim@timculverhouse.com>2022-03-21 18:23:47 -0500
committerRobin Jarry <robin@jarry.cc>2022-03-22 09:50:32 +0100
commite56648029f2231a58ed4afbbe804b845e02fde62 (patch)
treea59f4fe6308de6d9e7241ac5e0a6cb8d909d70b3
parent93c160ab66c0ecf6854dfc13ef3ebba26c3aefe8 (diff)
downloadaerc-e56648029f2231a58ed4afbbe804b845e02fde62.zip
compose: make headerEditor focusing more reliable
Focusing header editors was hardcoded as integers which only worked with the default ui. If a user changed the UI to, for example, put CC as a field below "to", FocusSubject would focus the CC field instead of the subject. This commit reuses and modifies the function FocusEditor to generalize the focusing of header editors - which can now be called by name via FocusEditor(name string) Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Robin Jarry <robin@jarry.cc>
-rw-r--r--commands/msg/forward.go2
-rw-r--r--widgets/aerc.go4
-rw-r--r--widgets/compose.go26
3 files changed, 10 insertions, 22 deletions
diff --git a/commands/msg/forward.go b/commands/msg/forward.go
index 9cc13c0..c8e04f1 100644
--- a/commands/msg/forward.go
+++ b/commands/msg/forward.go
@@ -94,7 +94,7 @@ func (forward) Execute(aerc *widgets.Aerc, args []string) error {
tab := aerc.NewTab(composer, subject)
if !h.Has("to") {
- composer.FocusRecipient()
+ composer.FocusEditor("to")
} else {
composer.FocusTerminal()
}
diff --git a/widgets/aerc.go b/widgets/aerc.go
index a8b23fe..c96932c 100644
--- a/widgets/aerc.go
+++ b/widgets/aerc.go
@@ -575,14 +575,14 @@ func (aerc *Aerc) Mailto(addr *url.URL) error {
return nil
}
composer.SetContents(strings.NewReader(body))
- composer.FocusSubject()
+ composer.FocusEditor("subject")
title := "New email"
if subject != "" {
title = subject
composer.FocusTerminal()
}
if to == nil {
- composer.FocusRecipient()
+ composer.FocusEditor("to")
}
tab := aerc.NewTab(composer, title)
composer.OnHeaderChange("Subject", func(subject string) {
diff --git a/widgets/compose.go b/widgets/compose.go
index 1300229..64eb285 100644
--- a/widgets/compose.go
+++ b/widgets/compose.go
@@ -294,20 +294,6 @@ func (c *Composer) FocusTerminal() *Composer {
return c
}
-func (c *Composer) FocusSubject() *Composer {
- c.focusable[c.focused].Focus(false)
- c.focused = 2
- c.focusable[c.focused].Focus(true)
- return c
-}
-
-func (c *Composer) FocusRecipient() *Composer {
- c.focusable[c.focused].Focus(false)
- c.focused = 1
- c.focusable[c.focused].Focus(true)
- return c
-}
-
// OnHeaderChange registers an OnChange callback for the specified header.
func (c *Composer) OnHeaderChange(header string, fn func(subject string)) {
if editor, ok := c.editors[strings.ToLower(header)]; ok {
@@ -374,7 +360,7 @@ func (c *Composer) MouseEvent(localX int, localY int, event tcell.Event) {
for _, e := range c.focusable {
he, ok := e.(*headerEditor)
if ok && he.focused {
- c.FocusEditor(he)
+ c.FocusEditor(he.name)
}
}
}
@@ -722,10 +708,12 @@ func (c *Composer) NextField() {
c.focusable[c.focused].Focus(true)
}
-func (c *Composer) FocusEditor(editor *headerEditor) {
+func (c *Composer) FocusEditor(editor string) {
+ editor = strings.ToLower(editor)
c.focusable[c.focused].Focus(false)
- for i, e := range c.focusable {
- if e == editor {
+ for i, f := range c.focusable {
+ e := f.(*headerEditor)
+ if strings.ToLower(e.name) == editor {
c.focused = i
break
}
@@ -768,7 +756,7 @@ func (c *Composer) AddEditor(header string, value string, appendHeader bool) {
editor.storeValue()
}
if value == "" {
- c.FocusEditor(c.editors[header])
+ c.FocusEditor(c.editors[header].name)
}
c.updateGrid()
}