実行方法に応じて、screen
正しいTERMCAP情報があるかどうか。その症状は、端末で色が常に正しく表示されないことです(たとえば、ls、vim構文の強調表示など)。
これはうまくいきます:
$ echo $TERMCAP
<empty output>
$ screen -S foo
$ screen -r foo
<now I'm inside a screen session>
$ echo $TERMCAP
<long output>
$ ls
<nice pretty colors>
ここに問題があります。
$ echo $TERMCAP
<empty output>
$ screen -d -m -S foo
$ screen -r foo
<now I'm inside a screen session>
$ echo $TERMCAP
<long output, but different than before>
$ ls
<no colors ):>
これでこの問題を解決できます。 TERMCAPなどを手動で変更できます。
しかし、私は何が起こっているのか本当に理解したいと思います。可能であれば、「きれいな」解決策を見つけたいと思います。
何が起こっているのか知っている人はいますか?-d -m
走りながら使うとどんな変化がありますかscreen
?
それが重要であれば、これはFreeBSDにあります。
答え1
-d -m
このオプションを使用するときは、screen
次から始めてください。優れたこの場合、TERM
現在の変数に基づいて端末記述を改善する試みは行われない。TERM
通常の起動(分離されていない)でのみ変数を見つけます。分離モードで開始されたセッションに接続すると、初期化を実行するのに遅すぎますTERM
。
この部分16.1 ウィンドウのtermcap項目の選択修正のいくつかはマニュアルで説明されています。
動作しない例は次のとおりです。
TERMCAP=SC|画面|VT 100/ANSI X3.64 仮想端末:\ :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:bs:bt=\E[Z:\] :cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:ct=\E[3g:\] :do=^J:nd=\E[C:pt:rc=\E8:rs=\Ec:sc=\E7:st=\EH:up=\EM:\ :le=^H:bl=^G:cr=^M:it#8:ho=\E[H:nw=\EE:ta=^I:is=\E)0:\ :li#24:co#80:am:xn:xv:LP:sr=\EM:al=\E[L:AL=\E[%dL:\ :cs=\E[%i%d;%dr:dl=\E[M:DL=\E[%dM:dc=\E[P:DC=\E[%dP:\] :im=\E[4h:ei=\E[4l:mi:IC=\E[%d@:ks=\E[?1h\E=:\] :ke=\E[?1l\E>:vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l:\] :ti=\E[?1049h:te=\E[?1049l:k0=\E[10~:k1=\EOP:k2=\EOQ:\ :k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:\] :k8=\E[19~:k9=\E[20~:k;=\E[21~:F1=\E[23~:F2=\E[24~:\] :kh=\E[1~:@1=\E[1~:kH=\E[4~:@7=\E[4~:kN=\E[6~:kP=\E[5~] :\ :kI=\E[2~:kD=\E[3~:ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:
そして良いものは次のとおりです。
TERMCAP=SC|画面|VT 100/ANSI X3.64 仮想端末:\ :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:bs:bt=\E[Z:\] :cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:ct=\E[3g:\] :do=^J:nd=\E[C:pt:rc=\E8:rs=\Ec:sc=\E7:st=\EH:up=\EM:\ :le=^H:bl=^G:cr=^M:it#8:ho=\E[H:nw=\EE:ta=^I:is=\E)0:\ :li#25:co#80:am:xn:xv:LP:sr=\EM:al=\E[L:AL=\E[%dL:\ :cs=\E[%i%d;%dr:dl=\E[M:DL=\E[%dM:dc=\E[P:DC=\E[%dP:\] :im=\E[4h:ei=\E[4l:mi:IC=\E[%d@:ks=\E[?1h\E=:\] :ke=\E[?1l\E>:vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l:\] :ti=\E[?1049h:te=\E[?1049l:us=\E[4m:ue=\E[24m:so=\E[3m:\] :se=\E[23m:md=\E[1m:mr=\E[7m:me=\E[m:ms:\] :Co#8:pa#64:AF=\E[3%dm:AB=\E[4%dm:op=\E[39;49m:AX:G0:\] :as=\E(0:ae=\E(B:\ :ac=\140\140aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++,,hhII00:\ :k0=\E[10~:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:\ :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:\] :F1=\E[23~:F2=\E[24~:kb=^H:K2=\EOE:kB=\E[Z:kh=\E[1~:\] :@1=\E[1~:kH=\E[4~:@7=\E[4~:kN=\E[6~:kP=\E[5~:kI=\E[2~] :\ :kD=\E[3~:ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:km:
良い場合は、に設定されていることをscreen
確認し、その説明に機能を追加してください。TERM
xterm
screen
FreeBSD では、termcap アプリケーションで想定される 1023 バイトの制限に説明を制限すると、termcap の配布に色がないため、この問題がわかります (追加設定は破棄されます)。他のプラットフォームで使用できます。説明するncursesから提供され、ここするカラー活用法を教えてください。違いは、使用されているライブラリによるものではありません。screen
それは用語の適用、FreeBSDでncursesを使用します。
$ ldd `which screen`
/usr/local/bin/screen:
libncurses.so.8 => /lib/libncurses.so.8 (0x80086a000)
libelf.so.1 => /usr/lib/libelf.so.1 (0x800ab6000)
libutil.so.9 => /lib/libutil.so.9 (0x800ccb000)
libulog.so.0 => /lib/libulog.so.0 (0x800edd000)
libcrypt.so.5 => /lib/libcrypt.so.5 (0x8010df000)
libc.so.7 => /lib/libc.so.7 (0x8012ff000)
libmd.so.6 => /lib/libmd.so.6 (0x801698000)
代わりに違いは次のとおりです。
- FreeBSDは、terminfoよりも優先的にtermcapデータベースを使用してncursesを構築します(ポートを使用してterminfoデータベースを取得できます)。
- FreeBSDには、他の端末データベースと一致しないtermcapファイルがあります。いくつかの修正が行われましたが、まだ次のようないくつかの欠点があります。VT100sカラーと改訂するコンソールと実際のxtermの間の違いをあまり
TERM=xterm
明確にします(もちろんxtermを使用している人を除く)。
やや皮肉なことに、フォーマットが複数行にscreen
設定されていることがわかりますTERMCAP
。これは4.2BSDと4.3BSDで使用されていますが、ハッシュされたデータベースを代わりに使用し、空白も削除して4.4BSD(約25年前)で使用されなくなりました(これはtermcapサイズの1023バイト制限と比較されます)。 FreeBSD以降1990年代にncursesに移行、この型は廃止され、このTERMCAP
変数に依存するアプリケーションはほとんどありません。しかし、ls
それはそれらの一つです。
screen
-T
実際にオプションがありますしなければならない特定のtermcapエントリ(色を含む)を指定してこの問題を解決するのに役立つ試みがありますが、テストしても問題は解決しないようです。
追加資料:
答え2
まあ、そこにいなかった何かができました。またこの問題を解決するには何が問題ですか?
セッションを生成するスクリプトのscreen
上部付近には次のものがあります。
# This runs the commands:
# TERM=screen
# TERMCAP='...'
# with values appropriate for a 'screen' terminal
eval "$(tset - -s screen | tail -n+2)"
# Set up the SCREENCAP variable, which 'screen' will use for new sessions
SCREENCAP="$TERMCAP"; export SCREENCAP
# ...
screen -d -m -S my-session
my-session
これで端末に接続すると色が機能します。
完全に満足していませんが、十分に効果的です。