TERMが 'screen-256color'と 'xterm-256color'のときにEmacsの色が異なって設定される

私は端末でEmacsを使用しており、 screen-256colorxterm-256color の間で TERM 環境変数を変更すると、 Emacs内のデフォルトの色は異なって設定されます。

ちょうど明確にするために、私は両方の状況(byobu/tmuxで動作し、それぞれGnome Terminalで動いている)でフル256ビットカラーサポートを得ていますが、Emacsは異なる色を適用しているので、同じPythonファイルを見ると、ハイライト表示ではそれぞれ異なる色が使用されます。 color-theme-select を使って同じテーマに手動で色を変更すると、同じ色が使用されます。問題は、どのように色がどのように設定されているのか、もっと重要なのは、色が別々に設定されている理由がわかりません。

byobuに TERM = xterm-256color を使用させようとすると、この動作は変わらないので、端末エミュレータのいずれかに問題があるようには見えません。

Emacsがそれぞれの状況で同じ色を使用するようにするにはどうすればいいですか?

3

2 答え

問題は、どのように色がどのように設定されているのか、さらに重要なのはなぜ色が異なるのかが分かりません。

おそらく、 StackOverflowに関するこのディスカッションは関連しています。何が起こっているのかについての答え。


私のケースは emacs の背景色を検出する方法でした。 xterm - * にはフォールバックがありますが、 screen - * ではなく、黒の背景を使用していましたが、実際には白です(判断しません)。

" TERM を変更して emacs "を表示するのと比較して)正しい背景色を手動で設定し、( > Alt + x eval )、または Alt +:

(let ((frame-background-mode 'light)) (frame-set-background-mode nil))
3
追加された

私はほとんどこれについて専門家ではありませんが、これは必ずしもEmacsに関連するものではなく、むしろ端末の機能と関係していると思います。

たとえば、 infocmp -I -r -T xterm-256colまたは および infocmp -I -r -T screen-256colまたは を使用して、さまざまな端末機能を確認できます。私はそれらの間の簡単な比較を行い、 xterm-256colまたは にはかなりの機能が追加されていることに留意してください。

いくつかの推測の後で、私は、Emacsが initc を見つけ出し、それを使ってデフォルトテーマのために特定の色の濃淡を提供すると信じています。例えばこの質問を参照してください:

https://stackoverflow.com/questions/ 2814478/how-can-i-output-different-shade-of-green-to-the-terminal

私はあなたがEmacsからこの動作を完全に制御できるかどうかはわかりませんが、注意したように、 colまたは-theme-select を使って動作を変更できます。一時的な修正は、 .emacs にある(load-theme "theme" t)を使用して、

もう1つのオプションは、TERMINFOまたはTERMCAP環境変数を、適切な端末機能を持つファイルを指すように手動で設定することです。

たとえば、次のようにすることができます。

expまたはt TERMINFO="$HOME/.terminfo"
infocmp -I -r -T xterm-256colまたは > $TERMINFO

または

expまたはt TERMCAP="$HOME/.termcap"
infocmp -C -r -T xterm-256colまたは > $TERMCAP

This fまたはces Emacs to use the terminal capabilities you had in mind. It may also have other side-effects but I haven't seen any yet.

I don't know why tmux/byobu seems to ignまたはe fまたはcing TERM as you describe. In tmux however, I know that you can use set-option -g xterm-256colまたは to fまたはce the terminal to use. I don't know about byobu however.

1
追加された
私は完全な答えを与えることはできません。私はEmacsのソース(src/term.c)で(非常に)簡単な見方をしていましたが、これらの機能に応じてさまざまなことをしているようですので、これはおそらく起こっていることです。
追加された 著者 Nick Retallack,
ああ、今より多くの機能を持つ xterm-256color について興味深いです。奇妙なのは、それは私が色に見えるものと実際には一致しないということです。ターミナルエミュレータ(Guake)の色々なカラーパレットを使って遊ぶとき、 screen-256color で動作するEmacsは、 xterm-256color で動作するEmacsよりもはるかに動的に反応します。後者の場合、パレットの見た目に変化が少ないがあります。あまりにも多くの人が同じように見えるように。外観は賢明なので、 screen-256color のように表示されるようになりました。
追加された 著者 Craig B.,
ああ、byobuがTERMを無視していたわけではありませんでした。私はTERMをxterm-256colorに設定すると、byobuは実際にそれを尊重し、他の非スクリーン端末のTERMの値と同じ色を表示していると言っています。それは私たちに、何か変なことをしているのではないことを私に伝えます。
追加された 著者 Craig B.,
もう1つ追加されました。Emacsを実行していない端末の色は、2つの色で一定に見えます。おそらく、あなたが示唆しているように、これはEmacsがTERMがxterm-256colorのときに色を初期化する方法と関係しています。まあ、私が変なセットアップをしていない限り、それは間違っているように見えます。私は初期化ファイルなしでemacsをロードしましたが、まだそれを行います。
追加された 著者 Craig B.,