11

Что-то случилось, так что я больше не вижу меньше бликов. Я пробовал:

  • используя другой терминал.
  • используя опцию -g
  • убедившись, что -G не там
  • ^ K при поиске
  • ESC - U

Ничего не помогает

Я работаю в Ubuntu 12.10 на рабочем столе i3. $TERM=screen-256 . Когда я использую ^ ALT 1 для переключения на TTY1 и запускаю man man я вижу, что там выделены как параметры man, так и шаблоны поиска.

Что еще я могу сделать, чтобы это исправить?

2 ответа2

3

Подсветка в TTY1 работает, так как она устанавливает для переменной TERM правильное значение.

Если вы используете экран:

Измените переменную TERM на правильное значение (например, screen или screen-256color). Проверьте ваш личный ~/.screenrc или общесистемный /etc/screenrc и исправьте соответствующую строку.

В моей версии less значение screen-256 должно фактически привести к ошибке:

WARNING: terminal is not fully functional
-  (press RETURN)

Если вы не используете экран:

Экран * только правильно интерпретируется экраном.

Правильное значение для TERM зависит от вашего эмулятора терминала и обычно должно устанавливаться им. По умолчанию для трех предустановленных эмуляторов терминала в Ubuntu используется xterm.

казнить

grep -R TERM= ~/.* /etc 2> /dev/null

проверка, переопределяется ли значение TERM в файлах конфигурации вашей оболочки.

1

Ну, это раздражает. Что здесь происходит? (в tmux под iTerm.app)

$ echo test > test ; echo $TERM
screen

а затем с некоторой записью

$ script withscreen
Script started, output file is withscreen
$ less -p test test
... q to quit and then exit the shell session ...

$ script withxterm
Script started, output file is withxterm
$ TERM=xterm less -p test test
... q and exit again ...

и теперь мы смотрим на используемые коды

$ grep test withscreen | hexdump -C
00000000  24 20 6c 65 73 73 20 2d  70 20 74 65 73 74 20 74  |$ less -p test t|
00000010  65 73 74 0d 0d 0a 1b 5b  33 6d 74 65 73 74 1b 5b  |est....[3mtest.[|
00000020  32 33 6d 0d 0a 1b 5b 35  3b 31 48 1b 5b 33 6d 74  |23m...[5;1H.[3mt|
00000030  65 73 74 1b 5b 32 33 6d  0d 0a 1b 5b 33 38 3b 31  |est.[23m...[38;1|
00000040  48 1b 5b 33 6d 74 65 73  74 20 28 45 4e 44 29 1b  |H.[3mtest (END).|
00000050  5b 32 33 6d 1b 5b 4b 0d  1b 5b 4b 1b 5b 3f 31 6c  |[23m.[K..[K.[?1l|
00000060  1b 3e 24 20 5e 44 0d 0d  0a                       |.>$ ^D...|
00000069
$ grep test withxterm | hexdump -C
00000000  24 20 54 45 52 4d 3d 78  74 65 72 6d 20 6c 65 73  |$ TERM=xterm les|
00000010  73 20 2d 70 20 74 65 73  74 20 74 65 73 74 0d 0d  |s -p test test..|
00000020  0a 1b 5b 37 6d 74 65 73  74 1b 5b 32 37 6d 0d 0a  |..[7mtest.[27m..|
00000030  1b 5b 35 3b 31 48 1b 5b  37 6d 74 65 73 74 1b 5b  |.[5;1H.[7mtest.[|
00000040  32 37 6d 0d 0a 1b 5b 33  38 3b 31 48 1b 5b 37 6d  |27m...[38;1H.[7m|
00000050  74 65 73 74 20 28 45 4e  44 29 1b 5b 32 37 6d 1b  |test (END).[27m.|
00000060  5b 4b 0d 1b 5b 4b 1b 5b  3f 31 6c 1b 3e 24 20 65  |[K..[K.[?1l.>$ e|
00000070  78 69 74 0d 0d 0a                                 |xit...|
00000076
$ 

коды 1b 5b ... можно сделать более понятными, обратившись к документации по управляющим последовательностям xterm, или можно вручную поиграть с последовательностями, чтобы увидеть, какая из них при TERM=xterm вызывает выделение

$ printf "\033[7mtest\033[27m\n"
test

что TERM=screen случай не делает, в соответствии с документами последовательности управления, это обратное

ESC [
     Control Sequence Introducer (CSI  is 0x9b).
...
CSI Pm m  Character Attributes (SGR).
...
            Ps = 7  -> Inverse.
...
            Ps = 2 7  -> Positive (not inverse).

и поблизости от этого документа мы могли бы узнать, что screen терминал \033[3m предназначен для курсива и \033[23m не выделен курсивом.

Этот вывод дает несколько вариантов; мы могли бы настроить терминал для отображения курсивного текста или вместо этого могли бы заставить screen терминал использовать обратные коды вместо курсива. (Некоторые копались в less(1) документах, не показывали четких ручек "использовать инверсные вместо курсивных" для игры.) (Кроме того, некоторые терминалы могут предлагать поддержку перевода X на Y, подробности смотрите в документации по терминалам.) (Или вы можете попробовать другой эмулятор терминала и посмотреть, что он делает ...)

Вау, курсив текст отвратителен. Давайте вместо этого попробуем изменить коды, используемые на screen для инверсии. Очевидно, что это касается базы данных terminfo (или, возможно, termcap), которую можно экспортировать с помощью infocmp(1) и скомпилировать с помощью tic(1)

$ TERM=screen infocmp > ti.screen ; TERM=xterm infocmp > ti.xterm
$ fgrep '\E[7' ti.xterm
        rc=\E8, rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, ri=\EM,
        smir=\E[4h, smkx=\E[?1h\E=, smm=\E[?1034h, smso=\E[7m,
$ fgrep rev= ti.screen
        nel=\EE, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
$ fgrep '\E[3m' ti.screen
        smso=\E[3m, smul=\E[4m, tbc=\E[3g,
$ 

Таким образом, я предполагаю, что smso используется, учитывая, что xterm использует \E[7m и screen \E[3m ; в соответствии с terminfo(5) это "режим ожидания" и в паре с обратным rmso ; давайте изменим то, что использует xterm ...

$ TERM=screen infocmp | sed -e 's/smso=[^,]*/smso=\\E[7m/;s/rmso=[^,]*/rmso=\\E[27m/' > foo
$ tic -o ~/.terminfo foo
$ rm foo

Эй, теперь это выглядит лучше (но придется сделать это на всех хостах для screen или любого файла terminfo ...)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .