web-dev-qa-db-ja.com

MacOSのTerminal.appのTmuxと薄暗い色

問題

私のMac(10.11)Tmuxでは、dim- edの色が正しく表示されないため、煩わしさがあります。

次の図では、コミット作成者の名前はdim whiteで表されているはずです。これはTerminal.appでは正常に機能しますが、Tmux内では機能しません。

git lg1 comparison

誰かがこれをデバッグする方法について何か手がかりを持っていますか?
それは$TERM変数に関連していると思いますが、どこから始めればよいのかわかりません。

Terminal.appでは、$TERMxterm-256colorに設定されます。
InTmux$TERMscreen-256colorに設定されます。

私の.tmux.confにはset -g default-terminal "screen-256color"があります。 xterm-256colorTmux内で、Vimと競合します背景色はどういうわけかですが、dimの動作は変わりません。

詳しくは

TmuxのGitHubリポジトリの問題 ;を開きました。答えは出ましたが、よくわかりません。

Terminal.appにはdimディレクティブがありませんが、問題なく処理されているようです。
Tmuxにはdim情報がないため、フェッチできません。そのため、フォントが正しく表示されません。

なぜ一方が機能するのか、もう一方が機能しないのかわかりません。

7
Atcold

簡単な修正

次のコードを~/.tmux.confに追加します。

set -sa terminal-overrides ",*:dim=\\E[2m"

説明暫定

Application.appにはdimディレクティブがないようです(番号24を参照)。

Terminal 0: xterm-256color [references=1, flags=0x1]:
   1: acsc: (string) ``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~
   0: AX: (flag) true
   2: bel: (string) \007
...
  23: dch1: (string) \033[P
  24: dim: [missing]
  25: dl: (string) \033[%p1%dM

これは、コマンドtmux showmsgs -T run insideTmuxの出力です。

反対側では、Terminal.appはとにかくdimを「送信」します(howまたはwhy)、上の図に示すように、動作しているためです。

不足しているdimディレクティブ(魔法のように)を追加すると、問題が解決します。

1
Atcold

tmux(GNU screenなど)は、実際の端末の機能を(多くの場合異なる)内部端末に変換することで機能します。これにより、異なるセッションに接続できるようになります。ターミナル同時に、または異なる時間

それがうまくいくと、どこから接続していても「同じ」テキストが表示されます。

すべての端末がdimをサポートしているわけではありません。実際のところ、ほとんどはそうではありません。ターミナルデータベースには、dimと1514のターミナルの説明が121回あります。

screenが1990年頃に開始されたとき、その開発者はその機能を無視し、代わりに最も便利なものを提供することを選択しました。彼らは、行/列のセルごとに、termcapプログラムが使用する可能性が高いビデオ属性を格納するようにプログラムを設計しました。ソースコードはこれらを定義します:

#define ATTR_DI         0       /* Dim mode */
#define ATTR_US         1       /* Underscore mode */
#define ATTR_BD         2       /* Bold mode */
#define ATTR_RV         3       /* Reverse mode */
#define ATTR_SO         4       /* Standout mode */
#define ATTR_BL         5       /* Blinking */

ただし、screentmuxの両方がこれらのinternal機能を使用するのは、externalターミナルがそれらをサポートし、-で提供されている場合のみです。 内部端末の説明。

OSXには、 ncursesターミナルデータベース のコピーがバンドルされています。 MacPortsまたはhomebrewをインストールしてlaterバージョンを入手することもできますが、OSX hasncurses 5.7.20081102infocmpを使用して端末の説明を表示すると、次のように表示されます。

$ infocmp screen-256color
#       Reconstructed via infocmp from file: /usr/share/terminfo/73/screen-256color
screen-256color|GNU Screen with 256 colors,
        am, km, mir, msgr, xenl,
        colors#256, cols#80, it#8, lines#24, ncv#3, pairs#32767,
        acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
        bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
        clear=\E[H\E[J, cnorm=\E[34h\E[?25h, cr=^M,
        csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
        cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
        cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM,
        cvvis=\E[34l, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
        dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0,
        flash=\Eg, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@,
        il=\E[%p1%dL, il1=\E[L, ind=^J, initc@, is2=\E)0, kbs=^H,
        kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
        kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[21~,
        kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
        kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
        khome=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~,
        nel=\EE, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
        rmcup=\E[?1049l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[23m,
        rmul=\E[24m, rs2=\Ec\E[?1000l\E[?25h, sc=\E7,
        setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
        setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
        sgr=\E[0%?%p6%t;1%;%?%p1%t;3%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;,
        sgr0=\E[m\017, smacs=^N, smcup=\E[?1049h, smir=\E[4h,
        smkx=\E[?1h\E=, smso=\E[3m, smul=\E[4m, tbc=\E[3g,

そこにはdimはありません。 ncursesでは、これは 2015年4月 に追加されました:

# 2015-04-22
#       + add 'dim' capability to screen entry (report by Leonardo B Schenkel)
#       + add several key definitions to nsterm-bce to match preconfigured
#         keys, e.g., with OSX 10.9 and 10.10 (report by Leonardo B Schenkel)

同様に、xterm-256colorではdimは表示されません。それは 2014年6月 に追加されました:

# 2014-06-14
#       + modify sgr for screen.xterm-new to support dim capability -TD
#       + add dim capability to nsterm+7 -TD
#       + cancel dim capability for iterm -TD
#       + add dim, invis capabilities to vte-2012 -TD
#       + add sitm/ritm to konsole-base and mlterm3 -TD

dimが外部Terminal.appで使用される方法は示されていませんが、ハードコードされている可能性があります(端末の説明を使用していません) 。しかし、screentmuxは知らないhowエスケープシーケンスが入ってくるが、dimは端末の説明に記載されていないため、サポートされていません。

dimおよびinfocmpユーティリティを使用して、terminfoデータベースを更新し、これらの端末の説明にtic機能を追加できます。

  • infocmpを使用して、xterm-256colorおよびscreen-256colorの既存の端末の説明を取得します。これは最初のものだけを示しています。もちろん、2番目の説明についてもこのプロセスを繰り返します。

    infocmp -1x xterm-256color> foo

  • infocmpによって作成されたテキストファイルを編集し、この行を追加します

    dim=\E[2m,
    

    sgr=の行を次の行に置き換えます。

    sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m,
    
  • ticを使用して、端末の説明を置き換えます。

    Sudo tic -x foo

注:質問のポイントは質問でしたなぜこれが起こる; Nicholas Marriottは、問題を回避するための情報をhow提供しました。

2
Thomas Dickey