diff options
author | kt programs <ktprograms@gmail.com> | 2022-03-14 11:03:34 +0800 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-03-14 22:55:19 +0100 |
commit | 74366d895d5c5cce5c14424926bb5de229894884 (patch) | |
tree | a7f79c483abec9240d31fa1d54c7adfa506de254 /commands | |
parent | 4bc43d2741fa4904e51fc5da71d15b804c556c43 (diff) | |
download | aerc-74366d895d5c5cce5c14424926bb5de229894884.tar.gz |
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.go | 35 |
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 00000000..6cd575bf --- /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 +} |