Zsh içinde çok satırlı RPROMPT


5

Çok satırlı bilgi istemini zsh olarak tanımlayabileceğinizi biliyorum:

PROMPT='
test
→ '

Ama merak ediyorum, neden çok satırlı doğru yönlendirmeleri tanımlayamıyorsunuz? Denedim:

RPROMPT='
test
still test '

ama hiçbir şey görünmüyor. Mümkün mü?

Yanıtlar:


8

İstediğiniz (doğru tahmin edersem) efektini kullanarak precmd bilgi istemi görüntülenmeden önce her zaman çalıştırılan işlev, bilgi istemi üzerine ilave satırlar yazdırmak için kullanılır.

Örneğin bu kodu kullanın

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

açıklama

  • $LEFT ve $RIGHT dizeleri sol ve sağ taraf için basılı tutun, cevap. Komutun çıktısını kullanabilirsiniz. $(...) sözdizimi.
  • $RIGHTWIDTH Geçerli terminal genişliğinin farkı (saklanan zsh içinde $COLUMNS parametre) ve sol dizenin genişliği. $((...)) matematiksel ifadeler içindir
  • Sihir ile geliyor ${(l:$RIGHTWIDTH::.:)RIGHT}, nerede parametre $RIGHT sol yastıklı ( l ) noktalarla (sonuncuyu atlayın) :.: boşluklar istiyorsanız) uzunluğuna $RIGHTWIDTH.
  • Ek satırı yazdırın. Daha fazla satır istiyorsanız, komutları tekrarlayın.
  • PS1 ve RPS1 kısaltılmış PROMPT ve RPROMPT.

gösteri

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

2
Harika bir çözüm, ancak biri dikkatli olmak zorunda LEFT veya RIGHT ANSI kaçış dizilerini (örneğin renkler) içerir. Dize uzunluğunu hesaplamak için ansi kaçar, bunu yapabiliriz. $(( ${#${(S%%)str//(\%([KF1]|)\{*\}|\%[Bbkf])}} ))
Jongwook Choi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.