zsh: fix changing cursor shape in tmux + iTerm2

Most terminals use the VT520 DECSCUSR escape sequences for setting the
cursor shape, documented at:

    https://invisible-island.net/xterm/ctlseqs/ctlseqs.txt

iTerm2, however, uses a set of proprietary escape codes, documented at:

    https://iterm2.com/documentation-escape-codes.html

The issue I had was that tmux recognizes the VT520 DECSCUSR codes and
knows how to translate them itself to iTerm2. But tmux does not accept
the iTerm2 codes as input, so deciding to use these proprietary codes
only based on the presence of `$ITERM_SESSION_ID` did not work when
running tmux. The solution is to revert to the VT520 codes when running
inside of tmux (even inside iTerm2) and let it translate to iTerm2.
This commit is contained in:
Fernando Schauenburg 2022-11-18 20:34:32 +01:00
parent 3b21a2b900
commit fb1b6a3bda

View file

@ -6,7 +6,7 @@ set_cursor_shape() {
local block='\e[1 q' # blinking block local block='\e[1 q' # blinking block
local underline='\e[3 q' # blinking underline, 4 for steady local underline='\e[3 q' # blinking underline, 4 for steady
local bar='\e[5 q' # blinkind bar, 6 for steady local bar='\e[5 q' # blinkind bar, 6 for steady
if [[ -n $ITERM_SESSION_ID ]] { if [[ -n "$ITERM_SESSION_ID" && -z "$TMUX" ]] {
block='\e]1337;CursorShape=0\a' block='\e]1337;CursorShape=0\a'
bar='\e]1337;CursorShape=1\a' bar='\e]1337;CursorShape=1\a'
underline='\e]1337;CursorShape=2\a' underline='\e]1337;CursorShape=2\a'