tty에서 커서 모양을 변경하는 방법은 무엇입니까?

tty에서 커서 모양을 변경하는 방법은 무엇입니까?

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 -

이 이스케이프는 또한 두 개의 추가 인수를 사용하여 문자 셀의 색상과 속성을 수정할 수 있습니다(위에서 언급한 fg/bg 구별 변환 전). 두 번째 인수는 어떤 비트가 있어야 하는지 알려줍니다.놓다, 첫 번째 비트는 다음과 같아야 합니다.전환됨, 두 번째 적용앞으로첫 번째. 비트의 뜻은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분석하다.

관련 정보