¿Puedo resaltar la línea de solicitud actual en zsh?

8

¿Es posible resaltar (establecer un color de fondo) para toda la línea de la solicitud zsh? En mi configuración de emacs tengo la línea en la que el cursor se encuentra en un color ligeramente diferente al fondo de la ventana, lo cual es una gran ayuda visual. Me pregunto si es posible hacer lo mismo en mi terminal / zsh, para que efectivamente "dibuje una línea" debajo de todo lo que se ha ejecutado.

He intentado configurar PROMPT='%{$bg[grey]%}# 'en mi .zshrcpero el resaltado solo se extiende hasta donde escribo, no hasta el borde del terminal.

¿Es posible lo que estoy tratando de lograr?

Phillip B Oldham
fuente

Respuestas:

1

Intenta configurar RPROMPT en espacios. El recuento de espacios será el ancho del terminal (menos los #y otros caracteres).

Chris Warrick
fuente
1
¿Puedes especificar el comando exacto?
kirill_igum
1

Puede hacer lo que quiera con la línea de solicitud *: el aspecto problemático es conseguir que deshaga después. Supongo que no desea que todas las líneas que alguna vez hayan tenido un mensaje se muestren en los colores del crepúsculo.

Casi sería más fácil eliminar la línea después, pero entonces no tienes tu comando. Tal vez elimine el mensaje y luego repita el comando (con un pseudo aviso como $). Podría hacer que la solicitud comience con una secuencia de guardado del cursor ANSI ESC [s, luego en una precmdrestauración ESC [uy borre todo después del cursor ESC [0J, luego repita el comando (no recuerdo cómo obtener el comando desde adentroprecmd ).

* Esta es una respuesta incompleta, no sé cómo hacer que resalte el comando en un color de fondo diferente.

Aleatorio832
fuente
1

Si cambio greya white, su ejemplo realmente funciona para mí.

¿Qué terminal estás usando? ¿Quizás maneja el borrado del color de fondo de manera diferente?

Aquí hay algunas alternativas para probar:

Dé a toda la línea de solicitud un fondo gris:

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

(debe ser el mismo que su ejemplo, pero una forma diferente de escribirlo).

Imprima una línea antes de la solicitud:

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

(Si cambia "\n"a "\r", debería subrayar la línea actual, pero eso no parece funcionar. Supongo que zsh borra la línea actual al imprimir el mensaje, que es lo que me lleva a la primera solución).

Haga los comandos (es decir, todo lo que escriba) en negrita

setopt promptsubst
preexec() {
    tput sgr0
}
PS1="# $(tput bold)"
Mikel
fuente