diff options
author | Tim Culverhouse <tim@timculverhouse.com> | 2022-09-14 21:36:42 +0200 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-09-14 22:19:42 +0200 |
commit | cf319129de36a2832674466e28bfa2dbb9bfc0cc (patch) | |
tree | ce3ef2274135c6b62e5432eb2d541f6005fc02d0 /widgets | |
parent | 518f3e962ce39fb9712bb693857789ab22adfe9c (diff) | |
download | aerc-cf319129de36a2832674466e28bfa2dbb9bfc0cc.tar.gz |
term: add bracketed paste support
Allow forwarding paste events to embedded applications. When a bracketed
paste is in progress, do not process any command bindings.
Signed-off-by: Robin Jarry <robin@jarry.cc>
Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
Diffstat (limited to 'widgets')
-rw-r--r-- | widgets/aerc.go | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/widgets/aerc.go b/widgets/aerc.go index cbc37795..e210916f 100644 --- a/widgets/aerc.go +++ b/widgets/aerc.go @@ -33,6 +33,7 @@ type Aerc struct { simulating int statusbar *ui.Stack statusline *StatusLine + pasting bool pendingKeys []config.KeyStroke prompts *ui.Stack tabs *ui.Tabs @@ -290,6 +291,15 @@ func (aerc *Aerc) Event(event tcell.Event) bool { switch event := event.(type) { case *tcell.EventKey: + // If we are in a bracketed paste, don't process the keys for + // bindings + if aerc.pasting { + interactive, ok := aerc.SelectedTabContent().(ui.Interactive) + if ok { + return interactive.Event(event) + } + return false + } aerc.statusline.Expire() aerc.pendingKeys = append(aerc.pendingKeys, config.KeyStroke{ Modifiers: event.Modifiers(), @@ -344,6 +354,18 @@ func (aerc *Aerc) Event(event tcell.Event) bool { x, y := event.Position() aerc.grid.MouseEvent(x, y, event) return true + case *tcell.EventPaste: + if event.Start() { + aerc.pasting = true + } + if event.End() { + aerc.pasting = false + } + interactive, ok := aerc.SelectedTabContent().(ui.Interactive) + if ok { + return interactive.Event(event) + } + return false } return false } |