我目前設定$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
我曾經將其設定為eterm-color
,但問題是這種終端類型在我透過 SSH 登入的大多數機器上不可用。
.bashrc
Ubuntu 中的預設設定檢查TERM
變數是否以 開頭xterm-
,在這種情況下它會嘗試設定視窗標題:
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
問題就出\[\e]0;
在位。它應該由 xterm 相容的終端模擬器解析,但 emacs (ansi-term) 不會這樣做。結果是這樣的終端:
0;user@host: ~user@host:~$
readline
當輸入的文字大於終端的寬度時,它也會破壞某些使用 的應用程式。
因為eterm-color
在某些遠端主機上不可用(而且我也無法安裝它),所以將其設定為該值會弄亂less
.
有什麼我可以使用的技巧,例如大多數發行版附帶的另一種終端類型或使 ansi-term 識別的 hack相關轉義碼並設定標題,或直接丟棄它們?
答案1
我找到了一種方法,可以讓您具體找出遠端主機上可用的終端,然後進行設定。通常,至少有一個 ansi 相容終端,因此不需要「駭客」來偽造它。
透過一個很長的 ssh 指令完成,它看起來像這樣:
ssh -i ~/.ssh/some_key.pub -tty some_remote_server "導出 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$ || 導出TERM=xterm && emacs -nw"
這會在遠端主機上按優先順序查找不同的 ansi 相容(和不相容)終端類型,並設定在啟動 EMACS 之前找到的第一個終端類型。如果找不到我們的首選類型,它將 TERM 設定為使用「xterm」類型,確保 EMACS 確實啟動。
在這個範例中,我按順序尋找 eterm-color、aterm、ansi 和 xterm-256color。我不是 EMACS 的重度用戶,所以不確定這些是否真的是最好的。我在 CentOS 上測試了這個啟動並且運作良好(它在我的測試中發現了 eterm-color )。
我相信 terminfo 在大多數/所有 Linux 變體上都位於同一位置,但您可以添加更多路徑來搜索,就像添加更多終端一樣,透過添加更多
|| ls -1R /a/不同/路徑 | grep ^其他終端$條件測試和管道。
答案2
鑑於您的問題,我建議將設定TERM
為 vt100。它安裝在任何地方,甚至在 Debian 的ncurses-base
軟體包中。建議答案中提到的替代方案(ansi、aterm、xterm-256color)具有差異,這些差異將發揮eterm-color
.
此外,標題字串功能不是終端描述的一部分。您的遠端應用程式根據 的設定使用它TERM
,例如,任何使用「xterm」的內容。
從技術上講,你會失去顏色(畢竟,vt100從來沒有做過彩色)。無論如何,有些應用程式會這樣做。