กลับไปหน้าบทความ

อ่าน 18 นาที

รหัสหลีกเลี่ยง ANSI

ลำดับการหลีกเลี่ยง ANSIเป็นมาตรฐานสำหรับการส่งสัญญาณภายในแบนด์เพื่อควบคุมตำแหน่งเคอร์เซอร์ สี รูปแบบตัวอักษร และตัวเลือกอื่นๆ บนเทอร์มินัลข้อความ วิดีโอ และโปรแกรมจำลองเทอร์มินัล..

รหัสหลีกเลี่ยง ANSI

ANSI X3.64 (ISO/IEC 6429)
ผลลัพธ์จากโปรแกรมตรวจสอบระบบhtopซึ่งเป็นแอปพลิเคชัน ncurses (ที่ใช้SGRและลำดับควบคุม ANSI/ISO อื่นๆ)
มาตรฐาน
การจำแนกประเภทชุด รหัสควบคุมและลำดับการควบคุมตามมาตรฐาน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 ได้ถอนมาตรฐานของตนออกเพื่อใช้มาตรฐานสากลแทน

เทอร์มินัล DEC VT100
จอแสดงผลวิดีโอ DEC VT100

เทอร์มินัลวิดีโอรุ่นแรกที่ได้รับความนิยมซึ่งรองรับลำดับเหล่านี้คือ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 ได้ระบุส่วนขยายที่ใช้ในระบบเหล่านั้นว่าเป็นส่วนที่สงวนไว้

การสนับสนุนแพลตฟอร์ม

โปรแกรมจำลองเทอร์มินัล Xterm

ในช่วงต้นทศวรรษ 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 ที่นิยมใช้ (รายชื่อนี้ไม่ครบถ้วน)
^C0ตัวย่อลำดับการหลบหนี Cชื่อผล
^G0x07เบล\aกระดิ่งทำให้เกิดเสียงดัง
^H0x08ปริญญาตรี\bลบเลื่อนเคอร์เซอร์ไปทางซ้าย (แต่จะ "ขึ้นบรรทัดใหม่" หากเคอร์เซอร์อยู่ที่ต้นบรรทัด)
^ฉัน0x09เอชที\tแท็บเลื่อนเคอร์เซอร์ไปทางขวาไปยังตำแหน่งแท็บถัดไป
^J0x0Aแอลเอฟ\nสายป้อนเลื่อนไปยังบรรทัดถัดไป และเลื่อนหน้าจอขึ้นหากอยู่ด้านล่างสุดของหน้าจอ โดยปกติจะไม่เลื่อนในแนวนอน แต่โปรแกรมไม่ควรพึ่งพาการทำงานนี้เพียงอย่างเดียว
^L0x0Cเอฟเอฟ\fฟีดแบบฟอร์มย้ายเครื่องพิมพ์ไปไว้ด้านบนของหน้าถัดไป โดยปกติแล้วจะไม่เลื่อนในแนวนอน แต่โปรแกรมไม่ควรพึ่งพาการทำงานนี้ ผลลัพธ์ที่แสดงบนจอมอนิเตอร์วิดีโออาจแตกต่างกันไป
^M0x0Dซีอาร์\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 ) แต่วิธีนี้ไม่ได้ช่วยประหยัดพื้นที่

ลำดับการหลีกเลี่ยง ANSI บางประเภทของFe (องค์ประกอบชุด C1) (รายการนี้ไม่ครบถ้วน)
รหัสซี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 ยกเลิกทันที หรือละเว้นส่วนที่เหลือ

