Como alterar o tema do cursor na CLI?

5

Eu quero mudar o cursor para ser em forma de bloco.

Todos os aplicativos (nano, vi, vim,…) devem ter um cursor de estilo quadrado, como a imagem acima.

    
por Hidden Lynx 13.02.2014 / 10:34

3 respostas

5

O cursor é desenhado pelo terminal ou emulador de terminal, não pelos aplicativos em execução dentro deles. Alguns deles têm disposição para permitir que o usuário altere a forma ou os atributos do cursor usando sequências de escape.

Alterar a forma do cursor independentemente do tipo do terminal pode ser feito usando os recursos cnorm (cursor normal), civis (cursor invisível) ou cvvis (cursor muito visível) terminfo (por exemplo, usando o comando tput ). No entanto, você não tem nenhuma garantia de que cnorm ou cvvis seja um cursor bloco .

Para afetar o piscar de olhos, a forma, a cor e o comportamento do cursor especificamente, isso terá que ser feito em uma base por terminal.

No Linux em PCs x86 VGA e consoles virtuais de buffer de quadro, ele pode ser controlado usando seqüências de escape como:

printf '\e[?x;y;zc'

Na forma mais simples:

printf '\e[?xc'

Você define a altura do cursor onde x varia de 1 (cursor invisível) a 8 (bloco inteiro), 0 dando a você o padrão (atualmente, o mesmo que 2 ).

Então:

printf '\e[?8c'

lhe dará um cursor de bloco completo.

