Comment changer la forme, la couleur et le clignotement du curseur de la console Linux?

23

Je sais que je peux changer certains paramètres fondamentaux de la console Linux, des choses comme les polices, par exemple, avec dpkg-reconfigure console-setup.

Mais je voudrais changer des choses comme le taux de clignotement, la couleur et la forme (je veux que mon curseur soit un bloc, à tout moment). J'ai vu des gens accomplir cela. Je n'ai tout simplement jamais eu la chance de demander à ces gens comment procéder.

Je ne veux pas dire les fenêtres de l'émulateur de terminal, je veux dire la console texte Linux, vous atteignez avec Ctrl+ Alt+F-key

J'utilise Linux Mint pour le moment, qui est un dérivé de Debian. J'aimerais aussi savoir comment faire cela à Fedora.


Edit: je pourrais être sur quelque chose

J'ai appris de ce site Web , comment faire les changements dont j'ai besoin. Mais je n'ai pas encore fini.

J'ai décidé d'utiliser echo -e "\e[?16;0;200c"pour l'instant, mais j'ai un problème: lorsque vous exécutez des applications comme vimou irssi, ou que vous attachez une session d'écran, le curseur redevient un trait de soulignement gris clignotant.

Et bien sûr, cela ne fonctionne que sur celle-ci, ttytoutes les autres consoles de texte ne sont pas affectées.

Alors, comment puis-je rendre ces changements permanents? Comment puis-je les remplir sur d'autres consoles?

polémon
la source
1
Vous voudrez peut-être vérifier setterm(1)et set(1P).
@htor et comment exactement? J'utilise settermpour désactiver le bip de la console, mais comment dois-je définir les formes du curseur? En fait, settermc'était le premier endroit où j'ai regardé avant de trouver la séquence d'échappement.
polemon
Je voulais juste un moyen rapide de restaurer un terminal piraté. Le commentaire de @ user13742 a fonctionné pour moi: setterm -cursor on
qneill

Réponses:

12

GitHub Gist: Comment changer la forme, la couleur et le clignotement du curseur de la console Linux

Je définis les paramètres de formatage du curseur suivants dans mon .bashrcfichier (ou /etc/bashrc):

##############
# pretty prompt and font colors
##############

# alter the default colors to make them a bit prettier
echo -en "\e]P0000000" #black
echo -en "\e]P1D75F5F" #darkred
echo -en "\e]P287AF5F" #darkgreen
echo -en "\e]P3D7AF87" #brown
echo -en "\e]P48787AF" #darkblue
echo -en "\e]P5BD53A5" #darkmagenta
echo -en "\e]P65FAFAF" #darkcyan
echo -en "\e]P7E5E5E5" #lightgrey
echo -en "\e]P82B2B2B" #darkgrey
echo -en "\e]P9E33636" #red
echo -en "\e]PA98E34D" #green
echo -en "\e]PBFFD75F" #yellow
echo -en "\e]PC7373C9" #blue
echo -en "\e]PDD633B2" #magenta
echo -en "\e]PE44C9C9" #cyan
echo -en "\e]PFFFFFFF" #white
clear #for background artifacting

# set the default text color. this only works in tty (eg $TERM == "linux"), not pts (eg $TERM == "xterm")
setterm -background black -foreground green -store

# http://linuxgazette.net/137/anonymous.html
cursor_style_default=0 # hardware cursor (blinking)
cursor_style_invisible=1 # hardware cursor (blinking)
cursor_style_underscore=2 # hardware cursor (blinking)
cursor_style_lower_third=3 # hardware cursor (blinking)
cursor_style_lower_half=4 # hardware cursor (blinking)
cursor_style_two_thirds=5 # hardware cursor (blinking)
cursor_style_full_block_blinking=6 # hardware cursor (blinking)
cursor_style_full_block=16 # software cursor (non-blinking)

cursor_background_black=0 # same color 0-15 and 128-infinity
cursor_background_blue=16 # same color 16-31
cursor_background_green=32 # same color 32-47
cursor_background_cyan=48 # same color 48-63
cursor_background_red=64 # same color 64-79
cursor_background_magenta=80 # same color 80-95
cursor_background_yellow=96 # same color 96-111
cursor_background_white=112 # same color 112-127

