Làm cách nào tôi có thể sử dụng các mục terminfo trên FreeBSD?


7

Trên máy Linux cục bộ của tôi, tôi đang sử dụng mối (dựa trên VTE) . Nó đi kèm với tệp terminfo của riêng nó ( xterm-termite), không được phân phối với ncurses theo mặc định.

Tôi cố gắng kết nối với một máy chủ FreeBSD từ xa. Thật không may, FreeBSD theo mặc định chỉ sử dụng định dạng termcap cũ hơn. Tôi chưa thể tìm cách chuyển đổi terminfo thành termcap. Vì vậy, trong khi tôi có thể biên dịch một phiên bản ncurses bao gồm hỗ trợ terminfo từ các cổng ( devel/ncurses), các ứng dụng ncurses sẽ liên kết với lib do hệ thống cung cấp theo mặc định. Điều này dẫn đến các ứng dụng không khởi chạy được:

$ echo $TERM
xterm-termite
$ toe | grep termite
xterm-termite   VTE-based terminal
$ tmux
open terminal failed: can't find terminfo database
$ htop
Error opening terminal: xterm-termite.

( toeliệt kê các mục terminfo)

Làm cách nào tôi có thể khiến FreeBSD sử dụng terminfo theo mặc định hoặc buộc các ứng dụng sử dụng lib ncurses do cổng cung cấp hoặc ít nhất là chuyển đổi terminfo thành dữ liệu termcap?

(Tôi biết các cách giải quyết như đặt TERMgiá trị an toàn như thế nào xterm-256color, nhưng tôi nghĩ rằng điều đó đánh bại mục đích của terminfo)


1
Cố gắng infocmp -Ctạo ra một mục termcap.
Đánh dấu Plotnick

@MarkPlotnick Cảm ơn rất nhiều, nó hoạt động! Tôi chạy infocmp -C xterm-termite >> /usr/share/misc/termcap; cap_mkdb /usr/share/misc/termcap. Vui lòng thêm nó dưới dạng câu trả lời, vì vậy tôi có thể phê duyệt nó.
Wilhelm Schuster

Câu trả lời:


7

Cách thông thường để chuyển đổi terminfo thành termcap là với

infocmp -Cr

Các infocmp tùy chọn -Cbảo infocmpsử dụng termcap tên, và các -rtùy chọn cho nó để dịch terminfo khả năng sang định dạng termcap. Một số (như các biểu thức được sử dụng trong sgr) sẽ không dịch và infocmpcó thể để lại các khả năng nhận xét nếu có đủ dung lượng.

Theo "đủ không gian", đề cập đến thực tế là các ứng dụng termcap thực chỉ cho phép 1023 byte trong một mô tả. FreeBSD sử dụng ncurses bên dưới, nhưng một số ứng dụng đưa ra giả định về độ dài mục nhập.

FreeBSD tuy nhiên không có tệp termcap độc lập với ncurses. Ngoài ra còn có một "cổng" cho ncurses, một số tìm thấy hữu ích.

Nhân tiện, bạn có thể đề cập đến điều này: mối / termite.terminfo . Nếu bạn dịch nó, bạn có thể thấy một cái gì đó như

