summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2024-05-22 22:18:24 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2024-05-22 22:18:24 +0900
commita90426b7ca59dfe9f97110caf533c450b6855a77 (patch)
tree40952d5e451f9190df662426f57a3b77e5810c31
parent303c3bae7ff02996bdbad4b743cdb23c1813a4c6 (diff)
Add print(...) action
-rw-r--r--CHANGELOG.md5
-rw-r--r--man/man1/fzf.12
-rw-r--r--src/actiontype_string.go47
-rw-r--r--src/options.go4
-rw-r--r--src/terminal.go9
-rw-r--r--src/tui/eventtype_string.go5
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) {