Spraw, aby pager „większość” poprawnie obsługiwał kolory ze standardowego wejścia

10

Jak sprawić, aby mostpager prawidłowo wyświetlał kolory w tekście otrzymanym ze standardowego wprowadzania?

Uwaga: Nie jestem pewien, czy to błąd most.

Nie napotykam tego samego problemu z lessi moretylko z nim most, który inaczej ładnie działa jako pager używany przez man.

Nie publikuję obrazu i nie zapraszam innych do wypróbowania tego (tylko jeśli masz mostzainstalowany):

$ 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

lessi moreodpowiednio wyświetla kolory, a mostwyświetla kolory z dodatkowym „śmieciowaniem”, ^[[Kzawijając wszystkie kolorowe obszary tekstowe.

Zaskakujące jest to OK:

$ (export PAGER=most; command man zip)

Czy czegoś brakuje (strona podręcznika mostnie pomogła), niewłaściwie używa polecenia lub czy jest to coś, co powinienem zgłosić jako błąd?

Uwaga na temat less(aktualizacja):

Jak wspomniano w komentarzu Sparhawk, lessnie działa, jeśli nie ma opcji -R(lub --RAW-CONTROL-CHARS) lub -r(lub --raw-control-chars), które można również ustawić w LESSzmiennej środowiskowej.

Rzeczywiście, najpierw szukałem podobnej opcji dla most(ale nie znalazłem).

Aktualizacja

Wszystkie mają problemy z kolorowym tekstem zakodowanym w UTF-8, nie tylko most. W moim przypadku terminal jest w porządku, więc to nie jest terminal. Ten sam bezbarwny tekst UTF ‑ 8 jest odpowiedni dla wszystkich trzech pagerów, więc nie jest to kodowanie znaków.

Hibou57
źródło
1
FWIW lessnie działa dla mnie. Muszę less -R.
Sparhawk
@Sparhawk, tak, przepraszam, zapomniałem mam to w moim profilu: export LESS="--hilite-search --LINE-NUMBERS --raw-control-chars". Myślałem, że istnieje podobna opcja most, ale strona podręcznika nie wspomina o takiej rzeczy. Uwaga: Zedytuję swój post, aby powiedzieć o LESSzmiennej środowiskowej.
Hibou57

Odpowiedzi:

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

Pracuje dla mnie. Nawiasem mówiąc, właśnie zainstalowałem, mostaby to rozgryźć i podoba mi się. Dziękuję Ci.

   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
źródło
@ Hibou57 - czy jest coś w tej odpowiedzi, która nie odpowiada na twoje pytanie?
mikeserv
1
Ja też to spotykam. Nie rozumiem polecenia w tej odpowiedzi, a kiedy próbuję go w swoim systemie, dostaję wystąpienie braku mostwyświetlania. Odpowiedź wydaje się również bardzo specyficzna grepi mam problem z wyświetlaniem kolorów i kodami ucieczki z czymś więcej niż tylko grep. - MacOS 10.12.6 z bash4.4.19(1)-release (x86_64-apple-darwin16.7.0)
adfaklsdjf