function __fzf_defaults # $argv[1]: Prepend to FZF_DEFAULT_OPTS_FILE and FZF_DEFAULT_OPTS # $argv[2..]: Append to FZF_DEFAULT_OPTS_FILE and FZF_DEFAULT_OPTS test -n "$FZF_TMUX_HEIGHT"; or set -l FZF_TMUX_HEIGHT 40% string join ' ' -- \ "--height $FZF_TMUX_HEIGHT --min-height=20+ --bind=ctrl-z:ignore" $argv[1] \ (test -r "$FZF_DEFAULT_OPTS_FILE"; and string join -- ' ' <$FZF_DEFAULT_OPTS_FILE) \ $FZF_DEFAULT_OPTS $argv[2..-1] end function __fzfcmd test -n "$FZF_TMUX_HEIGHT"; or set -l FZF_TMUX_HEIGHT 40% if test -n "$FZF_TMUX_OPTS" echo "fzf-tmux $FZF_TMUX_OPTS -- " else if test "$FZF_TMUX" = "1" echo "fzf-tmux -d$FZF_TMUX_HEIGHT -- " else echo "fzf" end end function __fzf_cmd_tokens -d 'Return command line tokens, skipping leading env assignments and command prefixes' # Get tokens - use version-appropriate flags set -l tokens if test (string match -r -- '^\d+' $version) -ge 4 set -- tokens (commandline -xpc) else set -- tokens (commandline -opc) end # Filter out leading environment variable assignments set -l -- var_count 0 for i in $tokens if string match -qr -- '^[\w]+=' $i set var_count (math $var_count + 1) else break end end set -e -- tokens[0..$var_count] # Skip command prefixes so callers see the actual command name, # e.g. "builtin cd" → "cd", "env VAR=1 command cd" → "cd" while true switch "$tokens[1]" case builtin command set -e -- tokens[1] test "$tokens[1]" = "--"; and set -e -- tokens[1] case env set -e -- tokens[1] test "$tokens[1]" = "--"; and set -e -- tokens[1] while string match -qr -- '^[\w]+=' "$tokens[1]" set -e -- tokens[1] end case '*' break end end string escape -n -- $tokens end function __fzf_parse_commandline -d 'Parse the current command line token and return split of existing filepath, fzf query, and optional -option= prefix' set -l fzf_query '' set -l prefix '' set -l dir '.' # Set variables containing the major and minor fish version numbers, using # a method compatible with all supported fish versions. set -l -- fish_major (string match -r -- '^\d+' $version) set -l -- fish_minor (string match -r -- '^\d+\.(\d+)' $version)[2] # fish v3.3.0 and newer: Don't use option prefix if " -- " is preceded. set -l -- match_regex '(?[\s\S]*?(?=\n?$)$)' set -l -- prefix_regex '^-[^\s=]+=|^-(?!-)\S' if test "$fish_major" -eq 3 -a "$fish_minor" -lt 3 or string match -q -v -- '* -- *' (string sub -l (commandline -Cp) -- (commandline -p)) set -- match_regex "(?$prefix_regex)?$match_regex" end # Set $prefix and expanded $fzf_query with preserved trailing newlines. if test "$fish_major" -ge 4 # fish v4.0.0 and newer string match -q -r -- $match_regex (commandline --current-token --tokens-expanded | string collect -N) else if test "$fish_major" -eq 3 -a "$fish_minor" -ge 2 # fish v3.2.0 - v3.7.1 (last v3) string match -q -r -- $match_regex (commandline --current-token --tokenize | string collect -N) eval set -- fzf_query (string escape -n -- $fzf_query | string replace -r -a '^\\\(?=~)|\\\(?=\$\w)' '') else # fish older than v3.2.0 (v3.1b1 - v3.1.2) set -l -- cl_token (commandline --current-token --tokenize | string collect -N) set -- prefix (string match -r -- $prefix_regex $cl_token) set -- fzf_query (string replace -- "$prefix" '' $cl_token | string collect -N) eval set -- fzf_query (string escape -n -- $fzf_query | string replace -r -a '^\\\(?=~)|\\\(?=\$\w)|\\\n\\\n$' '') end if test -n "$fzf_query" # Normalize path in $fzf_query, set $dir to the longest existing directory. if test \( "$fish_major" -ge 4 \) -o \( "$fish_major" -eq 3 -a "$fish_minor" -ge 5 \) # fish v3.5.0 and newer set -- fzf_query (path normalize -- $fzf_query) set -- dir $fzf_query while not path is -d $dir set -- dir (path dirname $dir) end else # fish older than v3.5.0 (v3.1b1 - v3.4.1) if test "$fish_major" -eq 3 -a "$fish_minor" -ge 2 # fish v3.2.0 - v3.4.1 string match -q -r -- '(?^[\s\S]*?(?=\n?$)$)' \ (string replace -r -a -- '(?<=/)/|(?[\s\S]*)' $fzf_query else if test "$fish_major" -eq 3 -a "$fish_minor" -ge 2 # fish v3.2.0 - v3.7.1 (last v3) string match -q -r -- '^/?(?[\s\S]*?(?=\n?$)$)' \ (string replace -- "$dir" '' $fzf_query | string collect -N) else # fish older than v3.2.0 (v3.1b1 - v3.1.2) set -- fzf_query (string replace -- "$dir" '' $fzf_query | string collect -N) eval set -- fzf_query (string escape -n -- $fzf_query | string replace -r -a '^/?|\\\n$' '') end end end string escape -n -- "$dir" "$fzf_query" "$prefix" end