ฉันจะตรวจสอบข้อกำหนดของเทอร์มินัลใดบ้างที่มีอยู่?


16

ส่วนใหญ่ของคำถามอยู่ในชื่อ แต่จะทำเพียงเล็กน้อย:

ในส่วน Linuxes find /usr/share/terminfo -type fฉันสามารถ แต่ในเครื่อง Solaris ฉันมีสถานที่ใกล้เคียง - ไดเรกทอรีนี้ไม่มีอยู่จริง

ฉันสามารถวนซ้ำรายการเทอร์มินัลและทำสิ่งที่ชอบ:

for TERM in xterm xtermc xterm-color xterm-256color screen rxvt
do
    tput cols >/dev/null 2>/dev/null && echo "$TERM available"
done

แต่มันช้า ตัวเลือกใด ๆ เพื่อค้นหาเส้นทางที่ใช้โดยtputนิยามเทอร์มินัลและเรียกใช้ "ค้นหา" ด้วยตัวเอง?

คำตอบ:


9

บน Solaris 10 คุณสามารถทำได้:

find /usr/share/lib/terminfo -type f -print

คุณควรทำสิ่งที่ชอบ:

find /usr -type d -name terminfo -print

เพื่อค้นหาตำแหน่งของไดเรกทอรี

คุณสามารถอ่านเพื่อค้นหาเส้นทางที่แน่นอน:

man terminfo

นี่เป็นสิ่งที่ดี แต่ฉันมีปัญหาเล็ก ๆ น้อย ๆ เกี่ยวกับมันฉันจะหาเส้นทางได้อย่างไร มีวิธีใดบ้างที่จะทำ?

ฉันแก้ไขคำตอบแล้ว
Karlson

10

โปรแกรม infocmp บนระบบ "any" ที่รองรับ terminfo นั้นเกิดขึ้นเพื่อแสดงชื่อพา ธ ที่พบคำอธิบายเทอร์มินัลสำหรับเทอร์มินัลปัจจุบัน ตัวอย่างเช่น (AIX ในกรณีนี้):

$ infocmp vt100
#       Reconstructed via infocmp from file: /usr/share/lib/terminfo/v/vt100
vt100|vt100-am|Digital VT100,
        am, msgr, xenl, xon,
        cols#80, it#8, lines#24, vt#3,
        ...

สำหรับ ncurses มันมีความซับซ้อนมากขึ้นเพราะคุณสามารถมีฐานข้อมูลหลาย terminfo และรายการไม่จำเป็นต้องเป็นไฟล์แต่ละไฟล์ ฐานข้อมูลเดียวและหนึ่งไฟล์ต่อรายการเป็นค่าเริ่มต้นสำหรับความเข้ากันได้กับระบบ Unix

-Dตัวเลือกสำหรับการกระตุกและinfocmp (เพิ่มปลายในปี 2011 ) เป็นวิธีหนึ่งที่จะแสดงข้อมูลพิเศษ ตัวอย่างเช่นบน Debian7 ของฉันฉันเห็นสิ่งนี้:

$ infocmp6 -D
/users/tom/.terminfo
/usr/local/ncurses/share/terminfo
/usr/share/terminfo
/lib/terminfo

บนเครื่อง FreeBSD 10 ของฉันฉันใช้ฐานข้อมูลที่แฮช:

$ infocmp -D
/usr/local/ncurses/share/terminfo.db
/usr/local/share/misc/terminfo
/etc/termcap

อีกวิธีหนึ่งสามารถใช้toeโปรแกรมเพื่อสร้างรายงานของรายการเทอร์มินัลที่มีอยู่ทั้งหมด การใช้ตัวเลือก-sและ-aให้มันรวมสิ่งต่าง ๆ (เช่นconflictโปรแกรม):

--> /users/tom/.terminfo
----> /usr/local/ncurses/share/terminfo
------> /usr/share/terminfo
--------> /lib/terminfo
--*-+---:       9term           Plan9 terminal emulator for X
--*---*-:       Eterm           Eterm with xterm-style color support (X Window System)
--*-*---:       Eterm-256color  Eterm with xterm 256-colors
--*-*---:       Eterm-88color   Eterm with 88 colors
--*-+---:       MtxOrb          Generic Matrix Orbital LCD display
--*-+---:       MtxOrb162       16x2 Matrix Orbital LCD display
--*-+---:       MtxOrb204       20x4 Matrix Orbital LCD display
--*-+---:       NCR260VT300WPP  NCR 2900_260 vt300 wide mode pc+  kybd
--*-+---:       aaa             ann arbor ambassador/30 lines
--*-+---:       aaa+dec         ann arbor ambassador in dec vt100 mode
--*-+---:       aaa+rv          ann arbor ambassador in reverse video
...

0

บน Linux คุณสามารถใช้straceเพื่อดูว่าระบบเรียกใช้โปรแกรมใด ต่อไปนี้จะแสดงการเรียกของระบบ "open (2)" ทั้งหมดและกรองพวกมันผ่านsedเพื่อแสดงหวังว่าไฟล์ terminfo ที่ใช้โดยtputเพื่อแปลความสามารถ terminfo สำหรับเทอร์มินัลปัจจุบัน

TERMINFO_FILE=$(strace -e open tput cud1 2>&1 | sed -n -e 's/^.*\(".*terminfo.*"\).*$/\1/p')
echo ${TERMINFO_FILE}

โปรดทราบว่านิพจน์เซดสมมติว่าไฟล์ terminfo ของคุณถูกจัดเก็บในพา ธ ที่มีรูปแบบ "terminfo" อยู่ในนั้น หากคุณกังวลคุณสามารถใช้สมมติฐานอื่นและเลือกการเรียกระบบ "เปิด" ครั้งล่าสุด

TERMINFO_FILE=$(strace -e open tput cud1 2>&1 | grep -e "^open" | tail -n 1 | sed -n -e 's/^.*\(".*"\).*$/\1/p')
echo ${TERMINFO_FILE}

สุดท้ายคุณก็สามารถถ่ายโอนข้อมูลรายชื่อของเส้นทางการค้นหาโดยใช้ terminfo หรือinfocmp -D tic -Dสิ่งเหล่านี้จะแสดงรายการพา ธ การค้นหา terminfo ที่คอมไพล์แล้ว เหล่านี้เป็นเส้นทางเดียวกันที่ค้นหาโดย curses


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