Giá trị đúng của $ TERM cho thuật ngữ anacs 'ansi-term, đặc biệt là nếu' eterm-color 'không có sẵn sau SSH?


7

Tôi hiện đang thiết lập $TERMđể xterm-256color:

if [[ -n "$EMACS" ]]; then
    export TERM=xterm-256color
    alias emacs="emacsclient --no-wait"
    export EDITOR="emacsclient --no-wait"
    export VISUAL="emacsclient"
fi

Tôi đã từng cài đặt nó eterm-color, nhưng vấn đề là loại thiết bị đầu cuối này không có sẵn trên hầu hết các máy tôi đăng nhập qua SSH.

Mặc định .bashrctrong Ubuntu kiểm tra xem TERMbiến bắt đầu bằng xterm-, trong trường hợp đó, nó cố gắng đặt tiêu đề cửa sổ:

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

Vấn đề là \[\e]0;bit. Nó nên được phân tích cú pháp bởi các trình giả lập thiết bị đầu cuối tương thích xterm, nhưng emacs (thuật ngữ ansi) không làm điều đó. Kết quả là một thiết bị đầu cuối như thế này:

0;user@host: ~user@host:~$ 

Nó cũng phá vỡ một số ứng dụng bằng cách sử dụng readline, khi văn bản gõ lớn hơn chiều rộng của thiết bị đầu cuối.

Bởi vì eterm-colorkhông có sẵn trên một số máy chủ từ xa (và tôi cũng không thể cài đặt nó), việc đặt nó vào giá trị đó sẽ làm rối tung mọi thứ như less.

Có bất kỳ mẹo nào tôi có thể sử dụng, chẳng hạn như một loại thiết bị đầu cuối khác có hầu hết các bản phân phối hoặc một bản hack làm cho thuật ngữ ansi nhận ra các mã thoát có liên quan và đặt tiêu đề, hoặc chỉ loại bỏ chúng?

Câu trả lời:


3

Tôi đã tìm ra một cách tiếp cận cho phép bạn tìm hiểu cụ thể những thiết bị đầu cuối nào có sẵn trên máy chủ từ xa và sau đó thiết lập nó. Thông thường, có ít nhất một thiết bị đầu cuối tương thích ansi, do đó, một 'hack' để giả mạo nó là không cần thiết.

Thực hiện trong một lệnh ssh dài, nó sẽ trông giống như thế này:

ssh -i ~ / .ssh / some_key.pub -tty some_remote_server "export TERM =` ls -1R / usr / share / terminfo | grep ^ eterm-color $ || ls -1R / usr / share / terminfo | grep ^ aterm $ || ls -1R / usr / share / terminfo | grep ^ ansi $ || ls -1R / usr / share / terminfo | grep ^ xterm-256color $ || export TERM = xterm && emacs -nw "

Điều này tìm thấy các loại thiết bị đầu cuối tương thích ansi (và không tương thích) khác nhau theo thứ tự ưu tiên trên máy chủ từ xa và đặt loại đầu tiên được tìm thấy trước khi khởi chạy EMACS. Nó đặt TERM để sử dụng loại 'xterm' nếu không tìm thấy loại ưa thích nào của chúng tôi, đảm bảo EMACS thực sự khởi chạy.

Trong ví dụ này, tôi đang tìm eterm-color, aterm, ansi và xterm-256color theo thứ tự đó. Tôi không phải là người dùng EMACS nặng, vì vậy không chắc chắn đó là những người thực sự tốt nhất. Tôi đã thử nghiệm khởi chạy này trên CentOS và hoạt động tốt (nó tìm thấy màu eterm trong thử nghiệm của tôi).

Tôi tin rằng terminfo ở cùng một vị trí trên hầu hết / tất cả các biến thể Linux, nhưng bạn có thể thêm nhiều đường dẫn để tìm kiếm giống như cách bạn thêm nhiều thiết bị đầu cuối, bằng cách thêm nhiều hơn

| | ls -1R / a / khác nhau / đường dẫn | grep ^ sometherterminal $
kiểm tra điều kiện và đường ống.


1
Lưu ý rằng tôi không cố chạy emacs trên máy chủ từ xa. Tôi đang cố gắng ssh vào nó (và, từ đó, vào những người khác) bên trong trình giả lập thiết bị đầu cuối "ansi-term" của emacs.
Stefano Palazzo

: 'D nó thật đẹp.
djhaskin987


3

Do vấn đề của bạn, tôi khuyên bạn nên cài đặt TERMthành vt100. Nó được cài đặt ở mọi nơi, ngay cả trong ncurses-basegói của Debian . Các lựa chọn thay thế được đề cập trong câu trả lời được đề xuất (ansi, aterm, xterm-256color) có những khác biệt sẽ thực hiện các tính năng vắng mặt eterm-color.

Ngoài ra, tính năng chuỗi tiêu đề không phải là một phần của mô tả thiết bị đầu cuối. Các ứng dụng từ xa của bạn đang sử dụng nó dựa trên cài đặt TERM, ví dụ: mọi thứ sử dụng "xterm".

Về mặt kỹ thuật, bạn sẽ mất màu (sau tất cả, vt100 không bao giờ làm màu ). Một số ứng dụng làm điều này anyway.

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.