Extract function for changing key bindings

This commit is contained in:
Johannes Altmanninger 2024-10-25 22:47:20 +02:00
parent 832cda26f6
commit 8eaa16542a
3 changed files with 20 additions and 35 deletions

View File

@ -0,0 +1,17 @@
function __fish_change_key_bindings --argument-names bindings
# Allow the user to set the variable universally
set -l scope
set -q fish_key_bindings
or set scope -g
# We try to use `set --no-event`, but to avoid leaving the user without bindings
# if they run this with an older version we fall back on setting the variable
# with an event.
if ! set --no-event $scope fish_key_bindings $bindings 2>/dev/null
# This triggers the handler, which calls us again
set $scope fish_key_bindings $bindings
# unless the handler somehow doesn't exist, which would leave us without bindings.
# this happens in no-config mode.
functions -q __fish_reload_key_bindings
and return 1
end
end

View File

@ -9,25 +9,8 @@ function fish_default_key_bindings -d "emacs-like key binds"
if not set -q argv[1] if not set -q argv[1]
bind --erase --all --preset # clear earlier bindings, if any bind --erase --all --preset # clear earlier bindings, if any
if test "$fish_key_bindings" != fish_default_key_bindings if test "$fish_key_bindings" != fish_default_key_bindings
# Allow the user to set the variable universally __fish_change_key_bindings fish_default_key_bindings || return
set -l scope set fish_bind_mode default
set -q fish_key_bindings
or set scope -g
true
# We try to use `set --no-event`, but to avoid leaving the user without bindings
# if they run this with an older version we fall back on setting the variable
# with an event.
if ! set --no-event $scope fish_key_bindings fish_default_key_bindings 2>/dev/null
# This triggers the handler, which calls us again
set $scope fish_key_bindings fish_default_key_bindings
# unless the handler somehow doesn't exist, which would leave us without bindings.
# this happens in no-config mode.
functions -q __fish_reload_key_bindings
and return
else
# (we need to set the bind mode to default)
set --no-event fish_bind_mode default
end
end end
end end

View File

@ -23,22 +23,7 @@ function fish_vi_key_bindings --description 'vi-like key bindings for fish'
# and without this would then have subtly broken bindings. # and without this would then have subtly broken bindings.
if test "$fish_key_bindings" != fish_vi_key_bindings if test "$fish_key_bindings" != fish_vi_key_bindings
and test "$rebind" = true and test "$rebind" = true
# Allow the user to set the variable universally __fish_change_key_bindings fish_vi_key_bindings || return
set -l scope
set -q fish_key_bindings
or set scope -g
true
# We try to use `set --no-event`, but to avoid leaving the user without bindings
# if they run this with an older version we fall back on setting the variable
# with an event.
if ! set --no-event $scope fish_key_bindings fish_vi_key_bindings 2>/dev/null
# This triggers the handler, which calls us again
set $scope fish_key_bindings fish_vi_key_bindings
# unless the handler somehow doesn't exist, which would leave us without bindings.
# this happens in no-config mode.
functions -q __fish_reload_key_bindings
and return
end
end end
set -l init_mode insert set -l init_mode insert