summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2025-10-04 22:50:33 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2025-10-09 00:17:00 +0900
commit9ace1351ffecc88b7b7e459bef54fa95dbcf5ad7 (patch)
treed457577004cb0ef1356c99c759c52eb769ed9fa6
parente1de29bc40c5a117ef6f6c37b37d16c1d89baa42 (diff)
downloadfzf-9ace1351ffecc88b7b7e459bef54fa95dbcf5ad7.tar.gz
ADD $FZF_DIRECTION
-rw-r--r--CHANGELOG.md14
-rw-r--r--man/man1/fzf.12
-rw-r--r--src/terminal.go5
-rw-r--r--test/test_core.rb1
4 files changed, 22 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 78e7938c..e845abed 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -132,6 +132,20 @@ fzf --gutter ' ' --color gutter:reverse
As noted above, the `--gutter-raw CHAR` option was also added for customizing the gutter column in raw mode.
+### Added environment variable
+
+`$FZF_DIRECTION` is now exported to child processes, indicating the list direction of the current layout.
+
+- `up` for the default layout
+- `down` for `reverse` or `reverse-list`
+
+This simplifies writing transform actions involving layout-dependent actions
+like `{up,down}-match`, `{up,down}-selected`, and `toggle+{up,down}`.
+
+```sh
+fzf --raw --bind 'result:first+transform:[[ $FZF_RAW = 0 ]] && echo $FZF_DIRECTION-match'
+```
+
### Breaking changes
#### Hiding the gutter column
diff --git a/man/man1/fzf.1 b/man/man1/fzf.1
index bf26d377..6801fd81 100644
--- a/man/man1/fzf.1
+++ b/man/man1/fzf.1
@@ -1335,6 +1335,8 @@ fzf exports the following environment variables to its child processes.
.br
.BR FZF_COLUMNS " Number of columns fzf takes up excluding padding and margin"
.br
+.BR FZF_DIRECTION " Direction of the list (\fBup\fR or \fBdown\fR)"
+.br
.BR FZF_TOTAL_COUNT " Total number of items"
.br
.BR FZF_MATCH_COUNT " Number of matched items"
diff --git a/src/terminal.go b/src/terminal.go
index f8899fd8..9b3d390b 100644
--- a/src/terminal.go
+++ b/src/terminal.go
@@ -1307,6 +1307,11 @@ func (t *Terminal) environImpl(forPreview bool) []string {
env = append(env, "FZF_LIST_LABEL="+t.listLabelOpts.label)
env = append(env, "FZF_INPUT_LABEL="+t.inputLabelOpts.label)
env = append(env, "FZF_HEADER_LABEL="+t.headerLabelOpts.label)
+ direction := "down"
+ if t.layout == layoutDefault {
+ direction = "up"
+ }
+ env = append(env, "FZF_DIRECTION="+direction)
if len(t.nthCurrent) > 0 {
env = append(env, "FZF_NTH="+RangesToString(t.nthCurrent))
}
diff --git a/test/test_core.rb b/test/test_core.rb
index 1e1ff812..4628667b 100644
--- a/test/test_core.rb
+++ b/test/test_core.rb
@@ -1682,6 +1682,7 @@ class TestCore < TestInteractive
tmux.send_keys %(seq 100 | #{FZF} --multi --reverse --preview-window 0 --preview 'env | grep ^FZF_ | sort > #{tempname}' --no-input --bind enter:show-input+refresh-preview,space:disable-search+refresh-preview), :Enter
expected = {
+ FZF_DIRECTION: 'down',
FZF_TOTAL_COUNT: '100',
FZF_MATCH_COUNT: '100',
FZF_SELECT_COUNT: '0',