โดยทั่วไปโปรแกรมคอนโซลจะใช้คำสาปหรือหนึ่งในผู้สืบทอดเพื่อสร้างส่วนต่อประสานข้อความผู้ใช้ที่คุณกำลังพูดถึง
ไลบรารีเหล่านี้ใช้หนึ่งในสองฐานข้อมูลที่เรียกว่าtermcap
และ. terminfo
²ฐานข้อมูลเหล่านี้มีแผนที่ที่บอกไลบรารีว่าจะส่งรหัสใดเพื่อรับการกระทำที่ต้องการด้วยเทอร์มินัลหลากหลายประเภทจำนวนมาก ชนิดเทอร์มินัลส่วนใหญ่ที่คุณพบว่ามีการกำหนดไว้ในฐานข้อมูลเหล่านี้ไม่สามารถอยู่รอดได้ในช่วงเวลาของเทอร์มินัลจริงและดังนั้นจึงเป็นเพียงความสนใจในอดีตเท่านั้น
เทอร์มินัล ANSI
ตัวจำลองเทอร์มินัล Unix สมัยใหม่ใช้โปรโตคอล ANSI X3.64 หรือหนึ่งในตัวแปรต่อไป:
ANSI X3.64 : มาตรฐานสำหรับการควบคุม "ขั้วแก้ว" - ซึ่งตรงข้ามกับ teletypes - ขึ้นอยู่กับลำดับของอักขระพิเศษที่รีโมตเทอร์มินัลตีความ ตัวอย่างเช่นถ้ายูนิกซ์กล่องอยากจะบอกสถานีที่รองรับมาตรฐาน ANSI X3.64 ESC
[
1
;
1
H
เพื่อเลื่อนเคอร์เซอร์ไปที่มุมซ้ายบนของหน้าจอก็จะส่งตัวละคร อักขระสองตัวแรกบอกให้เทอร์มินัลคาดหวังว่าลำดับการควบคุมคือ 1s คือแถวและคอลัมน์และH
เป็นคำสั่งที่หมายถึง "ย้ายเคอร์เซอร์"
เรื่องไม่สำคัญ: พีซีBBSจำนวนมากใช้รหัส ANSI ด้วยเช่นกัน ( ยังคงทำจริง)
DEC VT100 : จอเทอร์มินัลแก้วที่รองรับ ANSI ที่ได้รับความนิยมอย่างมากแรกคือ VT100 ของ Digital Equipment Corporation ด้วยการพิสูจน์มาตรฐานทางนิตินัยของ ANSI ในตลาดจึงสร้างมาตรฐานความจริงที่ยังคงมีความสำคัญในปัจจุบัน
บางครั้งคุณเห็นสิ่งนี้เรียกว่าโปรโตคอล VT102 ซึ่งเป็นการลดต้นทุนในภายหลัง - และเป็นที่นิยมมากขึ้น - เวอร์ชันของ VT100 รวมถึงตัวเลือกการขยายที่มีอยู่ทั้งหมด
โปรโตคอลเทอร์มินัล DEC เป็นซีรีย์ที่เข้ากันได้แบบย้อนกลับซึ่งขยายจากรุ่นที่รองรับ ANSI แรกที่เปิดตัวในปี 1978 (VT100) ถึงรุ่นซีรี่ส์ VT500 ที่ผลิตโดยBoundless Technologiesหลังจากซื้อธุรกิจเทอร์มินัลจาก DEC ในปี 1995 ตอนนี้เลิกกิจการแล้ว แต่เทอร์มินัลของพวกเขายังปรากฏขึ้นในตลาดมือสองเป็นระยะ ๆ )
xterm : การรวมกันของ ANSI และ VT- มาตรฐานอะไรก็ตาม เมื่อใดก็ตามที่คุณกำลังใช้โปรแกรมเลียนแบบเทอร์มินัล GUI เช่นxterm
หรือหนึ่งในตราสารอนุพันธ์ของมันคุณมักจะใช้xterm
โปรโตคอลเทอร์มินัลซึ่งโดยทั่วไปแล้วจะมีความทันสมัยxterm-color
หรือxterm-color256
หลากหลายมากขึ้น
Linux : คอนโซล Linux ยังใช้ตัวแปรเพิ่มเติมของโปรโตคอลเทอร์มินัล ANSI ในจิตวิญญาณเดียวกันกับxterm
โปรโตคอล ส่วนขยายส่วนใหญ่เกี่ยวข้องกับความแตกต่างระหว่างพีซีและขั้วแก้ว ตัวอย่างเช่นแป้นพิมพ์ IBM มีบางคีย์ที่ไม่ได้อยู่ใน DEC VT- ไม่ว่าจะด้วยวิธีใดก็ตาม (และในทางกลับกัน.)
ระบบ Unix บางระบบมีเทอร์มินัลคอนโซลของตัวเองเช่นกัน มีscoansi
ตัวแปร ANSI X3.64 สำหรับ SCO Unixes เช่น
โปรแกรมเทอร์มินัลอีมูเลเตอร์ทั่วไปคืออะไรบางอย่างของ mongrel และไม่เลียนแบบเทอร์มินัลใด ๆ มันอาจรองรับ 96% ของลำดับการหลบหนี DEC VT ทั้งหมดจนถึง VT320 แต่ยังรองรับส่วนขยายเช่นสี ANSI (คุณลักษณะ VT525) และจำนวนแถวและคอลัมน์โดยพลการ รหัส 4% ที่ไม่เข้าใจอาจไม่พลาดหากโปรแกรมของคุณไม่ต้องการคุณสมบัติเหล่านั้นแม้ว่าคุณจะบอกcurses
(หรืออะไรก็ตาม) ว่าคุณต้องการให้โปรแกรมที่ใช้มันใช้โปรโตคอล VT320 โปรแกรมดังกล่าวอาจโฆษณาตัวเองว่าเข้ากันได้กับ VT320 แม้ว่าจะพูดอย่างเคร่งครัด แต่ก็ไม่เป็นเช่นนั้น
เทอร์มินัลที่ไม่ใช่ ANSI
มีมาตรฐานที่น่าทึ่งอื่น ๆ อีกสองสามครั้งที่คุณยังคงเจออยู่:
Wyse : หนึ่งในผู้ผลิตอิสระรายแรกของขั้วแก้ว Wyse เริ่มผลิตเครื่องในต้นปี 1980 ก่อนที่คอมพิวเตอร์เวิร์กสเตชันจะเริ่มแทนที่มินิคอมพิวเตอร์ แม้ว่าเทอร์มินัล Wyse สามารถเลียนแบบ VT100 และโปรโตคอลเทอร์มินัลยอดนิยมอื่น ๆ ได้ แต่พวกเขาก็มีรหัสดั้งเดิมของตัวเอง
IBM 3270 : แม้ว่านี่จะไม่ใช่ประเภทเทอร์มินัล "Unix" อย่างแน่นอน แต่ความต้องการในการเชื่อมต่อระบบ Unix กับเมนเฟรมของ IBM ทำให้เกิดการสร้างโปรแกรมเทอร์มินัลจำลอง IBM 3270 series ซึ่งคุณยังคงสามารถใช้งานได้ อีมูเลเตอร์สำหรับเทอร์มินัล IBM 5250 seriesในภายหลังก็เป็นเรื่องธรรมดาเช่นกันส่วนใหญ่มักใช้ในปัจจุบันเพื่อเชื่อมต่อกับ AS / 400 และมินิคอมพิวเตอร์ System i
Tektronix 4014 : ก่อนที่พีซีและเวิร์คสเตชั่นส่วนใหญ่จะย้ายขั้วแก้วและทำให้บิตแมปกราฟิกเป็นคุณสมบัติมาตรฐานมีเทอร์มินัลกราฟิกราคาแพงที่ดึงกราฟิกบนหน้าจอเพื่อตอบสนองคำสั่งข้อความที่คล้ายกับ น่าจะเป็นที่นิยมมากที่สุดของเหล่านี้เป็นชุด Tektronix 4010
พวกเขาค่อนข้างสนุกกับการใช้งาน คุณสามารถเขียนโปรแกรมที่ดึงกราฟิก แต่แทนที่จะเรียกใช้เพื่อวาดบนเทอร์มินัลท้องถิ่นของคุณคุณสามารถเปลี่ยนเส้นทางผลลัพธ์ไปยังไฟล์:
$ ./my4014program > my-neat-graphic
จากนั้นคุณสามารถส่งไฟล์นั้นให้คนอื่นและพวกเขาสามารถทำได้cat
ในเทอร์มินัล Tek ของพวกเขาเพื่อดูกราฟิกโดยไม่ต้องมีโปรแกรมของคุณ ส่วนหนึ่งของเสน่ห์คือความเทอร์มินอลช้าในการวาดดังนั้นคุณสามารถดูกราฟิกที่สร้างขึ้นในไม่กี่วินาที
ทำงานกับ Unix Terminal Emulation ได้แล้ววันนี้
คุณสามารถค้นหาว่ามาตรฐานเทอร์มินัลใดที่คุณต้องการให้ห้องสมุดcurses
ใช้โดยดูที่TERM
ตัวแปรสภาพแวดล้อม:
$ echo $TERM
xterm-color
เมื่อคุณssh
ไปยังระบบอื่นTERM
ตัวแปรจะถูกนำไปใช้เพื่อให้กล่อง Unix ระยะไกลรู้วิธีการสื่อสารกับเครื่องปลายทางของคุณ
เนื่องจากโปรโตคอลเหล่านี้จำนวนมากเป็นแบบ ANSI X3.64 และเนื่องจากมาตรฐานการเข้ารหัสอักขระ ASCII และ UTF-8 ที่แพร่หลายนั้นดูแลเรื่องอื่นเป็นอย่างมากTERM
ตัวแปรที่ไม่ถูกต้องจึงไม่ใช่หายนะ สิ่งที่มีแนวโน้มที่จะแตกหักคือปุ่มเพิ่มเติมเช่น Home และ Page Up, Alt-what ชุดคีย์, และคุณสมบัติการแสดงผลตัวอักษรเช่นสี, ตัวหนา, ฯลฯ
เชิงอรรถ:
มากที่สุดncurses
นอกจากนี้ยังมีสินค้าทันทีกับcurses
API เช่นS-Lang
AT&T ประกาศใช้terminfo
แทนtermcap
ฐานข้อมูลของ BSDและประสบความสำเร็จอย่างมากในการแทนที่ แต่ก็ยังมีโปรแกรมที่ยังคงใช้termcap
ฐานข้อมูลเก่าอยู่ มันเป็นหนึ่งในความแตกต่าง BSD เทียบกับ AT&T ที่คุณยังคงพบในระบบที่ทันสมัย
กล่อง macOS ของฉันไม่มี/etc/termcap
แต่มันมี/usr/share/terminfo
ในขณะที่การติดตั้ง FreeBSD มาตรฐานเป็นวิธีที่ตรงกันข้ามกันแม้ว่าทั้งสองระบบปฏิบัติการเหล่านี้มักจะค่อนข้างคล้ายกันที่ระดับบรรทัดคำสั่ง
minicom
, xterm
, mintty
, GNOME ร์มินัล , Terminal.appฯลฯ
โปรแกรม Unix ที่เขียนอย่างถูกต้องจะไม่ปล่อยลำดับ escapeเหล่านี้โดยตรง แต่พวกเขาใช้หนึ่งในไลบรารีที่กล่าวถึงข้างต้นโดยบอกให้ "เลื่อนเคอร์เซอร์ไปที่ตำแหน่ง (1,1)" หรืออะไรก็ตามและไลบรารีจะปล่อยรหัสควบคุมเทอร์มินัลที่จำเป็นตามTERM
การตั้งค่าตัวแปรสภาพแวดล้อมของคุณ สิ่งนี้จะช่วยให้โปรแกรมทำงานได้อย่างถูกต้องไม่ว่าคุณจะใช้ชนิดเทอร์มินัลใดก็ตาม
เทอร์มินัลข้อความเก่ามีคุณสมบัติแปลก ๆ มากมายที่ไม่ได้รับการใช้งานอย่างมากมายจากโปรแกรมดังนั้นโปรแกรมเลียนแบบเทอร์มินัลที่ได้รับความนิยมจำนวนมากก็ไม่ได้ใช้คุณสมบัติเหล่านี้ การละเว้นทั่วไปเป็นการสนับสนุนกราฟิกแบบ Sixelและโหมดข้อความความกว้างสองเท่า / สองเท่า
ผู้ดูแลการxterm
เขียนโปรแกรมที่เรียกว่าvttest
สำหรับการทดสอบ VT xterm
เลียนแบบขั้วเช่น คุณสามารถเรียกใช้กับตัวจำลองเทอร์มินัลอื่นเพื่อค้นหาว่าคุณสมบัติใดที่ไม่รองรับ