Posso destacar a linha de prompt atual em zsh?

8

É possível destacar (definir uma cor de fundo) para toda a linha do prompt em zsh ? Na minha configuração do emacs eu tenho a linha na qual o cursor tem uma cor ligeiramente diferente do fundo da janela, que é uma ótima ajuda visual. Eu estou querendo saber se é possível fazer o mesmo no meu terminal / zsh prompt, de modo que ele efetivamente "desenha uma linha" sob everthing que foi executado.

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

O que estou tentando conseguir é possível?

    
por Phillip B Oldham 06.04.2011 / 23:26

3 respostas

1

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

    
por 21.04.2011 / 16:09
1

Você pode fazer o que quiser com a linha de prompt * - o aspecto problemático é fazer com que desfaça depois. Eu suponho que você não quer cada linha que já teve um aviso sobre ele exibido nas cores do seu hilight.

Seria quase mais fácil excluir a linha depois, mas você não tem o seu comando. Talvez exclua o prompt, em seguida, repita o comando (com um pseudo-prompt como $ ). Você poderia ter o prompt começar com uma sequência de salvamento do cursor ANSI ESC [s , em seguida, em precmd restaurar ESC [u e limpar tudo depois do cursor ESC [0J , em seguida, ecoar o comando (não me lembro como obter o comando de dentro de precmd ).

* Esta é uma resposta incompleta, não sei como tornar o comando em uma cor de fundo diferente.

    
por 01.05.2011 / 08:01
1

Se eu alterar grey para white , seu exemplo realmente funciona para mim.

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

Aqui estão algumas alternativas para tentar:

Conceda a toda a linha de prompt um plano de fundo cinza:

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

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

Imprimir uma linha antes do prompt:

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

(Se você alterar "\n" para "\r" , deve sublinhar a linha atual, mas parece que não funciona. Eu acho que zsh apaga a linha atual ao imprimir o prompt, que é o que me leva à primeira solução.)

Crie comandos (ou seja, tudo que você digitar) em negrito:

setopt promptsubst
preexec() {
    tput sgr0
}
PS1="# $(tput bold)"
    
por 01.04.2012 / 19:40