about summary refs log tree commit diff
path: root/alpine-river/config/fish/functions/_fzf_wrapper.fish
diff options
context:
space:
mode:
Diffstat (limited to 'alpine-river/config/fish/functions/_fzf_wrapper.fish')
-rw-r--r--alpine-river/config/fish/functions/_fzf_wrapper.fish21
1 files changed, 21 insertions, 0 deletions
diff --git a/alpine-river/config/fish/functions/_fzf_wrapper.fish b/alpine-river/config/fish/functions/_fzf_wrapper.fish
new file mode 100644
index 0000000..486e36c
--- /dev/null
+++ b/alpine-river/config/fish/functions/_fzf_wrapper.fish
@@ -0,0 +1,21 @@
+function _fzf_wrapper --description "Prepares some environment variables before executing fzf."
+    # Make sure fzf uses fish to execute preview commands, some of which
+    # are autoloaded fish functions so don't exist in other shells.
+    # Use --function so that it doesn't clobber SHELL outside this function.
+    set -f --export SHELL (command --search fish)
+
+    # If neither FZF_DEFAULT_OPTS nor FZF_DEFAULT_OPTS_FILE are set, then set some sane defaults.
+    # See https://github.com/junegunn/fzf#environment-variables
+    set --query FZF_DEFAULT_OPTS FZF_DEFAULT_OPTS_FILE
+    if test $status -eq 2
+        # cycle allows jumping between the first and last results, making scrolling faster
+        # layout=reverse lists results top to bottom, mimicking the familiar layouts of git log, history, and env
+        # border shows where the fzf window begins and ends
+        # height=90% leaves space to see the current command and some scrollback, maintaining context of work
+        # preview-window=wrap wraps long lines in the preview window, making reading easier
+        # marker=* makes the multi-select marker more distinguishable from the pointer (since both default to >)
+        set --export FZF_DEFAULT_OPTS '--cycle --layout=reverse --border --height=90% --preview-window=wrap --marker="*"'
+    end
+
+    fzf $argv
+end