ttyカーソルの形を下線からブロックに変更したいと思います。私はこれを試しました:
if [[ "$TERM" == "linux" ]]; then
echo -e -n "\x1b[\x32 q";
fi
gnome-terminal では動作しますが、tty では動作しません。
答え1
見ているhttps://www.kernel.org/doc/html/latest/admin-guide/vga-softcursor.html:
The cursor appearance is controlled by a ``<ESC>[?1;2;3c`` escape sequence
where 1, 2 and 3 are parameters described below. If you omit any of them,
they will default to zeroes.
first Parameter
specifies cursor size::
0=default
1=invisible
2=underline,
...
8=full block
+ 16 if you want the software cursor to be applied
+ 32 if you want to always change the background color
+ 64 if you dislike having the background the same as the
foreground.
Highlights are ignored for the last two flags.
second parameter
selects character attribute bits you want to change
(by simply XORing them with the value of this parameter). On standard
VGA, the high four bits specify background and the low four the
foreground. In both groups, low three bits set color (as in normal
color codes used by the console) and the most significant one turns
on highlight (or sometimes blinking -- it depends on the configuration
of your VGA).
third parameter
consists of character attribute bits you want to set.
Bit setting takes place before bit toggling, so you can simply clear a
bit by including it in both the set mask and the toggle mask.
Examples
--------
To get normal blinking underline, use::
echo -e '\033[?2c'
To get blinking block, use::
echo -e '\033[?6c'
To get red non-blinking block, use::
echo -e '\033[?17;0;64c'
答え2
printf '\033[?112c'
(112
)0x70
は、「ソフトブロックカーソル」(0x10
)+「背景の変更」(0x20
)+「前景が背景とは異なります」(0x40
)を意味します。
これにより、その位置の文字セルのプロパティに関係なく、カーソルが常に表示されます。
望ましくない場合、または終了時にカーソルをデフォルトの「点滅下線」にリセットした場合は、次のこともできますvim
。emacs
infocmp linux |
sed 's/cnorm=[^,]*/cnorm=\\033[25h\\033[?112c/' |
tic -
このエスケープでは、2つの追加引数を使用して文字セルの色と属性を変更することもできます(上記のfg / bg区別変換前)。 2番目の引数は、どのビットが必要かを示します。置く、最初のビットは次のようになります。切り替え、第二適用今後最初。ビットの意味はVGA プロパティ、呪い/ANSI色ではなく色です。たとえば(デフォルトのカラーパレットなどを想定):
# usage: set_cursor attributes
set_cursor(){ printf '\033[?112;%d;255c' "$((~$1 & 255))"; }
# set + toggle = clear all bits except those present in the argument
set_cursor $((0x80 | 0x8 | 0x40 | 0x6 ))
# hi bg | hi fg | red bg | brown fg = "yellow" fg upon "pink" bg
Stackexchangeの答えを理解しようとする代わりに、ソースコードを見てみましょう。add_softcursor()
そして\e[?c
分析する。