$ TERM được giải thích như thế nào và ở đâu?


9

Tôi đang tự hỏi làm thế nào một số ma thuật đầu cuối hoạt động trong nội bộ.

Trong khi chơi xung quanh với các container docker, biến môi trường $TERMkhông được đặt. Điều này dẫn đến các ứng dụng giao diện điều khiển trông lạ như vim và tmux, nhưng cũng khiến CTRL + l (màn hình rõ ràng) bị bỏ qua.

Tôi khá chắc chắn rằng tất cả các tính năng như cập nhật màn hình một phần, màu sắc, các lệnh như đặt lại màn hình, v.v ... được thực hiện bằng mã thoát, phải không?

Vậy biến này được giải thích ở đâu và ví dụ cho phép đặt lại màn hình đầu cuối của tôi bằng CTRL + l nếu tôi đặt đúng giá trị ở đó? Ai kiểm tra ví dụ màu nào được hỗ trợ (xterm vs xterm-256color)? Vỏ? Các ứng dụng hoặc một thư viện như ncurses? Và các giá trị / loại thiết bị đầu cuối có thể được xác định ở đâu?

Câu trả lời:


8

$TERMđược đọc và giải thích bởi hệ thống terminfo. terminfo cũng đề cập đến cơ sở dữ liệu của các mô tả thiết bị đầu cuối mà bạn có thể tìm thấy trên hầu hết các hệ thống /usr/share/terminfo. $TERMphải phù hợp với một trong các mục trong cơ sở dữ liệu đó. Ngoài ra còn có một thư viện cũ hơn gọi là termcap có ít khả năng hơn, nhưng terminfo đã thay thế nó. Trong các hệ thống hiện đại, terminfo là một phần của thư viện ncurses.

Các ứng dụng thường lấy các khả năng của thiết bị đầu cuối trực tiếp bằng cách sử dụng các chức năng của thư viện tigetstr()hoặc chúng sử dụng các giao diện nguyền rủa cấp cao hơn để quản lý bố cục của màn hình. Dù bằng cách nào, $TERMvà cơ sở dữ liệu terminfo sẽ được tư vấn.


5

Các TERMbiến được giải thích bởi mỗi ứng dụng, thông qua các thư viện hệ thống. Giá trị của nó là một tên được tìm kiếm trong cơ sở dữ liệu. Tùy thuộc vào hương vị Unix và tuổi của nó, cơ sở dữ liệu có thể là termcap (truyền thống, không được sử dụng nhiều hiện nay) hoặc terminfo (hiện đại, inasmuch vì nó có nghĩa là một cải tiến về termcap và được sử dụng bởi hầu hết các hệ thống hiện nay).

Cả cơ sở dữ liệu termcap và terminfo đều liên kết tên khả năng với các giá trị. Các khả năng là các mô tả về những gì thiết bị đầu cuối có thể làm (số dòng, khả năng gạch chân, v.v.) hoặc các chuỗi có thể được trao đổi với thiết bị đầu cuối (các chuỗi thoát để định dạng văn bản, di chuyển con trỏ xung quanh, v.v. trình tự thoát hướng được gửi bởi các phím chức năng). Bạn có thể nhìn vào man 5 termcapman 5 terminfođể xem những khả năng nào được biết đến trên hệ thống của bạn.

Ví dụ, khi bạn nhấn Ctrl+ Lđể vẽ lại màn hình, nó sẽ đọc các khả năng trong cơ sở dữ liệu đầu cuối để tìm ra chuỗi thoát nào mà nó phải sử dụng để di chuyển con trỏ xung quanh. Nếu TERMkhông được đặt hoặc đặt không chính xác, màn hình không có cách nào để biết cách di chuyển con trỏ xung quanh.

Bạn có thể sử dụng tputlệnh để truy xuất các mục trong cơ sở dữ liệu terminfo. Ví dụ tput linesin ra số lượng dòng trên thiết bị đầu cuối. tput clearxóa màn hình (vì đầu ra của nó đang được in trên thiết bị đầu cuối); để xem trình tự thoát tương ứng là gì, hãy in nó ra dưới dạng có thể đọc được, vd tput clear | cat -v.

Số lượng màu sắc có khá nhiều lịch sử làm cho nó không hoạt động như bình thường: các trình giả lập thiết bị đầu cuối có xu hướng thể hiện số lượng màu của chúng, để tránh phá vỡ một số ứng dụng. Xem tmux, TERM và 256 màu hỗ trợ để biết thêm về điều này, đặc biệt là trong bối cảnh của tmux. Sự khác biệt giữa xterm-256colorsxtermlà báo cáo trước 256 màu trong terminfo trong khi báo cáo sau là 8 màu truyền thống.


2

