Цвета на страницах руководства

63

Когда я смотрю на справочную страницу в моей «консоли» (а не на « xtermя»), я вижу некоторую окраску, но не вижу ее в своих xterm(например konsole), есть ли способ, как я могу включить это? надеюсь, довольно простое решение?

xenoterracide
источник

Ответы:

78

Вам нужно использовать эту termcap(5)функцию. В справочной странице по некоторым Unices говорится, что этот инструмент устарел и используется terminfo, но по-прежнему доступен для другихterminfoболее сложен).

Что еще более важно, lessиспользует termcap.


Настройка цвета для less

Я делаю следующее, чтобы lessи man(который использует less) будет иметь цвет:

$ cat ~/.LESS_TERMCAP 
export LESS_TERMCAP_mb=$(tput bold; tput setaf 2) # green
export LESS_TERMCAP_md=$(tput bold; tput setaf 6) # cyan
export LESS_TERMCAP_me=$(tput sgr0)
export LESS_TERMCAP_so=$(tput bold; tput setaf 3; tput setab 4) # yellow on blue
export LESS_TERMCAP_se=$(tput rmso; tput sgr0)
export LESS_TERMCAP_us=$(tput smul; tput bold; tput setaf 7) # white
export LESS_TERMCAP_ue=$(tput rmul; tput sgr0)
export LESS_TERMCAP_mr=$(tput rev)
export LESS_TERMCAP_mh=$(tput dim)
export LESS_TERMCAP_ZN=$(tput ssubm)
export LESS_TERMCAP_ZV=$(tput rsubm)
export LESS_TERMCAP_ZO=$(tput ssupm)
export LESS_TERMCAP_ZW=$(tput rsupm)
export GROFF_NO_SGR=1         # For Konsole and Gnome-terminal

И тогда по моему ~/.bashrc, я делаю это:

# Get color support for 'less'
export LESS="--RAW-CONTROL-CHARS"

