對於 emacs 的 ansi-term,$TERM 的正確值是多少,尤其是在 SSH 後「eterm-color」不可用的情況下?

對於 emacs 的 ansi-term,$TERM 的正確值是多少,尤其是在 SSH 後「eterm-color」不可用的情況下?

我目前設定$TERMxterm-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 登入的大多數機器上不可用。

.bashrcUbuntu 中的預設設定檢查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從來沒有做過彩色)。無論如何,有些應用程式會這樣做。

相關內容