diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2023-12-25 23:43:46 +0900 |
|---|---|---|
| committer | Junegunn Choi <junegunn.c@gmail.com> | 2023-12-26 00:14:05 +0900 |
| commit | 1707b8cdba42492a88b3fc43c15c20d219c5ce2b (patch) | |
| tree | 268e6950fecc4bec86b38389101e52901134b3a5 /src/options.go | |
| parent | 41d4d70b985f665c8ecc66b83aa10209c8dfbbfd (diff) | |
| download | fzf-1707b8cdba42492a88b3fc43c15c20d219c5ce2b.tar.gz | |
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
Diffstat (limited to 'src/options.go')
| -rw-r--r-- | src/options.go | 10 |
1 files changed, 6 insertions, 4 deletions
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": |
