Add $fish_handle_reflow to disable winch handler

Overriding event handlers is annoying.
This commit is contained in:
Fabian Homborg 2021-01-12 12:42:52 +01:00
parent 48082daad4
commit e192066e98
2 changed files with 22 additions and 13 deletions

View file

@ -1249,6 +1249,8 @@ You can change the settings of fish by changing the values of certain variables.
- ``fish_greeting``, the greeting message printed on startup. This is printed by a function of the same name that can be overridden for more complicated changes (see :ref:`funced <cmd-funced>`
- ``fish_handle_reflow``, determines whether fish should try to repaint the commandline when the terminal resizes. In terminals that reflow text this should be disabled. Set it to 1 to enable, anything else to disable.
- ``fish_history``, the current history session name. If set, all subsequent commands within an
interactive fish session will be logged to a separate file identified by the value of the
variable. If unset, or set to ``default``, the default session name "fish" is used. If set to an

View file

@ -241,24 +241,31 @@ function __fish_config_interactive -d "Initializations that should be performed
# __fish_enable_focus
end
function __fish_winch_handler --on-signal WINCH -d "Repaint screen when window changes size"
# Detect whether the terminal reflows on its own
# If it does we shouldn't do it.
# Allow $fish_handle_reflow to override it.
if not set -q fish_handle_reflow
# VTE reflows the text itself, so us doing it inevitably races against it.
# Guidance from the VTE developers is to let them repaint.
if set -q VTE_VERSION
return
end
# Same for alacritty
if string match -q -- 'alacritty*' $TERM
return
end
# Konsole since version 21.04(.00)
# Note that this is optional, but since we have no way of detecting it
# we go with the default, which is true.
if set -q KONSOLE_VERSION
# Same for alacritty
or string match -q -- 'alacritty*' $TERM
set -g fish_handle_reflow 0
else if set -q KONSOLE_VERSION
and test "$KONSOLE_VERSION" -ge 210400 2>/dev/null
return
# Konsole since version 21.04(.00)
# Note that this is optional, but since we have no way of detecting it
# we go with the default, which is true.
set -g fish_handle_reflow 0
else
set -g fish_handle_reflow 1
end
end
function __fish_winch_handler --on-signal WINCH -d "Repaint screen when window changes size"
if test "$fish_handle_reflow" = 1 2>/dev/null
commandline -f repaint >/dev/null 2>/dev/null
end
commandline -f repaint >/dev/null 2>/dev/null
end
# Notify terminals when $PWD changes (issue #906).