Tmux и тусклые цвета в Terminal.app на MacOS

Делает rpm/yum все еще работа? rpm -q kernel должен сказать, если это x86_64 в конце это - установка на 64 бита.

7
08.10.2015, 01:17
2 ответа

Простое исправление

Добавьте следующий код в ~ / .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 запустить внутри Tmux .

С другой стороны, Terminal.app в любом случае «отправляет» dim (не знаю, как или почему ), так как он работает, как показано на картинке выше.

Добавление отсутствующей директивы dim ( волшебным образом ) решает проблему.

1
27.01.2020, 20:19

tmux (как и GNU screen) работает, переводя функции вашего фактического терминала в (часто другой) внутренний терминал. Они делают это для того, чтобы вы могли подключить сеанс на разных терминалах одновременно или в разное время.

Когда это работает хорошо, вы будете видеть "тот же" текст независимо от того, откуда вы подключаетесь.

Не все терминалы поддерживают dim. На самом деле, большинство из них не поддерживают. База данных терминалов содержит 121 вхождение dim в 1514 описаниях терминалов.

Когда в 1990 году была создана программа screen, ее разработчики предпочли проигнорировать эту возможность и вместо этого предоставить наиболее полезную. Они разработали программу, чтобы хранить для каждой ячейки строки/столбца видеоатрибуты, которые 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 */

но и screen, и tmux используют эти внутренние возможности, только если внешний терминал поддерживает их, а также предусмотрены в внутреннем описании терминала.

OSX включает в себя копию ncurses и базу данных терминала. Хотя вы можете установить MacPorts или homebrew и получить более позднюю версию, в OSX есть ncurses 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 года:

# 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 года:

# 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 не указан, но, вероятно, жестко закодирован (не используется описание терминала). Но screen и tmux не знают как приходят управляющие последовательности, но знают, что dim не упоминается в описании терминала, следовательно, не поддерживается.

Вы можете обновить свою базу данных terminfo, чтобы добавить функцию dim в эти описания терминалов, используя утилиты infocmp и tic:

  • используйте infocmp, чтобы получить существующие описания терминалов для xterm-256color и screen-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
27.01.2020, 20:19

Теги

Похожие вопросы