ฉันเห็นสีสวย ๆเหล่านี้ใน manpages ที่ดูน้อยลงเมื่อตั้งกลุ่มตัวแปรเหล่านี้ พวกเขาหมายถึงอะไรเอกสารอยู่ที่ไหน นี่แปลว่าน้อยหรือ termcap?
ฉันเห็นสีสวย ๆเหล่านี้ใน manpages ที่ดูน้อยลงเมื่อตั้งกลุ่มตัวแปรเหล่านี้ พวกเขาหมายถึงอะไรเอกสารอยู่ที่ไหน นี่แปลว่าน้อยหรือ termcap?
คำตอบ:
Termcapเป็นไลบรารีที่ Less ใช้เพื่อเข้าถึงเทอร์มินัล Termcap ส่วนใหญ่ล้าสมัยถูกแทนที่ด้วยTerminfoแต่ Terminfo มีส่วนต่อประสานความเข้ากันได้ของ Termcap กับแอปพลิเคชัน Less คือเนื้อหาที่มีส่วนต่อประสาน Termcap และใช้สิ่งนั้น
ห้องสมุด Termcap เป็นคำอธิบายเกี่ยวกับสิ่งอำนวยความสะดวกของเครื่อง สถานที่แต่ละแห่งจะถูกระบุด้วยรหัสสองตัวอักษร (หรือมากกว่าสองตัวอักษรโดยทั่วไป) ตัวอย่างเช่นhc
ระบุเทอร์มินัลสำเนาถาวร (เช่นเครื่องพิมพ์ไม่ใช่หน้าจอ) co
คือจำนวนคอลัมน์ md
เริ่มแสดงข้อความตัวหนา ความสามารถแต่ละอย่างมีค่าซึ่งสามารถเป็นบูลีน (เช่นเดียวกับhc
) จำนวนเต็ม (เช่นเดียวกับco
) หรือสตริง (เช่นเดียวกับmd
) สตริงจำนวนมากเป็น escape sequences ที่แอ็พพลิเคชันสามารถส่งไปยังเทอร์มินัลเพื่อให้ได้ผลที่แน่นอน
ทำไมลำดับหนี เนื่องจากอินเทอร์เฟซระหว่างเทอร์มินัลและแอปพลิเคชันเป็นสตรีมอักขระ (แม่นยำยิ่งขึ้นสตรีมอักขระหนึ่งตัวในแต่ละทิศทาง: หนึ่งรายการสำหรับผู้ใช้อินพุตหนึ่งรายการสำหรับเอาต์พุตเพื่อแสดง) เมื่อแอปพลิเคชันเขียนอักขระไปยังเทอร์มินัลมักจะปรากฏขึ้น ตัวละครสองสามตัวมีพฤติกรรมที่แตกต่าง: พวกเขาเป็นตัวควบคุมซึ่งทำสิ่งต่าง ๆ เช่นการย้ายเคอร์เซอร์ไปรอบ ๆ สลับการแสดงผลคุณลักษณะ ฯลฯ มีคำสั่งมากกว่าตัวควบคุมดังนั้นคำสั่งส่วนใหญ่จะเข้าถึงได้โดยลำดับหนีซึ่งเริ่มต้นด้วย อักขระพิเศษ (มักจะเป็นอักขระยกเว้นจึงเป็นชื่อ)
ตัวอย่างเช่นเมื่อ Less ต้องการแสดงข้อความที่เป็นตัวหนามันจะค้นหาค่าของmd
ความสามารถ นี่คือสตริงซึ่ง Less เขียนไปยังเทอร์มินัล เทอร์มินัลรู้จักสตริงนี้เป็นลำดับ escape และปรับสถานะภายในเพื่อให้อักขระที่ตามมาจะแสดงเป็นตัวหนา
ในยุคแรก ๆ ของเทอร์มินัลฮาร์ดแวร์แบรนด์ต่าง ๆ มีลำดับและความสามารถในการหลบหนีที่แตกต่างกัน ฐานข้อมูลและส่วนต่อประสาน Termcap ถูกคิดค้นขึ้นเพื่อให้แอปพลิเคชันไม่จำเป็นต้องรู้เกี่ยวกับเทอร์มินัลทุกรุ่น ปัจจุบันเทอร์มินัลอีมูเลเตอร์ส่วนใหญ่มีความสามารถที่คล้ายกันมาก แต่ฐานข้อมูล Termcap หรือ Terminfo ยังมีประโยชน์ในการรับมือกับความแตกต่างเล็กน้อย
LESS_TERMCAP_*
ตัวแปรสามารถตั้งค่าในสภาพแวดล้อมหรือในไฟล์.lesskey
มันให้ค่าทางเลือกน้อยลงสำหรับความสามารถของเทอร์มินัล เมื่อ Less ต้องการใช้ความสามารถของเทอร์มินัลพูดสลับเป็นตัวหนาก่อนอื่นตรวจสอบว่ามีLESS_TERMCAP_md
ตัวแปรหรือไม่ หากตัวแปรนี้มีอยู่ Less จะใช้ค่าของมันเป็น escape sequence เพื่อเปลี่ยนเป็นตัวหนา มิฉะนั้นจะใช้ค่าจากฐานข้อมูล Termcap กลไกนี้อนุญาตให้ผู้ใช้แทนที่การตั้งค่าฐานข้อมูล Termcap สำหรับ Less
การLESS_TERMCAP_*
ตั้งค่าที่มีประโยชน์ที่สุดคือ escape sequences คุณสามารถแมปแอตทริบิวต์กับแอตทริบิวต์ที่แตกต่างกัน คุณสามารถใช้tput
คำสั่งเพื่อค้นหาค่าของความสามารถสำหรับเทอร์มินัลปัจจุบันในฐานข้อมูลTermcapหรือTerminfoของระบบ คุณสามารถใช้ลำดับการหลีกเลี่ยงได้โดยตรงหากคุณไม่สนใจว่าจะขึ้นกับเทอร์มินัล ตัวอย่างเช่นการตั้งค่านี้บอกให้น้อยกว่าที่จะแสดงเป็นตัวหนาสีแดงเมื่อได้รับคำสั่งให้แสดงเป็นตัวหนา:
LESS_TERMCAP_md=$(tput md; tput AF 1)
หรือหากtput
คำสั่งของคุณไม่สนับสนุนชื่อ Termcap:
LESS_TERMCAP_md=$(tput bold; tput setaf 1)
ผู้ชายส่งข้อความน้อยลงด้วยการจัดรูปแบบที่เรียบง่ายซึ่งสามารถแสดงตัวหนาและตัวเอียงเท่านั้น นอกจากนี้ Less ยังใช้ความสามารถในการจัดรูปแบบต่าง ๆ สำหรับการใช้ภายในเช่นเพื่อเน้นผลการค้นหาและเพื่อแสดงบรรทัดโหมดที่ด้านล่าง ต่อไปนี้คือบางส่วนของ escape sequences ที่ Less use (ฉันแสดงรายการเฉพาะความสามารถที่มีประโยชน์พอสมควรที่จะทำการแมปใหม่):
termcap terminfo
ks smkx make the keypad send commands
ke rmkx make the keypad send digits
vb flash emit visual bell
mb blink start blink
md bold start bold
me sgr0 turn off bold, blink and underline
so smso start standout (reverse video)
se rmso stop standout
us smul start underline
ue rmul stop underline
ในการแสดงผลลัพธ์เป็นสีให้ใช้setaf
ความสามารถ (หรือAF
ด้วย Termcap)
การLESS_TERMCAP_*
ตั้งค่าไม่ได้กล่าวถึงในLESS
เอกสารประกอบ การอ้างอิงที่ดีที่สุดที่ฉันสามารถให้เป็นคำตอบของฉันที่นี่
คำตอบของ Gillesนั้นยอดเยี่ยม แต่สิ่งนี้ทำให้ฉันอยากรู้:
Termcap ส่วนใหญ่ล้าสมัยถูกแทนที่ด้วย Terminfo
หาก Termcap ล้าสมัยฉันต้องการเปลี่ยนเป็น Terminfo
ฉันต้องการเปลี่ยนจาก Termcap เพราะฉันพบข้อผิดพลาด สมมติว่าคุณใส่ตัวแปร termcap ในของคุณ~/.profile
หรือคล้ายกัน:
export LESS_TERMCAP_so=$(printf '\33[5;30;43m')
export LESS_TERMCAP_se=$(printf '\33[m')
หลังจากนั้นถ้าคุณป้อนset
ตัวแปร Termcap ทำให้สีของคุณเสีย
หากต้องการเปลี่ยนเป็น Terminfo คุณสามารถสร้างไฟล์ได้xterm-pretty.ti
:
xterm-pretty|xterm with pretty colors,
# exit standout mode
rmso=\e[m,
# begin standout mode
smso=\e[5;30;43m,
# similar terminal
use=xterm,
รวบรวมและติดตั้งไฟล์:
tic xterm-pretty.ti
เพิ่มบรรทัด~/.profile
หรือคล้ายกัน:
TERM=xterm-pretty