丸山です。

しらいさん、梅本さん、有難う。

そもそも環境変数 COLORTERM の意味・役割、その値 truecolor の意味は何なの
でしょうか。

環境変数は、カーネルレベルで見れば、プロセスから子プロセスへ伝達される変
数に過ぎません。各プロセスは環境変数を自由に定義できるし、値の設定、変更
も自由です。ただしいくつかの環境変数、例えば LANG とか TERM とかは、その
意味・役割が「グローバルに」定められていて、皆それに従って使っています。
COLORTERM についてはそのような共通の意味付け・役割が定められているのでしょ
うか。それはどこに書いてあるのでしょうか。

今回の事例について言うと、端末エミュレーター(konsole とか xfce-terminal
など)と screen と emacs の三者の間で COLORTERM=truecolorの意味について、
もし共通認識がなければ当然問題が発生するでしょう。

ここまでは UNIX の初歩知識だと思いますが、それをもう一度頭に置いて考えて
みると、梅本さんの「screenが消化不良を起こしている」とか、以下のしらいさ
んの記述が実に適切に現状を言い表していることがわかります。

環境変数は通常親プロセスから引き継いだものをそのまま子プロセスに伝えるわ
けですが、screenについては、TERM と TERMCAP をそのまま子プロセスに引き継
ぐわけにはゆきません。何故ならば screen が親プロセス(konsole とか
xfce-terminal などの端末エミュレーター)から与えられるキャラクター画面を
そのまま子プロセスに渡すわけではなくて、最下行(これをman screenでは
"message line"と呼んでいます)を除いた部分を子プロセスに貸し与えるためで、
そのため、例えば子プロセスが TERMCAP の TCapCode cl (clear_screen, clear
screen and home cursor)を発したとしても、 screen は message line 以外の
部分を clear する、という動作をする必要があります。つまりscreen は子プロ
セスから受け取った画面制御コードを適宜翻訳して親プロセスに渡す、という動
作をしているはずで、その過程で COLORTERM=truecolor に対応するコードをう
まく処理できていない、というのが、梅本さん、しらいさんの分析でしょう。な
るほど。納得できました。

で、もし emacs の COLORTERM=truecolor に対する対処が適切であるのならば、
screen の方は「俺は COLORTERM=truecolor には対応していないぞ」と宣言する
意味で環境変数 COLORTERM は値を空にして子プロセスに渡すのが正しい態度だ
ろうと思います。その意味で

> ソリューションとしては、下記 URL にあるように、~/.screenrc
>に「setenv COLORTERM ""」の一行追記

は最も筋が通った対処策であると思いますが、私はどうもしらいさんの

>termcap
>を適切に記述すれば COLORTERM=truecolor のままでも対応出来そ
>うに思えるんですが。

に一票入れたくなります。つまり emacs の方も何かおかしい。

以上 TERMCAP も 環境変数 COLORTERM も理解していない人間のまとめでした。

Sun, 02 Apr 2023 02:27:16 +0900
Takashi SHIRAI <shi...@unixusers.net> writes:

> しらいです。
>
>In Message-Id <86cz4q86bh.wl-...@mahoroba.org>
>        Hajimu UMEMOTO <u...@mahoroba.org>さんwrites:
>> 梅本です。
>
>> 環境変数 COLORTERM に truecolor が設定されていると screen 上で emacs
>> の挙動が変になるというのを教えてもらいました。
>
> ふむ、Konsole は true color に対応しているので環境変数にて
>その旨の設定をしていて、emacs はそれに従って true color 用の
>シーケンスを吐いているのに、screen がそれを解釈して Konsole
>に渡すことが出来ていないんですね。
> そこまではいいですが、それだけだと TERM=xterm にした場合に
>症状が治まる理由が説明出来ないんじゃないでしょうか。termcap
>を適切に記述すれば COLORTERM=truecolor のままでも対応出来そ
>うに思えるんですが。
> emacs 側のソースも確認してみたんですが、TERM の値を文字列
>「xterm」と比較しているような気配もなさそうです。
>
> ソリューションとしては、下記 URL にあるように、~/.screenrc
>に「setenv COLORTERM ""」の一行追記でいいんでしょうけど、な
>んか釈然としませんね。
>https://www.reddit.com/r/emacs/comments/y9b8cd/emacs_running_under_screen_on_a_mac_going/
>
>                                               しらい たかし

--------
丸山 直昌 まるやま なおまさ
メールアドレス: m...@amogha.jp

Reply via email to