aboutsummaryrefslogtreecommitdiffstats
path: root/widgets
diff options
context:
space:
mode:
authorRobin Jarry <robin@jarry.cc>2022-02-02 20:47:54 +0100
committerRobin Jarry <robin@jarry.cc>2022-02-02 22:12:08 +0100
commit77b3a141a4459a1e59583f0d9fee46e871466d74 (patch)
tree0111b42b5d5b6e3661445031f8adcc2de624ae17 /widgets
parent923e949c058289a70a98adaf881948bcb59dcc7e (diff)
downloadaerc-77b3a141a4459a1e59583f0d9fee46e871466d74.tar.gz
review: display actual bindings for commands
Parse the actual user bindings to determine what shortcuts are available in the compose::review stage. Add a predefined list of commands for which we want to display the keyboard shortcuts. Fixes: https://todo.sr.ht/~rjarry/aerc/14 Signed-off-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'widgets')
-rw-r--r--widgets/compose.go60
1 files changed, 52 insertions, 8 deletions
diff --git a/widgets/compose.go b/widgets/compose.go
index 46d40251..1693314b 100644
--- a/widgets/compose.go
+++ b/widgets/compose.go
@@ -946,11 +946,48 @@ type reviewMessage struct {
grid *ui.Grid
}
+var reviewCommands = [][]string{
+ {":send<enter>", "Send"},
+ {":edit<enter>", "Edit"},
+ {":attach<space>", "Add attachment"},
+ {":detach<space>", "Remove attachment"},
+ {":postpone<enter>", "Postpone"},
+ {":abort<enter>", "Abort (discard message, no confirmation)"},
+ {":choose -o d discard abort -o p postpone postpone<enter>", "Abort or postpone"},
+}
+
func newReviewMessage(composer *Composer, err error) *reviewMessage {
+ bindings := composer.config.MergeContextualBinds(
+ composer.config.Bindings.ComposeReview,
+ config.BIND_CONTEXT_ACCOUNT,
+ composer.acctConfig.Name,
+ "compose::review",
+ )
+
+ var actions []string
+
+ for _, command := range reviewCommands {
+ cmd := command[0]
+ name := command[1]
+ strokes, _ := config.ParseKeyStrokes(cmd)
+ var inputs []string
+ for _, input := range bindings.GetReverseBindings(strokes) {
+ inputs = append(inputs, config.FormatKeyStrokes(input))
+ }
+ if len(inputs) == 0 {
+ continue
+ }
+ actions = append(actions, fmt.Sprintf(" %-6s %s", strings.Join(inputs[:], ", "), name))
+ }
+
spec := []ui.GridSpec{
- {ui.SIZE_EXACT, ui.Const(2)},
{ui.SIZE_EXACT, ui.Const(1)},
}
+ for i := 0; i < len(actions)-1; i++ {
+ spec = append(spec, ui.GridSpec{ui.SIZE_EXACT, ui.Const(1)})
+ }
+ spec = append(spec, ui.GridSpec{ui.SIZE_EXACT, ui.Const(2)})
+ spec = append(spec, ui.GridSpec{ui.SIZE_EXACT, ui.Const(1)})
for i := 0; i < len(composer.attachments)-1; i++ {
spec = append(spec, ui.GridSpec{ui.SIZE_EXACT, ui.Const(1)})
}
@@ -968,18 +1005,25 @@ func newReviewMessage(composer *Composer, err error) *reviewMessage {
grid.AddChild(ui.NewText("Press [q] to close this tab.",
uiConfig.GetStyle(config.STYLE_DEFAULT))).At(1, 0)
} else {
- // TODO: source this from actual keybindings?
- grid.AddChild(ui.NewText("Send this email? [y]es/[n]o/[e]dit/[a]ttach",
- uiConfig.GetStyle(config.STYLE_DEFAULT))).At(0, 0)
+ grid.AddChild(ui.NewText("Send this email?",
+ uiConfig.GetStyle(config.STYLE_TITLE))).At(0, 0)
+ i := 1
+ for _, action := range actions {
+ grid.AddChild(ui.NewText(action,
+ uiConfig.GetStyle(config.STYLE_DEFAULT))).At(i, 0)
+ i += 1
+ }
grid.AddChild(ui.NewText("Attachments:",
- uiConfig.GetStyle(config.STYLE_TITLE))).At(1, 0)
+ uiConfig.GetStyle(config.STYLE_TITLE))).At(i, 0)
+ i += 1
if len(composer.attachments) == 0 {
grid.AddChild(ui.NewText("(none)",
- uiConfig.GetStyle(config.STYLE_DEFAULT))).At(2, 0)
+ uiConfig.GetStyle(config.STYLE_DEFAULT))).At(i, 0)
} else {
- for i, a := range composer.attachments {
+ for _, a := range composer.attachments {
grid.AddChild(ui.NewText(a, uiConfig.GetStyle(config.STYLE_DEFAULT))).
- At(i+2, 0)
+ At(i, 0)
+ i += 1
}
}
}