# vim: noet:ts=8:sw=8:sts=0
# (untranslatable capabilities removed to fit entry within 1023 bytes)
# (sgr removed to fit entry within 1023 bytes)
# (acsc removed to fit entry within 1023 bytes)
# (terminfo-only capabilities suppressed to fit entry within 1023 bytes)
xterm-termite|VTE-based terminal:\
        :am:hs:km:mi:ms:xn:\
        :co#80:it#8:li#24:\
        :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
        :K2=\EOE:LE=\E[%dD:RI=\E[%dC:SF=\E[%dS:SR=\E[%dT:\
        :UP=\E[%dA:ae=\E(B:al=\E[L:as=\E(0:bl=^G:bt=\E[Z:cd=\E[J:\
        :ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=^M:\
        :cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=^J:\
        :ds=\E]2;\007:ec=\E[%dX:ei=\E[4l:fs=^G:ho=\E[H:im=\E[4h:\
        :is=\E[!p\E[?3;4l\E[4l\E>:k1=\EOP:k2=\EOQ:k3=\EOR:\
        :k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:\
        :k9=\E[20~:kD=\E[3~:kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=\177:\
        :kd=\EOB:ke=\E[?1l\E>:kh=\EOH:kl=\EOD:kr=\EOC:\
        :ks=\E[?1h\E=:ku=\EOA:le=^H:md=\E[1m:me=\E[0m:mh=\E[2m:\
        :mm=\E[?1034h:mo=\E[?1034l:mr=\E[7m:nd=\E[C:rc=\E8:sc=\E7:\
        :se=\E[27m:sf=^J:so=\E[7m:sr=\EM:st=\EH:ta=^I:te=\E[?1049l:\
        :ti=\E[?1049h:ts=\E]2;:ue=\E[24m:up=\E[A:us=\E[4m:\
        :vb=\E[?5h\E[?5l:ve=\E[?12l\E[?25h:vi=\E[?25l:\
        :vs=\E[?12;25h:

Có một vài lỗi trong mục terminfo (ví dụ VTE không hỗ trợ chế độ meta). Ngoài ra, ở định dạng termcap, bạn có thể nhận thấy rằng hầu hết các phím chức năng đều biến mất (giới hạn 1023 byte).

Đọc thêm:


Cảm ơn rất nhiều cho lời giải thích chi tiết! Tôi tự hỏi tại sao họ không chuyển sang terminfo ... Ví dụ giới hạn kích thước đó có vẻ phức tạp.
Wilhelm Schuster

Quán tính, chủ yếu.
Thomas Dickey

Như đã lưu ý ở trên, một số thứ bị vứt đi do giới hạn kích thước. Thật không may, màu sắc bị thiếu, nhưng ít nhất Backspace hoạt động ngay bây giờ.
Schuster Schuster

Các -Ttùy chọn infocmp có thể làm việc cho bạn, nhưng một số ứng dụng có thể phá vỡ.
Thomas Dickey

4

Đôi khi bạn cần thực hiện một số thay đổi thủ công để dịch mọi thứ đúng cách.

Tôi đã thực hiện các thay đổi sau đây, để có được nó để dịch các phần "quan trọng" của mô tả.

  • Các khả năng bị loại bỏ không thể được biểu diễn ở định dạng termcap:
    • Thay đổi màu động (ccc / initc)
    • Trình tự cài đặt đa thuộc tính (sgr)
    • Visual Bell (flash, yêu cầu độ trễ trung gian không hoạt động trong termcap)
  • Các khả năng đã bị xóa không hữu ích:
    • Ký tự vẽ hộp VT100 (smacs / rmacs / acsc, cũng đã thay đổi sgr0)
    • Khóa meta 8 bit (km / smm / rmm), Thomas Dickey cũng đề cập rằng nó không thực sự hoạt động.
    • In (mc5i / mc0 / mc4 / mc5)
    • Con trỏ nhấp nháy (cvvis, cũng đã thay đổi cnorm)
    • HP nguyền rủa các phần mở rộng (meml / memu)
    • Thay đổi động của các điểm dừng tab (hts / tbc)
    • Các thuộc tính được sử dụng không thường xuyên (mờ / invis)
  • Các khả năng bị loại bỏ hiếm khi được sử dụng và quá lâu
    • Các phím con trỏ / phím con trỏ (kf13 +, kLFT / etc [tên viết hoa], loại, kri [được sử dụng để tăng / giảm]
    • Trình tự init và reset dạng dài (is2 / rs2)
    • Nhận dạng và phản hồi của thiết bị đầu cuối (u8 / u9)
  • Viết lại một số thứ để phù hợp hơn / tương thích với termcap
    • Đã thay đổi setab / setaf thành phiên bản tương thích thuật ngữ kém hiệu quả hơn
    • Đã thay đổi smkx / rmkx / Clear thành ngắn hơn

Điều này đã giảm xuống 1001 ký tự mà không phải hy sinh bất cứ điều gì "quan trọng" (đặc biệt, nó vẫn hỗ trợ 256 màu và đặt văn bản trên thanh tiêu đề)

xterm-termite | thiết bị đầu cuối dựa trên VTE: \
    : NP: am: hs: mi: ms: ut: xn: \
    : Co # 256: co # 80: nó # 8: li # 24: pa # 32767: \
    : @ 7 = \ EOF: @ 8 = \ EOM: AB = \ E [48; 5;% dm: AF = \ E [38; 5;% dm: AL = \ E [% dL: \
    : DC = \ E [% dP: DL = \ E [% dM: DO = \ E [% dB: F1 = \ E [23 ~: F2 = \ E [24 ~: \
    : IC = \ E [% d @: K2 = \ EOE: Km = \ E [M: LE = \ E [% dD: RA = \ E [? 7l: RI = \ E [% dC: \
    : SA = \ E [? 7h: SF = \ E [% dS: SR = \ E [% dT: UP = \ E [% dA: ZH = \ E [3m: \
    : ZR = \ E [23m: al = \ E [L: bl = ^ G: bt = \ E [Z: cb = \ E [1K: cd = \ E [J: ce = \ E [K: \
    : ch = \ E [% i% dG: cl = \ E [H \ E [J: cm = \ E [% i% d;% dH: cr = ^ M: \
    : cs = \ E [% i% d;% dr: cv = \ E [% i% dd: dc = \ E [P: dl = \ E [M: do = ^ J: \
    : ds = \ E] 2; \ 007: ec = \ E [% dX: ei = \ E [4l: fs = ^ G: ho = \ E [H: im = \ E [4h: \
    : k1 = \ EOP: k2 = \ EOQ: k3 = \ EOR: k4 = \ EOS: k5 = \ E [15 ~: k6 = \ E [17 ~: \
    : k7 = \ E [18 ~: k8 = \ E [19 ~: k9 = \ E [20 ~: k; = \ E [21 ~: kB = \ E [Z: kD = \ E [3 ~: \
    : kI = \ E [2 ~: kN = \ E [6 ~: kP = \ E [5 ~: kb = \ 177: kd = \ EOB: ke = \ E [? 1l: \
    : kh = \ EOH: kl = \ EOD: kr = \ EOC: ks = \ E [? 1h: ku = \ EOA: le = ^ H: md = \ E [1m: \
    : tôi = \ E [m: mr = \ E [7m: nd = \ E [C: op = \ E [39; 49m: r1 = \ Ec: rc = \ E8: \
    : sc = \ E7: se = \ E [27m: sf = ^ J: so = \ E [7m: sr = \ EM: ta = ^ I: te = \ E [? 1049l: \
    : ti = \ E [? 1049h: ts = \ E] 2 ;: u6 = \ E [% i% d;% dR: u7 = \ E [6n: ue = \ E [24m: \
    : lên = \ E [A: chúng tôi = \ E [4m: ve = \ E [? 25h: vi = \ E [? 25l:

Lưu ý rằng tất cả các dòng thụt lề nên sử dụng các tab để thụt lề.

Điều quan trọng để hỗ trợ màu sắc là khả năng AB và AF - chúng không thể được dịch tự động từ setab / setaf vì đây là thiết bị đầu cuối 256 màu. Phần có liên quan của termcap là :AB=\E[48;5;%dm:AF=\E[38;5;%dm:; đối với chế độ không 256 màu, nó sẽ là :AB=\E[4%dm:AF=\E[3%dm:(và Co#8, pa#64để khớp).


Cảm ơn bạn đã trả lời và đi ra khỏi cách giải thích làm thế nào bạn có được giải pháp. Tôi muốn nói rằng câu trả lời của @ thomas-dickey vẫn phù hợp với câu hỏi của tôi, rộng hơn, không nhất thiết chỉ dành cho các thiết bị đầu cuối dựa trên VTE, tốt hơn. Tôi hy vọng bạn có thể hiểu.
Wilhelm Schuster

@WilmusSchuster Câu trả lời của tôi được dự định là chung chung một cách hợp lý trong việc giải thích các kỹ thuật để giảm một mục terminfo vào một cái gì đó có thể dịch mà không bỏ sót. Dù sao, điều quan trọng đối với màu sắc, vì vấn đề bạn phàn nàn là thiếu màu sắc, là :AB=\E[48;5;%dm:AF=\E[38;5;%dm:(hoặc :AB=\E[4%dm:AF=\E[3%dm:đối với các thiết bị đầu cuối không phải là 256 màu) trong thuật ngữ, giống như trên hầu hết các thiết bị đầu cuối và có thể được thêm vào bằng tay giả sử là đủ phòng cho nó Nhưng tôi không lo lắng về việc ai sẽ nhận được cờ được chấp nhận trong mọi trường hợp, chỉ vui mừng vì tôi có thể giúp đỡ với vấn đề của bạn.
Random832
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.