PS1 hayalet metin olarak?


1

$ PS1'in değerini almaktan ve sınırlandırıcıyı arka planda metinle ilk sıraya koymaktan tam olarak nasıl geçebilirim? Metni terminale çıkarmak ve ardından len (genişletilmiş_PS1) tahribatsız geri göndermemiz için bir öneri aldım. (tercihen metin girildikten sonra da netleşir ve hatta istemi temizlenmişse bile gösterir)

Yanıtlar:


3

Bunu başarmak için (aka ) RPROMPTyerine (yanlış) kullanabilirsiniz , veya en azından benzer bir şeyPROMPTPS1

RPROMPTkomut istemiyle aynı satırda sağa hizalı olarak görüntülenir. Yazdığınız komutun ulaşması için yeterince uzunsa RPROMPT, otomatik olarak gizlenir (ve yeterince silerseniz yeniden görünür).

Böylece PROMPTsadece istemi karakterini içerecek şekilde ayarlayabilir ve her şeyi içine koyabilirsiniz RPROMPT. Sonra RPROMPTçizginin geri kalanını dolana kadar boşluklarla doldurun, böylece neredeyse dokunur PROMPT. Örneğin

setopt PROMPT_SUBST
PROMPT='%# '
RPROMPT='%$((COLUMNS-4))>> %n@%m %~${(r:$COLUMNS:)}'

Bu gibi bir şey göstermeli

%  user@machine ~

imlecin konumu nerede . Bir kere yazdıktan sonra her şeyi yazmaya başlayacaksın. Örneğin

% echo foo

Açıklama:

  • setopt PROMPT_SUBST bilgi istemi her görüntülendiğinde bilgi isteminde parametrelerin değiştirilmesini sağlar.
  • RPROMPTtek tırnak işaretleri içinde tanımlanması gerekir, böylece içerisindeki parametreler tanımda hemen genişletilmez, sadece bilgi istemi görüntülendiğinde ( PROMPT_SUBSTetkinken). Bu, terminal penceresi yeniden boyutlandırıldığında bile dolgunun düzgün çalışmasını sağlar.
  • %#komut istemi karakteri: herkes #için root %için.
  • $COLUMNS terminalin geçerli genişliğidir.
  • %n>>sağındaki her şeyi sağa nkeserek karakterlerin sağına keser .
  • $((COLUMNS-4))sol istemden sonra kalan genişliği hesaplar ( PROMPT). İçindeki iki karaktere ek olarak, PROMPTimleç için birini, diğerini RPROMPTise bir satırdaki en son sütunu kaplamadığı için çıkarmanız gerekir . ( PROMPTDeğişken uzunlukta bir kullanmak istiyorsanız , uzunluğunu dinamik olarak hesaplamanız gerekir.)
  • %n@%m %~sadece bir örnektir ve kullanıcı adını ( %n), makine adını ( %m) ve geçerli dizini ( %~) gösterir.
  • ${(r:$COLUMNS:)}terminal ile aynı genişlikte bir dizi boşluğa genişletilir. Bu, her zaman yeterli dolgu alanı olmasını sağlar.

Hmm ... .zshrc.pre ya da .zshrc.local dosyasında oldukça doğru çalışması için önerilerinizde değişiklik var gibi görünmüyorum.
Conor K,

1
Tam olarak değil nasıl? Oh-My-Zsh gibi bir şey kullanıyor musunuz ? Ben soruyorum çünkü ne düzenli yapılandırma dosyaları için ne .zshrc.prede . Öyleyse, bir şekilde müdahale ediyor olabilir. Yalnızca üç satırı doğrudan çalışan bir oturumun komut satırında çalıştırıyorsanız çalışır mı (veya farklı çalışır) mı? .zshrc.localzshzsh
Adaephon

Ah, doğru, unuttum, etiket olarak ekleyemedim, ama evet, Grml-zsh-config tüm sistemlerimde kullandığım şeydi (Arch'ın kurulumu için varsayılan ve rahatlaştım. it)
Conor K,

Böylece, grml zsh config ile denedim ve isteminin değişime karşı oldukça dayanıklı olduğunu gördüm. Bu, zsh'ın Prompt Theme sisteminin kullanımından kaynaklanıyor gibi görünüyor . prompt restoreHerhangi bir bilgi istemi değişkenini değiştirmeden önce çalıştırarak bunu devre dışı bırakmanız gerekir . Elbette önerilerimi kullanarak kendi temanızı yaratmayı da deneyebilirsiniz.
Adaephon

Hmm, sanırım ne kadar devre dışı bırakacağımı düşünüldüğümde, takma uçlu metin yerine, terminalleri dikey olarak bölmek zorunda kalacağım.
Conor K,
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.