อ่าน 18 นาที
รหัสหลีกเลี่ยง ANSI
ลำดับการหลีกเลี่ยง ANSIเป็นมาตรฐานสำหรับการส่งสัญญาณภายในแบนด์เพื่อควบคุมตำแหน่งเคอร์เซอร์ สี รูปแบบตัวอักษร และตัวเลือกอื่นๆ บนเทอร์มินัลข้อความ วิดีโอ และโปรแกรมจำลองเทอร์มินัล..
รหัสหลีกเลี่ยง ANSI
| มาตรฐาน |
|
|---|---|
| การจำแนกประเภท | ชุด รหัสควบคุมและลำดับการควบคุมตามมาตรฐานISO/IEC 2022 |
| การเข้ารหัสอื่นๆ ที่เกี่ยวข้อง |
มาตรฐานฟังก์ชันควบคุมอื่นๆ: |
ลำดับการหลีกเลี่ยง ANSIเป็นมาตรฐานสำหรับการส่งสัญญาณภายในแบนด์เพื่อควบคุมตำแหน่งเคอร์เซอร์ สี รูปแบบตัวอักษร และตัวเลือกอื่นๆ บนเทอร์มินัลข้อความ วิดีโอ และโปรแกรมจำลองเทอร์มินัล ลำดับของไบต์ บางลำดับ ซึ่งส่วนใหญ่เริ่มต้นด้วย อักขระ หลีกเลี่ยง ASCIIและ อักขระ วงเล็บจะถูกฝังอยู่ในข้อความ เทอร์มินัลจะตีความลำดับเหล่านี้เป็นคำสั่ง แทนที่จะเป็นข้อความที่จะแสดงผลตามตัวอักษร รหัส ANSI สามารถเปลี่ยนสีของข้อความและย้ายเคอร์เซอร์เพื่อให้สามารถวาดข้อความได้ทุกที่บนหน้าจอ
ลำดับคำสั่ง ANSI ถูกนำมาใช้ในช่วงทศวรรษ 1970 เพื่อแทนที่ลำดับคำสั่งเฉพาะของผู้ผลิต และแพร่หลายในตลาดอุปกรณ์คอมพิวเตอร์ในช่วงต้นทศวรรษ 1980 แม้ว่าเทอร์มินัลข้อความแบบฮาร์ดแวร์จะหายากขึ้นเรื่อยๆ ในศตวรรษที่ 21 แต่ความสำคัญของมาตรฐาน ANSI ยังคงอยู่ เนื่องจากโปรแกรมจำลองเทอร์มินัลและคอนโซลคำสั่งส่วนใหญ่สามารถตีความมาตรฐาน ANSI ได้อย่างน้อยบางส่วน
ANSIย่อมาจาก " American National Standards Institute "
ประวัติศาสตร์
ผู้ผลิตเครื่องรับสัญญาณวิดีโอเกือบทั้งหมดได้เพิ่มลำดับคำสั่งเฉพาะของผู้ผลิตเพื่อใช้ในการดำเนินการต่างๆ เช่น การวางเคอร์เซอร์ที่ตำแหน่งใดๆ บนหน้าจอ ตัวอย่างเช่น เครื่องรับสัญญาณ VT52อนุญาตให้วางเคอร์เซอร์ที่ตำแหน่ง x,y บนหน้าจอได้โดยการส่งESCอักขระ อักขระYและอักขระอีกตัวหนึ่ง ตามด้วยอักขระสองตัวที่แสดงค่าตัวเลขเท่ากับตำแหน่ง x,y บวก 32 (โดยเริ่มจากอักขระเว้นวรรค ASCII และหลีกเลี่ยงอักขระควบคุม) เครื่องรับสัญญาณHazeltine 1500มีคุณสมบัติคล้ายกัน โดยเรียกใช้โดยใช้~และDC1ตามด้วยตำแหน่ง X และ Y คั่นด้วยเครื่องหมายจุลภาค แม้ว่าเครื่องรับสัญญาณทั้งสองจะมีฟังก์ชันการทำงานที่เหมือนกันในส่วนนี้ แต่ต้องใช้ลำดับคำสั่งควบคุมที่แตกต่างกันในการเรียกใช้
เนื่องจากลำดับเหล่านี้แตกต่างกันไปในแต่ละเทอร์มินัล จึงจำเป็นต้องสร้างไลบรารีที่ซับซ้อน เช่นtermcap ("ความสามารถของเทอร์มินัล") และยูทิลิตี้ เช่นtput เพื่อให้โปรแกรมสามารถใช้ API เดียวกัน ในการทำงานกับเทอร์มินัลใดก็ได้ นอกจากนี้ เทอร์มินัลจำนวนมากยังต้องการส่งตัวเลข (เช่น แถวและคอลัมน์) เป็นค่าไบนารีของอักขระ สำหรับภาษาโปรแกรมบางภาษา และสำหรับระบบที่ไม่ใช้ ASCII ภายใน มักเป็นเรื่องยากที่จะแปลงตัวเลขให้เป็นอักขระที่ถูกต้อง
มาตรฐาน ANSI พยายามแก้ไขปัญหาเหล่านี้โดยการสร้างชุดคำสั่งที่เทอร์มินัลทั้งหมดจะใช้ และกำหนดให้ข้อมูลตัวเลขทั้งหมดต้องส่งเป็นตัวเลข ASCII มาตรฐานแรกในชุดนี้คือECMA-48ซึ่งได้รับการรับรองในปี 1976 [ 1 ]เป็นการต่อเนื่องจากชุดมาตรฐานการเข้ารหัสอักขระ โดยมาตรฐานแรกคือECMA-6จากปี 1965 ซึ่งเป็นมาตรฐาน 7 บิตที่ISO 646มีต้นกำเนิด ชื่อ "ลำดับการหลีกเลี่ยง ANSI" มีมาตั้งแต่ปี 1979 เมื่อANSIรับรอง ANSI X3.64 คณะกรรมการ ANSI X3L2 ได้ร่วมมือกับ คณะกรรมการ ECMA TC 1 เพื่อสร้างมาตรฐานที่เกือบจะเหมือนกัน มาตรฐานทั้งสองนี้ถูกรวมเข้าเป็นมาตรฐานสากล ISO 6429 [ 1 ]ในปี 1994 ANSI ได้ถอนมาตรฐานของตนออกเพื่อใช้มาตรฐานสากลแทน

เทอร์มินัลวิดีโอรุ่นแรกที่ได้รับความนิยมซึ่งรองรับลำดับเหล่านี้คือDigital VT100ซึ่งเปิดตัวในปี 1978 [ 2 ]รุ่นนี้ประสบความสำเร็จอย่างมากในตลาด ซึ่งกระตุ้นให้เกิดการลอกเลียนแบบ VT100 หลากหลายรุ่น โดยรุ่นแรกๆ และได้รับความนิยมมากที่สุดคือZenith Z-19 ที่ราคาถูกกว่ามาก ในปี 1979 [ 3 ] รุ่นอื่นๆ ได้แก่Qume QVT-108, Televideo TVI-970, Wyse WY-99GT รวมถึงโหมด "VT100" หรือ "VT103" หรือ "ANSI" ที่เป็นตัวเลือก ซึ่งมีความเข้ากันได้ในระดับต่างๆ กันกับแบรนด์อื่นๆ อีกมากมาย ความนิยมของสิ่งเหล่านี้ค่อยๆ นำไปสู่ซอฟต์แวร์จำนวนมากขึ้นเรื่อยๆ (โดยเฉพาะระบบกระดานข่าวและบริการออนไลน์ อื่นๆ ) ที่สันนิษฐานว่าลำดับการหลีกเลี่ยงใช้งานได้ ส่งผลให้เทอร์มินัลและโปรแกรมจำลองใหม่เกือบทั้งหมดรองรับลำดับเหล่านี้
ในปี พ.ศ. 2524 ANSI X3.64 ได้รับการนำมาใช้ในรัฐบาลสหรัฐฯ โดย เอกสาร FIPSฉบับที่ 86 ต่อมารัฐบาลสหรัฐฯ ได้หยุดการทำซ้ำมาตรฐานอุตสาหกรรม ดังนั้นเอกสาร FIPS ฉบับที่ 86 จึงถูกยกเลิก[ 4 ]
ECMA-48 ได้รับการปรับปรุงหลายครั้งและปัจจุบันอยู่ในฉบับที่ 5 ตั้งแต่ปี 1991 [ 5 ]นอกจากนี้ยังได้รับการยอมรับจากISOและIECเป็นมาตรฐานISO/IEC 6429 [ 6 ] เวอร์ชันหนึ่งได้รับการยอมรับเป็นมาตรฐานอุตสาหกรรมของญี่ปุ่นในชื่อJIS X 0211
มาตรฐานที่เกี่ยวข้อง ได้แก่ITU T.61ซึ่ง เป็นมาตรฐาน TeletexและISO/IEC 8613ซึ่งเป็น มาตรฐาน สถาปัตยกรรมเอกสารแบบเปิด (ส่วนใหญ่คือ ISO/IEC 8613-6 หรือ ITU T.416) ทั้งสองระบบมีรหัสหลีกเลี่ยง (escape code) ร่วมกับระบบ ANSI หลายตัว โดยมีส่วนขยายที่ไม่จำเป็นต้องมีความหมายสำหรับเทอร์มินัลคอมพิวเตอร์ ทั้งสองระบบเลิกใช้ไปอย่างรวดเร็ว แต่ ECMA-48 ได้ระบุส่วนขยายที่ใช้ในระบบเหล่านั้นว่าเป็นส่วนที่สงวนไว้
การสนับสนุนแพลตฟอร์ม

