現在、$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が認識するハックなど、使用できるトリックはありますか?関連するエスケープコードタイトルを設定しますか、それとも破棄しますか?
答え1
私は、リモート ホストで使用できる端末を具体的に見つけて設定できるアプローチを考案しました。通常、ANSI 互換の端末が少なくとも 1 つあるため、それを偽装する「ハック」は不要です。
1 つの長めの 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 が見つかりました)。
ほとんど/すべてのLinuxバリアントでterminfoは同じ場所にあると思いますが、ターミナルを追加するのと同じ方法で、検索するパスを追加することができます。
|| ls -1R /a/different/path | grep ^someotherterminal$条件テストとパイプ。
答え2
問題を考慮すると、 をTERM
vt100 に設定することをお勧めします。 これは、Debian のパッケージでも、どこにでもインストールされていますncurses-base
。 提案された回答で言及されている代替案 (ansi、aterm、xterm-256color) には違いがあり、 にはない機能を実行しますeterm-color
。
また、タイトル文字列機能は端末の説明の一部ではありません。リモート アプリケーションは、TERM
たとえば「xterm」を使用するものなど、 の設定に基づいてこれを使用します。
技術的には色は失われます(結局のところ、vt100はカラーではなかった)。一部のアプリケーションでは、とにかくこれを実行します。