Multiline RPROMPT em zsh

5

Eu sei que você pode definir solicitações de múltiplas linhas em zsh:

PROMPT='
test
→ '

Mas eu estava me perguntando, por que você não pode definir as solicitações certas de várias linhas? Eu tentei:

RPROMPT='
test
still test '

mas nada aparece. Isso é possível?

    
por linkyndy 18.09.2015 / 18:51

1 resposta

7

Você pode obter o efeito desejado (se bem que eu acerte) usando a função precmd , que é executada toda vez que o prompt é exibido, para imprimir linhas adicionais acima do prompt.

Use por exemplo este código

precmd() {
  LEFT="The time is"
  RIGHT="$(date) "
  RIGHTWIDTH=$(($COLUMNS-${#LEFT}))
  print $LEFT${(l:$RIGHTWIDTH::.:)RIGHT}
}
PS1="foo > "
RPS1="bar"

Explicação

  • $LEFT e $RIGHT mantêm as strings para o lado esquerdo e direito, resp. Você pode usar a saída do comando com a sintaxe $(...) .
  • $RIGHTWIDTH é a diferença da largura do terminal atual (armazenada por zsh no parâmetro $COLUMNS ) e a largura da sequência da esquerda. $((...)) é para expressões matemáticas
  • A mágica vem com ${(l:$RIGHTWIDTH::.:)RIGHT} , em que o parâmetro $RIGHT é preenchido à esquerda ( l ) por pontos (omite o último :.: se você desejar espaços) para o comprimento de $RIGHTWIDTH .
  • Imprima a linha adicional. Repita os comandos se quiser mais linhas.
  • PS1 e RPS1 são menores para PROMPT e RPROMPT .

Demo

The time is............................................Fri, Sep 18, 2015  8:20:22 PM 
foo > _                                                                          bar
    
por 18.09.2015 / 20:19

Tags