diff options
author | Junegunn Choi <junegunn.c@gmail.com> | 2024-05-22 22:18:24 +0900 |
---|---|---|
committer | Junegunn Choi <junegunn.c@gmail.com> | 2024-05-22 22:18:24 +0900 |
commit | a90426b7ca59dfe9f97110caf533c450b6855a77 (patch) | |
tree | 40952d5e451f9190df662426f57a3b77e5810c31 | |
parent | 303c3bae7ff02996bdbad4b743cdb23c1813a4c6 (diff) |
Add print(...) action
-rw-r--r-- | CHANGELOG.md | 5 | ||||
-rw-r--r-- | man/man1/fzf.1 | 2 | ||||
-rw-r--r-- | src/actiontype_string.go | 47 | ||||
-rw-r--r-- | src/options.go | 4 | ||||
-rw-r--r-- | src/terminal.go | 9 | ||||
-rw-r--r-- | src/tui/eventtype_string.go | 5 |
6 files changed, 44 insertions, 28 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index f008cd6a..d7b6ba13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,11 @@ CHANGELOG - To simplify the implementation, it only uses popups. You need tmux 3.3 or later. - fzf now works on Git bash (mintty) out of the box via winpty integration - man page is now embedded in the binary; `fzf --man` to see it +- Added `print(...)` action to queue arbitrary string to be printed on exit + ```sh + fzf --bind 'space:print(space pressed)+accept' + ``` + - This is similar to `--expect` but it allows you to queue multiple arbitrary strings - [`NO_COLOR`](https://no-color.org/) environment variable is now respected. If the variable is set, fzf defaults to `--no-color` unless otherwise specified. 0.52.1 diff --git a/man/man1/fzf.1 b/man/man1/fzf.1 index 5a715660..5611dbbb 100644 --- a/man/man1/fzf.1 +++ b/man/man1/fzf.1 @@ -1399,7 +1399,7 @@ A key or an event can be bound to one or more of the following actions. \fBpreview-half-page-up\fR \fBpreview-bottom\fR \fBpreview-top\fR - \fBprint-query\fR (print query and exit) + \fBprint(...)\fR (add string to the output queue and print on exit) \fBput\fR (put the character to the prompt) \fBput(...)\fR (put the given string to the prompt) \fBrefresh-preview\fR diff --git a/src/actiontype_string.go b/src/actiontype_string.go index 6b07134b..2a597ea5 100644 --- a/src/actiontype_string.go +++ b/src/actiontype_string.go @@ -98,32 +98,33 @@ func _() { _ = x[actPreviewHalfPageDown-87] _ = x[actPrevHistory-88] _ = x[actPrevSelected-89] - _ = x[actPut-90] - _ = x[actNextHistory-91] - _ = x[actNextSelected-92] - _ = x[actExecute-93] - _ = x[actExecuteSilent-94] - _ = x[actExecuteMulti-95] - _ = x[actSigStop-96] - _ = x[actFirst-97] - _ = x[actLast-98] - _ = x[actReload-99] - _ = x[actReloadSync-100] - _ = x[actDisableSearch-101] - _ = x[actEnableSearch-102] - _ = x[actSelect-103] - _ = x[actDeselect-104] - _ = x[actUnbind-105] - _ = x[actRebind-106] - _ = x[actBecome-107] - _ = x[actResponse-108] - _ = x[actShowHeader-109] - _ = x[actHideHeader-110] + _ = x[actPrint-90] + _ = x[actPut-91] + _ = x[actNextHistory-92] + _ = x[actNextSelected-93] + _ = x[actExecute-94] + _ = x[actExecuteSilent-95] + _ = x[actExecuteMulti-96] + _ = x[actSigStop-97] + _ = x[actFirst-98] + _ = x[actLast-99] + _ = x[actReload-100] + _ = x[actReloadSync-101] + _ = x[actDisableSearch-102] + _ = x[actEnableSearch-103] + _ = x[actSelect-104] + _ = x[actDeselect-105] + _ = x[actUnbind-106] + _ = x[actRebind-107] + _ = x[actBecome-108] + _ = x[actResponse-109] + _ = x[actShowHeader-110] + _ = x[actHideHeader-111] } -const _actionType_name = "actIgnoreactStartactClickactInvalidactCharactMouseactBeginningOfLineactAbortactAcceptactAcceptNonEmptyactAcceptOrPrintQueryactBackwardCharactBackwardDeleteCharactBackwardDeleteCharEofactBackwardWordactCancelactChangeBorderLabelactChangeHeaderactChangeMultiactChangePreviewLabelactChangePromptactChangeQueryactClearScreenactClearQueryactClearSelectionactCloseactDeleteCharactDeleteCharEofactEndOfLineactFatalactForwardCharactForwardWordactKillLineactKillWordactUnixLineDiscardactUnixWordRuboutactYankactBackwardKillWordactSelectAllactDeselectAllactToggleactToggleSearchactToggleAllactToggleDownactToggleUpactToggleInactToggleOutactToggleTrackactToggleTrackCurrentactToggleHeaderactTrackCurrentactUntrackCurrentactDownactUpactPageUpactPageDownactPositionactHalfPageUpactHalfPageDownactOffsetUpactOffsetDownactJumpactJumpAcceptactPrintQueryactRefreshPreviewactReplaceQueryactToggleSortactShowPreviewactHidePreviewactTogglePreviewactTogglePreviewWrapactTransformactTransformBorderLabelactTransformHeaderactTransformPreviewLabelactTransformPromptactTransformQueryactPreviewactChangePreviewactChangePreviewWindowactPreviewTopactPreviewBottomactPreviewUpactPreviewDownactPreviewPageUpactPreviewPageDownactPreviewHalfPageUpactPreviewHalfPageDownactPrevHistoryactPrevSelectedactPutactNextHistoryactNextSelectedactExecuteactExecuteSilentactExecuteMultiactSigStopactFirstactLastactReloadactReloadSyncactDisableSearchactEnableSearchactSelectactDeselectactUnbindactRebindactBecomeactResponseactShowHeaderactHideHeader" +const _actionType_name = "actIgnoreactStartactClickactInvalidactCharactMouseactBeginningOfLineactAbortactAcceptactAcceptNonEmptyactAcceptOrPrintQueryactBackwardCharactBackwardDeleteCharactBackwardDeleteCharEofactBackwardWordactCancelactChangeBorderLabelactChangeHeaderactChangeMultiactChangePreviewLabelactChangePromptactChangeQueryactClearScreenactClearQueryactClearSelectionactCloseactDeleteCharactDeleteCharEofactEndOfLineactFatalactForwardCharactForwardWordactKillLineactKillWordactUnixLineDiscardactUnixWordRuboutactYankactBackwardKillWordactSelectAllactDeselectAllactToggleactToggleSearchactToggleAllactToggleDownactToggleUpactToggleInactToggleOutactToggleTrackactToggleTrackCurrentactToggleHeaderactTrackCurrentactUntrackCurrentactDownactUpactPageUpactPageDownactPositionactHalfPageUpactHalfPageDownactOffsetUpactOffsetDownactJumpactJumpAcceptactPrintQueryactRefreshPreviewactReplaceQueryactToggleSortactShowPreviewactHidePreviewactTogglePreviewactTogglePreviewWrapactTransformactTransformBorderLabelactTransformHeaderactTransformPreviewLabelactTransformPromptactTransformQueryactPreviewactChangePreviewactChangePreviewWindowactPreviewTopactPreviewBottomactPreviewUpactPreviewDownactPreviewPageUpactPreviewPageDownactPreviewHalfPageUpactPreviewHalfPageDownactPrevHistoryactPrevSelectedactPrintactPutactNextHistoryactNextSelectedactExecuteactExecuteSilentactExecuteMultiactSigStopactFirstactLastactReloadactReloadSyncactDisableSearchactEnableSearchactSelectactDeselectactUnbindactRebindactBecomeactResponseactShowHeaderactHideHeader" -var _actionType_index = [...]uint16{0, 9, 17, 25, 35, 42, 50, 68, 76, 85, 102, 123, 138, 159, 183, 198, 207, 227, 242, 256, 277, 292, 306, 320, 333, 350, 358, 371, 387, 399, 407, 421, 435, 446, 457, 475, 492, 499, 518, 530, 544, 553, 568, 580, 593, 604, 615, 627, 641, 662, 677, 692, 709, 716, 721, 730, 741, 752, 765, 780, 791, 804, 811, 824, 837, 854, 869, 882, 896, 910, 926, 946, 958, 981, 999, 1023, 1041, 1058, 1068, 1084, 1106, 1119, 1135, 1147, 1161, 1177, 1195, 1215, 1237, 1251, 1266, 1272, 1286, 1301, 1311, 1327, 1342, 1352, 1360, 1367, 1376, 1389, 1405, 1420, 1429, 1440, 1449, 1458, 1467, 1478, 1491, 1504} +var _actionType_index = [...]uint16{0, 9, 17, 25, 35, 42, 50, 68, 76, 85, 102, 123, 138, 159, 183, 198, 207, 227, 242, 256, 277, 292, 306, 320, 333, 350, 358, 371, 387, 399, 407, 421, 435, 446, 457, 475, 492, 499, 518, 530, 544, 553, 568, 580, 593, 604, 615, 627, 641, 662, 677, 692, 709, 716, 721, 730, 741, 752, 765, 780, 791, 804, 811, 824, 837, 854, 869, 882, 896, 910, 926, 946, 958, 981, 999, 1023, 1041, 1058, 1068, 1084, 1106, 1119, 1135, 1147, 1161, 1177, 1195, 1215, 1237, 1251, 1266, 1274, 1280, 1294, 1309, 1319, 1335, 1350, 1360, 1368, 1375, 1384, 1397, 1413, 1428, 1437, 1448, 1457, 1466, 1475, 1486, 1499, 1512} func (i actionType) String() string { if i < 0 || i >= actionType(len(_actionType_index)-1) { diff --git a/src/options.go b/src/options.go index ca0d025e..cfe7d661 100644 --- a/src/options.go +++ b/src/options.go @@ -1188,7 +1188,7 @@ const ( func init() { executeRegexp = regexp.MustCompile( - `(?si)[:+](become|execute(?:-multi|-silent)?|reload(?:-sync)?|preview|(?:change|transform)-(?:header|query|prompt|border-label|preview-label)|transform|change-(?:preview-window|preview|multi)|(?:re|un)bind|pos|put)`) + `(?si)[:+](become|execute(?:-multi|-silent)?|reload(?:-sync)?|preview|(?:change|transform)-(?:header|query|prompt|border-label|preview-label)|transform|change-(?:preview-window|preview|multi)|(?:re|un)bind|pos|put|print)`) splitRegexp = regexp.MustCompile("[,:]+") actionNameRegexp = regexp.MustCompile("(?i)^[a-z-]+") } @@ -1560,6 +1560,8 @@ func isExecuteAction(str string) actionType { return actExecuteSilent case "execute-multi": return actExecuteMulti + case "print": + return actPrint case "put": return actPut case "transform": diff --git a/src/terminal.go b/src/terminal.go index 93e70855..58073dd7 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -242,6 +242,7 @@ type Terminal struct { keymap map[tui.Event][]*action keymapOrg map[tui.Event][]*action pressed string + printQueue []string printQuery bool history *History cycle bool @@ -439,7 +440,7 @@ const ( actOffsetDown actJump actJumpAccept // XXX Deprecated in favor of jump:accept binding - actPrintQuery + actPrintQuery // XXX Deprecated (not very useful, just use --print-query) actRefreshPreview actReplaceQuery actToggleSort @@ -466,6 +467,7 @@ const ( actPreviewHalfPageDown actPrevHistory actPrevSelected + actPrint actPut actNextHistory actNextSelected @@ -1203,6 +1205,9 @@ func (t *Terminal) output() bool { if len(t.expect) > 0 { t.printer(t.pressed) } + for _, s := range t.printQueue { + t.printer(s) + } found := len(t.selected) > 0 if !found { current := t.currentItem() @@ -3946,6 +3951,8 @@ func (t *Terminal) Loop() error { suffix := copySlice(t.input[t.cx:]) t.input = append(append(t.input[:t.cx], str...), suffix...) t.cx += len(str) + case actPrint: + t.printQueue = append(t.printQueue, a.a) case actUnixLineDiscard: beof = len(t.input) == 0 if t.cx > 0 { diff --git a/src/tui/eventtype_string.go b/src/tui/eventtype_string.go index d752163d..a62ba073 100644 --- a/src/tui/eventtype_string.go +++ b/src/tui/eventtype_string.go @@ -107,11 +107,12 @@ func _() { _ = x[Result-96] _ = x[Jump-97] _ = x[JumpCancel-98] + _ = x[ClickHeader-99] } -const _EventType_name = "RuneCtrlACtrlBCtrlCCtrlDCtrlECtrlFCtrlGCtrlHTabCtrlJCtrlKCtrlLCtrlMCtrlNCtrlOCtrlPCtrlQCtrlRCtrlSCtrlTCtrlUCtrlVCtrlWCtrlXCtrlYCtrlZEscCtrlSpaceCtrlDeleteCtrlBackSlashCtrlRightBracketCtrlCaretCtrlSlashShiftTabBackspaceDeletePageUpPageDownUpDownLeftRightHomeEndInsertShiftUpShiftDownShiftLeftShiftRightShiftDeleteF1F2F3F4F5F6F7F8F9F10F11F12AltBackspaceAltUpAltDownAltLeftAltRightAltShiftUpAltShiftDownAltShiftLeftAltShiftRightAltCtrlAltInvalidFatalMouseDoubleClickLeftClickRightClickSLeftClickSRightClickScrollUpScrollDownSScrollUpSScrollDownPreviewScrollUpPreviewScrollDownResizeChangeBackwardEOFStartLoadFocusOneZeroResultJumpJumpCancel" +const _EventType_name = "RuneCtrlACtrlBCtrlCCtrlDCtrlECtrlFCtrlGCtrlHTabCtrlJCtrlKCtrlLCtrlMCtrlNCtrlOCtrlPCtrlQCtrlRCtrlSCtrlTCtrlUCtrlVCtrlWCtrlXCtrlYCtrlZEscCtrlSpaceCtrlDeleteCtrlBackSlashCtrlRightBracketCtrlCaretCtrlSlashShiftTabBackspaceDeletePageUpPageDownUpDownLeftRightHomeEndInsertShiftUpShiftDownShiftLeftShiftRightShiftDeleteF1F2F3F4F5F6F7F8F9F10F11F12AltBackspaceAltUpAltDownAltLeftAltRightAltShiftUpAltShiftDownAltShiftLeftAltShiftRightAltCtrlAltInvalidFatalMouseDoubleClickLeftClickRightClickSLeftClickSRightClickScrollUpScrollDownSScrollUpSScrollDownPreviewScrollUpPreviewScrollDownResizeChangeBackwardEOFStartLoadFocusOneZeroResultJumpJumpCancelClickHeader" -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} +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} func (i EventType) String() string { if i < 0 || i >= EventType(len(_EventType_index)-1) { |