Kabuk altındaki komut satırında kabuk istemi gösterilsin mi?


Yanıtlar:


17

Aşağıdaki ayarlar çalışıyor gibi görünüyor. Komut satırı ilk satıra taşarsa, ikinci satırdaki metin kaybolur. preexecFonksiyon komutunu çalıştırmadan önce ikinci satırı siler; eğer saklamak istiyorsan, değiştir preexec () { echo; }.

terminfo_down_sc=$terminfo[cud1]$terminfo[cuu1]$terminfo[sc]$terminfo[cud1]
PS1_2='[some status]'
PS1="%{$terminfo_down_sc$PS1_2$terminfo[rc]%}%~ %# "
preexec () { print -rn -- $terminfo[el]; }

%çıkışlar zsh el kitabında ( man zshmisc) belgelenmiştir .

Terminfo bir terminal erişim API'sidir. Zsh, terminfoterminal açıklama veritabanına erişim sağlayan bir modüle sahiptir : $terminfo[$cap]terminalin kabiliyetini kullanmak için $cap, yani $capkomutunu çalıştırmak için gönderilecek karakter dizisidir . Daha man 5 terminfofazla bilgi için (Linux'ta bölüm numarası diğer birliklere göre değişebilir) bakın.

İşlemlerin sırası: imleci bir satır aşağı ( cud1) hareket ettirip sonra geri ( cuu1); imleç pozisyonunu kaydet ( sc); imleci bir satır aşağı oynat; baskı [some status]; imleç konumunu geri yükleyin. Baştaki aşağı-yukarı bit sadece komut isteminin ekranın en alt satırında olması durumunda gereklidir. Preexec satırı ikinci satırı ( el) siler, böylece komutun çıktısı ile karışmaz .

İkinci satırdaki metin terminalden daha genişse, ekran bozuk olabilir. Tamir etmek için bir tutam içinde Ctrl+ kullanın L.


5

bashGilles 'zsh çözümünün bir eşdeğeri. Bash'in yerel bir terminfo modülü yoktur, ancak tput(birlikte verilen terminfo) komutu da aynı şeyi yapar.

PS1_line1='\w \$ '
PS1_line2='[some status]'

if (tput cuu1 && tput sc && tput rc && tput el) >/dev/null 2>&1
then
    PS1="
\[$(tput cuu1; tput sc)\]
\[${PS1_line2}$(tput rc)\]${PS1_line1}"
    PS2="\[$(tput el)\]> "
    trap 'tput el' DEBUG
else
    PS1="$PS1_line2 :: $PS1_line1"
fi

Terminal, yeteneklerden birini desteklemiyorsa, tek satırlık istemlere geri döner.

trapHat taklit zsh en bir hacky yoludur preexecfonksiyonu. Daha fazla bilgi için /superuser/175799/ adresine bakın .

EDIT : Gilles 'yorumlarına göre geliştirilmiş senaryo.


@Gilles: Giriş için teşekkürler! Sanırım şimdi daha iyi çalışıyor. Gnome-terminalinde ve xterm'de bash 4.1.5 ve OSX Terminalinde bash 3.2.48 denendi.
Jander,
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.