summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthieu Cneude <Phantas0s@users.noreply.github.com>2024-03-29 08:14:08 +0100
committerGitHub <noreply@github.com>2024-03-29 16:14:08 +0900
commitf625c5aabe0e4cdbfc4a1d5d526a011d3c68c697 (patch)
tree304dcb5d7f6540ef40700fd71b28f99c86ee7b6a
parent8a74976c1f02730cfd1b83fc38a57b737a24ac9a (diff)
Add environment variables: FZF_{BORDER,PREVIEW}_LABEL (#3693)
The environment variable get the value of the preview label, even if it has been updated with an action. It can be useful to track the label of the preview and be able to switch between previews using only one binding. Co-authored-by: Junegunn Choi <junegunn.c@gmail.com>
-rw-r--r--CHANGELOG.md11
-rw-r--r--man/man1/fzf.14
-rw-r--r--src/terminal.go10
-rwxr-xr-xtest/test_go.rb21
4 files changed, 44 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index cc1e8fa1..c90242fb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,17 @@ CHANGELOG
0.49.0
------
+- Added two environment variables exported to the child processes
+ - `FZF_PREVIEW_LABEL`
+ - `FZF_BORDER_LABEL`
+ ```sh
+ # Use the current value of $FZF_PREVIEW_LABEL to determine which actions to perform
+ git ls-files |
+ fzf --header 'Press CTRL-P to change preview mode' \
+ --bind='ctrl-p:transform:[[ $FZF_PREVIEW_LABEL =~ cat ]] \
+ && echo "change-preview(git log --color=always \{})+change-preview-label([[ log ]])" \
+ || echo "change-preview(bat --color=always \{})+change-preview-label([[ cat ]])"'
+ ```
- Renamed `track` action to `track-current` to highlight the difference between the global tracking state set by `--track` and a one-off tracking action
- `track` is still available as an alias
- Added `untrack-current` and `toggle-track-current` actions
diff --git a/man/man1/fzf.1 b/man/man1/fzf.1
index a02b45c1..3f8619ab 100644
--- a/man/man1/fzf.1
+++ b/man/man1/fzf.1
@@ -975,6 +975,10 @@ fzf exports the following environment variables to its child processes.
.br
.BR FZF_PROMPT " Prompt string"
.br
+.BR FZF_PREVIEW_LABEL " Preview label string"
+.br
+.BR FZF_BORDER_LABEL " Border label string"
+.br
.BR FZF_ACTION " The name of the last action performed"
.br
.BR FZF_PORT " Port number when --listen option is used"
diff --git a/src/terminal.go b/src/terminal.go
index 726cb498..ef7ba9dd 100644
--- a/src/terminal.go
+++ b/src/terminal.go
@@ -852,6 +852,8 @@ func (t *Terminal) environ() []string {
env = append(env, "FZF_QUERY="+string(t.input))
env = append(env, "FZF_ACTION="+t.lastAction.Name())
env = append(env, "FZF_PROMPT="+string(t.promptString))
+ env = append(env, "FZF_PREVIEW_LABEL="+t.previewLabelOpts.label)
+ env = append(env, "FZF_BORDER_LABEL="+t.borderLabelOpts.label)
env = append(env, fmt.Sprintf("FZF_TOTAL_COUNT=%d", t.count))
env = append(env, fmt.Sprintf("FZF_MATCH_COUNT=%d", t.merger.Length()))
env = append(env, fmt.Sprintf("FZF_SELECT_COUNT=%d", len(t.selected)))
@@ -3476,11 +3478,13 @@ func (t *Terminal) Loop() {
req(reqHeader)
}
case actChangeBorderLabel:
+ t.borderLabelOpts.label = a.a
if t.border != nil {
t.borderLabel, t.borderLabelLen = t.ansiLabelPrinter(a.a, &tui.ColBorderLabel, false)
req(reqRedrawBorderLabel)
}
case actChangePreviewLabel:
+ t.previewLabelOpts.label = a.a
if t.pborder != nil {
t.previewLabel, t.previewLabelLen = t.ansiLabelPrinter(a.a, &tui.ColPreviewLabel, false)
req(reqRedrawPreviewLabel)
@@ -3490,14 +3494,16 @@ func (t *Terminal) Loop() {
actions := parseSingleActionList(strings.Trim(body, "\r\n"), func(message string) {})
return doActions(actions)
case actTransformBorderLabel:
+ label := t.executeCommand(a.a, false, true, true, true)
+ t.borderLabelOpts.label = label
if t.border != nil {
- label := t.executeCommand(a.a, false, true, true, true)
t.borderLabel, t.borderLabelLen = t.ansiLabelPrinter(label, &tui.ColBorderLabel, false)
req(reqRedrawBorderLabel)
}
case actTransformPreviewLabel:
+ label := t.executeCommand(a.a, false, true, true, true)
+ t.previewLabelOpts.label = label
if t.pborder != nil {
- label := t.executeCommand(a.a, false, true, true, true)
t.previewLabel, t.previewLabelLen = t.ansiLabelPrinter(label, &tui.ColPreviewLabel, false)
req(reqRedrawPreviewLabel)
}
diff --git a/test/test_go.rb b/test/test_go.rb
index f44f6379..e4d365e9 100755
--- a/test/test_go.rb
+++ b/test/test_go.rb
@@ -2877,6 +2877,27 @@ class TestGoFZF < TestBase
end
end
+ def test_labels_variables
+ tmux.send_keys ': | fzf --border --border-label foobar --preview "echo \$FZF_BORDER_LABEL // \$FZF_PREVIEW_LABEL" --preview-label barfoo --bind "space:change-border-label(barbaz)+change-preview-label(bazbar)+refresh-preview,enter:transform-border-label(echo 123)+transform-preview-label(echo 456)+refresh-preview"', :Enter
+ tmux.until do
+ assert_includes(_1[0], '─foobar─')
+ assert_includes(_1[1], '─barfoo─')
+ assert_includes(_1[2], ' foobar // barfoo ')
+ end
+ tmux.send_keys :Space
+ tmux.until do
+ assert_includes(_1[0], '─barbaz─')
+ assert_includes(_1[1], '─bazbar─')
+ assert_includes(_1[2], ' barbaz // bazbar ')
+ end
+ tmux.send_keys :Enter
+ tmux.until do
+ assert_includes(_1[0], '─123─')
+ assert_includes(_1[1], '─456─')
+ assert_includes(_1[2], ' 123 // 456 ')
+ end
+ end
+
def test_info_separator_unicode
tmux.send_keys 'seq 100 | fzf -q55', :Enter
tmux.until { assert_includes(_1[-2], ' 1/100 ─') }