Posso destacar a linha de prompt atual no zsh?


8

É possível realçar (definir uma cor de fundo) para toda a linha do prompt zsh? Na minha configuração do emacs, tenho a linha na qual o cursor fica com uma cor ligeiramente diferente do fundo da janela, o que é uma grande ajuda visual. Gostaria de saber se é possível fazer o mesmo no meu prompt do terminal / zsh, para que efetivamente "desenhe uma linha" sob tudo o que foi executado.

Eu tentei definir PROMPT='%{$bg[grey]%}# 'no meu, .zshrcmas o destaque só se estende tanto quanto eu digito, não até a borda do terminal.

É o que estou tentando alcançar possível?

Respostas:


1

Tente definir RPROMPT para espaços. A contagem de espaços deve ser a largura do terminal (menos os #e outros caracteres.)


1
você pode especificar o comando exato?
Kirill_igum 28/05

1

Você pode fazer o que quiser com a linha de prompt * - o aspecto problemático é conseguir desfazê- lo posteriormente. Suponho que você não queira que todas as linhas que já foram exibidas sejam exibidas em suas cores do crepúsculo.

Seria quase mais fácil excluir a linha depois, mas você não terá seu comando. Talvez exclua o prompt e repita o comando (com um pseudo-prompt como $). Você pode fazer com que o prompt inicie com uma seqüência de salvamento do cursor ANSI ESC [s, em uma precmdrestauração ESC [ue limpe tudo após o cursor ESC [0Je depois ecoe o comando (não me lembro de como obter o comando por dentro precmd).

* Esta é uma resposta incompleta, não sei como fazer com que ocorra o comando com uma cor de fundo diferente.


1

Se eu mudar greypara white, seu exemplo realmente funciona para mim.

Qual terminal você está usando? Talvez ele lida com a cor de fundo apagar de forma diferente?

Aqui estão algumas alternativas para tentar:

Atribua um fundo cinza a toda a linha de prompt:

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

(deve ser o mesmo que o seu exemplo, mas com uma maneira diferente de escrevê-lo.)

Imprima uma linha antes do prompt:

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

(Se você mudar "\n"para "\r", ele deve sublinhar a linha atual, mas isso parece não funcionar. Acho que o zsh apaga a linha atual ao imprimir o prompt, e foi isso que me levou à primeira solução.)

Torne os comandos (ou seja, tudo o que você digita) em negrito:

setopt promptsubst
preexec() {
    tput sgr0
}
PS1="# $(tput bold)"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.