diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2025-03-22 09:15:26 +0900 |
|---|---|---|
| committer | Junegunn Choi <junegunn.c@gmail.com> | 2025-03-22 09:17:18 +0900 |
| commit | 29cf28d8455c4c749694e65cc36b3ea71db26c4f (patch) | |
| tree | 13b1a07d54b95799c362bcfab06cfe9759a3e8ec /src/tui | |
| parent | 7e4dbb5f3b93d38b20545a1e5a668e44cab440ce (diff) | |
| download | fzf-29cf28d8455c4c749694e65cc36b3ea71db26c4f.tar.gz | |
Suppress 'change' event during bracketed paste mode
Close #4316
Diffstat (limited to 'src/tui')
| -rw-r--r-- | src/tui/eventtype_string.go | 54 | ||||
| -rw-r--r-- | src/tui/light.go | 10 | ||||
| -rw-r--r-- | src/tui/tcell.go | 6 | ||||
| -rw-r--r-- | src/tui/tui.go | 2 |
4 files changed, 42 insertions, 30 deletions
diff --git a/src/tui/eventtype_string.go b/src/tui/eventtype_string.go index df57ccc1..a37d123e 100644 --- a/src/tui/eventtype_string.go +++ b/src/tui/eventtype_string.go @@ -84,35 +84,37 @@ func _() { _ = x[CtrlAlt-73] _ = x[Invalid-74] _ = x[Fatal-75] - _ = x[Mouse-76] - _ = x[DoubleClick-77] - _ = x[LeftClick-78] - _ = x[RightClick-79] - _ = x[SLeftClick-80] - _ = x[SRightClick-81] - _ = x[ScrollUp-82] - _ = x[ScrollDown-83] - _ = x[SScrollUp-84] - _ = x[SScrollDown-85] - _ = x[PreviewScrollUp-86] - _ = x[PreviewScrollDown-87] - _ = x[Resize-88] - _ = x[Change-89] - _ = x[BackwardEOF-90] - _ = x[Start-91] - _ = x[Load-92] - _ = x[Focus-93] - _ = x[One-94] - _ = x[Zero-95] - _ = x[Result-96] - _ = x[Jump-97] - _ = x[JumpCancel-98] - _ = x[ClickHeader-99] + _ = x[BracketedPasteBegin-76] + _ = x[BracketedPasteEnd-77] + _ = x[Mouse-78] + _ = x[DoubleClick-79] + _ = x[LeftClick-80] + _ = x[RightClick-81] + _ = x[SLeftClick-82] + _ = x[SRightClick-83] + _ = x[ScrollUp-84] + _ = x[ScrollDown-85] + _ = x[SScrollUp-86] + _ = x[SScrollDown-87] + _ = x[PreviewScrollUp-88] + _ = x[PreviewScrollDown-89] + _ = x[Resize-90] + _ = x[Change-91] + _ = x[BackwardEOF-92] + _ = x[Start-93] + _ = x[Load-94] + _ = x[Focus-95] + _ = x[One-96] + _ = x[Zero-97] + _ = x[Result-98] + _ = x[Jump-99] + _ = x[JumpCancel-100] + _ = x[ClickHeader-101] } -const _EventType_name = "RuneCtrlACtrlBCtrlCCtrlDCtrlECtrlFCtrlGCtrlHTabCtrlJCtrlKCtrlLEnterCtrlNCtrlOCtrlPCtrlQCtrlRCtrlSCtrlTCtrlUCtrlVCtrlWCtrlXCtrlYCtrlZEscCtrlSpaceCtrlDeleteCtrlBackSlashCtrlRightBracketCtrlCaretCtrlSlashShiftTabBackspaceDeletePageUpPageDownUpDownLeftRightHomeEndInsertShiftUpShiftDownShiftLeftShiftRightShiftDeleteF1F2F3F4F5F6F7F8F9F10F11F12AltBackspaceAltUpAltDownAltLeftAltRightAltShiftUpAltShiftDownAltShiftLeftAltShiftRightAltCtrlAltInvalidFatalMouseDoubleClickLeftClickRightClickSLeftClickSRightClickScrollUpScrollDownSScrollUpSScrollDownPreviewScrollUpPreviewScrollDownResizeChangeBackwardEOFStartLoadFocusOneZeroResultJumpJumpCancelClickHeader" +const _EventType_name = "RuneCtrlACtrlBCtrlCCtrlDCtrlECtrlFCtrlGCtrlHTabCtrlJCtrlKCtrlLEnterCtrlNCtrlOCtrlPCtrlQCtrlRCtrlSCtrlTCtrlUCtrlVCtrlWCtrlXCtrlYCtrlZEscCtrlSpaceCtrlDeleteCtrlBackSlashCtrlRightBracketCtrlCaretCtrlSlashShiftTabBackspaceDeletePageUpPageDownUpDownLeftRightHomeEndInsertShiftUpShiftDownShiftLeftShiftRightShiftDeleteF1F2F3F4F5F6F7F8F9F10F11F12AltBackspaceAltUpAltDownAltLeftAltRightAltShiftUpAltShiftDownAltShiftLeftAltShiftRightAltCtrlAltInvalidFatalBracketedPasteBeginBracketedPasteEndMouseDoubleClickLeftClickRightClickSLeftClickSRightClickScrollUpScrollDownSScrollUpSScrollDownPreviewScrollUpPreviewScrollDownResizeChangeBackwardEOFStartLoadFocusOneZeroResultJumpJumpCancelClickHeader" -var _EventType_index = [...]uint16{0, 4, 9, 14, 19, 24, 29, 34, 39, 44, 47, 52, 57, 62, 67, 72, 77, 82, 87, 92, 97, 102, 107, 112, 117, 122, 127, 132, 135, 144, 154, 167, 183, 192, 201, 209, 218, 224, 230, 238, 240, 244, 248, 253, 257, 260, 266, 273, 282, 291, 301, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 333, 336, 339, 351, 356, 363, 370, 378, 388, 400, 412, 425, 428, 435, 442, 447, 452, 463, 472, 482, 492, 503, 511, 521, 530, 541, 556, 573, 579, 585, 596, 601, 605, 610, 613, 617, 623, 627, 637, 648} +var _EventType_index = [...]uint16{0, 4, 9, 14, 19, 24, 29, 34, 39, 44, 47, 52, 57, 62, 67, 72, 77, 82, 87, 92, 97, 102, 107, 112, 117, 122, 127, 132, 135, 144, 154, 167, 183, 192, 201, 209, 218, 224, 230, 238, 240, 244, 248, 253, 257, 260, 266, 273, 282, 291, 301, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 333, 336, 339, 351, 356, 363, 370, 378, 388, 400, 412, 425, 428, 435, 442, 447, 466, 483, 488, 499, 508, 518, 528, 539, 547, 557, 566, 577, 592, 609, 615, 621, 632, 637, 641, 646, 649, 653, 659, 663, 673, 684} func (i EventType) String() string { if i < 0 || i >= EventType(len(_EventType_index)-1) { diff --git a/src/tui/light.go b/src/tui/light.go index 3b940646..805bee80 100644 --- a/src/tui/light.go +++ b/src/tui/light.go @@ -214,6 +214,7 @@ func (r *LightRenderer) Init() error { } r.enableMouse() + r.csi("?2004h") // Enable bracketed paste mode r.csi(fmt.Sprintf("%dA", r.MaxY()-1)) r.csi("G") r.csi("K") @@ -462,10 +463,11 @@ func (r *LightRenderer) escSequence(sz *int) Event { } // Bracketed paste mode: \e[200~ ... \e[201~ if len(r.buffer) > 5 && r.buffer[3] == '0' && (r.buffer[4] == '0' || r.buffer[4] == '1') && r.buffer[5] == '~' { - // Immediately discard the sequence from the buffer and reread input - r.buffer = r.buffer[6:] - *sz = 0 - return r.GetChar() + *sz = 6 + if r.buffer[4] == '0' { + return Event{BracketedPasteBegin, 0, nil} + } + return Event{BracketedPasteEnd, 0, nil} } return Event{Invalid, 0, nil} // INS case '3': diff --git a/src/tui/tcell.go b/src/tui/tcell.go index dffd235f..a2630463 100644 --- a/src/tui/tcell.go +++ b/src/tui/tcell.go @@ -197,6 +197,7 @@ func (r *FullscreenRenderer) initScreen() error { if e = s.Init(); e != nil { return e } + s.EnablePaste() if r.mouse { s.EnableMouse() } else { @@ -266,6 +267,11 @@ func (r *FullscreenRenderer) Size() TermSize { func (r *FullscreenRenderer) GetChar() Event { ev := _screen.PollEvent() switch ev := ev.(type) { + case *tcell.EventPaste: + if ev.Start() { + return Event{BracketedPasteBegin, 0, nil} + } + return Event{BracketedPasteEnd, 0, nil} case *tcell.EventResize: // Ignore the first resize event // https://github.com/gdamore/tcell/blob/v2.7.0/TUTORIAL.md?plain=1#L18 diff --git a/src/tui/tui.go b/src/tui/tui.go index 4f2fe2c6..e181deaa 100644 --- a/src/tui/tui.go +++ b/src/tui/tui.go @@ -103,6 +103,8 @@ const ( Invalid Fatal + BracketedPasteBegin + BracketedPasteEnd Mouse DoubleClick |
