通常モード/挿入モードを示すためにzshでカーソルカラーを使用しようとしていますが、通常モードではカーソルカラーは挿入モードのデフォルトカラーにリセットされません。
ソースは次のとおりです。
# color cursor
zle-keymap-select () {
if [ $KEYMAP = vicmd ]; then
echo -ne "\033]12;Cyan\e[2 q\033[m"
else
echo -ne "\e[2 q\033[m"
zle -K viins
fi
}
zle -N zle-keymap-select
zle-line-init () {
zle -K viins
echo -ne "\e[2 q\033[m"
}
zle -N zle-line-init
_fix_cursor() {
echo -ne "\e[2 q\033[m"
}
precmd_functions+=(_fix_cursor)
私が使用する端末エミュレータは敏捷性です。
tmux 内で zsh を使用すると、それに応じて色が変わりますが、tmux 外ではカーソルの色は変わりません。
答え1
どの端末エミュレータを使用しているかわかりませんが、xterm
似たような端末でテキストカーソルの色を設定する手順は次のとおりです。\e]12;Cyan\a
。
デフォルト値にリセットする方法は次のとおりです。\e]112\a
\e[2 q
形状を設定することです。安定化ブロック。
\e[m
すべてのテキストレンダリングプロパティ(太字、下線、強調、前景色、背景色...)をデフォルト値にリセットします。適切なプロンプト文字列定義があれば必要ありません。
編集する、alacritty
(現在使用中の端末であることを確認しました)\e]12;color\a
エスケープシーケンスは実際にサポートされています#XXX
、名前のみを使用し#XXXXXX
たり、rgb:XX/XX/XX
形式(独自の制限を使用する形式)で色を指定したりすることはサポートされていません。xparse_color
XParseColor()
、クロスプラットフォームなのでX11を呼び出すことができないようです、またはそこにCyan
置き換える必要があります(呼び出しターミナルもそれをサポートする必要があります)。#0ff
#00ffff
rbg:0/ff/ff
XParseColor()
動作する理由tmux
(最新バージョンのみ)は、実際にホスト端末にtmux
変換し、たとえば、次のように出力をキャプチャするとホスト端末を観察できることです。\e]12;Cyan\a
\e]12;rgb:00/ff/ff\a
script
だから:
_reset_cursor_color() printf '\e]112\a'
zle-keymap-select() {
if [[ $KEYMAP = vicmd ]]; then
printf '\e]12;#0ff\a'
else
_reset_cursor_color
fi
}
zle -N zle-keymap-select
zle-line-init() zle -K viins
zle -N zle-line-init
precmd_functions+=(_reset_cursor_color)