แสดงเนื้อหาด้านล่างของพรอมต์ที่ shell prompt หรือไม่


21

ช่วยบอกว่าพรอมต์ของฉันเป็นแบบนี้ (_ แทนเคอร์เซอร์ของฉัน)

~ % _

มีวิธีใดที่ฉันจะทำให้มันเป็นแบบนี้

~ % _
[some status]

คำถามเดิมเกี่ยวกับ zsh แต่ตอนนี้มีคำตอบอื่น ๆ


แล้วหน้าจอ + buobu ล่ะ: launchpad.net/byobuและอาจkmandla.wordpress.com/2010/01/03/…สำหรับภาพหน้าจอ
Janus

คำตอบ:


17

ดูเหมือนว่าการตั้งค่าต่อไปนี้จะใช้งานได้ ข้อความในบรรทัดที่สองจะหายไปหากบรรทัดคำสั่งล้นบรรทัดแรก preexecฟังก์ชั่นลบบรรทัดที่สองก่อนที่จะใช้คำสั่ง; 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]; }

%Escape มีการจัดทำเป็นเอกสารไว้ในคู่มือ zsh ( man zshmisc)

Terminfo เป็นเทอร์มินัลการเข้าถึง API Zsh มีterminfoโมดูลที่ให้การเข้าถึงฐานข้อมูลคำอธิบายเทอร์มินัล: $terminfo[$cap]เป็นลำดับของตัวอักษรที่จะส่งไปออกกำลังกายความสามารถของเทอร์มินัล$capเช่นเพื่อรัน$capคำสั่ง ดูman 5 terminfo(บน Linux หมายเลขส่วนอาจแตกต่างกันไปตามแต่ละ unices) สำหรับข้อมูลเพิ่มเติม

ลำดับของการกระทำคือเลื่อนเคอร์เซอร์ลงหนึ่งบรรทัด ( cud1) จากนั้นสำรอง ( cuu1); บันทึกตำแหน่งเคอร์เซอร์ ( sc); เลื่อนเคอร์เซอร์ลงหนึ่งบรรทัด พิมพ์[some status]; คืนค่าตำแหน่งเคอร์เซอร์ บิตขึ้นและลงที่จุดเริ่มต้นจำเป็นเฉพาะในกรณีที่พรอมต์อยู่ที่บรรทัดล่างสุดของหน้าจอ บรรทัด preexec จะลบบรรทัดที่สอง ( el) เพื่อไม่ให้สับสนกับเอาต์พุตจากคำสั่ง

หากข้อความในบรรทัดที่สองกว้างกว่าเทอร์มินัลจอแสดงผลอาจจะอ่านไม่ออก ใช้Ctrl+ Lในเหน็บแนมเพื่อซ่อมแซม


5

นี่คือวิธีbashเทียบเท่ากับโซลูชั่น zsh ของ Gilles Bash ไม่มี native terminfo module แต่tputคำสั่ง (รวมกับterminfo) ทำสิ่งเดียวกัน

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

หากเทอร์มินัลไม่รองรับหนึ่งในความสามารถมันจะถอยกลับไปที่พรอมต์บรรทัดเดียว

trapบรรทัดเป็นวิธี hacky ที่จะเลียนแบบ zsh ของpreexecฟังก์ชั่น ดู/superuser/175799/สำหรับข้อมูลเพิ่มเติม

แก้ไข : สคริปต์ที่ดีขึ้นตามความคิดเห็นของ Gilles


@Gilles: ขอบคุณสำหรับการป้อนข้อมูล! ฉันคิดว่าฉันทำงานได้ดีขึ้นแล้ว พยายามทุบตี 4.1.5 ใน gnome-terminal และ xterm และ bash 3.2.48 ใน Terminal OSX
Jander
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.