Shell integration now aliases sudo to make the kitty terminfo db available in the sudo environment

This should make terminfo completely transparent for most users on the
local machine and on remote machines that are connected to with the ssh
kitten.
This commit is contained in:
Kovid Goyal
2023-09-24 13:35:29 +05:30
parent 0c0c6b732f
commit d96fdb80ed
7 changed files with 28 additions and 4 deletions

View File

@@ -75,7 +75,7 @@ fi
# which is not available on older bash
builtin declare -A _ksi_prompt
_ksi_prompt=(
[cursor]='y' [title]='y' [mark]='y' [complete]='y' [cwd]='y' [ps0]='' [ps0_suffix]='' [ps1]='' [ps1_suffix]='' [ps2]=''
[cursor]='y' [title]='y' [mark]='y' [complete]='y' [cwd]='y' [sudo]='y' [ps0]='' [ps0_suffix]='' [ps1]='' [ps1_suffix]='' [ps2]=''
[hostname_prefix]='' [sourced]='y' [last_reported_cwd]=''
)
@@ -89,6 +89,7 @@ _ksi_main() {
"no-prompt-mark") _ksi_prompt[mark]='n';;
"no-complete") _ksi_prompt[complete]='n';;
"no-cwd") _ksi_prompt[cwd]='n';;
"no-sudo") _ksi_prompt[sudo]='n';;
esac
done
IFS="$ifs"
@@ -211,6 +212,11 @@ _ksi_main() {
builtin alias edit-in-kitty="kitten edit-in-kitty"
if [[ "${_ksi_prompt[sudo]}" == "y" ]]; then
# Ensure terminfo is available in sudo
[[ -n "$TERMINFO" ]] && builtin alias sudo="sudo TERMINFO=\"$TERMINFO\""
fi
if [[ "${_ksi_prompt[complete]}" == "y" ]]; then
_ksi_completions() {
builtin local src

View File

@@ -108,6 +108,13 @@ function __ksi_schedule --on-event fish_prompt -d "Setup kitty integration after
__update_cwd_osc
end
if not contains "no-sudo" $_ksi
# Ensure terminfo is available in sudo
if test -n "$TERMINFO"
alias sudo="sudo TERMINFO=\"$TERMINFO\""
end
end
# Handle clone launches
if test -n "$KITTY_IS_CLONE_LAUNCH"
set --local orig_conda_env "$CONDA_DEFAULT_ENV"

View File

@@ -84,7 +84,7 @@ precmd_functions+=(_ksi_deferred_init)
_ksi_deferred_init() {
builtin emulate -L zsh -o no_warn_create_global -o no_aliases
# Recognized options: no-cursor, no-title, no-prompt-mark, no-complete, no-cwd.
# Recognized options: no-cursor, no-title, no-prompt-mark, no-complete, no-cwd, no-sudo.
builtin local -a opt
opt=(${(s: :)KITTY_SHELL_INTEGRATION})
builtin unset KITTY_SHELL_INTEGRATION
@@ -388,6 +388,11 @@ _ksi_deferred_init() {
builtin alias edit-in-kitty="kitten edit-in-kitty"
if (( ! opt[(Ie)no-sudo] )); then
# Ensure terminfo is available in sudo
[[ -n "$TERMINFO" ]] && builtin alias sudo="sudo TERMINFO=\"$TERMINFO\""
fi
# Map alt+left/right to move by word if not already mapped. This is expected behavior on macOS and I am tired
# of answering questions about it.
[[ $(builtin bindkey "^[[1;3C") == *" undefined-key" ]] && builtin bindkey "^[[1;3C" "forward-word"