From 914f4e9ec9a1fa010b94abd867f06a845425dc30 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 14 Jan 2022 22:42:29 +0530 Subject: [PATCH] Dont break if user aliases or redefines various builtins we use --- shell-integration/bash/kitty.bash | 45 ++++++++++++++++--------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/shell-integration/bash/kitty.bash b/shell-integration/bash/kitty.bash index df7068216..0e0c8420c 100644 --- a/shell-integration/bash/kitty.bash +++ b/shell-integration/bash/kitty.bash @@ -2,27 +2,28 @@ # this is defined outside _ksi_main to make it global without using declare -g # which is not available on older bash -declare -A _ksi_prompt=( [cursor]='y' [title]='y' [mark]='y' [complete]='y' [ps0]='' [ps1]='' [ps2]='' ) +builtin declare -A _ksi_prompt +_ksi_prompt=( [cursor]='y' [title]='y' [mark]='y' [complete]='y' [ps0]='' [ps1]='' [ps2]='' ) _ksi_main() { - if [[ $- != *i* ]] ; then return; fi # check in interactive mode - if [[ -z "$KITTY_SHELL_INTEGRATION" ]]; then return; fi - set -f + if [[ $- != *i* ]] ; then builtin return; fi # check in interactive mode + if [[ -z "$KITTY_SHELL_INTEGRATION" ]]; then builtin return; fi + builtin set -f for i in ${KITTY_SHELL_INTEGRATION[@]}; do - set +f + builtin set +f if [[ "$i" == "no-cursor" ]]; then _ksi_prompt[cursor]='n'; fi if [[ "$i" == "no-title" ]]; then _ksi_prompt[title]='n'; fi if [[ "$i" == "no-prompt-mark" ]]; then _ksi_prompt[mark]='n'; fi if [[ "$i" == "no-complete" ]]; then _ksi_prompt[complete]='n'; fi done - set +f + builtin set +f - unset KITTY_SHELL_INTEGRATION + builtin unset KITTY_SHELL_INTEGRATION _ksi_debug_print() { # print a line to STDOUT of parent kitty process - local b=$(printf "%s\n" "$1" | base64 | tr -d \\n) - printf "\eP@kitty-print|%s\e\\" "$b" + builtin local b=$(builtin printf "%s\n" "$1" | base64 | tr -d \\n) + builtin printf "\eP@kitty-print|%s\e\\" "$b" # " } @@ -34,7 +35,7 @@ _ksi_main() { _ksi_set_mark end _ksi_set_mark start_secondary _ksi_set_mark end_secondary - unset -f _ksi_set_mark + builtin unset -f _ksi_set_mark _ksi_prompt[secondary_prompt]="\n${_ksi_prompt[start_secondary_mark]}\[\e]133;A;k=s\a\]${_ksi_prompt[end_secondary_mark]}" _ksi_prompt_command() { @@ -82,16 +83,16 @@ _ksi_main() { if [[ "${_ksi_prompt[complete]}" == "y" ]]; then _ksi_completions() { - local src - local limit + builtin local src + builtin local limit # Send all words up to the word the cursor is currently on - let limit=1+$COMP_CWORD - src=$(printf "%s\n" "${COMP_WORDS[@]: 0:$limit}" | kitty +complete bash) + builtin let limit=1+$COMP_CWORD + src=$(builtin printf "%s\n" "${COMP_WORDS[@]: 0:$limit}" | kitty +complete bash) if [[ $? == 0 ]]; then - eval ${src} + builtin eval ${src} fi } - complete -o nospace -F _ksi_completions kitty + builtin complete -o nospace -F _ksi_completions kitty fi # wrap our prompt additions in markers we can use to remove them using @@ -105,10 +106,10 @@ _ksi_main() { if [[ -n "${_ksi_prompt[ps2]}" ]]; then _ksi_prompt[ps2]="${_ksi_prompt[start_mark]}${_ksi_prompt[ps2]}${_ksi_prompt[end_mark]}" fi - unset _ksi_prompt[start_mark] - unset _ksi_prompt[end_mark] - unset _ksi_prompt[start_secondary_mark] - unset _ksi_prompt[end_secondary_mark] + builtin unset _ksi_prompt[start_mark] + builtin unset _ksi_prompt[end_mark] + builtin unset _ksi_prompt[start_secondary_mark] + builtin unset _ksi_prompt[end_secondary_mark] # install our prompt command, using an array if it is unset or already an array, # otherwise append a string @@ -121,6 +122,6 @@ _ksi_main() { fi } _ksi_main -unset -f _ksi_main +builtin unset -f _ksi_main # freeze _ksi_prompt to prevent it from being changed -declare -r _ksi_prompt +builtin declare -r _ksi_prompt