bash: fix OSC sequences
The function calls where somethimes too slow and the terminal timed out before accepting the entire escape sequence. By constructing the whole string before sending via printf this problem is avoided. I originally noticed this issue when using Alacritty on WSL, where apparently the communication via ConPTY can be a bit slow.
This commit is contained in:
parent
42d7fdf143
commit
655884c3f1
1 changed files with 11 additions and 27 deletions
|
@ -239,23 +239,15 @@ alias dark='_update_colors dark'
|
|||
# In tmux, OSC sequences can be forwarded to the underlying terminal by:
|
||||
# * Wrapping the sequence with `DCS tmux; <sequence> ST`
|
||||
# * Replacing ESC in <sequence> with ESC ESC.
|
||||
_osc_start() {
|
||||
if [ -n "$TMUX" ]; then
|
||||
printf "\ePtmux;\e\e]"
|
||||
else
|
||||
printf "\e]"
|
||||
fi
|
||||
}
|
||||
|
||||
# Either ST or BEL (\a) can be used to end an OSC sequence. However, tmux
|
||||
# requires ST to end its wrapping DCS.
|
||||
_osc_end() {
|
||||
if [ -n "$TMUX" ]; then
|
||||
printf "\a\e\x5c" # 0x5c == backslash
|
||||
_OSC=$(printf "\ePtmux;\e\e]")
|
||||
_ST=$(printf "\a\e\\")
|
||||
else
|
||||
printf "\a"
|
||||
_OSC=$(printf "\e]")
|
||||
_ST=$(printf "\a")
|
||||
fi
|
||||
}
|
||||
|
||||
_update_colors() {
|
||||
export BACKGROUND="$1"
|
||||
|
@ -294,9 +286,7 @@ _set_iterm2_colors() { # 1: foreground, 2: background, 3: cursor
|
|||
local fg="$1" bg="$2" cursor="$3"
|
||||
local key rgb
|
||||
while read -r key rgb; do
|
||||
_osc_start
|
||||
printf "1337;SetColors=%s=%s" "$key" "${rgb}"
|
||||
_osc_end
|
||||
printf "%s1337;SetColors=%s=%s%s" "$_OSC" "$key" "${rgb}" "$_ST"
|
||||
done <<EOL
|
||||
black $Base02_RGB
|
||||
red $Red_RGB
|
||||
|
@ -323,9 +313,7 @@ _set_iterm2_colors() { # 1: foreground, 2: background, 3: cursor
|
|||
curbg $cursor
|
||||
link $Cyan_RGB
|
||||
EOL
|
||||
_osc_start
|
||||
printf "1337;CursorShape=2" # set cursor shape to underline
|
||||
_osc_end
|
||||
printf "%s1337;CursorShape=2%s" "$_OSC" "$_ST" # set cursor shape to underline
|
||||
}
|
||||
|
||||
# Documentation for xterm at https://www.xfree86.org/4.8.0/ctlseqs.html
|
||||
|
@ -338,9 +326,7 @@ _set_xterm_colors() { # $1 foreground, $2 background, $3 cursor
|
|||
# where Ps -> 4;c;spec
|
||||
# c -> index of the ANSI color to change [0..15]
|
||||
# spec -> RGB value of color as rgb:RR/GG/BB
|
||||
_osc_start
|
||||
printf "4;%s;rgb:%s/%s/%s" "$c" "${rgb:0:2}" "${rgb:2:2}" "${rgb:4:2}"
|
||||
_osc_end
|
||||
printf "%s4;%s;rgb:%s/%s/%s%s" "$_OSC" "$c" "${rgb:0:2}" "${rgb:2:2}" "${rgb:4:2}" "$_ST"
|
||||
done <<EOL
|
||||
0 $Base02_RGB
|
||||
1 $Red_RGB
|
||||
|
@ -363,9 +349,7 @@ EOL
|
|||
# Send sequence OSC Ps ; Pt BEL
|
||||
# where Ps -> foreground (10), background (11), or cursor (12)
|
||||
# Pt -> RGB value of color as rgb:RR/GG/BB
|
||||
_osc_start
|
||||
printf "%s;rgb:%s/%s/%s" "$Ps" "${rgb:0:2}" "${rgb:2:2}" "${rgb:4:2}"
|
||||
_osc_end
|
||||
printf "%s%s;rgb:%s/%s/%s%s" "$_OSC" "$Ps" "${rgb:0:2}" "${rgb:2:2}" "${rgb:4:2}" "$_ST"
|
||||
done <<EOL
|
||||
10 $fg
|
||||
11 $bg
|
||||
|
|
Loading…
Add table
Reference in a new issue