Puis-je mettre en surbrillance la ligne d'invite actuelle dans zsh?


8

Est-il possible de mettre en surbrillance (définir une couleur d'arrière-plan) pour toute la ligne de l'invite dans zsh? Dans ma configuration emacs, j'ai la ligne sur laquelle le curseur se trouve d'une couleur légèrement différente de l'arrière-plan de la fenêtre, ce qui est d'une grande aide visuelle. Je me demande s'il est possible de faire la même chose dans mon invite terminal / zsh, afin qu'elle "dessine effectivement une ligne" sous tout ce qui a été exécuté.

J'ai essayé de définir PROMPT='%{$bg[grey]%}# 'mon, .zshrcmais le point culminant ne s'étend que dans la mesure où je tape, pas jusqu'au bord du terminal.

Ce que j'essaie de réaliser est-il possible?

Réponses:


1

Essayez de définir RPROMPT sur des espaces. Le nombre d'espaces doit être la largeur du terminal (moins les caractères #et autres).


1
pouvez-vous spécifier la commande exacte?
kirill_igum

1

Vous pouvez faire tout ce que vous voulez avec la ligne d'invite * - l'aspect problématique est de le faire annuler ensuite. Je suppose que vous ne voulez pas que chaque ligne qui ait déjà reçu une invite s'affiche dans vos couleurs hilight.

Il serait presque plus facile de supprimer la ligne par la suite, mais alors vous n'avez pas votre commande. Supprimez peut-être l'invite, puis faites écho à la commande (avec une pseudo-invite comme $). Vous pouvez demander à l'invite de commencer par une séquence de sauvegarde du curseur ANSI ESC [s, puis de la precmdrestaurer ESC [uet de tout effacer après le curseur ESC [0J, puis de répéter la commande (je ne me souviens pas comment obtenir la commande de l'intérieur precmd).

* Ceci est une réponse incomplète, je ne sais pas comment rendre la commande hilight dans une couleur d'arrière-plan différente.


1

Si je change greypour white, votre exemple fonctionne réellement pour moi.

Quel terminal utilisez-vous? Peut-être qu'il gère différemment l'effacement des couleurs d'arrière-plan?

Voici quelques alternatives à essayer:

Donnez à la ligne d'invite entière un arrière-plan gris:

setopt promptsubst
preexec() {
    tput sgr0
}
PS1="$(tput setab 7)# "

(devrait être le même que votre exemple, mais une manière différente de l'écrire.)

Imprimez une ligne avant l'invite:

precmd() {
    tput smul
    for ((n=0; n<COLUMNS; n++)) { printf " "; }
    printf "\n"
}
preexec() {
    tput sgr0
}

(Si vous passez "\n"à "\r", cela devrait souligner la ligne actuelle, mais cela ne semble pas fonctionner. Je suppose que zsh efface la ligne actuelle lors de l'impression de l'invite, ce qui m'amène à la première solution.)

Mettez les commandes (c'est-à-dire tout ce que vous tapez) en gras:

setopt promptsubst
preexec() {
    tput sgr0
}
PS1="# $(tput bold)"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.