ในช่วงต้นทศวรรษ 1980 ซอฟต์แวร์จำนวนมากใช้ลำดับเหล่านี้โดยตรงเพื่ออัปเดตการแสดงผลบนหน้าจอ ซึ่งรวมถึงทุกอย่างบนVMS (ซึ่งสันนิษฐานว่าใช้เทอร์มินัล DEC) ซอฟต์แวร์ส่วนใหญ่ที่ออกแบบมาให้ใช้งานได้บน คอมพิวเตอร์ส่วนบุคคล CP/Mและซอฟต์แวร์ Unix จำนวนมาก เนื่องจากใช้งานง่ายกว่าไลบรารี termcap
โปรแกรมจำลองเทอร์มินัลสำหรับการสื่อสารกับเครื่องระยะไกลเกือบทั้งหมดจะใช้รหัสหลีกเลี่ยง ANSI ซึ่งรวมถึงโปรแกรมใดๆ ที่เขียนขึ้นเพื่อสื่อสารกับระบบกระดานข่าวบนคอมพิวเตอร์ส่วนบุคคลและคอมพิวเตอร์ที่บ้าน บนระบบ Unix โปรแกรมจำลองเทอร์มินัล เช่นxtermยังสามารถสื่อสารกับซอฟต์แวร์ที่ทำงานอยู่บนเครื่องเดียวกันได้ ดังนั้นซอฟต์แวร์ที่ทำงานใน X11 ภายใต้โปรแกรมจำลองเทอร์มินัลจึงสามารถสันนิษฐานได้ว่ามีความสามารถในการเขียนลำดับเหล่านี้
เมื่อคอมพิวเตอร์มีประสิทธิภาพมากขึ้น แม้แต่จอแสดงผลในตัวก็เริ่มรองรับ ทำให้ซอฟต์แวร์สามารถพกพาได้ระหว่างระบบ CP/M มีความพยายามที่จะขยายลำดับการหลีกเลี่ยงเพื่อรองรับเครื่องพิมพ์[ 7 ]และเป็นรูปแบบการจัดเก็บเอกสารแบบ PDF ในยุคแรกๆ สถาปัตยกรรมเอกสาร แบบ เปิด
คอมพิวเตอร์ IBM PC ที่เปิดตัวในปี 1981 ไม่รองรับลำดับการหลีกเลี่ยงเหล่านี้หรือลำดับการหลีกเลี่ยงอื่นๆ สำหรับการอัปเดตหน้าจอ มีเพียงอักขระควบคุม ไม่กี่ตัว ( BEL , CR , LF , BS ) เท่านั้นที่ถูกตีความโดย BIOS ที่อยู่เบื้องหลัง เอฟเฟกต์การแสดงผลใดๆ ต้องทำผ่านการเรียกใช้ BIOS ซึ่งขึ้นชื่อว่าช้ามาก หรือโดยการจัดการฮาร์ดแวร์ของ IBM PC โดยตรง ทำให้ซอฟต์แวร์ที่น่าสนใจใดๆ ไม่สามารถพกพาได้ และนำไปสู่ความจำเป็นในการจำลองรายละเอียดของฮาร์ดแวร์การแสดงผลในPC Clone
ระบบปฏิบัติการ DOS เวอร์ชัน 2.0 มีไดรเวอร์อุปกรณ์ เสริม ชื่อANSI.SYSแต่เนื่องจากประสิทธิภาพต่ำและไม่ได้ติดตั้งมาโดยค่าเริ่มต้น ทำให้ซอฟต์แวร์ส่วนใหญ่ไม่ค่อยได้ใช้ประโยชน์จากไดรเวอร์นี้ (หรืออาจไม่เคยใช้เลย)
Windows Consoleไม่รองรับลำดับการหลีกเลี่ยง ANSI และ Microsoft ก็ไม่ได้จัดหาวิธีการใดๆ เพื่อเปิดใช้งานลำดับการหลีกเลี่ยง ANSI โปรแกรมทดแทนบางตัว เช่นTCC ของ JP Software (เดิมคือ 4NT), ANSI.COM ของ Michael J. Mefford, ANSICON ของ Jason Hood [ 8 ]และConEmu ของ Maximus5 เปิดใช้งานลำดับการหลีกเลี่ยง ANSI ซอฟต์แวร์เช่นแพ็กเกจ Python colorama [ 9 ]หรือCygwinแก้ไขข้อความในกระบวนการขณะที่ส่งไปยังคอนโซล โดยแยกส่วนลำดับการหลีกเลี่ยง ANSI และจำลองด้วยการเรียกใช้ Windows ในปี 2016 Microsoft ได้ออก อัปเดต Windows 10 เวอร์ชัน 1511ซึ่งได้นำการสนับสนุนลำดับการหลีกเลี่ยง ANSI มาใช้โดยไม่คาดคิด กว่าสามทศวรรษหลังจากการเปิดตัว Windows [ 10 ]การดำเนินการนี้ทำควบคู่ไปกับWindows Subsystem for Linuxเห็นได้ชัดว่าเพื่อให้ ซอฟต์แวร์ที่ใช้เทอร์มินัล แบบ Unixสามารถใช้ Windows Console ได้ Windows PowerShell 5.1 เปิดใช้งานสิ่งนี้โดยค่าเริ่มต้น และ PowerShell 6 ทำให้สามารถฝังอักขระ ESC ที่จำเป็นลงในสตริงได้ด้วย[ 11 ] Windows Terminalซึ่งเปิดตัวในปี 2019 รองรับลำดับดังกล่าวโดยค่าเริ่มต้น[ 12 ]ตั้งแต่ Windows 11 22H2 และ Windows Terminal 1.15 เป็นต้นมา Windows Terminal จะเข้ามาแทนที่ Windows Console เป็นค่าเริ่มต้น[ 13 ] [ 14 ]`e
รหัสควบคุม C0
ผู้ใช้เกือบทุกคนคาดเดาหน้าที่ของอักขระไบต์เดียวบางตัวได้ เดิมทีชุดรหัสควบคุม C0 ถูกกำหนดไว้เป็นส่วนหนึ่งของ ASCII แต่ปัจจุบันถูกกำหนดไว้ใน ISO 6429 (ECMA-48) ทำให้เป็นส่วนหนึ่งของมาตรฐานเดียวกันกับชุด C1 ที่เรียกใช้โดยลำดับการหลีกเลี่ยงของ ANSI (แม้ว่าISO 2022จะอนุญาตให้ใช้ชุด C0 ของ ISO 6429 โดยไม่ต้องใช้ชุด C1 ของ ISO 6429 และในทางกลับกันโดยมีเงื่อนไขว่า 0x1B ต้องเป็น ESC เสมอ) สิ่งนี้ใช้เพื่อลดปริมาณข้อมูลที่ส่ง หรือเพื่อดำเนินการบางฟังก์ชันที่ไม่สามารถทำได้จากลำดับการหลีกเลี่ยง:
| ^ | C0 | ตัวย่อ | ลำดับการหลบหนี C | ชื่อ | ผล |
|---|---|---|---|---|---|
| ^G | 0x07 | เบล | \a | กระดิ่ง | ทำให้เกิดเสียงดัง |
| ^H | 0x08 | ปริญญาตรี | \b | ลบ | เลื่อนเคอร์เซอร์ไปทางซ้าย (แต่จะ "ขึ้นบรรทัดใหม่" หากเคอร์เซอร์อยู่ที่ต้นบรรทัด) |
| ^ฉัน | 0x09 | เอชที | \t | แท็บ | เลื่อนเคอร์เซอร์ไปทางขวาไปยังตำแหน่งแท็บถัดไป |
| ^J | 0x0A | แอลเอฟ | \n | สายป้อน | เลื่อนไปยังบรรทัดถัดไป และเลื่อนหน้าจอขึ้นหากอยู่ด้านล่างสุดของหน้าจอ โดยปกติจะไม่เลื่อนในแนวนอน แต่โปรแกรมไม่ควรพึ่งพาการทำงานนี้เพียงอย่างเดียว |
| ^L | 0x0C | เอฟเอฟ | \f | ฟีดแบบฟอร์ม | ย้ายเครื่องพิมพ์ไปไว้ด้านบนของหน้าถัดไป โดยปกติแล้วจะไม่เลื่อนในแนวนอน แต่โปรแกรมไม่ควรพึ่งพาการทำงานนี้ ผลลัพธ์ที่แสดงบนจอมอนิเตอร์วิดีโออาจแตกต่างกันไป |
| ^M | 0x0D | ซีอาร์ | \r | การส่งคืนรถขนส่ง | ย้ายเคอร์เซอร์ไปที่คอลัมน์ศูนย์ |
| ^[ | 0x1B | เอสเอส | \x1B,\033 | หนี | เริ่มลำดับการหลบหนีทั้งหมด |
ลำดับการหลีกเลี่ยงมีความยาวแตกต่างกัน รูปแบบทั่วไปสำหรับลำดับการหลีกเลี่ยงที่สอดคล้องกับ ANSI กำหนดโดยANSI X3.41 (เทียบเท่ากับ ECMA-35 หรือ ISO/IEC 2022) [ 15 ] : 13.1 ลำดับการหลีกเลี่ยงประกอบด้วยไบต์ในช่วง0x20—0x7F เท่านั้น (อักขระ ASCII ที่ไม่ใช่ตัวควบคุมทั้งหมด) และสามารถแยกวิเคราะห์ได้โดยไม่ต้องมองไปข้างหน้า พฤติกรรมเมื่อพบอักขระควบคุม ไบต์ที่มีบิตสูงตั้งค่า หรือไบต์ที่ไม่ใช่ส่วนหนึ่งของลำดับที่ถูกต้องใดๆ ก่อนสิ้นสุดนั้นไม่แน่นอน
ลำดับการหลบหนี Fe
หากESCตามด้วยไบต์ในช่วง 0x40 ถึง 0x5F ลำดับการหลีกเลี่ยงจะเป็นประเภทFeการตีความจะถูกมอบหมายให้กับมาตรฐานรหัสควบคุม C1 ที่เกี่ยวข้อง [ 15 ] : 13.2.1 ดังนั้น ลำดับการหลีกเลี่ยงทั้งหมดที่สอดคล้องกับรหัสควบคุม C1 จาก ANSI X3.64 / ECMA-48 จึงใช้รูปแบบนี้[ 16 ] : 5.3.a
มาตรฐานระบุว่า ในสภาพแวดล้อม 8 บิต ฟังก์ชันควบคุมที่สอดคล้องกับFeลำดับการหลีกเลี่ยงประเภท (จากชุดรหัสควบคุม C1 ) สามารถแสดงเป็นไบต์เดียวในช่วง 0x80–0x9F ได้[ 16 ] : 5.3.b ซึ่งเป็นไปได้ในการเข้ารหัสอักขระที่สอดคล้องกับข้อกำหนดสำหรับรหัส 8 บิตที่สร้างขึ้นใน ISO 2022 เช่น ชุด ISO 8859อย่างไรก็ตาม ในการเข้ารหัสอักขระที่ใช้ในอุปกรณ์สมัยใหม่ เช่นUTF-8หรือCP-1252รหัสเหล่านั้นมักถูกใช้เพื่อวัตถุประสงค์อื่น ดังนั้นโดยทั่วไปจึงใช้เฉพาะลำดับ 2 ไบต์เท่านั้น ในกรณีของ UTF-8 การแสดงรหัสควบคุม C1 ผ่าน บล็อก C1 Controls และ Latin-1 Supplementจะส่งผลให้ได้รหัสสองไบต์ที่แตกต่างกัน (เช่น0xC2,0x8EสำหรับU+008E ) แต่วิธีนี้ไม่ได้ช่วยประหยัดพื้นที่
| รหัส | ซี1 | ตัวย่อ | ชื่อ | ผล |
|---|---|---|---|---|
| เอสเอสซี เอ็น | 0x8E | เอสเอส2 | กะเดียวสอง | เลือกอักขระตัวเดียวจากชุดอักขระทาง เลือกชุดใดชุดหนึ่ง SS2 เลือกชุดอักขระ G2 และ SS3 เลือกชุดอักขระ G3 [ 17 ]ในสภาพแวดล้อม 7 บิต จะตามด้วยไบต์ GL หนึ่งตัวหรือมากกว่า (0x20–0x7F) ที่ระบุอักขระจากชุดนั้น[ 15 ] : 9.4 ในสภาพแวดล้อม 8 บิต อาจเป็นไบต์ GR แทน (0xA0–0xFF) [ 15 ] : 8.4 |
| เอสเอส โอ | 0x8F | เอสเอส3 | กะเดียวสาม | |
| เอสเอสซี พี | 0x90 | ดีซีเอส | สตริงควบคุมอุปกรณ์ | ยุติโดย ST [ 16 ] : 5.6 การใช้งานลำดับนี้ของ Xterm รวมถึงการกำหนดคีย์ที่ผู้ใช้กำหนด และการขอหรือตั้งค่าข้อมูล Termcap/Terminfo [ 17 ] |
| เอสซี [ | 0x9B | ซีเอสไอ | ตัวแนะนำลำดับควบคุม | เริ่มต้นลำดับที่มีประโยชน์ส่วนใหญ่ โดยสิ้นสุดด้วยไบต์ในช่วง 0x40 ถึง 0x7E [ 16 ] : 5.4 |
| เอสซี | 0x9C | ส. | ตัวจบสตริง | ยุติสตริงในตัวควบคุมอื่นๆ[ 16 ] : 8.3.143 |
| ESC ] | 0x9D | โอเอสซี | คำสั่งระบบปฏิบัติการ | เริ่มต้นสตริงควบคุมสำหรับระบบปฏิบัติการที่จะใช้ โดยสิ้นสุดด้วย ST [ 16 ] : 8.3.89 |
| เอสเอสเอ็กซ์ | 0x98 | เอสโอเอส | จุดเริ่มต้นของสตริง | รับอาร์กิวเมนต์เป็นสตริงข้อความที่ลงท้ายด้วย ST [ 16 ] : 5.6 การใช้งานลำดับควบคุมสตริงเหล่านี้ถูกกำหนดโดยแอปพลิเคชัน[ 16 ] : 8.3.2, 8.3.128 หรือระเบียบวินัยความเป็นส่วนตัว[ 16 ] : 8.3.94 ฟังก์ชันเหล่านี้ไม่ค่อยได้ถูกนำมาใช้งาน และอาร์กิวเมนต์จะถูกละเลยโดย xterm [ 17 ] ไคลเอนต์ Kermitบางตัวอนุญาตให้เซิร์ฟเวอร์ดำเนินการคำสั่ง Kermit บนไคลเอนต์โดยอัตโนมัติโดยการฝังคำสั่งเหล่านั้นไว้ในลำดับ APC ซึ่งเป็นความเสี่ยงด้านความปลอดภัยที่อาจเกิดขึ้นได้หากเซิร์ฟเวอร์ไม่น่าเชื่อถือ[ 18 ] |
| ESC ^ | 0x9E | นายกรัฐมนตรี | ข้อความเกี่ยวกับความเป็นส่วนตัว | |
| เอสซีเอส _ | 0x9F | เอพีซี | คำสั่งโปรแกรมแอปพลิเคชัน |
คำสั่งแนะนำลำดับควบคุม
สำหรับคำสั่ง Control Sequence Introducer หรือ CSI นั้นESC [(เขียนเป็น\e[หรือ\x1b[ใน\033[ภาษาโปรแกรมหลายภาษา) จะตามด้วย "ไบต์พารามิเตอร์" จำนวนใดก็ได้ (รวมถึงไม่มีเลย) ในช่วง 0x30–0x3F (ASCII 0–9:;<=>?) จากนั้นตามด้วย "ไบต์กลาง" จำนวนใดก็ได้ในช่วง 0x20–0x2F (ASCII space และ!"#$%&'()*+,-./) และสุดท้ายตามด้วย "ไบต์สุดท้าย" หนึ่งไบต์ในช่วง 0x40–0x7E (ASCII @A–Z[\]^_`a–z{|}~) [ 16 ] : 5.4
ลำดับทั่วไปทั้งหมดใช้พารามิเตอร์เป็นชุดตัวเลขที่คั่นด้วยเครื่องหมายเซมิโคลอน เช่น1;2;3. [ 16 ] : 5.4.2 ตัวเลขที่หายไปจะถูกจัดการเป็น0( 1;;3ทำหน้าที่เหมือนตัวเลขตรงกลางคือ0และไม่มีพารามิเตอร์เลยในESC[mทำหน้าที่เหมือน0รหัสรีเซ็ต) ลำดับบางอย่าง (เช่น CUU) จะจัดการ0เป็น1เพื่อให้พารามิเตอร์ที่หายไปมีประโยชน์[ 16 ] : F.4.2
ชุดย่อยของการจัดเรียงถูกประกาศให้เป็น "ส่วนตัว" เพื่อให้ผู้ผลิตเทอร์มินัลสามารถแทรกลำดับของตนเองได้โดยไม่ขัดแย้งกับมาตรฐาน ลำดับที่มีไบต์พารามิเตอร์<=>?หรือไบต์สุดท้าย 0x70–0x7E ( p–z{|}~) ถือเป็นส่วนตัว
พฤติกรรมของเทอร์มินัลจะไม่แน่นอนในกรณีที่ลำดับ CSI มีอักขระใดๆ ที่อยู่นอกช่วง 0x20–0x7E อักขระที่ผิดกฎหมายเหล่านี้คือ อักขระควบคุม C0 (ช่วง 0–0x1F), DEL (0x7F) หรือไบต์ที่มีบิตสูงถูกตั้งค่าไว้ การตอบสนองที่เป็นไปได้คือ การละเว้นไบต์นั้น การประมวลผลทันที และนอกจากนี้ยังสามารถเลือกได้ว่าจะดำเนินการต่อในลำดับ CSI ยกเลิกทันที หรือละเว้นส่วนที่เหลือ
| รหัส[ก] | ตัวย่อ | ชื่อ | ผล |
|---|---|---|---|
| ซีเอสไอเอ็นเอ | CUU | เคอร์เซอร์ขึ้น | เลื่อนเคอร์เซอร์ไป n เซลล์ (ค่าเริ่มต้น1) ในทิศทางที่กำหนด หากเคอร์เซอร์อยู่ขอบหน้าจออยู่แล้ว จะไม่มีผลใดๆ |
| ซีเอสไอเอ็นบี | ซีดี | เคอร์เซอร์ลง | |
| ซีเอสไอเอ็นซี | คัฟ | เคอร์เซอร์ไปข้างหน้า | |
| ซีเอสไอเอ็นดี | คิวบ์ | เคอร์เซอร์ย้อนกลับ | |
| ซีเอสไอเอ็นอี | ซีเอ็นแอล | เคอร์เซอร์บรรทัดถัดไป | เลื่อนเคอร์เซอร์ไปที่ต้นบรรทัด ถัดไป n บรรทัด (ค่าเริ่มต้น1) (ไม่ใช่ANSI.SYS ) |
| ซีเอสไอเอ็นเอฟ | ซีพีแอล | เคอร์เซอร์ บรรทัดก่อนหน้า | ย้ายเคอร์เซอร์ไปที่ต้นบรรทัดn (ค่าเริ่มต้น1) ให้ขึ้นบรรทัดใหม่ (ไม่ใช่ANSI.SYS ) |
| ซีเอสไอเอ็นจี | ชา | เคอร์เซอร์แนวนอนสัมบูรณ์ | ย้ายเคอร์เซอร์ไปยังคอลัมน์n (ค่าเริ่มต้น1) (ไม่ใช่ANSI.SYS ) |
| ซีเอสไอ เอ็น ; เอ็ม เอช | ถ้วย | ตำแหน่งเคอร์เซอร์ | ย้ายเคอร์เซอร์ไปที่แถวnคอลัมน์mค่าจะเริ่มต้นที่ 1 และจะใช้ค่าเริ่มต้นเป็น1(มุมบนซ้าย) หากไม่ได้ระบุไว้ ลำดับเช่นนี้CSI ;5Hเป็นคำพ้องความหมายของ เช่นเดียวCSI 1;5Hกับ และ ก็CSI 17;HเหมือนกับCSI 17HและCSI 17;1H |
| ซีเอสไอเอ็นเจ | อีดี | ลบในหน้าจอ | ล้างส่วนหนึ่งของหน้าจอ หากnเป็น0ค่าว่าง (หรือไม่มีค่า) จะล้างตั้งแต่เคอร์เซอร์ไปจนถึงสุดหน้าจอ หากnเป็น1ค่าว่าง จะล้างตั้งแต่เคอร์เซอร์ไปจนถึงต้นหน้าจอ หากnเป็น2ค่าว่าง จะล้างทั้งหน้าจอ (และย้ายเคอร์เซอร์ไปที่มุมบนซ้ายบน DOS ANSI.SYS ) หากnเป็น3ค่าว่าง จะล้างทั้งหน้าจอและลบทุกบรรทัดที่บันทึกไว้ในบัฟเฟอร์การเลื่อนย้อนหลัง (คุณสมบัตินี้ถูกเพิ่มเข้ามาสำหรับxtermและได้รับการสนับสนุนโดยแอปพลิเคชันเทอร์มินัลอื่นๆ) |
| ซีเอสไอแอนด์เค | อีแอล | ลบในบรรทัด | ลบส่วนหนึ่งของบรรทัด หากnเป็นค่าว่าง0(หรือไม่มีค่า) ให้ล้างข้อความตั้งแต่เคอร์เซอร์ไปจนถึงท้ายบรรทัด หากnเป็น1ค่าว่าง ให้ล้างข้อความตั้งแต่เคอร์เซอร์ไปจนถึงต้นบรรทัด หากnเป็น2ค่าว่าง ให้ล้างทั้งบรรทัด ตำแหน่งเคอร์เซอร์จะไม่เปลี่ยนแปลง |
| ซีเอสไอเอ็นเอส | SU | เลื่อนขึ้น | เลื่อนหน้าทั้งหมดขึ้นด้านบนn บรรทัด (ค่าเริ่มต้น1) บรรทัดใหม่จะถูกเพิ่มที่ด้านล่าง (ไม่ใช่ANSI.SYS ) |
| ซีเอสไอเอ็นที | เอสดี | เลื่อนลง | เลื่อนหน้าทั้งหมดลงมาn บรรทัด (ค่าเริ่มต้น1) บรรทัดใหม่จะถูกเพิ่มที่ด้านบน (ไม่ใช่ANSI.SYS ) |
| ซีเอสไอเอ็น ; เอ็ม เอฟ | เอชวีพี | ตำแหน่งแนวนอนแนวตั้ง | เช่นเดียวกับ CUP แต่ถือเป็นฟังก์ชันตัวดำเนินการรูปแบบ (เช่นCRหรือLF ) แทนที่จะเป็นฟังก์ชันตัวแก้ไข (เช่น CUD หรือ CNL) ซึ่งอาจนำไปสู่การจัดการที่แตกต่างกันในโหมดเทอร์มินัลบางโหมด[ 16 ] : ภาคผนวก A |
| ซีเอสไอเอ็นเอ็ม | เอสจีอาร์ | เลือกการแสดงผลกราฟิก | กำหนดสีและรูปแบบของตัวอักษรตามโค้ดนี้ |
| ซีเอสไอ 5ไอ | พอร์ต AUX เปิดใช้งาน | เปิดใช้งานพอร์ตอนุกรมเสริม โดยปกติจะใช้สำหรับเครื่องพิมพ์อนุกรมในพื้นที่ | |
| ซีเอสไอ 4ไอ | พอร์ต AUX ปิด | โดยปกติแล้วควรปิดใช้งานพอร์ตอนุกรมเสริมสำหรับเครื่องพิมพ์อนุกรมในพื้นที่ | |
| ซีเอสไอ 6เอ็น | ดีเอสอาร์ | รายงานสถานะอุปกรณ์ | รายงานตำแหน่งเคอร์เซอร์ (CPR) โดยการส่งค่า โดยESC[n;mRที่nคือแถว และmคือคอลัมน์ |
| รหัส | ตัวย่อ | ชื่อ | ผล |
|---|---|---|---|
| ซีเอสไอ | SCP, SCOSC | บันทึกตำแหน่งเคอร์เซอร์ปัจจุบัน | บันทึกตำแหน่ง/สถานะเคอร์เซอร์ในโหมดคอนโซล SCO [ 19 ]ในโหมดแบ่งหน้าจอแนวตั้ง ใช้เพื่อตั้งค่า (เช่น) หรือรีเซ็ตระยะขอบซ้ายและขวา[ 20 ]CSI n ; n s |
| ซีเอสไอ ยู | อาร์ซีพี, สกอร์ค | กู้คืนตำแหน่งเคอร์เซอร์ที่บันทึกไว้ | คืนค่าตำแหน่ง/สถานะเคอร์เซอร์ในโหมดคอนโซล SCO [ 21 ] |
| ซีเอสไอ? 25 ชั่วโมง | เดคท์เซม | แสดง เคอร์เซอร์จากVT220 | |
| ซีเอสไอ ? 25 ลิตร | เดคท์เซม | ซ่อนเคอร์เซอร์ | |
| ซีเอสไอ ? 1004 ชั่วโมง | เปิดใช้งานการรายงานโฟกัส รายงานจะแสดงเมื่อใดก็ตามที่โปรแกรมจำลองเทอร์มินัลเข้าหรือออกจากโฟกัสเป็นESC [IและESC [Oตามลำดับ | ||
| ซีเอสไอ ? 1004 l | ปิดใช้งานการโฟกัสการรายงาน | ||
| ซีเอสไอ ? 1049 น. | เปิดใช้งานบัฟเฟอร์หน้าจอทางเลือกจาก xterm | ||
| ซีเอสไอ ? 1049 l | ปิดใช้งานบัฟเฟอร์หน้าจอทางเลือกจาก xterm | ||
| ซีเอสไอ ? 2004 h | เปิดใช้งานโหมดวางแบบวงเล็บ[ 22 ]ในโหมดวางแบบวงเล็บ ข้อความที่วางลงในเทอร์มินัลจะถูกล้อมรอบด้วยESC [200~และESC [201~; โปรแกรมที่ทำงานในเทอร์มินัลไม่ควรถือว่าอักขระที่อยู่ในวงเล็บเหล่านั้นเป็นคำสั่ง ( เช่น Vimไม่ถือว่าอักขระเหล่านั้นเป็นคำสั่ง) [ 23 ]จาก xterm [ 24 ] | ||
| ซีเอสไอ ? 2004 l | ปิดโหมดวางข้อความแบบมีวงเล็บ |
เลือกพารามิเตอร์การแสดงผลกราฟิก
ลำดับการควบคุมที่ชื่อว่า Select Graphic Rendition (SGR) จะตั้งค่าคุณลักษณะการแสดงผล คุณลักษณะหลายอย่างสามารถตั้งค่าได้ในลำดับเดียวกัน โดยคั่นด้วยเครื่องหมายเซมิโคลอน[ 25 ]คุณลักษณะการแสดงผลแต่ละรายการจะยังคงมีผลจนกว่า SGR ครั้งต่อไปจะรีเซ็ต[ 16 ]หากไม่มีรหัสใด ๆจะถือว่าเป็น(รีเซ็ต / ปกติ) CSI n mCSI mCSI 0 m
| n | ชื่อ | บันทึก |
|---|---|---|
| 0 | รีเซ็ตหรือปกติ | คุณสมบัติทั้งหมดจะถูกปิดใช้งาน |
| 1 | เข้มข้นขึ้นหรือเพิ่มขึ้น | เช่นเดียวกับอาการจาง การเปลี่ยนสีเป็นสิ่งประดิษฐ์ของ PC (SCO / CGA ) [ 26 ] |
| 2 | จางลง ความเข้มลดลงหรือมืดลง | อาจนำไปใช้เป็นน้ำหนักตัวอักษร เบา เช่น ตัวหนา[ 27 ] |
| 3 | ตัวเอียง | ไม่ได้รับการสนับสนุนอย่างกว้างขวาง บางครั้งถือว่าเป็นการกลับด้านหรือการกระพริบ[ 26 ] |
| 4 | ขีดเส้นใต้ | มีส่วนขยายสไตล์สำหรับ Kitty, VTE, mintty, iTerm2 และ Konsole [ 28 ] [ 29 ] [ 30 ] |
| 5 | กระพริบตาช้าๆ | ตั้งค่าการกระพริบให้น้อยกว่า 150 ครั้งต่อนาที |
| 6 | กระพริบตาถี่ๆ | MS-DOS ANSI.SYS, มากกว่า 150 ครั้งต่อนาที; ไม่ได้รับการสนับสนุนอย่างแพร่หลาย |
| 7 | วิดีโอย้อนกลับหรือกลับด้าน | สลับสีพื้นหน้าและพื้นหลัง |
| 8 | ปกปิดหรือซ่อนเร้น | ไม่ได้รับการสนับสนุนอย่างกว้างขวาง |
| 9 | ขีดฆ่าหรือขีด ฆ่า | ตัวอักษรยังอ่านได้ แต่มีเครื่องหมายเหมือนจะถูกลบ ไม่รองรับใน Terminal.app |
| 10 | แบบอักษรหลัก (ค่าเริ่มต้น) | |
| 11–19 | แบบอักษรทางเลือก | เลือกแบบอักษรอื่นn − 10 |
| 20 | ฟรักตูร์ (โกธิค) | ไม่ค่อยได้รับการสนับสนุน |
| 21 | ขีดเส้นใต้สองครั้ง; หรือ: ไม่เป็นตัวหนา | ขีดเส้นใต้สองครั้งตาม ECMA-48 [ 16 ] : 8.3.117 แต่กลับปิดใช้งานความเข้มของตัวหนาในเทอร์มินัลหลายตัว รวมถึงในคอนโซลของเคอร์เนล Linuxก่อนเวอร์ชัน 4.17 [ 31 ] |
| 22 | ความเข้มปกติ | ไม่เข้มหรือจางจนเกินไป สีจะเปลี่ยนไปเมื่อมีการกำหนดความเข้มของสี |
| 23 | ไม่ใช่ทั้งตัวเอียงหรือตัวเขียนสีดำ | |
| 24 | ไม่ขีดเส้นใต้ | ไม่ขีดเส้นใต้เดี่ยวหรือขีดเส้นใต้คู่ |
| 25 | ไม่กระพริบตา | ปิดไฟกระพริบ |
| 26 | การเว้นระยะห่างตามสัดส่วน | มาตรฐาน ITU T.61และ T.416 ไม่ปรากฏว่ามีการใช้งานในเทอร์มินัลหรือไม่ |
| 27 | ไม่ได้กลับด้าน | |
| 28 | เปิดเผย | ไม่ได้ปกปิด |
| 29 | ไม่ได้ขีดฆ่า | |
| 30–37 | ตั้งค่า สีพื้นหน้า | |
| 38 | ตั้งค่า สีพื้นหน้า | ข้อโต้แย้งถัดไปคือ5;nหรือ2;r;g;b |
| 39 | สีพื้นหน้าเริ่มต้น | การดำเนินการได้รับการกำหนดไว้แล้ว (ตามมาตรฐาน) |
| 40–47 | ตั้งค่า สีพื้นหลัง | |
| 48 | ตั้งค่า สีพื้นหลัง | ข้อโต้แย้งถัดไปคือ5;nหรือ2;r;g;b |
| 49 | สีพื้นหลังเริ่มต้น | การดำเนินการได้รับการกำหนดไว้แล้ว (ตามมาตรฐาน) |
| 50 | ปิดใช้งานการเว้นระยะห่างตามสัดส่วน | ที.61 และ ที.416 |
| 51 | กรอบรูป | นำไปใช้เป็น " ตัวเลือกรูปแบบอิโมจิ " ใน mintty [ 32 ] |
| 52 | ถูกล้อมรอบ | |
| 53 | ขีดเส้นทับ | ไม่รองรับใน Terminal.app |
| 54 | ไม่มีกรอบหรือวงกลมล้อมรอบ | |
| 55 | ไม่ขีดเส้นทับ | |
| 58 | กำหนดสี เส้นใต้ | ไม่ได้อยู่ในมาตรฐาน; นำไปใช้ใน Kitty, VTE, mintty และ iTerm2 [ 28 ] [ 29 ]อาร์กิวเมนต์ถัดไป5;n คือ หรือ2;r;g;b |
| 59 | สีเส้นใต้เริ่มต้น | ไม่ได้อยู่ในมาตรฐาน; นำไปใช้ใน Kitty, VTE, mintty และ iTerm2 [ 28 ] [ 29 ] |
| 60 | เส้นใต้หรือเส้นด้านขวาของอักษรภาพ | ไม่ค่อยได้รับการสนับสนุน |
| 61 | อักษรภาพที่มีเส้นขีดใต้สองเส้นหรือเส้นขีดสองเส้นทางด้านขวา | |
| 62 | เส้นขีดทับหรือเส้นด้านซ้ายของอักษรภาพ | |
| 63 | อักษรภาพที่มีเส้นขีดสองเส้นพาดผ่านหรือเส้นขีดสองเส้นทางด้านซ้าย | |
| 64 | การเน้นเสียงด้วยอักษรภาพ | |
| 65 | ไม่มีคุณลักษณะของอักษรภาพ | รีเซ็ตผลกระทบทั้งหมดของ60–64 |
| 73 | ตัวยก | ใช้งานเฉพาะใน mintty [ 32 ] |
| 74 | ตัวห้อย | |
| 75 | ไม่ใช่ทั้งตัวยกหรือตัวห้อย | |
| 90–97 | ตั้งค่าสีพื้นหน้าให้สว่างสดใส | ไม่ได้อยู่ในมาตรฐาน เดิมทีใช้งานโดย aixterm [ 17 ] |
| 100–107 | ตั้งค่าสีพื้นหลังให้สว่าง |
สี
3 บิตและ 4 บิต
ข้อกำหนดดั้งเดิมมีเพียง 8 สี และตั้งชื่อให้เท่านั้น พารามิเตอร์ SGR 30–37 เลือกสีพื้นหน้า ในขณะที่ 40–47 เลือกสีพื้นหลัง เทอร์มินัลจำนวนมากใช้สี "ตัวหนา" (รหัส SGR 1) เป็นสีที่สว่างกว่าแทนที่จะใช้แบบอักษรที่แตกต่างกัน ทำให้มีสีพื้นหน้าเพิ่มอีก 8 สี โดยปกติแล้วคุณจะไม่สามารถใช้สีเหล่านี้เป็นสีพื้นหลังได้ แม้ว่าบางครั้งวิดีโอแบบกลับสี (รหัส SGR 7) จะอนุญาตให้ทำได้ ตัวอย่างเช่น หากต้องการตัวอักษรสีดำบนพื้นหลังสีขาว ให้ใช้ESC[30;47mหากต้องการสีแดง ให้ใช้ESC[31mหากต้องการสีแดงสด ให้ใช้ESC[1;31mหากต้องการรีเซ็ตสีเป็นค่าเริ่มต้น ให้ใช้ESC[39;49m(ไม่รองรับในบางเทอร์มินัล) หรือรีเซ็ตคุณสมบัติทั้งหมดด้วยESC[0mเทอร์มินัลรุ่นต่อมาเพิ่มความสามารถในการระบุสี "สว่าง" โดยตรงด้วย 90–97 และ 100–107
แผนภูมิด้านล่างแสดงตัวอย่างบางส่วนของวิธีที่มาตรฐานคลาสสิกและโปรแกรมจำลองเทอร์มินัล สมัยใหม่ แปลงรหัสสี 4 บิตเป็นรหัสสี 24 บิต
| เอฟจี | บีจี | ชื่อ | ซีจีเอ/อีจีเอ/วีจีเอ | คอนโซล Windows [ b ] | Windows PowerShell& 1.0–6.0 [ c ] | Visual Studio Code [ d ] | คอนโซลWindows 10 [ e ] | เทอร์มินัลแอป | พุตตี้ | เอ็มไออาร์ซี | เอ็กซ์เทอร์ม | อูบันตู[ฟ] | เทอร์มินัล Eclipse |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 30 | 40 | สีดำ | 0, 0, 0 | 12, 12, 12 | 0, 0, 0 | 1, 1, 1 | 0, 0, 0 | ||||||
| 31 | 41 | สีแดง | 196, 0, 0 | 128, 0, 0 | 205, 49, 49 | 197, 15, 31 | 153, 0, 0 | 187, 0, 0 | 127, 0, 0 | 205, 0, 0 | 222, 56, 43 | 205, 0, 0 | |
| 32 | 42 | สีเขียว | 0, 196, 0 | 0, 128, 0 | 13, 188, 121 | 19, 161, 14 | 0, 166, 0 | 0, 187, 0 | 0, 147, 0 | 0, 205, 0 | 57, 181, 74 | 0, 205, 0 | |
| 33 | 43 | สีเหลือง | 196, 126, 0 | 128, 128, 0 | 238, 237, 240 | 229, 229, 16 | 193, 156, 0 | 153, 153, 0 | 187, 187, 0 | 252, 127, 0 | 205, 205, 0 | 255, 199, 6 | 205, 205, 0 |
| 34 | 44 | สีฟ้า | 0, 0, 196 | 0, 0, 128 | 36, 114, 200 | 0, 55, 218 | 0, 0, 178 | 0, 0, 187 | 0, 0, 127 | 0, 0, 238 [ 34 ] | 0, 111, 184 | 0, 0, 238 | |
| 35 | 45 | แมเจนต้า | 196, 0, 196 | 128, 0, 128 | 1, 36, 86 | 188, 63, 188 | 136, 23, 152 | 178, 0, 178 | 187, 0, 187 | 156, 0, 156 | 205, 0, 205 | 118, 38, 113 | 205, 0, 205 |
| 36 | 46 | สีฟ้าอมเขียว | 0, 196, 196 | 0, 128, 128 | 17, 168, 205 | 58, 150, 221 | 0, 166, 178 | 0, 187, 187 | 0, 147, 147 | 0, 205, 205 | 44, 181, 233 | 0, 205, 205 | |
| 37 | 47 | สีขาว | 196, 196, 196 | 192, 192, 192 | 229, 229, 229 | 204, 204, 204 | 191, 191, 191 | 187, 187, 187 | 210, 210, 210 | 229, 229, 229 | 204, 204, 204 | 229, 229, 229 | |
| 90 | 100 | สีดำสนิท (สีเทา) | 78, 78, 78 | 128, 128, 128 | 102, 102, 102 | 118, 118, 118 | 102, 102, 102 | 85, 85, 85 | 127, 127, 127 | 127, 127, 127 | 128, 128, 128 | 0, 0, 0 | |
| 91 | 101 | สีแดงสด | 220, 78, 78 | 255, 0, 0 | 241, 76, 76 | 231, 72, 86 | 230, 0, 0 | 255, 85, 85 | 255, 0, 0 | ||||
| 92 | 102 | สีเขียวสดใส | 78, 220, 78 | 0, 255, 0 | 35, 209, 139 | 22, 198, 12 | 0, 217, 0 | 85, 255, 85 | 0, 252, 0 | 0, 255, 0 | |||
| 93 | 103 | สีเหลืองสดใส | 243, 243, 78 | 255, 255, 0 | 245, 245, 67 | 249, 241, 165 | 230, 230, 0 | 255, 255, 85 | 255, 255, 0 | ||||
| 94 | 104 | สีน้ำเงินสดใส | 78, 78, 220 | 0, 0, 255 | 59, 142, 234 | 59, 120, 255 | 0, 0, 255 | 85, 85, 255 | 0, 0, 252 | 92, 92, 255 [ 35 ] | 0, 0, 255 | 92, 92, 255 | |
| 95 | 105 | สีม่วงแดงสดใส | 243, 78, 243 | 255, 0, 255 | 214, 112, 214 | 180, 0, 158 | 230, 0, 230 | 255, 85, 255 | 255, 0, 255 | ||||
| 96 | 106 | สีฟ้าสดใส | 78, 243, 243 | 0, 255, 255 | 41, 184, 219 | 97, 214, 214 | 0, 230, 230 | 85, 255, 255 | 0, 255, 255 | ||||
| 97 | 107 | สีขาวสว่าง | 255, 255, 255 | 229, 229, 229 | 242, 242, 242 | 230, 230, 230 | 255, 255, 255 | ||||||
8 บิต
เมื่อ ตารางค้นหา สี 256 สีกลายเป็นเรื่องปกติบนการ์ดกราฟิก จึงมีการเพิ่มลำดับการหลีกเลี่ยงเพื่อเลือกจากชุดสี 256 สีที่กำหนดไว้ล่วงหน้า: [ 36 ]
ESC[38;5; ⟨n⟩ m เลือกสีพื้นหน้า โดยที่ n คือตัวเลขจากตารางด้านล่าง ESC[48;5; ⟨n⟩ m เลือกสีพื้นหลัง 0-7: สีมาตรฐาน (เช่นเดียวกับใน ESC [30–37 ม.]) 8-15: สีที่มีความเข้มสูง (เช่นเดียวกับใน ESC [90–97 ม.]) 16-231: ลูกบาศก์ 6 × 6 × 6 (216 สี): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5) 232-255: ระดับสีเทาจากเข้มไปอ่อนใน 24 ระดับ
สีที่แสดงโดยค่าเหล่านี้จะแตกต่างกันไปตามการใช้งานเทอร์มินัล/อีมูเลเตอร์ เนื่องจากข้อกำหนด ECMA-48 และ T.416 ของ ITU ที่ได้รับการยอมรับไม่ได้กำหนดจานสีเฉพาะสำหรับตารางค้นหานี้ แม้ว่าโดยทั่วไปจะใช้สูตรข้างต้นสำหรับจานสี แต่โดยเฉพาะอย่างยิ่งอัลกอริทึมและตัวเลือกสีสำหรับค่าคิวบ์ 16-231 จะแตกต่างกันไปตามการใช้งาน จานสีและอัลกอริทึมที่ใช้โดย XTerm ระบุไว้ด้านล่างเป็นตัวอย่าง[ 16 ] [ 37 ]
เทคโนโลยีสารสนเทศ T.416 ของ ITU - สถาปัตยกรรมเอกสารเปิด (ODA) และรูปแบบการแลกเปลี่ยน: สถาปัตยกรรมเนื้อหาอักขระ[ 37 ]ใช้ ":" เป็นอักขระคั่นแทน:
ESC[38:5: ⟨n⟩ m เลือกสีพื้นหน้า โดยที่ n คือตัวเลขจากตารางด้านล่าง ESC[48:5: ⟨n⟩ m เลือกสีพื้นหลัง
| โหมด 256 สี | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| พื้นหน้า: ESC[38;5;#m — ฉากหลัง: ESC[48;5;#m | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 216 สี | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | ||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ในการคำนวณค่า RGB ของสีในตารางด้านบนสามารถใช้ สคริปต์ Python ต่อไปนี้ได้:
# พิมพ์รายการค่าสีแดง/เขียว/น้ำเงิน 256 สีที่ใช้โดย xterm## อ้างอิง:# https://github.com/ThomasDickey/ncurses-snapshots/blob/master/test/xterm-16color.dat# https://github.com/ThomasDickey/xterm-snapshots/blob/master/XTerm-col.ad# https://github.com/ThomasDickey/xterm-snapshots/blob/master/256colres.plพิมพ์( "สี 0-15 สอดคล้องกับการตั้งชื่อตามมาตรฐาน ANSI และ aixterm" )สำหรับรหัสในช่วง( 0 , 16 ):ถ้าโค้ด> 8 :ระดับ= 255ถ้าโค้ดเท่ากับ7 :ระดับ= 229อื่น:ระดับ= 205r = 127 ถ้าcode == 8 มิฉะนั้นระดับถ้า( code & 1 ) != 0 มิฉะนั้น92 ถ้าcode == 12 มิฉะนั้น0g = 127 ถ้าcode == 8 มิฉะนั้นระดับถ้า( code & 2 ) != 0 มิฉะนั้น92 ถ้าcode == 12 มิฉะนั้น0b = 127 ถ้าcode == 8 มิฉะนั้น238 ถ้าcode == 4 มิฉะนั้นระดับถ้า( code & 4 ) != 0 มิฉะนั้น0พิมพ์( f " { code : 3d } : { r : 02X } { g : 02X } { b : 02X } " )พิมพ์( "สี 16-231 เป็นลูกบาศก์สีขนาด 6x6x6" )สำหรับสีแดงในช่วง( 0 , 6 ):สำหรับสีเขียวในช่วง( 0 , 6 ):สำหรับสีน้ำเงินในช่วง( 0 , 6 ):รหัส= 16 + ( สีแดง* 36 ) + ( สีเขียว* 6 ) + สีน้ำเงินr = สีแดง* 40 + 55 ถ้าสีแดง!= 0 มิฉะนั้น0g = green * 40 + 55 ถ้าgreen != 0 มิฉะนั้น0b = สีน้ำเงิน* 40 + 55 ถ้าสีน้ำเงินไม่เท่ากับ0 มิฉะนั้นจะเป็น 0พิมพ์( f " { code : 3d } : { r : 02X } { g : 02X } { b : 02X } " )พิมพ์( "สี 232-255 เป็นโทนสีเทาไล่ระดับ โดยจงใจไม่รวมสีดำและสีขาว" )สำหรับสีเทาในช่วง( 0 , 24 ):ระดับ= สีเทา* 10 + 8รหัส= 232 + สีเทาพิมพ์( f " { code : 3d } : { level : 02X } { level : 02X } { level : 02X } " )นอกจากนี้ยังมีการเข้ารหัสสี 88 สีที่คล้ายกันแต่ไม่เข้ากันโดยใช้ลำดับการหลีกเลี่ยงเดียวกัน ซึ่งพบได้ในrxvtและ[ 38xterm-88color ] โดยใช้ลูกบาศก์สีขนาด 4×4× 4
24 บิต
เมื่อการ์ดกราฟิก "สีจริง" ที่มีสี 16 ถึง 24 บิตกลายเป็นเรื่องปกติ แอปพลิเคชันต่างๆ ก็เริ่มรองรับสี 24 บิต โปรแกรมจำลองเทอร์มินัลที่รองรับการตั้งค่าสีพื้นหน้าและพื้นหลัง 24 บิตด้วยลำดับการหลีกเลี่ยง ได้แก่ Xterm [ 17 ] Konsoleของ KDE [ 39 ] [ 40 ] และ iTerm รวมถึงเทอ ร์มินัลที่ใช้ libvte ทั้งหมด[ 41 ]รวมถึงGNOME Terminal [ 42 ]
ESC[38;2; ⟨r⟩ ; ⟨g⟩ ; ⟨b⟩ m เลือกสีพื้นหน้า RGB ESC[48;2; ⟨r⟩ ; ⟨g⟩ ; ⟨b⟩ m เลือกสีพื้นหลัง RGB
ไวยากรณ์นี้ซึ่งเริ่มแรกนำมาใช้ใน XTerm นั้น อิงตามการตีความ ข้อกำหนด ISO/IEC 8613-6 โดยเฉพาะอย่างยิ่ง SGR 38 / SGR 48 ตามด้วยพารามิเตอร์ "2" สามารถระบุ "สีโดยตรง" ในพื้นที่ RGB ได้[ 43 ]การกำหนดค่า RGB โดยใช้ตัวคั่นเซมิโคลอนนี้ ซึ่งเป็นการใช้งานที่ใช้กันอย่างแพร่หลายเป็นครั้งแรก ได้รับการสนับสนุนอย่างกว้างขวางจากโปรแกรมจำลองเทอร์มินัลที่รองรับสี 24 บิต
เช่นเดียวกับรหัสสี 8 บิตมีข้อกำหนดที่คล้ายกันมากของสี 24 บิตในสถาปัตยกรรมเอกสารเปิด (ODA) และรูปแบบการแลกเปลี่ยนT.416 ของITU : สถาปัตยกรรมเนื้อหาอักขระ [ 37 ]ซึ่งได้รับการยอมรับเป็น ISO/IEC 8613-6 แต่สุดท้ายก็ล้มเหลวในเชิงพาณิชย์ เวอร์ชัน ODA มีความซับซ้อนมากกว่าและจึงไม่เข้ากันกับเวอร์ชันที่คั่นด้วยเครื่องหมายเซมิโคลอนข้างต้น:
- ใช้เครื่องหมายโคลอนเป็นตัวคั่น แทนที่จะใช้เครื่องหมายเซมิโคลอน
- พารามิเตอร์หลังเลข '2' (r, g และ b) เป็นตัวเลือกและสามารถเว้นว่างไว้ได้
- มี "รหัสสี" หลัก[ 17 ]คำจำกัดความของรหัสสีไม่ได้รวมอยู่ในข้อกำหนดนั้น ดังนั้นอาจเว้นว่างไว้เพื่อแสดงค่าเริ่มต้นที่ไม่ได้ระบุ สำหรับข้อกำหนดสี CMYK mintty จะตีความพารามิเตอร์รหัสสีว่าเป็นการระบุค่าสูงสุดที่ค่าช่องสัญญาณได้รับ (เช่น 100 หรือ 255) [ 32 ]
- นอกจากค่า '2' หลัง 48 เพื่อระบุรูปแบบสีแดง-เขียว-น้ำเงิน (และ '5' ด้านบนสำหรับสีที่มีดัชนี 0-255) ยังมีทางเลือกอื่นคือ '0' สำหรับสีที่กำหนดโดยการใช้งาน และ '1' สำหรับสีโปร่งใส ซึ่งทั้งสองอย่างนี้ไม่มีพารามิเตอร์เพิ่มเติมใดๆ '3' ระบุสีโดยใช้รูปแบบไซอัน-ม่วงแดง-เหลือง และ '4' สำหรับรูปแบบไซอัน-ม่วงแดง-เหลือง-ดำ โดยใช้ตำแหน่งที่ทำเครื่องหมายว่า "ไม่ได้ใช้งาน" สำหรับส่วนประกอบสีดำ[ 37 ]
ESC[38:2: ⟨Color-Space-ID⟩ : ⟨r⟩ : ⟨g⟩ : ⟨b⟩ : ⟨unused⟩ : ⟨ CS tolerance ⟩ : ⟨Color-Space⟩ m เลือกสีพื้นหน้า RGB ESC[48:2: ⟨Color-Space-ID⟩ : ⟨r⟩ : ⟨g⟩ : ⟨b⟩ : ⟨unused⟩ : ⟨CS tolerance⟩ : ⟨Color-Space⟩ m เลือกสีพื้นหลัง RGB
โดยที่Color-Spaceระบุพื้นที่สีที่เกี่ยวข้องกับค่าความคลาดเคลื่อนที่กำหนด: 0สำหรับ CIELUV หรือ1สำหรับ CIELAB
ข้อกำหนด RGB ที่ใช้เซมิโคลอนได้รับการสนับสนุนอย่างกว้างขวางที่สุด แต่ทั้งข้อกำหนดนี้และรูปแบบ RGB ของ ITU T.416 ได้รับการสนับสนุนจากโปรแกรมจำลองเทอร์มินัลหลายตัว[ 44 ] [ 45 ]
ตัวแปรสภาพแวดล้อม Unix ที่เกี่ยวข้องกับการรองรับสี
แทนที่จะใช้การรองรับสีใน termcap และ terminfo ที่แนะนำใน SVr3.2 (1987) [ 46 ]ไลบรารี S-Lang (เวอร์ชัน 0.99-32 มิถุนายน 1996) ใช้ตัวแปรสภาพแวดล้อมแยกต่างหาก$COLORTERMเพื่อระบุว่าโปรแกรมจำลองเทอร์มินัลสามารถใช้สีได้หรือไม่ และต่อมาได้เพิ่มค่าเพื่อระบุว่ารองรับสี 24 บิตหรือไม่[ 47 ] [ 48 ]ระบบนี้ถึงแม้จะมีเอกสารประกอบไม่ดีนัก แต่ก็แพร่หลายมากพอที่ Fedora และ RHEL จะพิจารณาใช้เป็นกลไกการตรวจจับที่ง่ายกว่าและเป็นสากลมากกว่าเมื่อเทียบกับการสอบถามไลบรารีที่ได้รับการอัปเดตแล้ว[ 49 ]
โปรแกรมจำลองเทอร์มินัลบางตัว (urxvt, Konsole) ตั้งค่า$COLORFGBGให้รายงานโทนสีของเทอร์มินัล (ส่วนใหญ่เป็นพื้นหลังสีอ่อนเทียบกับสีเข้ม) พฤติกรรมนี้มีต้นกำเนิดมาจาก S-Lang [ 48 ]และถูกใช้โดย vim Gnome-terminal ปฏิเสธที่จะเพิ่มพฤติกรรมนี้ เนื่องจากไวยากรณ์สำหรับค่าไม่เป็นที่ยอมรับ ค่าไม่สามารถเปลี่ยนแปลงได้เมื่อมีการเปลี่ยนแปลงจานสีในขณะรันไทม์ และมีลำดับ xterm OSC 4/10/11 ที่ "เหมาะสม" กว่าอยู่แล้ว[ 50 ]
การใช้NO_COLORตัวแปรสภาพแวดล้อมเพื่อปิดใช้งานสีโดยไม่มีเงื่อนไขกลาย เป็นเรื่องปกติแล้ว [ 51 ]
ลำดับคำสั่งของระบบปฏิบัติการ
ลำดับคำสั่งระบบปฏิบัติการส่วนใหญ่ถูกกำหนดโดย Xterm แต่หลายคำสั่งก็ได้รับการสนับสนุนโดยโปรแกรมจำลองเทอร์มินัลอื่นๆ ด้วยเหตุผลทางประวัติศาสตร์ Xterm สามารถจบคำสั่งด้วยBEL(0x07) เช่นเดียวกับมาตรฐานST(0x9C หรือ 0x1B 0x5C) [ 17 ]ตัวอย่างเช่น Xterm อนุญาตให้ตั้งชื่อไอคอนและชื่อหน้าต่างโดยESC ]0;this is the title BEL.
ส่วนขยายที่ไม่ใช่ xterm คือไฮเปอร์ลิงก์ESC ]8;;link STตั้งแต่ปี 2017 ซึ่งใช้โดย VTE [ 52 ] iTerm2 [ 52 ]และ mintty [ 53 ]และอื่นๆ[ 54 ]
คอนโซล Linux ใช้ESC ] P n rr gg bbเพื่อเปลี่ยนจานสี ซึ่งหากเขียนโค้ดแบบตายตัวลงในแอปพลิเคชัน อาจทำให้เทอร์มินัลอื่นค้างได้[ 55 ]อย่างไรก็ตามSTLinux จะไม่สนใจการเพิ่มต่อท้ายและสร้างลำดับที่เหมาะสมและไม่สนใจสำหรับเทอร์มินัลอื่น
ลำดับการหลบหนี Fs
หากESCตามด้วยไบต์ในช่วง0x60—0x7Eลำดับการหลีกเลี่ยงจะเป็นประเภทประเภทนี้ใช้สำหรับฟังก์ชันควบคุมที่ลงทะเบียนแยกกันกับรีจิสทรีISO-IR [ 56 ]ตารางของฟังก์ชันเหล่านี้แสดงอยู่ในISO/IEC 2022 Fs
ลำดับการหลบหนี Fp
หากESCตามด้วยไบต์ในช่วง0x30—0x3Fลำดับการหลีกเลี่ยงจะเป็นประเภทซึ่งถูกแยกไว้สำหรับฟังก์ชันควบคุมการใช้งานส่วนตัวสูงสุดสิบหกฟังก์ชัน[ 15 ] : 6.5.3 Fp
| ตัวย่อ | ชื่อ | ผล | |
|---|---|---|---|
| เอสซีอี 7 | เดคส์ซี | เคอร์เซอร์บันทึก DEC | บันทึกตำแหน่งเคอร์เซอร์ สถานะการเปลี่ยนการเข้ารหัส และคุณลักษณะการจัดรูปแบบ[ 57 ] [ 17 ] |
| เอสซีเอส 8 | เดคอาร์ซี | เคอร์เซอร์กู้คืน DEC | คืนค่าตำแหน่งเคอร์เซอร์ สถานะการเปลี่ยนการเข้ารหัส และคุณลักษณะการจัดรูปแบบจาก DECSC ก่อนหน้า หากมี มิฉะนั้นจะรีเซ็ตค่าเหล่านี้ทั้งหมดเป็นค่าเริ่มต้น[ 57 ] [ 17 ] |
ลำดับการหลบหนี nF
ถ้าESCตามด้วยไบต์ในช่วง0x20—0x2Fลำดับการหลีกเลี่ยงจะเป็นประเภทไบต์ดังกล่าวจะตามด้วยไบต์เพิ่มเติมจำนวนใดก็ได้ในช่วงนี้ จากนั้นตามด้วยไบต์ในช่วง0x30-0x7Eลำดับการหลีกเลี่ยงเหล่านี้จะถูกแบ่งย่อยเพิ่มเติมตามบิตสองบิตล่างของไบต์แรก เช่น "ประเภท" สำหรับลำดับที่ไบต์แรกคือ0x22และตามว่าไบต์สุดท้ายอยู่ในช่วง0x30—0x3Fซึ่งบ่งชี้การใช้งานส่วนตัว (เช่น "ประเภท") หรือไม่ (เช่น "ประเภท") [ 15 ] : 13.2.1 nF2F2Fp2Ft
ลำดับ ส่วนใหญ่nFtใช้สำหรับเปลี่ยนชุดอักขระปัจจุบัน และระบุไว้ในมาตรฐาน ISO/IEC 2022ส่วนลำดับอื่นๆ มีดังนี้:
| ตัวย่อ | ชื่อ | ผล | |
|---|---|---|---|
| เอสเอส เอสพี เอฟ |
|
| ตั้งค่าให้ปุ่มฟังก์ชันส่งค่า ESC + ตัวอักษร แทนที่จะส่งรหัส C1 แบบ 8 บิต |
| เอสเอส เอสพี จี |
|
| ทำให้ปุ่มฟังก์ชันส่งรหัส C1 แบบ 8 บิต |
หากไบต์แรกเป็น '#' ลำดับสาธารณะจะถูกสงวนไว้สำหรับฟังก์ชันควบคุมเฉพาะบุคคลที่ลงทะเบียน ISO-IR เพิ่มเติม[ 15 ] : 6.5.2 ปัจจุบันไม่มีการลงทะเบียนลำดับดังกล่าว[ 56 ] ลำดับ ประเภท3Fp(ซึ่งรวมถึงลำดับที่ขึ้นต้นด้วย '#') พร้อมใช้งานสำหรับฟังก์ชันควบคุมการใช้งานส่วนตัว[ 15 ] : 6.5.3
| ตัวย่อ | ชื่อ | ผล | |
|---|---|---|---|
| เอสซีเอส # 3 | เดคชลล. | ตัวอักษร DEC ความสูงสองเท่า ครึ่งบน | ทำให้บรรทัดปัจจุบันใช้ตัวอักษรที่มีความสูงเป็นสองเท่า โค้ดนี้ใช้สำหรับครึ่งบน[ 58 ] |
| เอสซีเอส # 4 | เดคชลล. | ตัวอักษร DEC ความสูงสองเท่า ครึ่งล่าง | ทำให้บรรทัดปัจจุบันใช้ตัวอักษรที่มีความสูงเป็นสองเท่า โค้ดนี้ใช้สำหรับครึ่งล่าง[ 58 ] |
| เอสซีเอส # 5 | เดคส์ดับเบิลยูแอล | สายเดี่ยว DEC | ทำให้บรรทัดปัจจุบันใช้ตัวอักขระความกว้างเดียว ตามพฤติกรรมเริ่มต้น[ 59 ] [ 17 ] |
| เอสซีเอส # 6 | เดคดับเบิลยูแอล | สาย DEC กว้างสองเท่า | ทำให้บรรทัดปัจจุบันใช้ตัวอักขระที่มีความกว้างเป็นสองเท่า โดยละทิ้งตัวอักขระใดๆ ในครึ่งหลังของบรรทัด[ 60 ] [ 17 ] |
ตัวอย่าง
CSI 2 J— การดำเนินการนี้จะล้างหน้าจอ และในบางอุปกรณ์ จะย้ายเคอร์เซอร์ไปยังตำแหน่ง y,x 1,1 (มุมบนซ้าย)
CSI 32 m— คำสั่งนี้จะทำให้ข้อความเป็นสีเขียว สีเขียวอาจเป็นสีเขียวเข้มหรือทึบ ดังนั้นคุณอาจต้องการเปิดใช้งานตัวหนาด้วยลำดับคำสั่งCSI 1 mเพื่อให้ได้สีเขียวสดใส หรือใช้ร่วมกับCSI 32 ; 1 mคำสั่งอื่น ๆ บางโปรแกรมใช้สถานะตัวหนาเพื่อทำให้ตัวอักษรดูสดใสขึ้น
CSI 0 ; 6 8 ; "DIR" ; 13 p— คำสั่งนี้จะกำหนดค่าใหม่ให้กับปุ่ม F10 เพื่อส่งสตริง "DIR" และปุ่ม ENTER ไปยังบัฟเฟอร์แป้นพิมพ์ ซึ่งในบรรทัดคำสั่ง DOS จะแสดงเนื้อหาของไดเร็กทอรีปัจจุบัน (เฉพาะ MS-DOS ANSI.SYS เท่านั้น) บางครั้งคำสั่งนี้ถูกใช้สำหรับANSI bombsนี่คือโค้ดสำหรับการใช้งานส่วนตัว (ตามที่ระบุด้วยตัวอักษร p) โดยใช้ส่วนขยายที่ไม่เป็นมาตรฐานเพื่อรวมพารามิเตอร์ที่มีค่าเป็นสตริง การปฏิบัติตามตัวอักษรของมาตรฐานจะถือว่าลำดับสิ้นสุดที่ตัวอักษร D
CSI s— คำสั่งนี้จะบันทึกตำแหน่งเคอร์เซอร์ การใช้ลำดับนี้CSI uจะคืนค่าเคอร์เซอร์กลับไปยังตำแหน่งเดิม สมมติว่าตำแหน่งเคอร์เซอร์ปัจจุบันคือ 7(y) และ 10(x) ลำดับนี้CSI sจะบันทึกตัวเลขสองตัวนั้นไว้ ตอนนี้คุณสามารถย้ายไปยังตำแหน่งเคอร์เซอร์อื่นได้ เช่น 20(y) และ 3(x) โดยใช้ลำดับCSI 20 ; 3 HหรือCSI 20 ; 3 fหากคุณใช้ลำดับ CSI u ตำแหน่งเคอร์เซอร์จะกลับไปที่ 7(y) และ 10(x) เทอร์มินัลบางตัวอาจต้องการลำดับ DEC ESC 7/ ESC 8แทน ซึ่งได้รับการสนับสนุนอย่างกว้างขวางกว่า
ในการเขียนสคริปต์เชลล์
รหัสหลีกเลี่ยง ANSI มักใช้ใน เทอร์มินัล UNIXและเทอร์มินัล ที่คล้าย UNIX เพื่อเน้นไวยากรณ์ตัวอย่างเช่น ในเทอร์มินัลที่ใช้งานร่วมกันได้ คำสั่ง list ต่อไปนี้ จะกำหนดสีให้กับชื่อไฟล์และไดเร็กทอรีตามประเภท
ls --color
ผู้ใช้สามารถใช้รหัสหลีกเลี่ยงในสคริปต์ของตนได้โดยการรวมรหัสเหล่านั้นเป็นส่วนหนึ่งของเอาต์พุตมาตรฐานหรือ ข้อผิดพลาด มาตรฐานตัวอย่างเช่น คำสั่ง GNU sed ต่อไปนี้ จะตกแต่งเอาต์พุตของ คำสั่ง makeโดยแสดงบรรทัดที่มีคำที่ขึ้นต้นด้วย "WARN" ในรูปแบบวิดีโอย้อนกลับและคำที่ขึ้นต้นด้วย "ERR" ในสีเหลืองสดใสบนพื้นหลังสีแดงเข้ม ( ไม่คำนึงถึง ตัวพิมพ์ใหญ่หรือเล็ก ) การแสดงผลของรหัสจะถูกเน้น[ 61 ]
make 2>&1 | sed -e 's/.*\bWARN.*/ \x1b[7m & \x1b[0m /i' -e 's/.*\bERR.*/ \x1b[93;41m & \x1b[0m /i'ฟังก์ชัน Bashต่อไปนี้จะกระพริบเทอร์มินัล (โดยการส่งรหัสโหมดวิดีโอแบบย้อนกลับและแบบปกติสลับกัน) จนกว่าผู้ใช้จะกดปุ่ม[ 62 ] สามารถใช้เพื่อแจ้งเตือนโปรแกรมเมอร์เมื่อคำสั่งที่ ยาว สิ้นสุดลง เช่นเดียวกับ[make ; flasher 63 ]
flasher(){whiletrue;doprintf'\e[?5h' '\e[?5l';sleep0.1;printf;read-s-n1-t1&&break;done;}
คำสั่งต่อไปนี้จะรีเซ็ตคอนโซล คล้ายกับคำสั่งresetบนระบบ Linux รุ่นใหม่ๆ แต่ควรใช้งานได้แม้บนระบบ Linux รุ่นเก่า และระบบ UNIX อื่นๆ ที่ไม่ใช่ Linux
printf '\033c'ใน C
โปรแกรมต่อไปนี้สร้างตารางตัวเลขตั้งแต่ 0 ถึง 109 โดยแต่ละตัวเลขจะแสดงผลในรูปแบบที่ระบุโดย ลำดับการหลีกเลี่ยง Select Graphic Renditionโดยใช้ตัวเลขนั้นเป็นรหัสการแสดงผลกราฟิก

#include <stdio.h>int main ( void ){แถว, คอลัมน์, n ;สำหรับ( แถว= 0 ; แถว< 11 ; แถว++ ) {สำหรับ( col = 0 ; col < 10 ; col ++ ) {n = 10 * แถว+ คอลัมน์;ถ้า( n > 109 ) ให้หยุดprintf ( " \033 [%dm %3d \033 [m" , n , n );}printf ( " \n " );}ส่งกลับ0 ;}ลำดับการป้อนข้อมูลเทอร์มินัล
การกดปุ่มพิเศษบนแป้นพิมพ์ รวมถึงการส่งลำดับคำสั่ง xterm CSI, DCS หรือ OSC จำนวนมาก มักจะสร้างลำดับคำสั่ง CSI, DCS หรือ OSC ที่ส่งจากเทอร์มินัลไปยังคอมพิวเตอร์ราวกับว่าผู้ใช้พิมพ์เอง
เมื่อพิมพ์ข้อมูลบนเทอร์มินัล การกดปุ่มนอกเหนือจากพื้นที่แป้นพิมพ์ตัวอักษรและตัวเลขหลักปกติ สามารถส่งไปยังโฮสต์ในรูปแบบลำดับ ANSI ได้ สำหรับปุ่มที่มีฟังก์ชันส่งออกที่เทียบเท่ากัน เช่น ปุ่มลูกศร ปุ่มเหล่านั้นมักจะสะท้อนลำดับส่งออก อย่างไรก็ตาม สำหรับการกดปุ่มส่วนใหญ่ ไม่มีลำดับส่งออกที่เทียบเท่าให้ใช้
มีวิธีการเข้ารหัสหลายแบบ และน่าเสียดายที่เทอร์มินัลส่วนใหญ่ผสมผสานลำดับจากวิธีการเข้ารหัสที่แตกต่างกัน ดังนั้นซอฟต์แวร์โฮสต์จึงต้องสามารถจัดการกับลำดับอินพุตที่ใช้วิธีการเข้ารหัสใดก็ได้ ยิ่งไปกว่านั้น เทอร์มินัล VT เองก็มีวิธีการเข้ารหัสอินพุตสองแบบ คือโหมดปกติและโหมดแอปพลิเคชัน ซึ่งสามารถสลับได้โดยแอปพลิเคชัน
(ส่วนร่าง)
<char> -> char <esc> -> esc <esc> <esc> -> Alt-esc <esc> <char> -> กดปุ่ม Alt หรือลำดับรหัสปุ่ม <esc> '[' -> Alt-[ <esc> '[' (<modifier>) <char> -> ลำดับรหัสคีย์, <modifier> เป็นเลขฐานสิบ หมายเลขและค่าเริ่มต้นคือ 1 (xterm) <esc> '[' (<keycode>) (';'<modifier>) '~' -> ลำดับคีย์โค้ด, <keycode> และ <modifier> เป็นตัวเลขทศนิยมและค่าเริ่มต้นคือ 1 (vt) หากอักขระปิดท้ายเป็น '~' ตัวเลขแรกจะต้องมีอยู่และเป็นหมายเลขรหัสคีย์ ส่วนตัวเลขที่สองเป็นค่าตัวปรับแต่งเพิ่มเติม หากอักขระปิดท้ายเป็นตัวอักษร ตัวอักษรนั้นจะเป็นค่ารหัสคีย์ และตัวเลขเพิ่มเติมจะเป็นค่าตัวปรับแต่ง
ค่าเริ่มต้นของตัวปรับแต่งคือ 1 และหลังจากลบ 1 แล้วจะได้บิตแมปของปุ่มตัวปรับแต่งที่ถูกกด: Meta+ Ctrl+ Alt+ ⇧ Shiftดังนั้น ตัวอย่างเช่น<esc>[4;2~คือ + , คือปุ่มฟังก์ชัน, คือ+ . ⇧ ShiftEnd<esc>[20~F9<esc>[5CCtrl→
กล่าวอีกนัยหนึ่ง ตัวปรับค่าคือผลรวมของตัวเลขต่อไปนี้:
| กดปุ่ม | ตัวเลข | ความคิดเห็น |
|---|---|---|
| 1 | จะถูกเพิ่มเข้าไปเสมอ ส่วนที่เหลือเป็นตัวเลือกเพิ่มเติม | |
| กะ | 1 | |
| (ซ้าย) อัลต์ | 2 | |
| ควบคุม | 4 | |
| เมตา | 8 |
ลำดับ vt: <esc>[1~ - หน้าแรก <esc>[16~ - <esc>[31~ - F17 <esc>[2~ - แทรก <esc>[17~ - F6 <esc>[32~ - F18 <esc>[3~ - ลบ <esc>[18~ - F7 <esc>[33~ - F19 <esc>[4~ - สิ้นสุด <esc>[19~ - F8 <esc>[34~ - F20 <esc>[5~ - PgUp <esc>[20~ - F9 <esc>[35~ - <esc>[6~ - PgDn <esc>[21~ - F10 <esc>[7~ - หน้าหลัก <esc>[22~ - <esc>[8~ - สิ้นสุด <esc>[23~ - F11 <esc>[9~ - <esc>[24~ - F12 <esc>[10~ - F0 <esc>[25~ - F13 <esc>[11~ - F1 <esc>[26~ - F14 <esc>[12~ - F2 <esc>[27~ - <esc>[13~ - F3 <esc>[28~ - F15 <esc>[14~ - F4 <esc>[29~ - F16 <esc>[15~ - F5 <esc>[30~ - ลำดับ xterm: <esc>[A - ขึ้น <esc>[K - <esc>[U - <esc>[B - ลง <esc>[L - <esc>[V - <esc>[C - ขวา <esc>[M - <esc>[W - <esc>[D - ซ้าย <esc>[N - <esc>[X - <esc>[E - <esc>[O - <esc>[Y - <esc>[F - สิ้นสุด <esc>OP - F1 <esc>[Z - <esc>[G - แป้นพิมพ์ 5 <esc>OQ - F2 <esc>[H - หน้าหลัก <esc>หรือ - F3 <esc>[I - <esc>OS - F4 <esc>[J - <esc>[T -
<esc>[Aมี<esc>[Dลักษณะเหมือนกับลำดับเอาต์พุต ANSI <modifier>โดยปกติจะละเว้นหากไม่ได้กดปุ่มตัวดัดแปลงใดๆ แต่การใช้งานส่วนใหญ่จะแสดงค่า<modifier>สำหรับ– เสมอ (ส่วนร่าง) F1F4
Xterm มีหน้าเอกสารที่ครอบคลุมเกี่ยวกับรูปแบบลำดับการป้อนข้อมูลปุ่มฟังก์ชันและเมาส์ต่างๆ จากเทอร์มินัล VT ของ DEC และเทอร์มินัลอื่นๆ ที่จำลองขึ้นมา[ 17 ] Thomas Dickey ได้เพิ่มการสนับสนุนมากมายให้กับมันเมื่อเวลาผ่านไป[ 64 ]เขายังรักษารายชื่อปุ่มเริ่มต้นที่ใช้โดยโปรแกรมจำลองเทอร์มินัลอื่นๆ ไว้เพื่อการเปรียบเทียบอีกด้วย[ 65 ]
- ในคอนโซล Linux ปุ่มฟังก์ชันบางปุ่มจะสร้างลำดับในรูปแบบลำดับ CSI ควรสิ้นสุดที่.
CSI [ char[ - Terminatorเวอร์ชันเก่าจะสร้างข้อผิดพลาดเมื่อกดปุ่ม– ร่วมกับปุ่มตัวดัดแปลง พฤติกรรมที่ผิดพลาดนี้ถูกคัดลอกมาจาก GNOME Terminal
SS3 1; modifierscharF1F4 - xterm จะตอบกลับเมื่อมีการถามตำแหน่งเคอร์เซอร์และเมื่อมีการกดปุ่มที่มีตัวดัดแปลง ซึ่งจะเกิดการชนกันในกรณีของสามารถหลีกเลี่ยงปัญหานี้ได้โดยใช้ตัวดัดแปลงส่วนตัว? เป็น ซึ่งจะสะท้อนให้เห็นในคำตอบเป็น
CSI row ; column RCSI 1 ; modifiers RF3row == 1CSI ? 6 nCSI ? row ; column R - เทอร์มินัลหลายแห่งจะเพิ่มเครื่องหมายนำหน้า
ESCให้กับอักขระใดๆ ที่พิมพ์โดยกดปุ่ม Alt ค้างไว้ ซึ่งทำให้เกิดความกำกวมสำหรับตัวอักษรพิมพ์ใหญ่และสัญลักษณ์ต่างๆ@[\]^_ซึ่งจะกลายเป็นรหัส C1 - Konsoleจะสร้างข้อความเมื่อกดปุ่ม– ร่วมกับปุ่มตัวดัดแปลง
SS3 modifierscharF1F4 - เทอร์มินัลบางตัว รวมถึงiTerm2และkittyรองรับการรายงานคีย์เพิ่มเติมผ่านโหมด CSI u ที่ได้รับการปรับปรุง[ 66 ] [ 67 ]
ดูเพิ่มเติม
หมายเหตุ
- ^โปรดทราบว่าตัวอักษร nและ m บางตัว เป็นตัวเอียง ซึ่งเป็นตัวแทนสำหรับค่าตัวเลข ไม่ใช่ตัวอักษรจริง
- ^พบเห็นได้ในหน้าต่างเชลล์ DOS (ไม่ใช่โหมดเต็มหน้าจอ) ที่ทำงานใน Windows 3.x ไปจนถึง cmd.exe ใน Windows 8.1
- ^ทางลัดเริ่มต้นของ PowerShell คือ .lnkซึ่งไม่เปลี่ยนแปลงมานานกว่าทศวรรษ จะแมปสีเหลืองและสีม่วงแดงใหม่เพื่อให้ PowerShell มีสีพื้นหน้า/พื้นหลังที่โดดเด่นเมื่อเทียบกับ Command Prompt [ 33 ] PowerShell 7 ไม่ได้รับผลกระทบ
- ^คอนโซลดีบัก ธีม "Dark+"
- ^ธีม Campbell ใช้ใน Windows 10 เวอร์ชัน 1709 เป็นต้นไป
- ^สำหรับเทอร์มินัลเสมือน ให้ใช้ไฟล์ /etc/vtrgb
ลิงก์ภายนอก
- มาตรฐาน ECMA-48 ฟังก์ชันควบคุมสำหรับชุดอักขระเข้ารหัส ( ฉบับที่ 5 มิถุนายน 1991 ) สมาคมผู้ผลิตคอมพิวเตอร์แห่งยุโรป เจนีวา 1991 (เผยแพร่โดย ISO และ IEC ในชื่อมาตรฐาน ISO/IEC 6429 ด้วย)
- vt100.net เอกสาร DEC
- "ANSI.SYS -- ลำดับการหลีกเลี่ยงสำหรับการจำลองเทอร์มินัล ANSI"เก็บถาวรจากต้นฉบับเมื่อวันที่ 6 กุมภาพันธ์ 2549 เรียกดูเมื่อวันที่ 22 กุมภาพันธ์ 2550
- Xterm / ลำดับการหลีกเลี่ยง
- AIXterm / ลำดับการหลีกเลี่ยง
- ชุดคำสั่งหลีกเลี่ยงสำหรับเทอร์มินัลที่สอดคล้องกับมาตรฐาน ECMA-48 และมาตรฐานที่คล้ายคลึงกัน
- "ลำดับรหัสหลีกเลี่ยง ANSI"เก็บถาวรจากต้นฉบับเมื่อวันที่ 25 พฤษภาคม 2554
- ITU-T Rec. T.416 (03/93) เทคโนโลยีสารสนเทศ – สถาปัตยกรรมเอกสารเปิด (ODA) และรูปแบบการแลกเปลี่ยนข้อมูล: สถาปัตยกรรมเนื้อหาอักขระ
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ รหัสหลีกเลี่ยง ANSI
ลำดับการหลีกเลี่ยง ANSIเป็นมาตรฐานสำหรับการส่งสัญญาณภายในแบนด์เพื่อควบคุมตำแหน่งเคอร์เซอร์ สี รูปแบบตัวอักษร และตัวเลือกอื่นๆ บนเทอร์มินัลข้อความ วิดีโอ และโปรแกรมจำลองเทอร์มินัล..
ประวัติศาสตร์
ผู้ผลิตเครื่องรับสัญญาณวิดีโอเกือบทั้งหมดได้เพิ่มลำดับคำสั่งเฉพาะของผู้ผลิตเพื่อใช้ในการดำเนินการต่างๆ เช่น การวางเคอร์เซอร์ที่ตำแหน่งใดๆ บนหน้าจอ ตัวอย่างเช่น เครื่องรับสัญญาณ VT52 อนุญาตให้วางเคอร์เซอร์ที่ตำแหน่ง x,y บนหน้าจอได้โดยการส่ง ESC อักขระ อักขระ Y...
การสนับสนุนแพลตฟอร์ม
ในช่วงต้นทศวรรษ 1980 ซอฟต์แวร์จำนวนมากใช้ลำดับเหล่านี้โดยตรงเพื่ออัปเดตการแสดงผลบนหน้าจอ ซึ่งรวมถึงทุกอย่างบน VMS (ซึ่งสันนิษฐานว่าใช้เทอร์มินัล DEC) ซอฟต์แวร์ส่วนใหญ่ที่ออกแบบมาให้ใช้งานได้บน คอมพิวเตอร์ส่วนบุคคล CP/M และซอฟต์แวร์ Unix จำนวนมาก...
รหัสควบคุม C0
ผู้ใช้เกือบทุกคนคาดเดาหน้าที่ของอักขระไบต์เดียวบางตัวได้ เดิมทีชุดรหัสควบคุม C0 ถูกกำหนดไว้เป็นส่วนหนึ่งของ ASCII แต่ปัจจุบันถูกกำหนดไว้ใน ISO 6429 (ECMA-48) ทำให้เป็นส่วนหนึ่งของมาตรฐานเดียวกันกับชุด C1 ที่เรียกใช้โดยลำดับการหลีกเลี่ยงของ ANSI (แม้ว่า ISO...