TERM, theo quy ước đề cập đến một mô tả thiết bị đầu cuối. Ban đầu cái này được đặt tên là một phần của tệp văn bản termcap (bắt đầu từ cuối những năm 1970). Vào giữa những năm 1980, terminfo được giới thiệu dưới dạng tệp được biên dịch (nhị phân) giúp tiết kiệm thời gian khi có được mô tả đầu cuối. Mặc dù cả hai đều có sẵn cho tất cả các nền tảng giống như Unix, nhưng termcap hiếm khi được sử dụng ngày nay ngoại trừ việc mô phỏng bằng terminfo.

Đối với cả hai định dạng dữ liệu này, các ứng dụng thường trích xuất dữ liệu từ cơ sở dữ liệu đầu cuối với các thư viện lập trình có thể sử dụng lại. Thư viện lập trình terminfo thường là một phần của thư viện nguyền rủa cấp cao hơn mặc dù nó có thể được cung cấp (ví dụ, tùy chọn như trong ncurses) như một tệp thư viện riêng. Cho dù thư viện terminfo có được cung cấp riêng hay không, trong những trường hợp này, nó được coi là một phần của thư viện nguyền rủa. (Ngoài ra còn có một vài thư viện cấp cao khác như tiếng lóng).

Mục cơ sở dữ liệu đầu cuối cho mỗi thiết bị đầu cuối chứa các thuộc tính được gọi là khả năng . Họ nói với thư viện nguyền rủa (hoặc các ứng dụng sử dụng termcap / terminfo trực tiếp) cách thực hiện các thao tác hữu ích như xóa màn hình. Đối với hầu hết các thiết bị đầu cuối đó là một chuỗi thoát. Một vài thiết bị đầu cuối có thể không hỗ trợ một chuỗi thoát cho mục đích này; có những khả năng khác có thể được kết hợp bởi thư viện nguyền rủa để xóa màn hình (chẳng hạn như xóa từng dòng). Không phải tất cả các khả năng là trình tự thoát. Cũng có các khả năng booleansố , ví dụ, để cho biết liệu một tính năng có được hỗ trợ hay không và mức độ lớn của một thứ gì đó (chẳng hạn như kích thước màn hình).

Mỗi ứng dụng sử dụng termcap / terminfo sử dụng thư viện tương ứng để truy xuất mô tả đầu cuối, cũng như để thực hiện các hoạt động như thay thế các tham số thành các khả năng nhất định. Ví dụ: hầu hết các thiết bị đầu cuối cung cấp khả năng di chuyển con trỏ theo một số cột hoặc hàng nhất định từ vị trí hiện tại của nó. Các hàm tparm(hoặc tiparm) thay thế số vào khả năng để có được chuỗi thoát thực tế.

Thư viện nguyền rủa có các ứng dụng dòng lệnh duy trì cơ sở dữ liệu đầu cuối ( tic , infocmp ) và một số được sử dụng trong các tập lệnh shell để truy vấn cơ sở dữ liệu đầu cuối hoặc thực hiện các hoạt động cấp thấp với các khả năng của thiết bị đầu cuối ( tput , tset / reset ).

những ứng dụng độc đáo sử dụng TERMmà không sử dụng cơ sở dữ liệu đầu cuối. Hầu hết trong số này chỉ đơn giản là mã hóa hành vi của họ (chẳng hạn như GNU grep, groff và các trình duyệt web văn bản liên kết / links2 / elinks), trong khi một số ít có số tiền vào cơ sở dữ liệu đầu cuối của riêng họ (như GNU ls), nhưng sử dụng các quy tắc khác nhau và hành vi.

Quay lại câu hỏi:

  • Vậy biến này được giải thích ở đâu và ví dụ cho phép đặt lại màn hình đầu cuối của tôi bằng CTRL + l nếu tôi đặt đúng giá trị ở đó?

    Ứng dụng các thư viện cơ bản giải thích giá trị này. Đối với controlL, điều đó có thể được thực hiện cho bash trong thư viện readline (sử dụng giao diện lập trình termcap).

  • Ai kiểm tra ví dụ màu nào được hỗ trợ (xterm vs xterm-256color)?

    Cơ sở dữ liệu đầu cuối lưu trữ số lượng màu như một khả năng, cùng với các khả năng thiết lập màu nền trước và màu nền và đặt lại màu. Một số ứng dụng kết hợp các khả năng này với các thông tin khác (chẳng hạn như xác nhận của nhà phát triển xtermlà "thực sự" xterm-256color).

  • Vỏ?

    Hầu hết các shell sử dụng giao diện lập trình termcap để lấy thông tin đầu cuối. Tuy nhiên, chúng là những ứng dụng có hành vi riêng (không nhất thiết giống như lời nguyền).

  • Các ứng dụng hoặc một thư viện như ncurses?

    (xem ở trên: shell là một loại ứng dụng cụ thể)

  • Và các giá trị / loại thiết bị đầu cuối có thể được xác định ở đâu?

    Thông thường đó là trong một cơ sở dữ liệu đầu cuối được chia sẻ bởi các ứng dụng sử dụng các thư viện tiếng chửi hoặc tiếng lóng. Một số ứng dụng được mã hóa cứng hoặc sử dụng cơ sở dữ liệu riêng.

Đọc thêm:

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.