ลำดับการควบคุม ANSI บางส่วน (ไม่ใช่รายการที่ครบถ้วน)
รหัส[]ตัวย่อชื่อผล
ซีเอสไอเอ็นเอ 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ไม่มีคุณลักษณะของอักษรภาพ รีเซ็ตผลกระทบทั้งหมดของ6064
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
3040สีดำ 0, 0, 0 12, 12, 12 0, 0, 0 1, 1, 1 0, 0, 0
3141สีแดง 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
3242สีเขียว 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
3343สีเหลือง 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
3444สีฟ้า 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
3545แมเจนต้า 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
3646สีฟ้าอมเขียว 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
3747สีขาว 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
90100สีดำสนิท (สีเทา)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
91101สีแดงสด 220, 78, 78 255, 0, 0 241, 76, 76 231, 72, 86 230, 0, 0 255, 85, 85 255, 0, 0
92102สีเขียวสดใส 78, 220, 78 0, 255, 0 35, 209, 139 22, 198, 12 0, 217, 0 85, 255, 85 0, 252, 0 0, 255, 0
93103สีเหลืองสดใส 243, 243, 78 255, 255, 0 245, 245, 67 249, 241, 165 230, 230, 0 255, 255, 85 255, 255, 0
94104สีน้ำเงินสดใส 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
95105สีม่วงแดงสดใส 243, 78, 243 255, 0, 255 214, 112, 214 180, 0, 158 230, 0, 230 255, 85, 255 255, 0, 255
96106สีฟ้าสดใส 78, 243, 243 0, 255, 255 41, 184, 219 97, 214, 214 0, 230, 230 85, 255, 255 0, 255, 255
97107สีขาวสว่าง 255, 255, 255 229, 229, 229242, 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
สีมาตรฐาน สีที่มีความเข้มสูง
 0   1   2   3   4   5   6   7   8   9  10 11 12 13 14 15
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
สีเทา
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255

ในการคำนวณค่า 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

ลำดับการหลีกเลี่ยงประเภท Fp (ใช้ส่วนตัว) บางประเภท ที่ VT100 รู้จัก
ตัวย่อชื่อผล
เอสซีอี 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ส่วนลำดับอื่นๆ มีดังนี้:

ลำดับการหลบหนี ANSI บางประเภท0Ft (ประกาศ) [ 17 ] [ 15 ] : 15.2
ตัวย่อชื่อผล
เอสเอส เอสพี เอฟ
  • เอซีเอส6
  • เอส7ซี1ที
  • ประกาศโครงสร้างโค้ด 6
  • ส่งอักขระควบคุม C1 ขนาด 7 บิตไปยังโฮสต์
ตั้งค่าให้ปุ่มฟังก์ชันส่งค่า ESC + ตัวอักษร แทนที่จะส่งรหัส C1 แบบ 8 บิต
เอสเอส เอสพี จี
  • เอซีเอส7
  • เอส8ซี1ที
  • ประกาศโครงสร้างโค้ด 7
  • ส่งอักขระควบคุม C1 ขนาด 8 บิตไปยังโฮสต์
ทำให้ปุ่มฟังก์ชันส่งรหัส C1 แบบ 8 บิต

หากไบต์แรกเป็น '#' ลำดับสาธารณะจะถูกสงวนไว้สำหรับฟังก์ชันควบคุมเฉพาะบุคคลที่ลงทะเบียน ISO-IR เพิ่มเติม[ 15 ] : 6.5.2 ปัจจุบันไม่มีการลงทะเบียนลำดับดังกล่าว[ 56 ] ลำดับ ประเภท3Fp(ซึ่งรวมถึงลำดับที่ขึ้นต้นด้วย '#') พร้อมใช้งานสำหรับฟังก์ชันควบคุมการใช้งานส่วนตัว[ 15 ] : 6.5.3

VT100รู้จักลำดับการหลีกเลี่ยง ประเภท 3Fp (ใช้งานส่วนตัว) บางประเภท
ตัวย่อชื่อผล
เอสซีเอส # 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โดยใช้ตัวเลขนั้นเป็นรหัสการแสดงผลกราฟิก

ผลลัพธ์ของโปรแกรมตัวอย่างบนGnome Terminal
#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 TerminalSS3 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 ]

