現在、$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経由でログインするほとんどのマシンでこの端末タイプを使用できないことです。
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に 関連するエスケープコード を認識させてタイトルを設定する、または単に破棄するハックなど、使用できるトリックはありますか?
問題がある場合は、TERM
をvt100に設定することをお勧めします。 Debianのncurses-base
パッケージであっても、どこにでもインストールされます。提案された回答(ansi、aterm、xterm-256color)で言及されている代替案には、eterm-color
にない機能を実行する違いがあります。
また、タイトル文字列機能は端末の説明の一部ではありません。リモートアプリケーションは、TERM
の設定に基づいてそれを使用しています。たとえば、「xterm」を使用しているものはすべてです。
技術的には色が失われます(結局のところ、vt100は色をしませんでした)。とにかくこれを行うアプリケーションもあります。
リモートホストで使用できる端末を具体的に調べて設定できるアプローチを考案しました。通常、少なくとも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 $