Compare commits

..

6 Commits

Author SHA1 Message Date
rootiest a442315312 Merge pull request 'fix(keybinds): guard bindings on required binaries and fix fzf compat' (#16) from fix/fzf-keybind-guards into main
Reviewed-on: #16
2026-05-19 00:56:29 +00:00
rootiest 6530935652 fix(fzf): omit toggle-raw bind on older fzf builds
toggle-raw is unavailable in fzf 0.60 devel. Gate it alongside
preview-wrap-sign using the existing _fzf_transform_action check,
consolidating both version-conditional variables into one block.
2026-05-18 20:54:10 -04:00
rootiest bdbdf2e8e0 fix(fzf): omit --preview-wrap-sign on older fzf builds
preview-wrap-sign is unavailable in fzf 0.60 devel. Reuse the
existing _fzf_transform_action gate to conditionally append it
to the history widget base options, keeping parity with the
wrap-word and bg-transform fallbacks.
2026-05-18 20:52:44 -04:00
rootiest d7471e2eca fix(fzf): fall back to plain wrap on older fzf lacking wrap-word
wrap-word in --preview-window was added alongside bg-transform.
Reuse the existing _fzf_transform_action variable (already inherited
by fzf-history-widget) to select wrap-word on newer fzf and plain
wrap on older builds — no additional version check needed.
2026-05-18 20:50:48 -04:00
rootiest 7acd099b3e fix(fzf): prefer bg-transform, fall back to transform on older fzf
Detect fzf version once at shell startup inside fzf_key_bindings.
Use bg-transform (non-blocking) on fzf >= 0.62 and the synchronous
transform on older builds (e.g. 0.60 devel which lacks bg-transform).
The chosen action is captured into fzf-history-widget via fish's
--inherit-variable so the check runs once, not on every Ctrl+R press.
2026-05-18 20:37:18 -04:00
rootiest e502cff8cb fix(keybinds): guard bindings on required binaries and fix fzf bg-transform
- conf.d/fzf.fish: skip fzf_configure_bindings if fzf is not in PATH
- key_bindings.fish: only bind Ctrl+Alt+= when qalc is installed
- _qalc_eval: return 1 early if qalc is absent so callers can react
- _smart_execute: fall back to normal execute when _qalc_eval returns 1
- integrations/fzf.fish: replace bg-transform with transform (available
  since fzf 0.53; bg-transform requires a newer version and caused
  "unknown action" errors on fzf 0.60 devel)
2026-05-18 20:34:00 -04:00
5 changed files with 32 additions and 10 deletions
+2 -1
View File
@@ -9,7 +9,8 @@ end
# This variable is global so that it can be referenced by fzf_configure_bindings and in tests # This variable is global so that it can be referenced by fzf_configure_bindings and in tests
set --global _fzf_search_vars_command '_fzf_search_variables (set --show | psub) (set --names | psub)' set --global _fzf_search_vars_command '_fzf_search_variables (set --show | psub) (set --names | psub)'
# Install the default bindings, which are mnemonic and minimally conflict with fish's preset bindings # Install the default bindings only if fzf is available
type -q fzf || exit
fzf_configure_bindings fzf_configure_bindings
# Doesn't erase autoloaded _fzf_* functions because they are not easily accessible once key bindings are erased # Doesn't erase autoloaded _fzf_* functions because they are not easily accessible once key bindings are erased
+2 -2
View File
@@ -52,7 +52,7 @@ function fish_user_key_bindings
bind ctrl-g __insert_previous_path_head bind ctrl-g __insert_previous_path_head
bind ctrl-f __interactive_history_sub bind ctrl-f __interactive_history_sub
bind ctrl-alt-u _replace_command_token bind ctrl-alt-u _replace_command_token
bind ctrl-alt-= _qalc_eval type -q qalc && bind ctrl-alt-= _qalc_eval
bind ctrl-enter _smart_execute bind ctrl-enter _smart_execute
# Set bindings for all Vi modes: # Set bindings for all Vi modes:
@@ -61,7 +61,7 @@ function fish_user_key_bindings
bind --mode $mode ctrl-g __insert_previous_path_head bind --mode $mode ctrl-g __insert_previous_path_head
bind --mode $mode ctrl-f __interactive_history_sub bind --mode $mode ctrl-f __interactive_history_sub
bind --mode $mode ctrl-alt-u _replace_command_token bind --mode $mode ctrl-alt-u _replace_command_token
bind --mode $mode ctrl-alt-= _qalc_eval type -q qalc && bind --mode $mode ctrl-alt-= _qalc_eval
bind --mode $mode ctrl-enter _smart_execute bind --mode $mode ctrl-enter _smart_execute
end end
end end
+2
View File
@@ -3,6 +3,8 @@
# Returns the result of a qalc calculation # Returns the result of a qalc calculation
function _qalc_eval function _qalc_eval
type -q qalc || return 1
# Get the current command line buffer # Get the current command line buffer
set -l cmd (commandline) set -l cmd (commandline)
+2 -2
View File
@@ -15,8 +15,8 @@ function _smart_execute --description 'Execute different functions based on the
# 2. Dispatch based on buffer content # 2. Dispatch based on buffer content
switch "$cmd" switch "$cmd"
case '*=' case '*='
# If it ends in =, run qalc # If it ends in =, run qalc; fall back to normal execute if qalc is absent
_qalc_eval _qalc_eval; or commandline -f execute
# case 'g *' # case 'g *'
# # EXAMPLE FUTURE EXTENSION # # EXAMPLE FUTURE EXTENSION
+24 -5
View File
@@ -31,6 +31,14 @@ function fzf_key_bindings
return 1 return 1
end end
# bg-transform runs the preview toggle in a background thread (non-blocking).
# It was added after fzf 0.60; fall back to the synchronous transform on older builds.
set -l _fzf_ver (fzf --version | string match -r '^(\d+)\.(\d+)')
set -l _fzf_transform_action transform
if test -n "$_fzf_ver[3]"; and test "$_fzf_ver[3]" -ge 62
set _fzf_transform_action bg-transform
end
#----BEGIN INCLUDE common.fish #----BEGIN INCLUDE common.fish
# NOTE: Do not directly edit this section, which is copied from "common.fish". # NOTE: Do not directly edit this section, which is copied from "common.fish".
# To modify it, one can edit "common.fish" and run "./update.sh" to apply # To modify it, one can edit "common.fish" and run "./update.sh" to apply
@@ -177,17 +185,25 @@ function fzf_key_bindings
commandline -f repaint commandline -f repaint
end end
function fzf-history-widget -d "Show command history" function fzf-history-widget --inherit-variable _fzf_transform_action -d "Show command history"
set -l -- command_line (commandline) set -l -- command_line (commandline)
set -l -- current_line (commandline -L) set -l -- current_line (commandline -L)
set -l -- total_lines (count $command_line) set -l -- total_lines (count $command_line)
set -l -- fzf_query (string escape -- $command_line[$current_line]) set -l -- fzf_query (string escape -- $command_line[$current_line])
# These options require newer fzf; omit them on older builds
set -l _fzf_preview_wrap_sign ''
set -l _fzf_toggle_raw ''
if test "$_fzf_transform_action" = bg-transform
set _fzf_preview_wrap_sign ' --preview-wrap-sign="↳ "'
set _fzf_toggle_raw ,alt-r:toggle-raw
end
set -lx -- FZF_DEFAULT_OPTS (__fzf_defaults '' \ set -lx -- FZF_DEFAULT_OPTS (__fzf_defaults '' \
'--nth=2..,.. --scheme=history --multi --no-multi-line --no-wrap --wrap-sign="\t\t\t↳ " --preview-wrap-sign="↳ "' \ '--nth=2..,.. --scheme=history --multi --no-multi-line --no-wrap --wrap-sign="\t\t\t↳ "'$_fzf_preview_wrap_sign \
'--bind=\'shift-delete:execute-silent(for i in (string split0 -- <{+f}); eval builtin history delete --exact --case-sensitive -- (string escape -n -- $i | string replace -r "^\d*\\\\\\t" ""); end)+reload(eval $FZF_DEFAULT_COMMAND)\'' \ '--bind=\'shift-delete:execute-silent(for i in (string split0 -- <{+f}); eval builtin history delete --exact --case-sensitive -- (string escape -n -- $i | string replace -r "^\d*\\\\\\t" ""); end)+reload(eval $FZF_DEFAULT_COMMAND)\'' \
'--bind="alt-enter:become(string join0 -- (string collect -- {+2..} | fish_indent -i))"' \ '--bind="alt-enter:become(string join0 -- (string collect -- {+2..} | fish_indent -i))"' \
"--bind=ctrl-r:toggle-sort,alt-r:toggle-raw --highlight-line $FZF_CTRL_R_OPTS" \ "--bind=ctrl-r:toggle-sort$_fzf_toggle_raw --highlight-line $FZF_CTRL_R_OPTS" \
'--accept-nth=2.. --delimiter="\t" --tabstop=4 --read0 --print0 --with-shell='(status fish-path)\\ -c) '--accept-nth=2.. --delimiter="\t" --tabstop=4 --read0 --print0 --with-shell='(status fish-path)\\ -c)
# Add dynamic preview options if preview command isn't already set by user # Add dynamic preview options if preview command isn't already set by user
@@ -205,10 +221,13 @@ function fzf_key_bindings
end end
# Prepend the options to allow user customizations # Prepend the options to allow user customizations
# wrap-word requires the same newer fzf as bg-transform; fall back to plain wrap
set -l _fzf_wrap_opt wrap
test "$_fzf_transform_action" = bg-transform; and set _fzf_wrap_opt wrap-word
set -p -- FZF_DEFAULT_OPTS \ set -p -- FZF_DEFAULT_OPTS \
'--bind="focus,resize:bg-transform:if test \\"$FZF_COLUMNS\\" -gt 100 -a \\\\( \\"$FZF_SELECT_COUNT\\" -gt 0 -o \\\\( -z \\"$FZF_WRAP\\" -a (string length -- {}) -gt (math $FZF_COLUMNS - 4) \\\\) -o (string collect -- {2..} | fish_indent | count) -gt 1 \\\\); echo show-preview; else echo hide-preview; end"' \ '--bind="focus,resize:'$_fzf_transform_action':if test \\"$FZF_COLUMNS\\" -gt 100 -a \\\\( \\"$FZF_SELECT_COUNT\\" -gt 0 -o \\\\( -z \\"$FZF_WRAP\\" -a (string length -- {}) -gt (math $FZF_COLUMNS - 4) \\\\) -o (string collect -- {2..} | fish_indent | count) -gt 1 \\\\); echo show-preview; else echo hide-preview; end"' \
'--preview="string collect -- (test \\"$FZF_SELECT_COUNT\\" -gt 0; and string collect -- {+2..}) \\"\\n# \\"'$date_cmd' {2..} | fish_indent --ansi"' \ '--preview="string collect -- (test \\"$FZF_SELECT_COUNT\\" -gt 0; and string collect -- {+2..}) \\"\\n# \\"'$date_cmd' {2..} | fish_indent --ansi"' \
'--preview-window="right,50%,wrap-word,follow,info,hidden"' '--preview-window="right,50%,'$_fzf_wrap_opt',follow,info,hidden"'
end end
set -lx FZF_DEFAULT_OPTS_FILE set -lx FZF_DEFAULT_OPTS_FILE