Buat pager `most` menangani warna dengan benar dari input standar

10

Bagaimana cara membuat mostpager menampilkan warna dalam teks yang diterima dari input standar?

Catatan: Saya tidak yakin apakah ini bug atau tidak most.

Saya tidak mengalami masalah yang sama dengan lessdan more, hanya dengan most, yang sebaliknya berfungsi dengan baik sebagai pager yang digunakan oleh man.

Saya tidak memposting gambar, dan mengundang orang untuk mencoba ini (hanya jika Anda telah mostmenginstal):

$ 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

lessdan moremenampilkan warna dengan benar, sementara mostmenampilkan warna dengan "sampah" tambahan yang ^[[Kmembungkus semua area teks berwarna.

Anehnya, ini tidak masalah:

$ (export PAGER=most; command man zip)

Apakah saya melewatkan sesuatu (halaman manual untuk mosttidak membantu), menyalahgunakan perintah atau apakah ini sesuatu yang harus saya laporkan sebagai bug?

Catatan tentang less(pembaruan):

Seperti yang Sparhawk sebutkan dalam komentar, lesstidak berfungsi baik jika itu tidak diberikan opsi -R(atau --RAW-CONTROL-CHARS) atau -r(atau --raw-control-chars), yang mungkin juga diatur dalam LESSvariabel lingkungan.

Dan memang, saya pertama kali mencari opsi serupa untuk most(tetapi gagal menemukan satu).

Memperbarui

Semua memiliki masalah dengan teks yang disandikan UTF-8 berwarna, bukan hanya most. Dalam kasus saya, terminal baik-baik saja dengan itu, jadi itu bukan terminal. Teks UTF-8 tanpa warna yang sama baik-baik saja dengan ketiga pager, jadi itu bukan pengkodean karakter.

Hibou57
sumber
1
FWIW lesstidak bekerja untuk saya. Saya butuh less -R.
Sparhawk
@Sparhawk, ya, maaf, saya lupa saya punya ini di profil saya: export LESS="--hilite-search --LINE-NUMBERS --raw-control-chars". Saya pikir ada opsi serupa untuk most, tetapi halaman manual tidak menyebutkan hal semacam itu. Catatan: Saya akan mengedit posting saya untuk memberi tahu tentang LESSvariabel lingkungan.
Hibou57

Jawaban:

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

Bekerja untukku. Ngomong-ngomong, saya baru saja menginstal mostuntuk mencari tahu ini dan saya menyukainya. Terima kasih.

   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
sumber
@ Hibou57 - apakah ada sesuatu tentang jawaban ini yang tidak menjawab pertanyaan Anda?
mikeserv
1
Saya juga menghadapi ini. Saya tidak mengerti perintah dalam jawaban ini, dan ketika saya mencobanya di sistem saya, saya mendapatkan contoh mostmenampilkan apa-apa. Jawabannya juga tampaknya sangat spesifik grep, dan saya mengalami masalah kode warna-tampilan-plus-pelarian dengan lebih dari sekadar grep. - MacOS 10.12.6 dengan bash4.4.19(1)-release (x86_64-apple-darwin16.7.0)
adfaklsdjf