# Use colors for less, man, etc.
[[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP

ПРИМЕЧАНИЕ. См. Документацию по LESS_TERMCAP_*переменным? за то, как это работает.

Конечный результат

    сс man страницы

Стефан Ласевский
источник
7
Я полагаю, что причина, по которой это работает так, как это происходит, в том, что «консоль» переводит «подчеркивание» в цвет, тогда как X11 поддерживает подчеркивания. Вы можете проверить эту теорию, набрав echo -e "\e[04mhello world\e[0m"консоль и терминал X11 и увидев разницу. Таким образом, этот хак злоупотребляет termcap, чтобы лгать LESS о том, какие коды он должен испускать для жирного шрифта / подчеркивания, и вынуждает его вместо этого создавать цветовые escape-коды.
Кент Фредрик
7
Действительно, перевод подчеркивания на синий имеет исторические причины, возвращаясь к текстовым режимам оригинальных графических адаптеров для ПК MDA и CGA (на самом деле текстовые режимы CGA все еще доступны на сегодняшний день). Эти графические адаптеры хранят два байта на символ: один содержит код ASCII, другой содержит атрибуты. MDA интерпретировал атрибутный байт как комбинации подчеркивания, яркого, мигающего и обратного, в то время как CGA интерпретировал этот байт как цвет переднего плана и фона. И случилось так, что атрибут MDA для подчеркивания равнялся атрибуту CGA для синего на черном.
celtschk
3
Это не работает в Konsole или Gnome-терминале. Я установил их, и единственное изменение цвета для курсора и страницы состояния. Оказывается мне нужно export GROFF_NO_SGR=1.
CMCDragonkai
2
Это много вложенных оболочек. В чем преимущество этого более простого подхода ?
Том Хейл,
1
@TomHale, в основном совместимость между системами и терминалами (и возможность делиться сценарием с другими пользователями таким образом, чтобы это было однозначно). Если вы когда-нибудь обнаружите, что работаете над блоком, в котором используются разные управляющие коды, и вы подключили к нему свой профиль оболочки / rsync, то когда все управляющие коды жестко запрограммированы, как в этом примере, они могут не работать должным образом в месте назначения. машина, и вы можете получить искаженный вывод. Конечно, если скрипт будет когда-либо запускаться только на одной или двух известных машинах / Terminal-Emus, тогда жестко закодированный подход вполне подойдет.
Марк Г.
15

Вы можете решить эту проблему, например, используя другой пейджер most. manфактически будет использовать программу, указанную в PAGERпеременной окружения. Со страницы man (1) man:

MANPAGER, PAGER

Если установлено значение $ MANPAGER или $ PAGER (в предпочтении используется $ MANPAGER), его значение используется в качестве имени программы, используемой для отображения страницы руководства. По умолчанию используется пейджер -s.

Значение может быть простым именем команды или командой с аргументами и может использовать кавычки (обратные слэши, одинарные или двойные кавычки).

Он не может использовать каналы для соединения нескольких команд; если вам это нужно, используйте скрипт-обертку, который может отображать файл в качестве аргумента или при стандартном вводе.

Если mostв вашей системе установлено, попробуйте это перед запуском man:

export PAGER=most
cannedprimates
источник
2
mostдолжен быть установлен, чтобы это работало.
энзотиб
3
mostимеет странные сочетания клавиш ... которые не настраиваются.
Матин Улхак
10

Подчеркивание по умолчанию больно мои глаза. Эта настройка значительно улучшает manчтение моей страницы:

Пример цветной страницы руководства

Добавьте следующее в ваш `~ .bashrc ':

# Have less display colours
# from: https://wiki.archlinux.org/index.php/Color_output_in_console#man
export LESS_TERMCAP_mb=$'\e[1;31m'     # begin bold
export LESS_TERMCAP_md=$'\e[1;33m'     # begin blink
export LESS_TERMCAP_so=$'\e[01;44;37m' # begin reverse video
export LESS_TERMCAP_us=$'\e[01;37m'    # begin underline
export LESS_TERMCAP_me=$'\e[0m'        # reset bold/blink
export LESS_TERMCAP_se=$'\e[0m'        # reset reverse video
export LESS_TERMCAP_ue=$'\e[0m'        # reset underline
export GROFF_NO_SGR=1                  # for konsole and gnome-terminal

Для выигрыша объедините с export MANPAGER='less -s -M +Gg' (источник), чтобы отобразить ваш процент в документе.

Том Хейл
источник
3
Как упомянул @CMCDragonkai в комментарии к другому ответу, это требует export GROFF_NO_SGR=1работы на некоторых эмуляторах терминала.
Бен
1
Для победы!! Я люблю% export MANPAGER='less -s -M +Gg'добавлений дисплея .
MikeyE
5

Если вы используете Oh My Zsh , вы можете добавить colored-man-pagesв pluginsмассив в вашем .zshrcфайле.

tremby
источник
3

Сохраняйте «большинство» постоянно

Открытый терминал ( Ctrl+ Alt+ T)

  1. Установите «большинство».

    sudo apt-get install most
    
  2. отредактируйте .bashrc, введите:

    nano ~/.bashrc
    
  3. Добавьте эти строки:

    # color man-pages persistently
    export PAGER='most'
    
  4. Сохранить

    ( Ctrl+ O) -> Enter-> ( Ctrl+ X)

  5. обновление

    source ~/.bashrc
    
  6. Контрольная работа

    man ln
    

Это также работает в Xterm.

Денис Гриффин
источник
чтобы не открывать nano, вы можете добавить bashrc из терминала: sudo apt install most; echo "export PAGER = 'most'" >> ~ / .bashrc; источник ~ / .bashrc
будет
1

Взято из http://nion.modprobe.de/blog/archives/569-colored-manpages.html

Выдержка:

$ mkdir ~/.terminfo/ && cd ~/.terminfo

Теперь получите terminfoописание (сохраните следующее как mostlike.txt):

# Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm-pcolor
mostlike|manpages with color looking like most, 
    am, hs, km, mir, msgr, xenl, 
    cols#80, it#8, lines#24, wsl#40, 
    acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, 
    bel=^G, bold=\E[1m\E[31m, clear=\E[H\E[2J, cr=^M, 
    csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, 
    cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, 
    cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, 
    dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, 
    dsl=\E]0;\007, ed=\E[J, el=\E[K, enacs=\E)0, fsl=^G, 
    home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, 
    is2=\E7\E[r\E[m\E[?7h\E[?1;3;4;6l\E[4l\E8\E>, kbs=^H, 
    kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, 
    kdch1=\E[3~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, 
    kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, 
    kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, 
    kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~, 
    kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, 
    kfnd=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, 
    kslt=\E[4~, rc=\E8, rev=\E[7m\E[34m, ri=\EM, rmacs=^O, 
    rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E[?1l\E>, 
    rmso=\E[m, rmul=\E[m, 
    rs2=\E7\E[r\E8\E[m\E[?7h\E[?1;3;4;6l\E[4l\E>, sc=\E7, 
    sgr0=\E[m, smacs=^N, smcup=\E7\E[?47h, smir=\E[4h, 
    smkx=\E[?1h\E=, smso=\E[1;30m\E[47m, smul=\E[32m, 
    tbc=\E[3g, tsl=\E]0;, u6=\E[%i%d;%dR, u7=\E[6n, 
    u8=\E[?1;2c, u9=\E[c, 

Теперь скомпилируйте его, используя tic(компилятор entry-description terminfo):

$ tic mostlike.txt

(Вы можете удалить mostlike.txtфайл после компиляции.)

А затем просто определите псевдоним в *rcфайле вашей любимой оболочки.

$ alias man="TERMINFO=~/.terminfo/ LESS=C TERM=mostlike PAGER=less man"

Если вы хотите изменить файл terminfo, используйте его, infocmp mostlikeчтобы получить его содержимое позже.

грязный немного
источник
11
Это поможет, если вы кратко изложите источник здесь, чтобы люди могли видеть, что он говорит, без необходимости переходить по ссылке (и в случае, если сайт когда-нибудь отключится)
Майкл Мрозек
3
Пожалуйста, предоставьте ответы, а не просто ссылки на ответы. Однако очень хорошо предоставлять ссылки, которые поддерживают ваш ответ. Представьте, что я гуглял по этому вопросу - хороший ответ в StackExchange быстро найдет путь к первой странице результатов.
Стефан Ласевский
Ссылка мертва.
Фарзан
Нашел это mostlike.txtонлайн.
Каушал Моди
Как выглядит вывод?
Том Хейл
1

Принимая ответ dirtybit , я хотел изменить цвет выделенных результатов поиска. Это называется «режим ожидания», вот пример файла «xterm-yellow.ti»:

xterm-yellow|yellow standout mode,
# exit standout mode
  rmso=\e[m,
# begin standout mode
  smso=\e[5;30;43m,
# similar terminal
  use=xterm,

Скомпилируйте и установите файл:

tic xterm-yellow.ti

Добавьте строку в «~ / .profile» или аналогичную:

TERM=xterm-yellow
Стивен Пенни
источник