มีวิธีที่เชื่อถือได้ในการตรวจสอบว่าเทอร์มินัลอีมูเลเตอร์ของฉันรองรับหลายสีหรือไม่
ถ้าecho $TERMพิมพ์ออกxtermมามันจะบอกฉันได้อย่างชัดเจนว่าเครื่องจำลองเทอร์มินัลของฉันรองรับหลายสีหรือไม่? ฉันจะตรวจสอบข้อมูลนี้อย่างน่าเชื่อถือได้อย่างไร
มีวิธีที่เชื่อถือได้ในการตรวจสอบว่าเทอร์มินัลอีมูเลเตอร์ของฉันรองรับหลายสีหรือไม่
ถ้าecho $TERMพิมพ์ออกxtermมามันจะบอกฉันได้อย่างชัดเจนว่าเครื่องจำลองเทอร์มินัลของฉันรองรับหลายสีหรือไม่? ฉันจะตรวจสอบข้อมูลนี้อย่างน่าเชื่อถือได้อย่างไร
คำตอบ:
ค่าของ$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 ทำไม่ได้
ฉันไม่รู้วิธีที่ตรงกว่านี้อีก
read -d $'\a' -s -t 1ไหม
\aอักขระตัวแรก(ตัวอักษรระฆัง) โดยไม่มีอินพุต echoing ด้วยการหมดเวลา 1 วินาที
tput colorsสืบค้นฐานข้อมูล terminfo TERM=xtermมีโอกาสที่คุณมี Xterm สามารถรองรับสีอย่างน้อย 2, 8, 16, 88 หรือ 256 สีขึ้นอยู่กับรุ่นและตัวเลือกการคอมไพล์และรันไทม์ แต่ฐานข้อมูล terminfo สามารถเก็บค่าได้เพียงค่าเดียวเท่านั้น คุณสามารถตั้งค่าเช่นTERM=xterm+256colorแต่จากนั้นคุณจะรำคาญเมื่อคุณเข้าสู่เครื่องที่ไม่มีรายการนี้ในฐานข้อมูล termcap / terminfo
printf … >/dev/tty) จากนั้นอ่านจาก terminal ( read … </dev/tty) Xterm ตอบสนองต่อOSC 4; …; ? BELลำดับโดยการกดแป้นพิมพ์
มีสคริปต์ perl 256colors2.plที่จะแสดงสีทั้งหมดในเทอร์มินัลของคุณ
คุณสามารถใช้ได้
$ tput colors
ในเดเบียน tput ติดตั้งของฉันเป็นส่วนหนึ่งของncurses-binแพคเกจที่ติดตั้งโดยค่าเริ่มต้น
TERMสีกี่สีเท่านั้นไม่ใช่สีที่สามารถรองรับได้ตามความเหมาะสมTERM