Sağ zsh isteminin sonunda işe yaramayan alanı kaldırma ($ RPROMPT)


18

Zsh'de her zaman sağ komut istemimin sağında bir boşluk karakteri vardır. Çok basit bir .zshrc ile denedim:

PROMPT="#"
RPROMPT="*"

Ekranın sağında * işaretinden sonra daima bir boşluk vardır.

İşte sorunu gösteren bir ekran görüntüsü (satırlardan birindeki alanı seçtim). http://i.imgur.com/cnfa2eJ.png

Teşekkürler.

Yanıtlar:


20

TL; DR

Tek yapmanız gereken bunu ~/.zshrc(veya istem temanızla aynı dosyaya) koymaktır :

ZLE_RPROMPT_INDENT=0

ayrıntılar

Giden ZSH sürümlerinde 5.0.2 denilen ZSH en C kaynak kodda bir değer rprompt_off(ofset sağ marjı set) idi kodlanmış 1.

Ancak 5.0.5 sürümünde geliştiriciler, ZLE_RPROMPT_INDENTortam değişkenini ayarlayarak bu varsayılan değeri geçersiz kılma yeteneğini ekledi .

Mantığı bazı eski terminaller ekranın son hücre içinde bir karakter olsaydı kaydırma başlayacak çünkü bu "girinti" içindir.

5.0.5'ten önceki ZSH sürümleri için

ZSH'nin daha eski bir sürümüyseniz ve güncelleme yapamıyorsanız, aşağıdakilerden her ikisini de yaparak o alandan kurtulabilirsiniz:

  1. Kandırmak için RPROMPT düşünerek aslında standart görünmez dizisi sarmalayıcı kullanıyorsa daha karakter kısadır içine zsh:%{...%}
  2. Ardından terminfo kullanarak bir imleç geri kaçış dizisi gönderme: %{terminfo[cub1]}

Daha fazla bilgi için SSS bölümüne ve posta listesindeki bu mesaja göz atın .


5
Bu, giriş imlecini normalde olduğu yerden bir karakter sola yerleştiriyor gibi görünmektedir. Örneğin, bu sorudaki istemleri kullanarak imleç hemen sağa değil, karma işaretinin üzerine yerleştirilir . (Benim için, ofseti sıfırdan küçük bir değere ayarlamak, bilgi istemlerinin ve imlecin doğru yerlerde görünmesini sağlar. Zsh 5.0.8 ve 5.2 ile gözlemlenmiştir.)
Rob Kennedy

5.2'de benim için çalışıyor.
Anthony Michael Cook

5
Biraz 5.2 için benim için çalıştı, ama şimdi PROMPT ile ilgili sorunlar var: PROMPT son karakter kayboldu ve son karakter geçerli girişin ilk karakteri ile otomatik tamamlama dolguları arasında geçiş. Örneğin %git<Tab>,%ggit
roboslone'a dönüşür

Zilleri daha yeni ZSH sürümleri için kullanmanıza gerek yoktur.
Anthony Michael Cook

5
ZLE_RPROMPT_INDENT = 0 ayarladıktan sonra , bazılarının yukarıda bahsettiği sol taraftaki istemde aynı çizim aksaklığı sorunlarını fark ettim . Ancak, 0 yerine -1 kullanırsam neredeyse her şey beklendiği gibi çalışır, yani ZLE_RPROMPT_INDENT = -1. Bu ipucunu github.com/bhilburn/powerlevel9k/issues/… adresinde gördüm . Neredeyse, çünkü -1 ile macOS'ta bir terminal penceresinin alt satırını asla kullanmaz.
Marc Liyanage

2

Zsh sürdürücülerine bir hata raporu gönderdim, ancak bu davranış tasarımdan kaynaklanıyor gibi görünüyor. Ancak bu sorun beni o kadar rahatsız etti ki kendimi geçici bir düzeltme olarak kendimi düzeltmeye ve derlemeye karar verdim. OS X kullanıyorsanız ve Homebrew kullanıyorsanız (yapmalısınız), o zaman çalıştırarak yamam dahil zsh'yi yükleyebilirsiniz:

brew install https://gist.github.com/padde/7963205/raw/eaedcc557859a40db87282fc39256fccd52d0aad/zsh.rb

büyük olasılıkla eklemek isteyeceksiniz /usr/local/bin/zshiçin /etc/shellsve chsh -s /usr/local/bin/zshsonradan. Son olarak, ilgilenen herkes için ham fark:

diff --git a/Src/Zle/zle_refresh.c b/Src/Zle/zle_refresh.c
index 17b78ce..f136178 100644
--- a/Src/Zle/zle_refresh.c
+++ b/Src/Zle/zle_refresh.c
@@ -1576,7 +1576,7 @@ zrefresh(void)
    else
        put_rpmpt = rprompth == 1 && rpromptbuf[0] &&
        !strchr(rpromptbuf, '\t') &&
-       (int)ZR_strlen(nbuf[0]) + rpromptw < winw - 1;
+       (int)ZR_strlen(nbuf[0]) + rpromptw < winw;
     } else {
 /* insert >.... on first line if there is more text before start of screen */
    ZR_memset(nbuf[0], zr_sp, lpromptw);
@@ -1631,9 +1631,9 @@ zrefresh(void)
    if (put_rpmpt && !iln && !oput_rpmpt) {
        int attrchange;

-       moveto(0, winw - 1 - rpromptw);
+       moveto(0, winw - rpromptw);
        zputs(rpromptbuf, shout);
-       vcs = winw - 1;
+       vcs = winw;
    /* reset character attributes to that set by the main prompt */
        txtchange = pmpt_attr;
        /*

PWS (zsh sürdürücü) sadece genişletilmiş bir yama yayınladı , bu yüzden RPROMPT girintisi yakında resmi resmi kaynaklarda olmalı.
mpy

Bağlantıyı gönderdiğiniz için teşekkür ederiz. Bir sonraki sürümü sabırsızlıkla bekliyorum!
Patrick Oscity

1

Bence sağdaki beyaz alan kodlanmış. Ancak zshaşağıdaki ayarla hile yapabilirsiniz :

RPROMPT="%{*%}"

prensipte zshyıldızın karakter içermediğini söyler ; from man zshmisc:

%{...%} Bir dizeyi değişmez bir kaçış dizisi olarak dahil eder. Parantez içindeki dize imleç konumunu değiştirmemelidir. (...)

Dezavantajı, boş "sonuna" kaydırmak olmasıdır PROMPT:

| PROMPT = "#" |
| RPROMPT = "% {*%}" |
| # ■ * |

|Semboller imleç ■, uç kenarlarını belirtir.


Başka bir fikir COLUMNS1 artacak :

COLUMNS=$((COLUMNS + 1))

Ancak, bunun komut istemleri için değil, yalnızca istem oluşturma için nasıl yapılacağını düşünmesi gerekir. Ve bu, çok satırlı komut satırındaki her satırdaki son karakteri yutar.


1
Teşekkürler. Sağımda görüntülenen zamanım ve git durumumla ilgilenen% {...%} numarayla oynamaya çalıştım. İSTEMİ üzerindeki fazladan boşluk umurumda değil çünkü genellikle bir tane var. Ancak, bu çözümün büyük bir dezavantajı var: TAB ile otomatik tamamlamayı etkinleştirdiğimde, fazladan alan kaldırılıyor ve garip şeyler yapıyor :)
Frozax
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.