ผมพบว่าลำดับหนีจำนวนมากในทุบตีเริ่มต้นด้วย\033]
แต่สิ่งที่เป็นลำดับเหล่านี้และทำไมพวกเขาเริ่มต้นด้วย\033]
?
ผมพบว่าลำดับหนีจำนวนมากในทุบตีเริ่มต้นด้วย\033]
แต่สิ่งที่เป็นลำดับเหล่านี้และทำไมพวกเขาเริ่มต้นด้วย\033]
?
คำตอบ:
สตริงเป็นจริง\033[
และนั่นไม่ใช่สิ่งทั้งหมด
หลังจากเครื่องหมายวงเล็บเปิดนั้นมีชุดของตัวเลขและสัญลักษณ์ สายนี้เป็นที่รู้จักกันเป็นลำดับหนีและใช้ในการควบคุมเคอร์เซอร์คอนโซลและสีข้อความเหนือสิ่งอื่นใด
ลำดับการหลีกเลี่ยงการพิมพ์จะต้องอยู่ใน
\[\033[ and \]
m
หากลำดับหนีการควบคุมสีข้อความแล้วมันจะตามมาด้วยการ
นี่คือตารางสำหรับลำดับสี:
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
ดังนั้นหากคุณต้องการให้พรอมต์คอนโซลของคุณเป็นสีน้ำเงินคุณจะต้องใช้ escape sequence ต่อไปนี้ (ในชื่อไฟล์ที่ฉันลืม):
\[\033[34m\]
(สังเกตเห็นm
)
ลำดับการยกเว้นนี้ไม่เพียงควบคุมสีเท่านั้น นอกจากนี้ยังสามารถควบคุมการเคลื่อนไหวของเคอร์เซอร์ นี่คือตาราง / รายการพร้อมรหัสเคลื่อนไหวและวิธีการทำงาน:
วางตำแหน่งเคอร์เซอร์:
\033[<L>;<C>H
หรือ
\033[<L>;<C>f
วางเคอร์เซอร์ที่บรรทัด L และคอลัมน์ C
เลื่อนเคอร์เซอร์ขึ้น N บรรทัด:
\033[<N>A
เลื่อนเคอร์เซอร์ลง N บรรทัด:
\033[<N>B
เลื่อนเคอร์เซอร์ไปข้างหน้าคอลัมน์ N:
\033[<N>C
เลื่อนเคอร์เซอร์ไปข้างหลังคอลัมน์ N:
\033[<N>D
ล้างหน้าจอย้ายไปที่ (0,0):
\033[2J
ลบถึงจุดสิ้นสุดบรรทัด:
\033[K
บันทึกตำแหน่งเคอร์เซอร์:
\033[s
คืนค่าตำแหน่งเคอร์เซอร์:
\033[u
เพิ่งทราบว่าสองรายการสุดท้ายอาจไม่ทำงานในเทอร์มินัลอีมูเลเตอร์ที่คุณใช้ เห็นได้ชัดเพียงxterm
และnxterm
ใช้ทั้งสองลำดับ
และตัวอย่างการใช้หนึ่งใน escape sequences เหล่านี้: บอกว่าฉันต้องการวางเคอร์เซอร์ของฉันที่บรรทัด 3, คอลัมน์ (ตัวอักษร) 9. สำหรับฉันจะใช้
\[033\[3;9H]
(ฉันสมมติว่าคอลัมน์ 0 เป็นตำแหน่งแรกดังนั้นจะเป็นอักขระตัวที่ 8)
แหล่งที่มา: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (อ่าน 6.2)
การอ่านทั่วไปเพิ่มเติม: http://ascii-table.com/ansi-escape-sequences.php
[2K
จะลบทั้งบรรทัดทั้งก่อนและหลังเคอร์เซอร์ เป็นแหล่งที่ดีมากที่จะเป็นบทความวิกิพีเดียหรือคุณอาจจะไปECMA-48ส่วน 8.3.117 SGR - เลือกกราฟิก Rendition
0;
ในลำดับสีนั้นไม่จำเป็น ที่เพิ่งทำให้สีพื้นหลังเป็นค่าเริ่มต้นก่อนที่จะตั้งฉากหน้า 4x
นอกจากนี้คุณยังสามารถตั้งค่าพื้นหลังด้วย
พวกมันควบคุมคำสั่งสำหรับเทอร์มินัล
แต่เดิมเทอร์มินัลเป็นอุปกรณ์ที่ค่อนข้างโง่ที่เชื่อมต่อกับพอร์ตอนุกรมไม่ใช่ซอฟต์แวร์ GUI หลายแท็บที่มีเมนูที่เรามีอยู่ตอนนี้ เนื่องจากพวกเขาได้รับกระแสข้อมูลของตัวอักขระ (ไบต์) เท่านั้นจึงไม่มีการแบ่งแยกที่ชัดเจนระหว่างข้อมูล (สิ่งที่จะพิมพ์บนหน้าจอ) และคำสั่ง (วิธีการพิมพ์) แต่คำสั่งจะถูกแทนด้วยอักขระควบคุมพิเศษ
อักขระควบคุมที่เห็นได้ชัดคือสิ่งต่าง ๆ เช่นตัวดึงข้อมูลบรรทัด (ขึ้นบรรทัดใหม่), backspace และเสียงบี๊บ แต่คำสั่งที่เฉพาะเจาะจงมากขึ้นจะได้รับเป็นลำดับของตัวอักษรเริ่มต้นด้วยESC
ตัวละคร (รหัส 27 ในทศนิยม 0x1b ในฐานสิบหกหรือ 033 แปด) มันมักจะแสดงเป็น^[
หรือ\033
ในตัวอย่างของคุณ
ลำดับที่ESC [
เรียกว่า CSI หรือผู้แนะนำลำดับการควบคุมและจะเริ่มคำสั่งด้วยพารามิเตอร์ตัวเลขที่เป็นตัวเลือกซึ่งมักลงท้ายด้วยตัวอักษรที่กำหนดคำสั่งหลัก escape sequences ทั่วไปส่วนใหญ่จะอยู่ในคลาสนี้
รายชื่อรหัสหนีที่สามารถพบได้เช่นในconsole_codes(4)
หน้าคนและในหน้าวิกิพีเดียรหัสหนี ANSI
ตัวอย่างบางส่วน:
ESC [ 4 A move cursor 4 lines up (4 can be any number)
ESC [ 5 B move cursor 5 lines down
ESC [ 2 K erase current line
ESC [ 30;46 m set black text (30) on cyan background (46)
ESC [ 0 m reset color and attributes
คุณสามารถทดสอบคำสั่งด้วยเช่น Bash การใช้-e
แฟล็กecho
คำสั่งbuiltin ยอมรับ\033
ว่าเป็นตัวแทนของESC
อักขระ
เช่นนี้จะพิมพ์คำทักทายสีตรงกลางของหน้าจอและอื่น ๆ ตามปกติในตำแหน่งเคอร์เซอร์เดิม:
echo -e '\033[s\033[12;30f\033[30;46m Hello! \033[0m\033[uhello'
ลำดับESC ]
ที่คุณกล่าวถึงคือคำสั่ง OSC หรือระบบปฏิบัติการซึ่งส่วนใหญ่จะใช้ในคำสั่งเพื่อตั้งชื่อหน้าต่างในxterm
และอื่น ๆ เช่น:
echo -e '\033]0;new window title\a'
จากนั้นยังมีESC ( A
(และตัวอักษรอื่น ๆ ) ที่ตั้งชุดตัวอักษรระดับชาติเกี่ยวกับขั้วบางกับผลกระทบที่อาจเกิดขึ้นเฮฮา
Escape ตามด้วยวงเล็บเหลี่ยมด้านขวาescape]
ใช้เพื่อแนะนำคำสั่งระบบปฏิบัติการ ( OSC
)
มันอยู่ในECMA-48และคุณสามารถอ่านบทสรุปของลำดับการควบคุมที่ใช้โดย xterm ในลำดับการควบคุม XTermเช่นสำหรับการเปลี่ยนชื่อของหน้าต่างเทอร์มินัล
ลำดับ Escape สามารถเริ่มต้นด้วยตัวละครที่แตกต่างกัน C1 (8 บิต) การควบคุมตัวละครในส่วน XTerm ควบคุมลำดับกล่าวไม่กี่ของเหล่านั้นCSI
(ซึ่งคุณเห็นว่าเป็นescape[
, APC
, DCS
, PM
. เหตุผลที่แตกต่างกัน (สอง) ตัวละครเป็นเพราะคู่ (หลบหนีและ]
) มีความเกี่ยวข้องกับ อักขระควบคุมไบต์เดียวที่ใช้สำหรับประเภทลำดับหนีที่แตกต่างกัน
หากคุณอ่านข้อกำหนดคุณจะสังเกตเห็นว่าCSI
ใช้สำหรับการควบคุมด้วยพารามิเตอร์ตัวเลขในขณะที่OSC
อนุญาตให้สตริง กว่าเพียงแค่ไวยากรณ์คณะกรรมการซึ่งสร้างมาตรฐานนี้มีในใจสำหรับการใช้งานAPC
และPM
ที่แตกต่างจากและDCS
OSC
เหล่านี้เรียกว่ารหัสหนี ANSIและพวกเขามีการระบุไว้ในหน้าคนสำหรับ console_codes พวกเขาไม่ได้เฉพาะทุบตี แต่ทำงานได้ในแอปพลิเคชันคอนโซลใด ๆ ตราบเท่าที่เทอร์มินัลสนับสนุนพวกเขา (ส่วนใหญ่เทอร์มินัลอีมูเลเตอร์ทำ)
"ลำดับการหลบหนี" ที่อธิบายไว้ในคำตอบอื่น ๆ นั้นขึ้นอยู่กับประเภทของเทอร์มินัลที่คุณมี
$ echo $TERM
xterm
หากคุณต้องการที่จะเขียนสคริปต์ที่มี (ค่อนข้าง) เป็นอิสระจาก termninal แต่ยังคงใช้สีเช่นและคุณสมบัติพิเศษอื่น ๆ man terminfo
แล้วได้ดูในเนื้อหาของการ
เช่น
$ echo -n ".";tput setb 6;tput setf 4;echo -n "test";tput sgr0;echo "."
จะพิมพ์.test.
โดยtest
มีพื้นหลังสีเหลืองและสีพื้นหน้าสีแดงและสิ่งนี้จะทำงานกับเทอร์มินัลใด ๆ ที่สามารถใช้สีในลักษณะเดียวกันได้
เพื่อดูว่ามีการพิมพ์จริงท่อมันลงไปod -t x1z
ในขณะที่
$ tput sgr0 | od -t x1z
0000000 1b 28 42 1b 5b 6d >.(B.[m<
0000006
... โดยที่ค่าจะแสดงเป็นเลขฐานสิบหก (เนื่องจาก "x")