问题

问题

问题

在我的 Mac 上 (10.11)多路复用器无法dim正确显示 -ed 颜色,这会引起烦恼。

在下图中,提交作者的姓名应该以 表示dim white。这在以下情况下工作得很好终端程序但不在范围之内多路复用器

git lg1 比较

有谁知道如何调试这个?
我相信这与变量有关$TERM,但我不知道从哪里开始。

终端程序 $TERM被设定为xterm-256color
多路复用器 $TERM被设定为screen-256color

在我的.tmux.conf我有set -g default-terminal "screen-256color"xterm-256color, 之内多路复用器, 与冲突维姆的背景颜色,以某种方式,但不会改变dim行为。

更多信息

我已经开了一个问题于多路复用器的 GitHub 存储库;已经提供了答案,但我不完全理解。

看起来像终端程序没有dim指令,尽管它处理得很好。
多路复用器无法获取dim信息,因为它不存在,因此无法正确显示字体。

现在我不确定为什么一个有效而另一个无效。

答案1

tmux(如 GNU screen)的工作原理是将实际终端的功能转换为(通常不同的)内部终端。他们这样做是为了允许您在不同的终端上连接会话同时, 或者在不同的时间

如果效果良好,无论您从何处连接,您都会看到“相同”的文本。

并非所有终端都支持dim。事实上,大多数人都没有。终端数据库有 121 次出现dim与 1514 个终端描述相比。

screen1990 年左右开始时,它的开发人员选择忽略该功能,而是提供最有用的功能。他们设计的程序是为每个行/列单元存储视频属性术语帽程序可能会使用。源代码定义了这些:

#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 */

但两者都screen使用tmux这些内部的仅当特征外部的终端支持它们,并且在内部的终端描述。

OSX 捆绑了一份副本恩诅咒终端数据库。虽然你可以安装 MacPorts 或 homebrew 并获得之后版本,什么 OSXncurses 5.7.20081102。如果您用来infocmp显示终端描述,您会看到如下内容:

$ 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)

同样,你也不会看到dim在 xterm-256color 中。这是添加在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在外部终端中使用。应用程序未指示,但可能是硬编码的(不使用终端描述)。但screen又不tmux知道如何转义序列出现,但要知道dim在终端描述中没有提及,因此不受支持。

您可以使用和实用程序更新 terminfo 数据库以将该dim功能添加到这些终端描述中:infocmptic

  • 用于获取和 的infocmp现有终端描述。这仅显示了第一个;您当然会重复第二个描述的过程:xterm-256colorscreen-256color

    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

笔记:问题的重点是问为什么有时候是这样的;尼古拉斯·马里奥特提供的信息如何解决这个问题。

答案2

轻松修复

将以下代码添加到~/.tmux.conf.

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

暂定解释

应用程序.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这是里面运行的命令的输出多路复用器

另一方面,终端程序无论如何“发送” dim(不知道如何或者为什么),因为它正在工作,如上图所示。

添加缺少的dim指令(神奇地)解决了问题。

相关内容