Tài liệu về các biến LESS_TERMCAP_ *?


Câu trả lời:


45

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ụ: hcxá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); colà số lượng cột; mdbắ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 mdkhả 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 .lesskeytệ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_mdbiế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 tputlệ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 tputlệ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 setafkhả năng (hoặc AFvới Termcap).

Các LESS_TERMCAP_*cài đặt không được đề cập trong LESStà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 .


8
Cảm ơn. Tôi cũng đã xem xét ngắn gọn về mã nguồn ít hơn và thấy rằng khi bạn đặt LESS_TERMCAP_DEBUG thành thứ gì đó và sau đó mở man, bạn có thể thấy một cái gì đó giống như nguồn của các trang man và trong đó tất cả các thẻ khả năng được sử dụng. Làm cho nó dễ dàng hơn để quyết định những gì bạn muốn đặt chúng.
anselm

1
Xem câu trả lời này về cách đặt tất cả các LESS_TERMCAP_*lọ env bằng cách sử dụng tputký tự thoát.
Kaushal Modi

3

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

  1. Nếu Termcap đã lỗi thời, tôi muốn chuyển sang Terminfo

  2. 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 ~/.profilehoặ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 ~/.profilehoặc tương tự:

TERM=xterm-pretty
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.