Posso evidenziare la riga del prompt corrente in zsh?


8

È possibile evidenziare (impostare un colore di sfondo) per l'intera riga del prompt in zsh? Nella mia configurazione di emacs ho la linea su cui il cursore si trova di un colore leggermente diverso dallo sfondo della finestra, il che è un grande aiuto visivo. Mi chiedo se sia possibile fare lo stesso nel mio prompt terminal / zsh, in modo che "disegna una linea" efficacemente sotto tutto ciò che è stato eseguito.

Ho provato a impostare il PROMPT='%{$bg[grey]%}# 'mio, .zshrcma l'evidenziazione si estende solo per quanto digito, non al bordo del terminale.

Ciò che sto cercando di ottenere è possibile?

Risposte:


1

Prova a impostare RPROMPT su spazi. Il numero di spazi deve essere la larghezza del terminale (meno i #caratteri e gli altri.)


1
puoi specificare il comando esatto?
kirill_igum,

1

Puoi fare tutto quello che vuoi con la riga di comando * - l'aspetto problematico è che lo sta facendo annullare in seguito. Suppongo che non desideri che ogni singola riga che abbia mai ricevuto un prompt sia visualizzata nei colori del tuo hilight.

In seguito sarebbe quasi più semplice eliminare la riga, ma poi non hai il tuo comando. Forse cancella il prompt e fai eco al comando (con uno pseudo-prompt come $). È possibile che il prompt inizi con una sequenza di salvataggio del cursore ANSI ESC [s, quindi in un precmdripristino ESC [ue cancella tutto dopo il cursore ESC [0J, quindi echo il comando (non ricordo come ottenere il comando dall'interno precmd).

* Questa è una risposta incompleta, non so come rendere oscuro il comando con un colore di sfondo diverso.


1

Se cambio greya white, il tuo esempio funziona davvero per me.

Che terminale stai usando? Forse gestisce la cancellazione del colore di sfondo in modo diverso?

Ecco alcune alternative da provare:

Dai uno sfondo grigio all'intera riga del prompt:

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

(dovrebbe essere lo stesso del tuo esempio, ma un modo diverso di scriverlo.)

Stampa una riga prima del prompt:

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

(Se si cambia "\n"in "\r", dovrebbe sottolineare la riga corrente, ma ciò non sembra funzionare. Immagino che zsh cancelli la riga corrente quando si stampa il prompt, che è ciò che mi porta alla prima soluzione.)

Rendi audaci i comandi (ovvero tutto ciò che scrivi):

setopt promptsubst
preexec() {
    tput sgr0
}
PS1="# $(tput bold)"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.