<ก่อนหน้านี้ | เนื้อหา | ถัดไป>
การย้ายเคอร์เซอร์
สามารถใช้ Escape Code เพื่อวางตำแหน่งเคอร์เซอร์ได้ โดยทั่วไปจะใช้เพื่อแสดงนาฬิกาหรือข้อมูลประเภทอื่นๆ ในตำแหน่งอื่นบนหน้าจอ เช่น ที่มุมด้านบนทุกครั้งที่มีการแจ้ง นี่คือรายการของ Escape Code ที่กำหนดตำแหน่งเคอร์เซอร์:
ตาราง 13-4: ลำดับการหลบหนีของการเคลื่อนไหวของเคอร์เซอร์
Escape Code Action
\033[l;cH เลื่อนเคอร์เซอร์ไปที่ line l และคอลัมน์ c
\033[nA เลื่อนเคอร์เซอร์ขึ้น n เส้น
\033[nB เลื่อนเคอร์เซอร์ลง n เส้น
\033[nC เลื่อนเคอร์เซอร์ไปข้างหน้า n อักขระ
\033[nD เลื่อนเคอร์เซอร์ไปข้างหลัง n อักขระ
\033[2J ล้างหน้าจอและเลื่อนเคอร์เซอร์ไปที่มุมซ้ายบน (บรรทัด 0, คอลัมน์ 0)
\033[K ล้างจากตำแหน่งเคอร์เซอร์ไปยังจุดสิ้นสุดของบรรทัดปัจจุบัน
\033[s เก็บตำแหน่งเคอร์เซอร์ปัจจุบัน
\033[u เรียกคืนตำแหน่งเคอร์เซอร์ที่เก็บไว้
โดยใช้รหัสข้างต้น เราจะสร้างข้อความแจ้งที่วาดแถบสีแดงที่ด้านบนของหน้าจอที่มีนาฬิกา (แสดงเป็นข้อความสีเหลือง) ทุกครั้งที่มีการแสดงข้อความแจ้ง รหัสสำหรับข้อความแจ้งคือสตริงที่ดูน่ากลัวนี้:
PS1="\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]
<\u@\h \W>\$ "
PS1="\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]
<\u@\h \W>\$ "
ลองดูที่แต่ละส่วนของสตริงเพื่อดูว่ามันทำอะไร:
การย้ายเคอร์เซอร์
ตาราง 13-5: รายละเอียดของสตริงพร้อมท์ที่ซับซ้อน
ลำดับการกระทำ
ลำดับการกระทำ
\[ เริ่มลำดับอักขระที่ไม่พิมพ์ จุดประสงค์คือเพื่อให้ bash สามารถคำนวณขนาดของพรอมต์ที่มองเห็นได้อย่างเหมาะสม หากไม่มีการคำนวณที่แม่นยำ คุณลักษณะการแก้ไขบรรทัดคำสั่งจะไม่สามารถวางตำแหน่งเคอร์เซอร์ได้อย่างถูกต้อง
\033[s เก็บตำแหน่งเคอร์เซอร์ นี่เป็นสิ่งจำเป็นเพื่อกลับไปยังตำแหน่งที่พร้อมท์หลังจากวาดแถบและนาฬิกาที่ด้านบนของหน้าจอแล้ว โปรดทราบว่าเทอร์มินัลอีมูเลเตอร์บางตัวไม่รู้จักรหัสนี้
\033[0;0H เลื่อนเคอร์เซอร์ไปที่มุมซ้ายบน ซึ่งก็คือบรรทัด 0, คอลัมน์ 0
\033[0;41m ตั้งค่าสีพื้นหลังเป็นสีแดง
\033[เค ล้างจากตำแหน่งเคอร์เซอร์ปัจจุบัน (มุมบนซ้าย) ไปจนสุดบรรทัด เนื่องจากตอนนี้สีพื้นหลังเป็นสีแดง เส้นจึงถูกล้างไปยังสีนั้นที่สร้างแถบของเรา โปรดทราบว่าการล้างไปยังจุดสิ้นสุดของบรรทัดจะไม่เปลี่ยนตำแหน่งเคอร์เซอร์ ซึ่งยังคงอยู่ที่มุมซ้ายบน
\033[1;33m ตั้งค่าสีข้อความเป็นสีเหลือง
\t แสดงเวลาปัจจุบัน แม้ว่านี่จะเป็นองค์ประกอบ "การพิมพ์" แต่เรายังคงรวมไว้ในส่วนที่ไม่ได้พิมพ์ของพรอมต์ เนื่องจากเราไม่ต้องการให้ bash รวมนาฬิกาเมื่อคำนวณขนาดที่แท้จริงของพรอมต์ที่แสดง
\033[0m ปิดสี สิ่งนี้มีผลกับทั้งข้อความและพื้นหลัง
\033[u กู้คืนตำแหน่งเคอร์เซอร์ที่บันทึกไว้ก่อนหน้านี้
\] สิ้นสุดลำดับอักขระที่ไม่พิมพ์
<\u@\h \W>\$ สตริงข้อความแจ้ง