From 1707b8cdba42492a88b3fc43c15c20d219c5ce2b Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Mon, 25 Dec 2023 23:43:46 +0900 Subject: Add 'transform' action to conditionally perform a series of actions 'transform' action runs an external command that prints a series of actions to perform. # Disallow selecting an empty line echo -e "1. Hello\n2. Goodbye\n\n3. Exit" | fzf --reverse --header 'Select one' \ --bind 'enter:transform:[[ -n {} ]] && echo accept || echo "change-header:Invalid selection"' # Move cursor past the empty line echo -e "1. Hello\n2. Goodbye\n\n3. Exit" | fzf --reverse --header 'Select one' \ --bind 'enter:transform:[[ -n {} ]] && echo accept || echo "change-header:Invalid selection"' \ --bind 'focus:transform:[[ -n {} ]] && exit; [[ {fzf:action} =~ up$ ]] && echo up || echo down' Close #3368 Close #2980 --- src/options.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/options.go') diff --git a/src/options.go b/src/options.go index ca8b2476..0822817a 100644 --- a/src/options.go +++ b/src/options.go @@ -979,7 +979,7 @@ const ( func init() { executeRegexp = regexp.MustCompile( - `(?si)[:+](become|execute(?:-multi|-silent)?|reload(?:-sync)?|preview|(?:change|transform)-(?:header|query|prompt|border-label|preview-label)|change-preview-window|change-preview|(?: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|change-preview|(?:re|un)bind|pos|put)`) splitRegexp = regexp.MustCompile("[,:]+") actionNameRegexp = regexp.MustCompile("(?i)^[a-z-]+") } @@ -1086,7 +1086,7 @@ func parseActionList(masked string, original string, prevActions []*action, putA case "backward-delete-char": appendAction(actBackwardDeleteChar) case "backward-delete-char/eof": - appendAction(actBackwardDeleteCharEOF) + appendAction(actBackwardDeleteCharEof) case "backward-word": appendAction(actBackwardWord) case "clear-screen": @@ -1094,7 +1094,7 @@ func parseActionList(masked string, original string, prevActions []*action, putA case "delete-char": appendAction(actDeleteChar) case "delete-char/eof": - appendAction(actDeleteCharEOF) + appendAction(actDeleteCharEof) case "deselect": appendAction(actDeselect) case "end-of-line": @@ -1213,7 +1213,7 @@ func parseActionList(masked string, original string, prevActions []*action, putA appendAction(actDisableSearch) case "put": if putAllowed { - appendAction(actRune) + appendAction(actChar) } else { exit("unable to put non-printable character") } @@ -1333,6 +1333,8 @@ func isExecuteAction(str string) actionType { return actExecuteMulti case "put": return actPut + case "transform": + return actTransform case "transform-border-label": return actTransformBorderLabel case "transform-preview-label": -- cgit v1.2.3