Сделайте так, чтобы пейджер «Most» правильно обрабатывал цвета из стандартного ввода

10

Как сделать так, чтобы mostпейджер правильно отображал цвета в тексте, полученном со стандартного ввода?

Примечание: я не уверен, является ли это ошибкой most.

Я не сталкиваюсь с той же проблемой с lessи more, только с most, который иначе работает хорошо как пейджер, используемый man.

Я не публикую изображение, и приглашаю людей попробовать это (только если вы mostустановили):

$ command apropos zip | command grep --color=always zip | command less
$ command apropos zip | command grep --color=always zip | command more
$ command apropos zip | command grep --color=always zip | command most

lessи moreправильно отображать цвета, в то время как mostотображает цвета с дополнительным «мусором», ^[[Kохватывающим все цветные текстовые области.

Удивительно, но это нормально:

$ (export PAGER=most; command man zip)

Я что-то упустил (страница справочника mostне помогла), неправильно использовал команду или это то, что я должен сообщить как ошибка?

Примечание о less(обновление):

Как упомянул Sparhawk в комментарии, lessон не работает, если ему не задана опция -R(или --RAW-CONTROL-CHARS) или -r(или --raw-control-chars), которая также может быть установлена ​​в LESSпеременной окружения.

И действительно, я сначала искал похожую опцию для most(но не смог ее найти).

Обновить

У всех есть проблемы с цветным текстом в кодировке UTF ‑ 8, не только most. В моем случае с терминалом все в порядке, так что это не терминал. Один и тот же неокрашенный текст UTF ‑ 8 подходит для всех трех пейджеров, так что это не кодировка символов.

Hibou57
источник
1
FWIW lessне работает для меня. Мне нужно less -R.
Sparhawk
@Sparhawk, да, извините, я забыл , у меня есть это в моем профиле: export LESS="--hilite-search --LINE-NUMBERS --raw-control-chars". Я думал, что была похожая опция для most, но страница руководства не упоминает о такой вещи. Примечание: я отредактирую свой пост, чтобы рассказать о LESSпеременной среды.
Hibou57

Ответы:

1
man grep 2>/dev/null | 
GREP_COLORS=$(man grep 2>/dev/null | 
grep '^ *ms=01;31' -m1):ne \
grep '^ *GREP_COLORS *$\|^ *ne ' -A9 --color=always | 
most

Работает для меня. Кстати, я только что установил, mostчтобы понять это, и мне это нравится. Спасибо.

   GREP_COLORS
          Specifies  the  colors  and other attributes
          used  to  highlight  various  parts  of  the
          output.  Its value is a colon-separated list
          of    capabilities    that    defaults    to
          ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36
          with the  rv  and  ne  boolean  capabilities
          omitted     (i.e.,     false).     Supported
          capabilities are as follows.

          ne     Boolean  value that prevents clearing
                 to the end of  line  using  Erase  in
                 Line  (EL) to Right (\33[K) each time
                 a  colorized  item  ends.   This   is
                 needed  on  terminals  on which EL is
                 not  supported.   It   is   otherwise
                 useful  on  terminals  for  which the
                 back_color_erase    (bce)     boolean
                 terminfo  capability  does not apply,
                 when the chosen highlight  colors  do
         ...
mikeserv
источник
@ Hibou57 - есть что-нибудь в этом ответе, что не отвечает на ваш вопрос?
mikeserv
1
Я тоже с этим сталкиваюсь. Я не понимаю команду в этом ответе, и когда я пробую ее в моей системе, я получаю экземпляр mostничего не отображать. Ответ также кажется очень конкретным grep, и я испытываю проблему «color-display-plus-escape-коды» не только с grep. - MacOS 10.12.6 с bash4.4.19(1)-release (x86_64-apple-darwin16.7.0)
adfaklsdjf