m/fzf
1
0
mirror of https://github.com/junegunn/fzf.git synced 2025-11-12 21:33:49 -05:00

Suppress 'change' event during bracketed paste mode

Close #4316
This commit is contained in:
Junegunn Choi
2025-03-22 09:15:26 +09:00
parent 7e4dbb5f3b
commit 29cf28d845
7 changed files with 189 additions and 161 deletions

View File

@@ -8,6 +8,7 @@ CHANGELOG
# Display "Type to search" when the input is empty
fzf --ghost "Type to search"
```
- Bug fixes and improvements
0.60.3
------

View File

@@ -12,139 +12,141 @@ func _() {
_ = x[actStart-1]
_ = x[actClick-2]
_ = x[actInvalid-3]
_ = x[actChar-4]
_ = x[actMouse-5]
_ = x[actBeginningOfLine-6]
_ = x[actAbort-7]
_ = x[actAccept-8]
_ = x[actAcceptNonEmpty-9]
_ = x[actAcceptOrPrintQuery-10]
_ = x[actBackwardChar-11]
_ = x[actBackwardDeleteChar-12]
_ = x[actBackwardDeleteCharEof-13]
_ = x[actBackwardWord-14]
_ = x[actCancel-15]
_ = x[actChangeBorderLabel-16]
_ = x[actChangeListLabel-17]
_ = x[actChangeInputLabel-18]
_ = x[actChangeHeader-19]
_ = x[actChangeHeaderLabel-20]
_ = x[actChangeMulti-21]
_ = x[actChangePreviewLabel-22]
_ = x[actChangePrompt-23]
_ = x[actChangeQuery-24]
_ = x[actChangeNth-25]
_ = x[actClearScreen-26]
_ = x[actClearQuery-27]
_ = x[actClearSelection-28]
_ = x[actClose-29]
_ = x[actDeleteChar-30]
_ = x[actDeleteCharEof-31]
_ = x[actEndOfLine-32]
_ = x[actFatal-33]
_ = x[actForwardChar-34]
_ = x[actForwardWord-35]
_ = x[actKillLine-36]
_ = x[actKillWord-37]
_ = x[actUnixLineDiscard-38]
_ = x[actUnixWordRubout-39]
_ = x[actYank-40]
_ = x[actBackwardKillWord-41]
_ = x[actSelectAll-42]
_ = x[actDeselectAll-43]
_ = x[actToggle-44]
_ = x[actToggleSearch-45]
_ = x[actToggleAll-46]
_ = x[actToggleDown-47]
_ = x[actToggleUp-48]
_ = x[actToggleIn-49]
_ = x[actToggleOut-50]
_ = x[actToggleTrack-51]
_ = x[actToggleTrackCurrent-52]
_ = x[actToggleHeader-53]
_ = x[actToggleWrap-54]
_ = x[actToggleMultiLine-55]
_ = x[actToggleHscroll-56]
_ = x[actTrackCurrent-57]
_ = x[actToggleInput-58]
_ = x[actHideInput-59]
_ = x[actShowInput-60]
_ = x[actUntrackCurrent-61]
_ = x[actDown-62]
_ = x[actUp-63]
_ = x[actPageUp-64]
_ = x[actPageDown-65]
_ = x[actPosition-66]
_ = x[actHalfPageUp-67]
_ = x[actHalfPageDown-68]
_ = x[actOffsetUp-69]
_ = x[actOffsetDown-70]
_ = x[actOffsetMiddle-71]
_ = x[actJump-72]
_ = x[actJumpAccept-73]
_ = x[actPrintQuery-74]
_ = x[actRefreshPreview-75]
_ = x[actReplaceQuery-76]
_ = x[actToggleSort-77]
_ = x[actShowPreview-78]
_ = x[actHidePreview-79]
_ = x[actTogglePreview-80]
_ = x[actTogglePreviewWrap-81]
_ = x[actTransform-82]
_ = x[actTransformBorderLabel-83]
_ = x[actTransformListLabel-84]
_ = x[actTransformInputLabel-85]
_ = x[actTransformHeader-86]
_ = x[actTransformHeaderLabel-87]
_ = x[actTransformNth-88]
_ = x[actTransformPreviewLabel-89]
_ = x[actTransformPrompt-90]
_ = x[actTransformQuery-91]
_ = x[actTransformSearch-92]
_ = x[actSearch-93]
_ = x[actPreview-94]
_ = x[actChangePreview-95]
_ = x[actChangePreviewWindow-96]
_ = x[actPreviewTop-97]
_ = x[actPreviewBottom-98]
_ = x[actPreviewUp-99]
_ = x[actPreviewDown-100]
_ = x[actPreviewPageUp-101]
_ = x[actPreviewPageDown-102]
_ = x[actPreviewHalfPageUp-103]
_ = x[actPreviewHalfPageDown-104]
_ = x[actPrevHistory-105]
_ = x[actPrevSelected-106]
_ = x[actPrint-107]
_ = x[actPut-108]
_ = x[actNextHistory-109]
_ = x[actNextSelected-110]
_ = x[actExecute-111]
_ = x[actExecuteSilent-112]
_ = x[actExecuteMulti-113]
_ = x[actSigStop-114]
_ = x[actFirst-115]
_ = x[actLast-116]
_ = x[actReload-117]
_ = x[actReloadSync-118]
_ = x[actDisableSearch-119]
_ = x[actEnableSearch-120]
_ = x[actSelect-121]
_ = x[actDeselect-122]
_ = x[actUnbind-123]
_ = x[actRebind-124]
_ = x[actToggleBind-125]
_ = x[actBecome-126]
_ = x[actShowHeader-127]
_ = x[actHideHeader-128]
_ = x[actBell-129]
_ = x[actExclude-130]
_ = x[actExcludeMulti-131]
_ = x[actBracketedPasteBegin-4]
_ = x[actBracketedPasteEnd-5]
_ = x[actChar-6]
_ = x[actMouse-7]
_ = x[actBeginningOfLine-8]
_ = x[actAbort-9]
_ = x[actAccept-10]
_ = x[actAcceptNonEmpty-11]
_ = x[actAcceptOrPrintQuery-12]
_ = x[actBackwardChar-13]
_ = x[actBackwardDeleteChar-14]
_ = x[actBackwardDeleteCharEof-15]
_ = x[actBackwardWord-16]
_ = x[actCancel-17]
_ = x[actChangeBorderLabel-18]
_ = x[actChangeListLabel-19]
_ = x[actChangeInputLabel-20]
_ = x[actChangeHeader-21]
_ = x[actChangeHeaderLabel-22]
_ = x[actChangeMulti-23]
_ = x[actChangePreviewLabel-24]
_ = x[actChangePrompt-25]
_ = x[actChangeQuery-26]
_ = x[actChangeNth-27]
_ = x[actClearScreen-28]
_ = x[actClearQuery-29]
_ = x[actClearSelection-30]
_ = x[actClose-31]
_ = x[actDeleteChar-32]
_ = x[actDeleteCharEof-33]
_ = x[actEndOfLine-34]
_ = x[actFatal-35]
_ = x[actForwardChar-36]
_ = x[actForwardWord-37]
_ = x[actKillLine-38]
_ = x[actKillWord-39]
_ = x[actUnixLineDiscard-40]
_ = x[actUnixWordRubout-41]
_ = x[actYank-42]
_ = x[actBackwardKillWord-43]
_ = x[actSelectAll-44]
_ = x[actDeselectAll-45]
_ = x[actToggle-46]
_ = x[actToggleSearch-47]
_ = x[actToggleAll-48]
_ = x[actToggleDown-49]
_ = x[actToggleUp-50]
_ = x[actToggleIn-51]
_ = x[actToggleOut-52]
_ = x[actToggleTrack-53]
_ = x[actToggleTrackCurrent-54]
_ = x[actToggleHeader-55]
_ = x[actToggleWrap-56]
_ = x[actToggleMultiLine-57]
_ = x[actToggleHscroll-58]
_ = x[actTrackCurrent-59]
_ = x[actToggleInput-60]
_ = x[actHideInput-61]
_ = x[actShowInput-62]
_ = x[actUntrackCurrent-63]
_ = x[actDown-64]
_ = x[actUp-65]
_ = x[actPageUp-66]
_ = x[actPageDown-67]
_ = x[actPosition-68]
_ = x[actHalfPageUp-69]
_ = x[actHalfPageDown-70]
_ = x[actOffsetUp-71]
_ = x[actOffsetDown-72]
_ = x[actOffsetMiddle-73]
_ = x[actJump-74]
_ = x[actJumpAccept-75]
_ = x[actPrintQuery-76]
_ = x[actRefreshPreview-77]
_ = x[actReplaceQuery-78]
_ = x[actToggleSort-79]
_ = x[actShowPreview-80]
_ = x[actHidePreview-81]
_ = x[actTogglePreview-82]
_ = x[actTogglePreviewWrap-83]
_ = x[actTransform-84]
_ = x[actTransformBorderLabel-85]
_ = x[actTransformListLabel-86]
_ = x[actTransformInputLabel-87]
_ = x[actTransformHeader-88]
_ = x[actTransformHeaderLabel-89]
_ = x[actTransformNth-90]
_ = x[actTransformPreviewLabel-91]
_ = x[actTransformPrompt-92]
_ = x[actTransformQuery-93]
_ = x[actTransformSearch-94]
_ = x[actSearch-95]
_ = x[actPreview-96]
_ = x[actChangePreview-97]
_ = x[actChangePreviewWindow-98]
_ = x[actPreviewTop-99]
_ = x[actPreviewBottom-100]
_ = x[actPreviewUp-101]
_ = x[actPreviewDown-102]
_ = x[actPreviewPageUp-103]
_ = x[actPreviewPageDown-104]
_ = x[actPreviewHalfPageUp-105]
_ = x[actPreviewHalfPageDown-106]
_ = x[actPrevHistory-107]
_ = x[actPrevSelected-108]
_ = x[actPrint-109]
_ = x[actPut-110]
_ = x[actNextHistory-111]
_ = x[actNextSelected-112]
_ = x[actExecute-113]
_ = x[actExecuteSilent-114]
_ = x[actExecuteMulti-115]
_ = x[actSigStop-116]
_ = x[actFirst-117]
_ = x[actLast-118]
_ = x[actReload-119]
_ = x[actReloadSync-120]
_ = x[actDisableSearch-121]
_ = x[actEnableSearch-122]
_ = x[actSelect-123]
_ = x[actDeselect-124]
_ = x[actUnbind-125]
_ = x[actRebind-126]
_ = x[actToggleBind-127]
_ = x[actBecome-128]
_ = x[actShowHeader-129]
_ = x[actHideHeader-130]
_ = x[actBell-131]
_ = x[actExclude-132]
_ = x[actExcludeMulti-133]
}
const _actionType_name = "actIgnoreactStartactClickactInvalidactCharactMouseactBeginningOfLineactAbortactAcceptactAcceptNonEmptyactAcceptOrPrintQueryactBackwardCharactBackwardDeleteCharactBackwardDeleteCharEofactBackwardWordactCancelactChangeBorderLabelactChangeListLabelactChangeInputLabelactChangeHeaderactChangeHeaderLabelactChangeMultiactChangePreviewLabelactChangePromptactChangeQueryactChangeNthactClearScreenactClearQueryactClearSelectionactCloseactDeleteCharactDeleteCharEofactEndOfLineactFatalactForwardCharactForwardWordactKillLineactKillWordactUnixLineDiscardactUnixWordRuboutactYankactBackwardKillWordactSelectAllactDeselectAllactToggleactToggleSearchactToggleAllactToggleDownactToggleUpactToggleInactToggleOutactToggleTrackactToggleTrackCurrentactToggleHeaderactToggleWrapactToggleMultiLineactToggleHscrollactTrackCurrentactToggleInputactHideInputactShowInputactUntrackCurrentactDownactUpactPageUpactPageDownactPositionactHalfPageUpactHalfPageDownactOffsetUpactOffsetDownactOffsetMiddleactJumpactJumpAcceptactPrintQueryactRefreshPreviewactReplaceQueryactToggleSortactShowPreviewactHidePreviewactTogglePreviewactTogglePreviewWrapactTransformactTransformBorderLabelactTransformListLabelactTransformInputLabelactTransformHeaderactTransformHeaderLabelactTransformNthactTransformPreviewLabelactTransformPromptactTransformQueryactTransformSearchactSearchactPreviewactChangePreviewactChangePreviewWindowactPreviewTopactPreviewBottomactPreviewUpactPreviewDownactPreviewPageUpactPreviewPageDownactPreviewHalfPageUpactPreviewHalfPageDownactPrevHistoryactPrevSelectedactPrintactPutactNextHistoryactNextSelectedactExecuteactExecuteSilentactExecuteMultiactSigStopactFirstactLastactReloadactReloadSyncactDisableSearchactEnableSearchactSelectactDeselectactUnbindactRebindactToggleBindactBecomeactShowHeaderactHideHeaderactBellactExcludeactExcludeMulti"
const _actionType_name = "actIgnoreactStartactClickactInvalidactBracketedPasteBeginactBracketedPasteEndactCharactMouseactBeginningOfLineactAbortactAcceptactAcceptNonEmptyactAcceptOrPrintQueryactBackwardCharactBackwardDeleteCharactBackwardDeleteCharEofactBackwardWordactCancelactChangeBorderLabelactChangeListLabelactChangeInputLabelactChangeHeaderactChangeHeaderLabelactChangeMultiactChangePreviewLabelactChangePromptactChangeQueryactChangeNthactClearScreenactClearQueryactClearSelectionactCloseactDeleteCharactDeleteCharEofactEndOfLineactFatalactForwardCharactForwardWordactKillLineactKillWordactUnixLineDiscardactUnixWordRuboutactYankactBackwardKillWordactSelectAllactDeselectAllactToggleactToggleSearchactToggleAllactToggleDownactToggleUpactToggleInactToggleOutactToggleTrackactToggleTrackCurrentactToggleHeaderactToggleWrapactToggleMultiLineactToggleHscrollactTrackCurrentactToggleInputactHideInputactShowInputactUntrackCurrentactDownactUpactPageUpactPageDownactPositionactHalfPageUpactHalfPageDownactOffsetUpactOffsetDownactOffsetMiddleactJumpactJumpAcceptactPrintQueryactRefreshPreviewactReplaceQueryactToggleSortactShowPreviewactHidePreviewactTogglePreviewactTogglePreviewWrapactTransformactTransformBorderLabelactTransformListLabelactTransformInputLabelactTransformHeaderactTransformHeaderLabelactTransformNthactTransformPreviewLabelactTransformPromptactTransformQueryactTransformSearchactSearchactPreviewactChangePreviewactChangePreviewWindowactPreviewTopactPreviewBottomactPreviewUpactPreviewDownactPreviewPageUpactPreviewPageDownactPreviewHalfPageUpactPreviewHalfPageDownactPrevHistoryactPrevSelectedactPrintactPutactNextHistoryactNextSelectedactExecuteactExecuteSilentactExecuteMultiactSigStopactFirstactLastactReloadactReloadSyncactDisableSearchactEnableSearchactSelectactDeselectactUnbindactRebindactToggleBindactBecomeactShowHeaderactHideHeaderactBellactExcludeactExcludeMulti"
var _actionType_index = [...]uint16{0, 9, 17, 25, 35, 42, 50, 68, 76, 85, 102, 123, 138, 159, 183, 198, 207, 227, 245, 264, 279, 299, 313, 334, 349, 363, 375, 389, 402, 419, 427, 440, 456, 468, 476, 490, 504, 515, 526, 544, 561, 568, 587, 599, 613, 622, 637, 649, 662, 673, 684, 696, 710, 731, 746, 759, 777, 793, 808, 822, 834, 846, 863, 870, 875, 884, 895, 906, 919, 934, 945, 958, 973, 980, 993, 1006, 1023, 1038, 1051, 1065, 1079, 1095, 1115, 1127, 1150, 1171, 1193, 1211, 1234, 1249, 1273, 1291, 1308, 1326, 1335, 1345, 1361, 1383, 1396, 1412, 1424, 1438, 1454, 1472, 1492, 1514, 1528, 1543, 1551, 1557, 1571, 1586, 1596, 1612, 1627, 1637, 1645, 1652, 1661, 1674, 1690, 1705, 1714, 1725, 1734, 1743, 1756, 1765, 1778, 1791, 1798, 1808, 1823}
var _actionType_index = [...]uint16{0, 9, 17, 25, 35, 57, 77, 84, 92, 110, 118, 127, 144, 165, 180, 201, 225, 240, 249, 269, 287, 306, 321, 341, 355, 376, 391, 405, 417, 431, 444, 461, 469, 482, 498, 510, 518, 532, 546, 557, 568, 586, 603, 610, 629, 641, 655, 664, 679, 691, 704, 715, 726, 738, 752, 773, 788, 801, 819, 835, 850, 864, 876, 888, 905, 912, 917, 926, 937, 948, 961, 976, 987, 1000, 1015, 1022, 1035, 1048, 1065, 1080, 1093, 1107, 1121, 1137, 1157, 1169, 1192, 1213, 1235, 1253, 1276, 1291, 1315, 1333, 1350, 1368, 1377, 1387, 1403, 1425, 1438, 1454, 1466, 1480, 1496, 1514, 1534, 1556, 1570, 1585, 1593, 1599, 1613, 1628, 1638, 1654, 1669, 1679, 1687, 1694, 1703, 1716, 1732, 1747, 1756, 1767, 1776, 1785, 1798, 1807, 1820, 1833, 1840, 1850, 1865}
func (i actionType) String() string {
if i < 0 || i >= actionType(len(_actionType_index)-1) {

View File

@@ -279,6 +279,7 @@ type Terminal struct {
yanked []rune
input []rune
inputOverride *[]rune
pasting *[]rune
multi int
multiLine bool
sort bool
@@ -459,6 +460,8 @@ const (
actStart
actClick
actInvalid
actBracketedPasteBegin
actBracketedPasteEnd
actChar
actMouse
actBeginningOfLine
@@ -668,6 +671,8 @@ func defaultKeymap() map[tui.Event][]*action {
add(tui.Fatal, actFatal)
add(tui.Invalid, actInvalid)
add(tui.BracketedPasteBegin, actBracketedPasteBegin)
add(tui.BracketedPasteEnd, actBracketedPasteEnd)
add(tui.CtrlA, actBeginningOfLine)
add(tui.CtrlB, actBackwardChar)
add(tui.CtrlC, actAbort)
@@ -4977,6 +4982,14 @@ func (t *Terminal) Loop() error {
case actInvalid:
t.mutex.Unlock()
return false
case actBracketedPasteBegin:
current := []rune(t.input)
t.pasting = &current
case actBracketedPasteEnd:
if t.pasting != nil {
queryChanged = string(t.input) != string(*t.pasting)
t.pasting = nil
}
case actTogglePreview, actShowPreview, actHidePreview:
var act bool
switch a.t {
@@ -6036,7 +6049,7 @@ func (t *Terminal) Loop() error {
} else {
t.truncateQuery()
}
queryChanged = string(previousInput) != string(t.input)
queryChanged = queryChanged || t.pasting == nil && string(previousInput) != string(t.input)
if queryChanged {
t.inputOverride = nil
}

View File

@@ -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) {

View File

@@ -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':

View File

@@ -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

View File

@@ -103,6 +103,8 @@ const (
Invalid
Fatal
BracketedPasteBegin
BracketedPasteEnd
Mouse
DoubleClick