Tampilkan hal-hal di bawah prompt pada prompt shell?


Jawaban:


17

Pengaturan berikut tampaknya berfungsi. Teks pada baris kedua menghilang jika baris perintah meluap baris pertama. The preexecFungsi menghapus baris kedua sebelum menjalankan perintah; jika Anda ingin menyimpannya, ubah ke 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]; }

%lolos didokumentasikan dalam manual zsh ( man zshmisc).

Terminfo adalah API akses terminal. Zsh memiliki terminfomodul yang memberikan akses ke database deskripsi terminal: $terminfo[$cap]adalah urutan karakter yang akan dikirim untuk menjalankan kemampuan terminal $cap, yaitu untuk menjalankan $capperintahnya. Lihat man 5 terminfo(di Linux, nomor bagian dapat bervariasi pada kesatuan lainnya) untuk informasi lebih lanjut.

Urutan tindakan adalah: gerakkan kursor ke bawah satu baris ( cud1), lalu kembali ke atas ( cuu1); simpan posisi kursor ( sc); gerakkan kursor ke bawah satu baris; cetak [some status]; mengembalikan posisi kursor. Bit down-and-up di awal hanya diperlukan jika prompt ada di garis bawah layar. Baris preexec menghapus baris kedua ( el) sehingga tidak tercampur dengan output dari perintah.

Jika teks pada baris kedua lebih lebar dari terminal, tampilan mungkin kacau. Gunakan Ctrl+ Ldalam keadaan darurat untuk memperbaiki.


5

Berikut ini bashsetara dengan solusi zsh Gilles. Bash tidak memiliki modul terminfo asli, tetapi tputperintah (dibundel dengan terminfo) melakukan hal yang sama.

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

Jika terminal tidak mendukung salah satu kapabilitas, ia akan kembali ke prompt satu baris.

The trapline adalah cara Hacky untuk meniru zsh ini preexecfungsi. Lihat /superuser/175799/ untuk info lebih lanjut.

EDIT : Skrip yang ditingkatkan berdasarkan komentar Gilles.


@Gilles: Terima kasih atas masukannya! Saya pikir saya sudah membuatnya bekerja lebih baik sekarang. Mencoba bash 4.1.5 di gnome-terminal dan xterm, dan bash 3.2.48 di OSX Terminal.
Jander
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.