Tôi thấy những màu sắc đẹp này trong các trang được xem với ít hơn khi đặt một loạt các biến này. Họ có ý nghĩa gì, tài liệu ở đâu? Điều này được giải thích bởi ít hoặc termcap?
Tôi thấy những màu sắc đẹp này trong các trang được xem với ít hơn khi đặt một loạt các biến này. Họ có ý nghĩa gì, tài liệu ở đâu? Điều này được giải thích bởi ít hoặc termcap?
Câu trả lời:
Termcap là một thư viện ít sử dụng để truy cập thiết bị đầu cuối. Termcap phần lớn đã lỗi thời, đã được thay thế bởi Terminfo , nhưng Terminfo cung cấp giao diện tương thích Termcap cho các ứng dụng. Ít hơn là nội dung với giao diện Termcap và sử dụng điều đó.
Thư viện Termcap là một mô tả về các cơ sở của thiết bị đầu cuối. Mỗi cơ sở được xác định bằng mã gồm hai chữ cái (hoặc nói chung là hai ký tự). Ví dụ: hc
xác định các thiết bị đầu cuối cứng (ví dụ như máy in, không phải màn hình); co
là số lượng cột; md
bắt đầu hiển thị văn bản in đậm. Mỗi khả năng có một giá trị, có thể là boolean (như với hc
), một số nguyên (như với co
) hoặc một chuỗi (như với md
). Nhiều chuỗi là các chuỗi thoát mà các ứng dụng có thể gửi đến thiết bị đầu cuối để đạt được hiệu quả nhất định.
Tại sao thoát khỏi trình tự? Bởi vì giao diện giữa thiết bị đầu cuối và ứng dụng là một luồng ký tự (chính xác hơn là một luồng ký tự theo mỗi hướng: một cho đầu vào của người dùng, một cho đầu ra để hiển thị). Khi một ứng dụng ghi một ký tự vào thiết bị đầu cuối, nó thường được hiển thị. Một vài ký tự có hành vi khác nhau: chúng là các ký tự điều khiển, thực hiện những việc như di chuyển con trỏ xung quanh, chuyển đổi các thuộc tính hiển thị, v.v. Có nhiều lệnh hơn các ký tự điều khiển, vì vậy hầu hết các lệnh được truy cập bằng các chuỗi thoát, bắt đầu bằng một ký tự đặc biệt (thường là ký tự thoát, do đó có tên).
Ví dụ, khi Ít muốn hiển thị một số văn bản in đậm, nó sẽ tìm giá trị của md
khả năng. Đây là một chuỗi, mà Ít ghi vào thiết bị đầu cuối. Thiết bị đầu cuối nhận ra chuỗi này là một chuỗi thoát và điều chỉnh trạng thái bên trong của nó để các ký tự tiếp theo sẽ được hiển thị in đậm.
Trong những ngày đầu của thiết bị đầu cuối phần cứng, các thương hiệu khác nhau có trình tự và khả năng thoát khác nhau; cơ sở dữ liệu và giao diện Termcap đã được phát minh để các ứng dụng không phải biết về mọi mô hình thiết bị đầu cuối. Ngày nay hầu hết các trình giả lập thiết bị đầu cuối có khả năng rất giống nhau, nhưng cơ sở dữ liệu Termcap hoặc Terminfo vẫn hữu ích để đối phó với những khác biệt nhỏ.
Các LESS_TERMCAP_*
biến có thể được đặt trong môi trường hoặc trong .lesskey
tệp . Nó cung cấp ít hơn với các giá trị thay thế cho khả năng của Terminal. Khi Ít muốn sử dụng khả năng của thiết bị đầu cuối, hãy chuyển sang in đậm, trước tiên, nó sẽ kiểm tra xem có LESS_TERMCAP_md
biến không. Nếu biến này tồn tại, Ít sử dụng giá trị của nó làm chuỗi thoát để chuyển sang in đậm. Nếu không, nó sử dụng giá trị từ cơ sở dữ liệu Termcap. Cơ chế này cho phép người dùng ghi đè cài đặt cơ sở dữ liệu Termcap cho Ít hơn.
Các LESS_TERMCAP_*
thiết lập hữu ích nhất là các chuỗi thoát. Bạn có thể ánh xạ các thuộc tính đến các thuộc tính khác nhau. Bạn có thể sử dụng tput
lệnh để tra cứu giá trị của một khả năng cho thiết bị đầu cuối hiện tại trong cơ sở dữ liệu Termcap hoặc Terminfo của hệ thống . Bạn có thể sử dụng các chuỗi thoát trực tiếp nếu bạn không phụ thuộc vào thiết bị đầu cuối. Ví dụ: cài đặt này yêu cầu Ít hiển thị màu đỏ đậm khi được hướng dẫn hiển thị in đậm:
LESS_TERMCAP_md=$(tput md; tput AF 1)
hoặc nếu tput
lệnh của bạn không hỗ trợ tên Termcap:
LESS_TERMCAP_md=$(tput bold; tput setaf 1)
Man gửi Ít văn bản với một số định dạng rất đơn giản chỉ có thể diễn tả đậm và in nghiêng. Ngoài ra, Less sử dụng các khả năng định dạng khác nhau để sử dụng nội bộ, chẳng hạn như để làm nổi bật kết quả tìm kiếm và hiển thị dòng chế độ ở phía dưới. Dưới đây là một số trình tự thoát ít sử dụng (tôi chỉ liệt kê các khả năng mà nó rất hữu ích để ánh xạ lại):
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
Để hiển thị đầu ra có màu, sử dụng setaf
khả năng (hoặc AF
với Termcap).
Các LESS_TERMCAP_*
cài đặt không được đề cập trong LESS
tài liệu. Tài liệu tham khảo tốt nhất tôi có thể cung cấp là câu trả lời của tôi ở đây .
Câu trả lời của Gilles là tuyệt vời, nhưng điều này khiến tôi tò mò:
Termcap phần lớn đã lỗi thời, đã được thay thế bởi Terminfo
Nếu Termcap đã lỗi thời, tôi muốn chuyển sang Terminfo
Tôi cũng muốn chuyển khỏi Termcap vì tôi tìm thấy một lỗi. Giả sử bạn đặt một biến termcap trong ~/.profile
hoặc tương tự:
export LESS_TERMCAP_so=$(printf '\33[5;30;43m')
export LESS_TERMCAP_se=$(printf '\33[m')
Sau đó, nếu bạn nhập set
, các biến Termcap sẽ làm rối đầu ra màu của bạn.
Để chuyển sang Terminfo, bạn có thể tạo một tệp 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,
Biên dịch và cài đặt tệp:
tic xterm-pretty.ti
Thêm dòng ~/.profile
hoặc tương tự:
TERM=xterm-pretty