summaryrefslogtreecommitdiff
path: root/commands
diff options
context:
space:
mode:
authorkt programs <ktprograms@gmail.com>2022-03-14 11:03:34 +0800
committerRobin Jarry <robin@jarry.cc>2022-03-14 22:55:19 +0100
commit74366d895d5c5cce5c14424926bb5de229894884 (patch)
treea7f79c483abec9240d31fa1d54c7adfa506de254 /commands
parent4bc43d2741fa4904e51fc5da71d15b804c556c43 (diff)
downloadaerc-74366d895d5c5cce5c14424926bb5de229894884.zip
viewer: add key passthrough mode
When trying to search in less, keys bound to viewer functions can't be used as part of the search query, which makes the search useless. Add a view::passthrough binding mode and a :toggle-key-passthrough command go toggle in and out of that mode. By default, typing '/' in the viewer is bound to enabling key passthrough and automatically inserting '/', to easily enter "less" search mode. When in the passthrough mode, all bindings are ignored by default. The default binds.conf only defines a single keybinding in that mode: <Esc> to get back out. $ex is bound to <C-x> to allow typing colons. Signed-off-by: Kt Programs <ktprograms@gmail.com> Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'commands')
-rw-r--r--commands/msgview/toggle-key-passthrough.go35
1 files changed, 35 insertions, 0 deletions
diff --git a/commands/msgview/toggle-key-passthrough.go b/commands/msgview/toggle-key-passthrough.go
new file mode 100644
index 0000000..6cd575b
--- /dev/null
+++ b/commands/msgview/toggle-key-passthrough.go
@@ -0,0 +1,35 @@
+package msgview
+
+import (
+ "errors"
+
+ "git.sr.ht/~rjarry/aerc/widgets"
+)
+
+type ToggleKeyPassthrough struct{}
+
+func init() {
+ register(ToggleKeyPassthrough{})
+}
+
+func (ToggleKeyPassthrough) Aliases() []string {
+ return []string{"toggle-key-passthrough"}
+}
+
+func (ToggleKeyPassthrough) Complete(aerc *widgets.Aerc, args []string) []string {
+ return nil
+}
+
+func (ToggleKeyPassthrough) Execute(aerc *widgets.Aerc, args []string) error {
+ if len(args) != 1 {
+ return errors.New("Usage: toggle-key-passthrough")
+ }
+ mv, _ := aerc.SelectedTab().(*widgets.MessageViewer)
+ keyPassthroughEnabled := mv.ToggleKeyPassthrough()
+ if keyPassthroughEnabled {
+ aerc.SetExtraStatus("[passthrough]")
+ } else {
+ aerc.ClearExtraStatus()
+ }
+ return nil
+}