Làm cho 'hầu hết' máy nhắn tin xử lý đúng màu từ đầu vào standard tiêu chuẩn


10

Làm cách nào để làm cho mostmáy nhắn tin hiển thị đúng màu trong văn bản nhận được từ đầu vào standard tiêu chuẩn?

Lưu ý: Tôi không chắc đó có phải là lỗi hay không most.

Tôi không gặp phải vấn đề tương tự với lessmore, chỉ với most, mà mặt khác hoạt động độc đáo như một máy nhắn tin được sử dụng bởi man.

Tôi không đăng một hình ảnh và mời mọi người dùng thử (chỉ khi bạn đã mostcài đặt):

$ 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

lessmorehiển thị màu sắc chính xác, trong khi mosthiển thị màu sắc với các thùng rác bổ sung khác, ^[[Kbao bọc tất cả các vùng văn bản màu.

Đáng ngạc nhiên, điều này là OK:

$ (export PAGER=most; command man zip)

Tôi có thiếu thứ gì không (trang hướng dẫn sử dụng mostkhông giúp ích), sử dụng sai lệnh hay đây là thứ tôi nên báo cáo là lỗi?

Một lưu ý về less(cập nhật):

Như Sparhawk đã đề cập trong một nhận xét, lesssẽ không hoạt động nếu nó không được cung cấp tùy chọn -R(hoặc --RAW-CONTROL-CHARS) hoặc -r(hoặc --raw-control-chars), cũng có thể được đặt trong LESSbiến môi trường.

Và thực sự, lần đầu tiên tôi đã tìm kiếm một tùy chọn tương tự cho most(nhưng không tìm thấy một tùy chọn nào ).

Cập nhật

Tất cả đều có vấn đề với văn bản được mã hóa UTF ‑ 8 màu, không chỉ most. Trong trường hợp của tôi, thiết bị đầu cuối tốt với nó, vì vậy đó không phải là thiết bị đầu cuối. Văn bản UTF 8 không được tô màu giống nhau là tốt với cả ba máy nhắn tin, vì vậy đó không phải là mã hóa ký tự.


1
FWIW lesskhông làm việc cho tôi. Tôi cần less -R.
Sparhawk

@Sparhawk, vâng, xin lỗi, tôi quên tôi có cái này trong hồ sơ của tôi : export LESS="--hilite-search --LINE-NUMBERS --raw-control-chars". Tôi nghĩ rằng có một tùy chọn tương tự cho most, nhưng trang hướng dẫn không đề cập đến điều đó. Lưu ý: Tôi sẽ chỉnh sửa bài viết của mình để nói về LESSbiến môi trường.
Hibou57

Câu trả lời:


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

Làm việc cho tôi. Nhân tiện, tôi chỉ cần cài đặt mostđể tìm ra điều này và tôi thích nó. Cảm ơn bạn.

   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
         ...

@ Hibou57 - có bất cứ điều gì về câu trả lời này mà không trả lời câu hỏi của bạn?
mikeerv

1
Tôi đang gặp phải điều này là tốt. Tôi không hiểu lệnh trong câu trả lời này và khi tôi thử nó trên hệ thống của mình, tôi nhận được một ví dụ mostkhông hiển thị gì. Câu trả lời cũng có vẻ rất cụ thể grepvà tôi đang gặp vấn đề về mã màu hiển thị cộng với mã thoát với nhiều hơn chỉ là grep. - MacOS 10.12.6 với bash4.4.19(1)-release (x86_64-apple-darwin16.7.0)
adfaklsdjf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.