web-dev-qa-db-ja.com

特にSSHの後で「eterm-color」が利用できない場合、emacsのansi-termの$ TERMの正しい値は何ですか?

現在、$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経由でログインするほとんどのマシンでこの端末タイプを使用できないことです。

Ubuntuのデフォルトの.bashrcは、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に 関連するエスケープコード を認識させてタイトルを設定する、または単に破棄するハックなど、使用できるトリックはありますか?

7
Stefano Palazzo

問題がある場合は、TERMをvt100に設定することをお勧めします。 Debianのncurses-baseパッケージであっても、どこにでもインストールされます。提案された回答(ansi、aterm、xterm-256color)で言及されている代替案には、eterm-colorにない機能を実行する違いがあります。

また、タイトル文字列機能は端末の説明の一部ではありません。リモートアプリケーションは、TERMの設定に基づいてそれを使用しています。たとえば、「xterm」を使用しているものはすべてです。

技術的には色が失われます(結局のところ、vt100は色をしませ​​んでした)。とにかくこれを行うアプリケーションもあります。

3
Thomas Dickey

リモートホストで使用できる端末を具体的に調べて設定できるアプローチを考案しました。通常、少なくとも1つのANSI互換端末が存在するため、それを偽造するための「ハッキング」は不要です。

1つの長い 'ish sshコマンドで実行すると、次のようになります。

 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 「

これにより、リモートホスト上で優先順にさまざまなANSI互換(および非互換)端末タイプが検出され、EMACSを起動する前に最初に検出されたものが設定されます。優先タイプが見つからない場合は「xterm」タイプを使用するようにTERMを設定し、EMACSが実際に起動するようにします。

この例では、eterm-color、aterm、ansi、xterm-256colorの順に探しています。私はEMACSのヘビーユーザーではないので、それらが実際に最高かどうかはわかりません。私はこのローンチをCentOSでテストし、うまく機能しました(テストでeterm-colorが見つかりました)。

用語情報はほとんど/すべてのLinuxバリアントで同じ場所にあると思いますが、さらに追加することで、端末を追加するのと同じ方法で検索するパスを追加できます。

 || ls -1R/a/different/path | grep ^ someotherterminal $ 
3
Andrew