การตรวจสอบว่าอุปกรณ์จำลองเทอร์มินัลของฉันรองรับสีได้กี่สี


21

มีวิธีที่เชื่อถือได้ในการตรวจสอบว่าเทอร์มินัลอีมูเลเตอร์ของฉันรองรับหลายสีหรือไม่

ถ้าecho $TERMพิมพ์ออกxtermมามันจะบอกฉันได้อย่างชัดเจนว่าเครื่องจำลองเทอร์มินัลของฉันรองรับหลายสีหรือไม่? ฉันจะตรวจสอบข้อมูลนี้อย่างน่าเชื่อถือได้อย่างไร


4
ดูเพิ่มเติมที่: unix.stackexchange.com/questions/9957/…
jasonwryan

คำตอบ:


20

ค่าของ$TERMไม่ให้ข้อมูลมากเกี่ยวกับจำนวนสีที่รองรับ เทอร์มินัลจำนวนมากโฆษณาตัวเองเป็นxtermและอาจรองรับจำนวนสีใด ๆ (2, 8, 16, 88 และ 256 เป็นค่าทั่วไป)

ท่านสามารถสอบถามค่าของแต่ละสีที่มีลำดับการควบคุมOSC 4 ; c ; ? BEL หากรองรับหมายเลขสีcและหากเทอร์มินัลเข้าใจลำดับการควบคุมนี้เทอร์มินัลจะตอบกลับด้วยค่าของสี หากไม่รองรับหมายเลขสีหรือหากเทอร์มินัลไม่เข้าใจลำดับการควบคุมนี้เทอร์มินัลจะไม่ตอบคำถามใด ๆ นี่คือตัวอย่างข้อมูล bash / zsh เพื่อค้นหาว่าสนับสนุนสี 42 หรือไม่ (เปลี่ยนเส้นทางไปยัง / จากเทอร์มินัลหากจำเป็น):

printf '\e]4;%d;?\a' 42
if read -d $'\a' -s -t 1; then … # color 42 is supported

ในบรรดาเทอร์มินัลยอดนิยม xterm และเทอร์มินัลที่ใช้ไลบรารี VTE (Gnome-terminal, Terminator, Xfce4-terminal, …) สนับสนุนลำดับการควบคุมนี้; rxvt, konsole, หน้าจอและ tmux ทำไม่ได้

ฉันไม่รู้วิธีที่ตรงกว่านี้อีก


ขอบคุณ @Gilles มันดูดีมาก ฉันขอถามได้read -d $'\a' -s -t 1ไหม
Amelio Vazquez-Reina

1
@intrpc อ่านอินพุตจนกว่า\aอักขระตัวแรก(ตัวอักษรระฆัง) โดยไม่มีอินพุต echoing ด้วยการหมดเวลา 1 วินาที
Gilles 'หยุดความชั่วร้าย'

5
@ l0b0 ทำการtput colorsสืบค้นฐานข้อมูล terminfo TERM=xtermมีโอกาสที่คุณมี Xterm สามารถรองรับสีอย่างน้อย 2, 8, 16, 88 หรือ 256 สีขึ้นอยู่กับรุ่นและตัวเลือกการคอมไพล์และรันไทม์ แต่ฐานข้อมูล terminfo สามารถเก็บค่าได้เพียงค่าเดียวเท่านั้น คุณสามารถตั้งค่าเช่นTERM=xterm+256colorแต่จากนั้นคุณจะรำคาญเมื่อคุณเข้าสู่เครื่องที่ไม่มีรายการนี้ในฐานข้อมูล termcap / terminfo
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

2
@ l0b0 เห็นได้ชัดว่าท่อของคุณไม่มีส่วนเกี่ยวข้องกับเทอร์มินัล คุณต้องพิมพ์ไปที่ terminal ( printf … >/dev/tty) จากนั้นอ่านจาก terminal ( read … </dev/tty) Xterm ตอบสนองต่อOSC 4; …; ? BELลำดับโดยการกดแป้นพิมพ์
Gilles 'SO- หยุดความชั่วร้าย'

5
เยี่ยมมากขอบคุณ! นี่เป็นสคริปต์เพื่อกำหนดวิธีการหลายสี XTerm ของคุณจริงสนับสนุน
l0b0

11

มีสคริปต์ perl 256colors2.plที่จะแสดงสีทั้งหมดในเทอร์มินัลของคุณ


3
ด้วย Google Code ออฟไลน์สิ่งนี้อาจเป็นทางเลือก: gist.github.com/hSATAC/1095100
jippie

หรือมากกว่าที่พิมพ์รูปแบบการทดสอบ 256 สีในขั้ว - ถามอูบุนตู
Franklin Yu

9

คุณสามารถใช้ได้

$ tput colors

ในเดเบียน tput ติดตั้งของฉันเป็นส่วนหนึ่งของncurses-binแพคเกจที่ติดตั้งโดยค่าเริ่มต้น


6
ซึ่งจะแจ้งให้ทราบว่าเทอร์มินัลของคุณมีการรายงานสภาพแวดล้อมผ่านTERMสีกี่สีเท่านั้นไม่ใช่สีที่สามารถรองรับได้ตามความเหมาะสมTERM
MestreLion
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.