mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-27 18:51:41 +02:00
Merge branch 'ksi-bash' of https://github.com/page-down/kitty
This commit is contained in:
@@ -78,7 +78,7 @@ Detailed list of changes
|
|||||||
0.24.3 [future]
|
0.24.3 [future]
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
- BASH integration: No longer modify :file:`~/.bashrc` to load :ref:`shell integration <shell_integration>`.
|
- Bash integration: No longer modify :file:`~/.bashrc` to load :ref:`shell integration <shell_integration>`.
|
||||||
It is recommended to remove the lines used to load the shell integration from :file:`~/.bashrc` as they are no-ops.
|
It is recommended to remove the lines used to load the shell integration from :file:`~/.bashrc` as they are no-ops.
|
||||||
|
|
||||||
- macOS: Allow kitty to handle various URL types. Can be configured via
|
- macOS: Allow kitty to handle various URL types. Can be configured via
|
||||||
|
|||||||
@@ -20,15 +20,14 @@ _ksi_main() {
|
|||||||
|
|
||||||
_ksi_debug_print() {
|
_ksi_debug_print() {
|
||||||
# print a line to STDOUT of parent kitty process
|
# print a line to STDOUT of parent kitty process
|
||||||
builtin local b=$(command base64 <<< "${@}" | tr -d \\n)
|
builtin local b=$(builtin command base64 <<< "${@}")
|
||||||
builtin printf "\eP@kitty-print|%s\e\\" "$b"
|
builtin printf "\eP@kitty-print|%s\e\\" "${b//\\n}"
|
||||||
# "
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_ksi_safe_source() {
|
_ksi_safe_source() {
|
||||||
if [[ -f "$1" && -r "$1" ]]; then
|
if [[ -f "$1" && -r "$1" ]]; then
|
||||||
builtin source "$1";
|
builtin source "$1";
|
||||||
builtin return 0;
|
builtin return 0;
|
||||||
fi
|
fi
|
||||||
builtin return 1;
|
builtin return 1;
|
||||||
}
|
}
|
||||||
@@ -37,15 +36,15 @@ _ksi_main() {
|
|||||||
builtin unset ENV;
|
builtin unset ENV;
|
||||||
if [[ -z "$HOME" ]]; then HOME=~; fi
|
if [[ -z "$HOME" ]]; then HOME=~; fi
|
||||||
if [[ -z "$KITTY_BASH_ETC_LOCATION" ]]; then KITTY_BASH_ETC_LOCATION="/etc"; fi
|
if [[ -z "$KITTY_BASH_ETC_LOCATION" ]]; then KITTY_BASH_ETC_LOCATION="/etc"; fi
|
||||||
if [[ "$KITTY_BASH_INJECT" == *"posix"* ]]; then
|
if [[ "$KITTY_BASH_INJECT" == *"posix"* ]]; then
|
||||||
_ksi_safe_source "$KITTY_BASH_POSIX_ENV" && builtin export ENV="$KITTY_BASH_POSIX_ENV";
|
_ksi_safe_source "$KITTY_BASH_POSIX_ENV" && builtin export ENV="$KITTY_BASH_POSIX_ENV";
|
||||||
else
|
else
|
||||||
set +o posix;
|
builtin set +o posix;
|
||||||
# See run_startup_files() in shell.c in the BASH source code
|
# See run_startup_files() in shell.c in the Bash source code
|
||||||
if builtin shopt -q login_shell; then
|
if builtin shopt -q login_shell; then
|
||||||
if [[ "$KITTY_BASH_INJECT" != *"no-profile"* ]]; then
|
if [[ "$KITTY_BASH_INJECT" != *"no-profile"* ]]; then
|
||||||
_ksi_safe_source "$KITTY_BASH_ETC_LOCATION/profile";
|
_ksi_safe_source "$KITTY_BASH_ETC_LOCATION/profile";
|
||||||
_ksi_safe_source "$HOME/.bash_profile" || _ksi_safe_source "$HOME/.bash_login" || _ksi_safe_source "$HOME/.profile";
|
_ksi_safe_source "$HOME/.bash_profile" || _ksi_safe_source "$HOME/.bash_login" || _ksi_safe_source "$HOME/.profile";
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if [[ "$KITTY_BASH_INJECT" != *"no-rc"* ]]; then
|
if [[ "$KITTY_BASH_INJECT" != *"no-rc"* ]]; then
|
||||||
@@ -65,8 +64,8 @@ _ksi_main() {
|
|||||||
fi
|
fi
|
||||||
builtin unset -f _ksi_safe_source
|
builtin unset -f _ksi_safe_source
|
||||||
|
|
||||||
_ksi_set_mark() {
|
_ksi_set_mark() {
|
||||||
_ksi_prompt["${1}_mark"]="\[\e]133;k;${1}_kitty\a\]"
|
_ksi_prompt["${1}_mark"]="\[\e]133;k;${1}_kitty\a\]"
|
||||||
}
|
}
|
||||||
|
|
||||||
_ksi_set_mark start
|
_ksi_set_mark start
|
||||||
@@ -99,16 +98,16 @@ _ksi_main() {
|
|||||||
fi
|
fi
|
||||||
if [[ -n "${_ksi_prompt[ps1]}" ]]; then
|
if [[ -n "${_ksi_prompt[ps1]}" ]]; then
|
||||||
if [[ "${_ksi_prompt[mark]}" == "y" && ( "${PS1}" == *"\n"* || "${PS1}" == *$'\n'* ) ]]; then
|
if [[ "${_ksi_prompt[mark]}" == "y" && ( "${PS1}" == *"\n"* || "${PS1}" == *$'\n'* ) ]]; then
|
||||||
local oldval=$(builtin shopt -p extglob)
|
builtin local oldval=$(builtin shopt -p extglob)
|
||||||
builtin shopt -s extglob
|
builtin shopt -s extglob
|
||||||
# bash does not redraw the leading lines in a multiline prompt so
|
# bash does not redraw the leading lines in a multiline prompt so
|
||||||
# mark the last line as a secondary prompt. Otherwise on resize the
|
# mark the last line as a secondary prompt. Otherwise on resize the
|
||||||
# lines before the last line will be erased by kitty.
|
# lines before the last line will be erased by kitty.
|
||||||
# the first part removes everything from the last \n onwards
|
# the first part removes everything from the last \n onwards
|
||||||
# the second part appends a newline with the secondary marking
|
# the second part appends a newline with the secondary marking
|
||||||
# the third part appends everything after the last newline
|
# the third part appends everything after the last newline
|
||||||
PS1=${PS1%@('\n'|$'\n')*}${_ksi_prompt[secondary_prompt]}${PS1##*@('\n'|$'\n')};
|
PS1=${PS1%@('\n'|$'\n')*}${_ksi_prompt[secondary_prompt]}${PS1##*@('\n'|$'\n')};
|
||||||
eval "$oldval"
|
builtin eval "$oldval"
|
||||||
fi
|
fi
|
||||||
PS1="${_ksi_prompt[ps1]}$PS1"
|
PS1="${_ksi_prompt[ps1]}$PS1"
|
||||||
fi
|
fi
|
||||||
@@ -121,12 +120,12 @@ _ksi_main() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ "${_ksi_prompt[cursor]}" == "y" ]]; then
|
if [[ "${_ksi_prompt[cursor]}" == "y" ]]; then
|
||||||
_ksi_prompt[ps1_suffix]+="\[\e[5 q\]" # blinking bar cursor
|
_ksi_prompt[ps1_suffix]+="\[\e[5 q\]" # blinking bar cursor
|
||||||
_ksi_prompt[ps0_suffix]+="\[\e[0 q\]" # blinking default cursor
|
_ksi_prompt[ps0_suffix]+="\[\e[0 q\]" # blinking default cursor
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${_ksi_prompt[title]}" == "y" ]]; then
|
if [[ "${_ksi_prompt[title]}" == "y" ]]; then
|
||||||
# see https://www.gnu.org/software/bash/manual/html_node/Controlling-the-Prompt.html#Controlling-the-Prompt
|
# see https://www.gnu.org/software/bash/manual/html_node/Controlling-the-Prompt.html#Controlling-the-Prompt
|
||||||
# we use suffix here because some distros add title setting to their bashrc files by default
|
# we use suffix here because some distros add title setting to their bashrc files by default
|
||||||
_ksi_prompt[ps1_suffix]+="\[\e]2;\w\a\]"
|
_ksi_prompt[ps1_suffix]+="\[\e]2;\w\a\]"
|
||||||
@@ -134,7 +133,7 @@ _ksi_main() {
|
|||||||
_ksi_debug_print "ignoreboth or ignorespace present in bash HISTCONTROL setting, showing running command in window title will not be robust"
|
_ksi_debug_print "ignoreboth or ignorespace present in bash HISTCONTROL setting, showing running command in window title will not be robust"
|
||||||
fi
|
fi
|
||||||
_ksi_get_current_command() {
|
_ksi_get_current_command() {
|
||||||
local last_cmd=$(HISTTIMEFORMAT= builtin history 1)
|
builtin local last_cmd=$(HISTTIMEFORMAT= builtin history 1)
|
||||||
last_cmd="${last_cmd#*[[:digit:]]*[[:space:]]}" # remove leading history number
|
last_cmd="${last_cmd#*[[:digit:]]*[[:space:]]}" # remove leading history number
|
||||||
last_cmd="${last_cmd#"${last_cmd%%[![:space:]]*}"}" # remove remaining leading whitespace
|
last_cmd="${last_cmd#"${last_cmd%%[![:space:]]*}"}" # remove remaining leading whitespace
|
||||||
builtin printf "\e]2;%s\a" "${last_cmd}"
|
builtin printf "\e]2;%s\a" "${last_cmd}"
|
||||||
@@ -142,19 +141,19 @@ _ksi_main() {
|
|||||||
_ksi_prompt[ps0_suffix]+='$(_ksi_get_current_command)'
|
_ksi_prompt[ps0_suffix]+='$(_ksi_get_current_command)'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${_ksi_prompt[mark]}" == "y" ]]; then
|
if [[ "${_ksi_prompt[mark]}" == "y" ]]; then
|
||||||
_ksi_prompt[ps1]+="\[\e]133;A\a\]"
|
_ksi_prompt[ps1]+="\[\e]133;A\a\]"
|
||||||
_ksi_prompt[ps2]+="\[\e]133;A;k=s\a\]"
|
_ksi_prompt[ps2]+="\[\e]133;A;k=s\a\]"
|
||||||
_ksi_prompt[ps0]+="\[\e]133;C\a\]"
|
_ksi_prompt[ps0]+="\[\e]133;C\a\]"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${_ksi_prompt[complete]}" == "y" ]]; then
|
if [[ "${_ksi_prompt[complete]}" == "y" ]]; then
|
||||||
_ksi_completions() {
|
_ksi_completions() {
|
||||||
builtin local src
|
builtin local src
|
||||||
builtin local limit
|
builtin local limit
|
||||||
# Send all words up to the word the cursor is currently on
|
# Send all words up to the word the cursor is currently on
|
||||||
builtin let limit=1+$COMP_CWORD
|
builtin let limit=1+$COMP_CWORD
|
||||||
src=$(builtin printf "%s\n" "${COMP_WORDS[@]:0:$limit}" | command kitty +complete bash)
|
src=$(builtin printf "%s\n" "${COMP_WORDS[@]:0:$limit}" | builtin command kitty +complete bash)
|
||||||
if [[ $? == 0 ]]; then
|
if [[ $? == 0 ]]; then
|
||||||
builtin eval ${src}
|
builtin eval ${src}
|
||||||
fi
|
fi
|
||||||
@@ -164,19 +163,19 @@ _ksi_main() {
|
|||||||
|
|
||||||
# wrap our prompt additions in markers we can use to remove them using
|
# wrap our prompt additions in markers we can use to remove them using
|
||||||
# bash's anemic pattern substitution
|
# bash's anemic pattern substitution
|
||||||
if [[ -n "${_ksi_prompt[ps0]}" ]]; then
|
if [[ -n "${_ksi_prompt[ps0]}" ]]; then
|
||||||
_ksi_prompt[ps0]="${_ksi_prompt[start_mark]}${_ksi_prompt[ps0]}${_ksi_prompt[end_mark]}"
|
_ksi_prompt[ps0]="${_ksi_prompt[start_mark]}${_ksi_prompt[ps0]}${_ksi_prompt[end_mark]}"
|
||||||
fi
|
fi
|
||||||
if [[ -n "${_ksi_prompt[ps0_suffix]}" ]]; then
|
if [[ -n "${_ksi_prompt[ps0_suffix]}" ]]; then
|
||||||
_ksi_prompt[ps0_suffix]="${_ksi_prompt[start_suffix_mark]}${_ksi_prompt[ps0_suffix]}${_ksi_prompt[end_suffix_mark]}"
|
_ksi_prompt[ps0_suffix]="${_ksi_prompt[start_suffix_mark]}${_ksi_prompt[ps0_suffix]}${_ksi_prompt[end_suffix_mark]}"
|
||||||
fi
|
fi
|
||||||
if [[ -n "${_ksi_prompt[ps1]}" ]]; then
|
if [[ -n "${_ksi_prompt[ps1]}" ]]; then
|
||||||
_ksi_prompt[ps1]="${_ksi_prompt[start_mark]}${_ksi_prompt[ps1]}${_ksi_prompt[end_mark]}"
|
_ksi_prompt[ps1]="${_ksi_prompt[start_mark]}${_ksi_prompt[ps1]}${_ksi_prompt[end_mark]}"
|
||||||
fi
|
fi
|
||||||
if [[ -n "${_ksi_prompt[ps1_suffix]}" ]]; then
|
if [[ -n "${_ksi_prompt[ps1_suffix]}" ]]; then
|
||||||
_ksi_prompt[ps1_suffix]="${_ksi_prompt[start_suffix_mark]}${_ksi_prompt[ps1_suffix]}${_ksi_prompt[end_suffix_mark]}"
|
_ksi_prompt[ps1_suffix]="${_ksi_prompt[start_suffix_mark]}${_ksi_prompt[ps1_suffix]}${_ksi_prompt[end_suffix_mark]}"
|
||||||
fi
|
fi
|
||||||
if [[ -n "${_ksi_prompt[ps2]}" ]]; then
|
if [[ -n "${_ksi_prompt[ps2]}" ]]; then
|
||||||
_ksi_prompt[ps2]="${_ksi_prompt[start_mark]}${_ksi_prompt[ps2]}${_ksi_prompt[end_mark]}"
|
_ksi_prompt[ps2]="${_ksi_prompt[start_mark]}${_ksi_prompt[ps2]}${_ksi_prompt[end_mark]}"
|
||||||
fi
|
fi
|
||||||
builtin unset _ksi_prompt[start_mark]
|
builtin unset _ksi_prompt[start_mark]
|
||||||
|
|||||||
Reference in New Issue
Block a user