aboutsummaryrefslogtreecommitdiffstats
path: root/config
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 /config
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 'config')
-rw-r--r--config/bindings.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/config/bindings.go b/config/bindings.go
index b704fa63..7ff0c24b 100644
--- a/config/bindings.go
+++ b/config/bindings.go
@@ -118,6 +118,53 @@ func (bindings *KeyBindings) GetBinding(
return BINDING_NOT_FOUND, nil
}
+func (bindings *KeyBindings) GetReverseBindings(output []KeyStroke) [][]KeyStroke {
+ var inputs [][]KeyStroke
+
+ for _, binding := range bindings.bindings {
+ if len(binding.Output) != len(output) {
+ continue
+ }
+ for i, stroke := range output {
+ if stroke.Modifiers != binding.Output[i].Modifiers {
+ goto next
+ }
+ if stroke.Key != binding.Output[i].Key {
+ goto next
+ }
+ if stroke.Key == tcell.KeyRune && stroke.Rune != binding.Output[i].Rune {
+ goto next
+ }
+ }
+ inputs = append(inputs, binding.Input)
+ next:
+ }
+ return inputs
+}
+
+func FormatKeyStrokes(keystrokes []KeyStroke) string {
+ var sb strings.Builder
+
+ for _, stroke := range keystrokes {
+ s := ""
+ for name, ks := range keyNames {
+ if ks.Modifiers == stroke.Modifiers && ks.Key == stroke.Key && ks.Rune == stroke.Rune {
+ if name == "cr" {
+ name = "enter"
+ }
+ s = fmt.Sprintf("<%s>", name)
+ break
+ }
+ }
+ if s == "" && stroke.Key == tcell.KeyRune {
+ s = string(stroke.Rune)
+ }
+ sb.WriteString(s)
+ }
+
+ return sb.String()
+}
+
var (
keyNames map[string]KeyStroke
)