diff --git a/src/shell-integration/bash/ghostty.bash b/src/shell-integration/bash/ghostty.bash index 8557e82f9..aa65445f5 100644 --- a/src/shell-integration/bash/ghostty.bash +++ b/src/shell-integration/bash/ghostty.bash @@ -98,8 +98,19 @@ function __ghostty_precmd() { _GHOSTTY_SAVE_PS2="$PS2" # Marks - PS1=$PS1'\[\e]133;B\a\]' - PS2=$PS2'\[\e]133;B\a\]' + PS1='\[\e]133;P;k=i\a\]'$PS1'\[\e]133;B\a\]' + PS2='\[\e]133;P;k=s\a\]'$PS2'\[\e]133;B\a\]' + + if [[ "${PS1}" == *"\n"* || "${PS1}" == *$'\n'* ]]; then + # bash doesn't redraw the leading lines in a multiline prompt so + # mark the last line as a secondary prompt (k=s) to prevent the + # preceding lines from being erased by ghostty after a resize. + builtin local oldval + oldval=$(builtin shopt -p extglob) + builtin shopt -s extglob + PS1=${PS1%@('\n'|$'\n')*}'\n\[\e]133;P;k=s\a\]'${PS1##*@('\n'|$'\n')} + builtin eval "$oldval" + fi # Cursor if test "$GHOSTTY_SHELL_INTEGRATION_NO_CURSOR" != "1"; then