Na verdade, é isso que tput cvvis envia (enquanto tput cnorm envia \e[0c e civis \e[1c ).

Ao usar o formulário de 3 parâmetros, o comportamento irá variar com o driver de vídeo subjacente. Por exemplo, para obter um tipo de cursor de bloco cinza não intermitente, como sugere a sua pergunta, você faria:

printf '\e[?81;128;240c'

Em um console PC VGA Linux. E:

printf '\e[?17;30;254c'

Em um console Linux de buffer de quadros.

Agora, isso era específico do Linux, outros terminais têm maneiras diferentes de alterar a forma do cursor. Por exemplo, xterm e rxvt e suas derivadas usam as mesmas seqüências do terminal VT520 para definir a forma do cursor:

printf '\e[x q'

Em que x recebe um valor de 1 a 4 para bloco piscante, bloco fixo, sublinhado intermitente, sublinhado constante.

E a cor pode ser definida com:

printf '\e]12;%s\a' 'colour'

Assim, seu cursor de bloco fixo e cinza pode ser alcançado com:

printf '\e[2 q\e]12;grey\a'

Para a maioria dos emuladores de terminal X11, você também pode alterar os atributos do cursor via opções de linha de comando para o comando que inicia o emulador ou via arquivos de configuração ou recursos do X11, ou menus.

Por exemplo, para xterm , você tem a opção -uc/+uc para o cursor sublinhado , -ms para sua cor e cursorBlink , cursorColor , cursorOffTime , cursorOnTime , cursorUnderLine , alwaysHighlight recursos para configurá-lo.

E o menu padrão na Ctrl + clique esquerdo tem uma opção para ativar ou desativar a intermitência.

    
por 13.02.2014 / 14:57
1

A partir de hoje, a versão atual a ge tty (contida em util-linux 2.27.1 [util-linux é o pacote linux que fornece a maioria dos comandos principais, como login , su , mount , more , kill - para citar alguns] - e você deve tê-lo se sua versão do kernel do Linux for > = 4.4) tiver um comportamento diferente do descrito em documentação do kernel.org a ser atualizada ( Cursor de software para VGA ).

Considere

echo -n -e '\e[? byte1 ; byte2 ; byte3 c'

byte1:

+---------------+---------------+
|  high nibble  |   low nibble  |
+---+-----------+-----------+---+
|msb|           |           |lsb|
+---+---+---+---+---+---+---+---+
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+---+---+---+---+---+---+---+---+
                  |   |   |   |
                  |   |   |   +-+
                  |   |   |     |   These bits specify the 8
                  |   |   +-----+-> possible  blinking HW caret
                  |   |         |   
                  |   +---------+
                  |
                  +---------------> When set, this bit enables SW
                                    caret instead of HW caret

byte2 (SW caret):

                +-----------------> A pretty useless mask applied
                |                   to bits in byte3
+---------------+---------------+
|  high nibble  |   low nibble  |
+---+-----------+-----------+---+
|msb|           |           |lsb|
+---+---+---+---+---+---+---+---+
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+---+---+---+---+---+---+---+---+

byte3 (SW caret):

+---------------+---------------+
|  high nibble  |   low nibble  |
+---+-----------+-----------+---+
|msb|           |           |lsb|
+---+---+---+---+---+---+---+---+
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+---+---+---+---+---+---+---+---+
  |   |   |   |
  |   |   |   +-------------------> Highlighting
  |   |   |
  |   |   +---------------------+
  |   |                         |
  |   +-------------------------+-> Color
  |                             |
  +-----------------------------+

Realce: realça o caractere abaixo do cursor (por exemplo, alterando-o para branco [verdadeiro branco brilhante] em vez de branco escuro [o cinza claro que geralmente é o padrão para TTYs]).

Cor: a cor do cursor. Note que, em comparação com a ordem usual de códigos de cores ANSI que todos conhecemos e amamos, os bits são invertidos, então - para este trio - o 7º é o l sb enquanto o 5º é o m sb.

Assim, enquanto nos anos 70 a ANSI definiu os seguintes códigos de cores, definindo um padrão de facto adotado universalmente para TTYs, diversos terminais Linux, consoles e outras coisas

0 black
1 red
2 green
3 yellow or dark yellow
4 blue or dark blue
5 magenta, purple or violet
6 cyan or light blue
7 white or dark white (light gray)

neste caso, temos o oposto

7 white or dark white (light gray)
6 cyan or light blue
5 magenta, purple or violet
etc.

Então, aqui vem a lista:

#Hardware carets (blinking and [dark ]white)
echo -n -e '\e[?0c' #default caret
echo -n -e '\e[?1c' #invisible caret
echo -n -e '\e[?2c' #underscore caret
echo -n -e '\e[?3c' #thicker underscore caret
echo -n -e '\e[?4c' #smaller block caret
echo -n -e '\e[?5c' #small block caret
echo -n -e '\e[?6c' #big block caret
echo -n -e '\e[?7c' #biggest block caret
#On my Linux machine, both 6 and 7 are the big rectangular full-size block caret

#Software carets (non-blinking and colored)
echo -n -e '\e[?16;0;0c'  #00001000 0 00000000 black (thus invisible on black background)
echo -n -e '\e[?16;0;128c'#00001000 0 10000000 red
echo -n -e '\e[?16;0;64c' #00001000 0 01000000 green
echo -n -e '\e[?16;0;192c'#00001000 0 11000000 yellow
echo -n -e '\e[?16;0;32c' #00001000 0 00100000 blue
echo -n -e '\e[?16;0;160c'#00001000 0 10100000 magenta
echo -n -e '\e[?16;0;96c' #00001000 0 01100000 cyan
echo -n -e '\e[?16;0;224c'#00001000 0 11100000 dim white
echo -n -e '\e[?16;0;16c' #00001000 0 00010000 black     + highlighting
echo -n -e '\e[?16;0;144c'#00001000 0 10010000 red       + highlighting
echo -n -e '\e[?16;0;80c' #00001000 0 01010000 green     + highlighting
echo -n -e '\e[?16;0;208c'#00001000 0 11010000 yellow    + highlighting
echo -n -e '\e[?16;0;48c' #00001000 0 00110000 blue      + highlighting
echo -n -e '\e[?16;0;176c'#00001000 0 10110000 magenta   + highlighting
echo -n -e '\e[?16;0;112c'#00001000 0 01110000 cyan      + highlighting
echo -n -e '\e[?16;0;240c'#00001000 0 11110000 dim white + highlighting
    
por 12.08.2016 / 04:01
0

Execute o seguinte comando no prompt ou adicione-o aos seus scripts de login:

echo -e '3[?6c'

As seqüências de escape são usadas para controlar a formatação de saída no terminal. echo -e diz interpretar caracteres de escape - neste caso \ 033 é interpretado como uma sequência ESC (033 é o código ASCII para ESC). Os Códigos de escape ANSI podem controlar tudo, desde taxa de intermitência, cor e outros aspectos da saída do terminal.

    
por 13.02.2014 / 12:02

Tags