cursor_foreground_default=0 # same color as the other terminal text
cursor_foreground_cyan=1
cursor_foreground_black=2
cursor_foreground_grey=3
cursor_foreground_lightyellow=4
cursor_foreground_white=5
cursor_foreground_lightred=6
cursor_foreground_magenta=7
cursor_foreground_green=8
cursor_foreground_darkgreen=9
cursor_foreground_darkblue=10
cursor_foreground_purple=11
cursor_foreground_yellow=12
cursor_foreground_white=13
cursor_foreground_red=14
cursor_foreground_pink=15

cursor_styles="\e[?${cursor_style_full_block};${cursor_foreground_black};${cursor_background_green};c" # only seems to work in tty

# http://www.bashguru.com/2010/01/shell-colors-colorizing-shell-scripts.html
prompt_foreground_black=30
prompt_foreground_red=31
prompt_foreground_green=32
prompt_foreground_yellow=33
prompt_foreground_blue=34
prompt_foreground_magenta=35
prompt_foreground_cyan=36
prompt_foreground_white=37

prompt_background_black=40
prompt_background_red=41
prompt_background_green=42
prompt_background_yellow=43
prompt_background_blue=44
prompt_background_magenta=45
prompt_background_cyan=46
prompt_background_white=47

prompt_chars_normal=0
prompt_chars_bold=1
prompt_chars_underlined=4 # doesn't seem to work in tty
prompt_chars_blinking=5 # doesn't seem to work in tty
prompt_chars_reverse=7

prompt_reset=0

#start_prompt_coloring="\e[${prompt_chars_bold};${prompt_foreground_black};${prompt_background_green}m"
start_prompt_styles="\e[${prompt_chars_bold}m" # just use default background and foreground colors
end_prompt_styles="\e[${prompt_reset}m"

PS1="${start_prompt_styles}[\u@\h \W] \$${end_prompt_styles}${cursor_styles} "

##############
# end pretty prompt and font colors
##############
Mulllhausen
la source
2
+1 pour m'avoir littéralement attendu des années avant que quelqu'un arrive avec ça. Merci mec!
polemon
1
Dans mon cas, le bleu était 32, le vert 64et le rouge 128. Pour obtenir les autres couleurs, il vous suffit de les additionner. Par exemple, cyan = bleu + vert. Par conséquent, pour obtenir le cyan 32 + 64 = 96, vous devez donc écrire 96. Blanc = rouge + vert + bleu. Par conséquent, dans mon cas, le blanc est 32 + 64 + 128 = 224.
Utku
-bash: setterm: command not founderreur sur macOS Mojave 10.14.2 ?
Dut A.
7

La plupart des applications utilisent la capacité cnorm pour remettre le curseur à l'état "normal". Par défaut, c'est le soulignement clignotant. Mais vous pouvez remplacer cela dans votre terminfo. Cela devrait corriger la plupart des applications (vim, tmux, etc.). Émettez ces commandes:

infocmp -A /usr/share/terminfo linux > linux
patch -lp1 <<EOF
--- a/linux
+++ b/linux
@@ -4,7 +4,7 @@ linux|linux console,
    colors#8, it#8, ncv#18, pairs#64,
    acsc=+\020\,\021-\030.^Y0\333\`\004a\261f\370g\361h\260i\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
    bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l\E[?1c,
-   clear=\E[H\E[J, cnorm=\E[?25h\E[?0c, cr=^M,
+   clear=\E[H\E[J, cnorm=\E[?25h\E[?48;0;32c, cr=^M,
    csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
    cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
    cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
EOF
tic linux
rm linux

Modifiez le patch ci-dessus selon vos besoins. Cela devrait créer ~ / .terminfo / l / linux qui devrait être repris par la plupart des applications de terminal.

ypsu
la source
3

Si vous utilisez bash, vous pouvez utiliser PROMPT_COMMAND qui exécutera une commande après chaque commande. Mettez ce qui suit dans votre .bashrc

PROMPT_COMMAND='echo -e "\e[?16;0;200c"'
Silverrocker
la source
J'étais presque en train de m'installer sur quelque chose comme ça, mais je suis sûr que je peux accomplir ce que je veux avec quelque chose comme une option de noyau ou autre chose.
polemon
Ou mettez PROMPT_COMMAND='echo -e "\033[?16;0;224c"'si vous voulez un bloc blanc solide qui ne clignote pas, au lieu d'un bloc orange.
Utku