ดูเพิ่มเติม

หมายเหตุ

  1. ^โปรดทราบว่าตัวอักษร nและ m บางตัว เป็นตัวเอียง ซึ่งเป็นตัวแทนสำหรับค่าตัวเลข ไม่ใช่ตัวอักษรจริง
  2. ^พบเห็นได้ในหน้าต่างเชลล์ DOS (ไม่ใช่โหมดเต็มหน้าจอ) ที่ทำงานใน Windows 3.x ไปจนถึง cmd.exe ใน Windows 8.1
  3. ^ทางลัดเริ่มต้นของ PowerShell คือ .lnkซึ่งไม่เปลี่ยนแปลงมานานกว่าทศวรรษ จะแมปสีเหลืองและสีม่วงแดงใหม่เพื่อให้ PowerShell มีสีพื้นหน้า/พื้นหลังที่โดดเด่นเมื่อเทียบกับ Command Prompt [ 33 ] PowerShell 7 ไม่ได้รับผลกระทบ
  4. ^คอนโซลดีบัก ธีม "Dark+"
  5. ^ธีม Campbell ใช้ใน Windows 10 เวอร์ชัน 1709 เป็นต้นไป
  6. ^สำหรับเทอร์มินัลเสมือน ให้ใช้ไฟล์ /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) และรูปแบบการแลกเปลี่ยนข้อมูล: สถาปัตยกรรมเนื้อหาอักขระ
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=ANSI_escape_code&oldid=1358935033#Fe_Escape_sequences "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ รหัสหลีกเลี่ยง ANSI

ลำดับการหลีกเลี่ยง ANSIเป็นมาตรฐานสำหรับการส่งสัญญาณภายในแบนด์เพื่อควบคุมตำแหน่งเคอร์เซอร์ สี รูปแบบตัวอักษร และตัวเลือกอื่นๆ บนเทอร์มินัลข้อความ วิดีโอ และโปรแกรมจำลองเทอร์มินัล..

ประวัติศาสตร์

ผู้ผลิตเครื่องรับสัญญาณวิดีโอเกือบทั้งหมดได้เพิ่มลำดับคำสั่งเฉพาะของผู้ผลิตเพื่อใช้ในการดำเนินการต่างๆ เช่น การวางเคอร์เซอร์ที่ตำแหน่งใดๆ บนหน้าจอ ตัวอย่างเช่น เครื่องรับสัญญาณ VT52 อนุญาตให้วางเคอร์เซอร์ที่ตำแหน่ง x,y บนหน้าจอได้โดยการส่ง ESC อักขระ อักขระ Y...

การสนับสนุนแพลตฟอร์ม

ในช่วงต้นทศวรรษ 1980 ซอฟต์แวร์จำนวนมากใช้ลำดับเหล่านี้โดยตรงเพื่ออัปเดตการแสดงผลบนหน้าจอ ซึ่งรวมถึงทุกอย่างบน VMS (ซึ่งสันนิษฐานว่าใช้เทอร์มินัล DEC) ซอฟต์แวร์ส่วนใหญ่ที่ออกแบบมาให้ใช้งานได้บน คอมพิวเตอร์ส่วนบุคคล CP/M และซอฟต์แวร์ Unix จำนวนมาก...

รหัสควบคุม C0

ผู้ใช้เกือบทุกคนคาดเดาหน้าที่ของอักขระไบต์เดียวบางตัวได้ เดิมทีชุดรหัสควบคุม C0 ถูกกำหนดไว้เป็นส่วนหนึ่งของ ASCII แต่ปัจจุบันถูกกำหนดไว้ใน ISO 6429 (ECMA-48) ทำให้เป็นส่วนหนึ่งของมาตรฐานเดียวกันกับชุด C1 ที่เรียกใช้โดยลำดับการหลีกเลี่ยงของ ANSI (แม้ว่า ISO...