dircolors: изменить глобальные настройки цвета

dircolors: изменить глобальные настройки цвета

Я понимаю, lsчто используется dircolorsдля отображения цветного вывода. dircolorsИмеет базу данных цветов по умолчанию, связанную с расширениями файлов, которую можно распечатать с помощью команды

dircolors --print-database

Из man dir_colorsтого, что я прочитал, общесистемная база данных должна находиться в /etc/DIR_COLORS. Но этот файл не существует в моей системе (Debian). Как мне изменить общесистемные настройки цвета для dircolors? Откуда команда dircolors --print-databaseберет настройки, если файла не существует.

Я знаю, что у пользователя может быть свой файл ~/.dircolorsс настройками, но мне это не подходит, так как мне нужно изменить настройки для всех.

Второй вопрос, можно ли использовать 8-битные цвета для dircolors. Мой терминал xterm-256color.

решение1

lsберет настройки цвета из переменной окружения LS_COLORS. dircolors— это просто удобный способ сгенерировать эту переменную окружения. Чтобы эта переменная окружения вступила в силу на уровне всей системы, поместите ее в файл запуска вашей оболочки.

Для bash, вы бы ввели это /etc/profile:

# `dircolors` prints out `LS_COLORS='...'; export LS_COLORS`, so eval'ing
# $(dircolors) effectively sets the LS_COLORS environment variable.

eval "$(dircolors /etc/DIR_COLORS)"

Для zsh, вы либо вставите его /etc/zshrc, либо организуете zshчтение /etc/profileпри запуске. Ваш дистрибутив, возможно, zshуже сделал это. Я просто поднимаю этот вопрос, чтобы указать, что настройка dircolorsдля всех зависит от используемой оболочки.

Что касается источника dircolorsполучения настроек, то если вы не указываете файл, то он просто использует некоторые встроенные значения по умолчанию.

Вы можете использовать xterm256 кодов цветового перехода в вашем файле dircolors, но имейте в виду, что они будут работать только для xtermсовместимых терминалов. Например, они не будут работать в текстовой консоли Linux.

Формат для 256 кодов перехода цвета предназначен 38;5;colorNдля цветов переднего плана и 48;5;colorNдля цветов фона. Например:

.mp3  38;5;160                   # Set fg color to color 160      
.flac 48;5;240                   # Set bg color to color 240
.ogg  38;5;160;48;5;240          # Set fg color 160 *and* bg color 240.
.wav  01;04;05;38;5;160;48;5;240 # Pure madness: make bold (01), underlined (04), blink (05), fg color 160, and bg color 240!

решение2

КОРОТКИЙ ОТВЕТ

dircolors(сокращение от Directory Colors) нельзя использовать для глобального изменения цветов. Для этого вам, вероятно, придется настроить цветовую палитру в эмуляторе терминала.

Например, dircolorsне используется для настройки цветов, запрошенных grep, vi, tmuxили man.

dircolorsиспользуется для настройки цветов, которые используют команды lsиtree запросбыть отображеннымпри отображении имен ваших файлов.

Я подчеркиваюзапрос на отображение, поскольку цвета, запрашиваемые командой, — это только те, которые отправляются на ваш эмулятор терминала. Затем ваш эмулятор терминала может выбрать отображение цветов, отличных от запрошенных. То, что запрашивается, и то, что в конечном итоге выводится на экран вашего терминала, который вы увидите, может быть двумя разными наборами цветов.


ОБЗОР ПРОЦЕССА ЦВЕТА

1) Любая текстовая программа или встроенная оболочка, может по своей конструкции, выход ANSI (Американский национальный институт стандартов)запрос цветаEscape-коды. Здесь я подчеркиваю, что это только запросы к терминалу, который принимает окончательное решение о том, как их отображать. Система цветовых кодов ANSI — очень старая система, впервые появившаяся на автономных аппаратных терминалах.

Запрос с цветным текстом выглядит примерно так:

<requested-color><text-to-be-displayed-in-that-color><next-requested-color><next-text...

Часть 'requested-color' не отображается. Вместо этого она используется эмулятором терминала, чтобы заставить экран отображать 'text-to-be-displayed-in-that-color' в запрошенном цвете.

Программы могут вызывать [ncurses][1]для вывода кодов ANSI на эмулятор терминала. По сути, у вас есть 8 стандартных цветов и 8 более смелых/ярких цветов, которые можно запросить. (ncurses — это сокращение от New Curses, где «curses» — это игра слов от Cursor Optimization, или программной библиотеки для эффективного текстового вывода на экран терминала.)

Многие общие текстовые команды можно настроить для вывода цветовых кодов ANSI.запросчтобы их вывод был раскрашен терминалом. Примеры: ls, tree, vim, grep, tmux, и man.

Эти выходные цветовые коды (управляющие коды с префиксом escape) требуют, чтобы дисплей изменился на заданную цветовую комбинацию (передний план, фон и атрибуты) перед выводом следующего текста. Опять же, эти управляющие коды фактически не определяют цвета, которые вы видите. Вместо этого они указывают конкретные варианты палитры.

Раньше была стандартная палитра цветов. Если вы запросили зеленый, то вы увидите зеленый.

Но эмулятор терминала, например GNOME Terminal, может изменить это поведение. Например, если программа запрашиваетзеленый, с помощью зеленого управляющего кода ANSI вы можете решить, что это должно быть отображено ввишнево-красныйна вашем экране. Важно помнить, что это означает следующее:всезапрошенный зеленый цвет в каждой терминальной программе будет преобразован в красный. Другими словами, вы не можете просто настроить выходные цвета одной конкретной программы, вот grepтак.

2A) Команды каталогов, такие как lsи , treeявляются несколько особенными, в том, что они могут быть настроены пользователем для раскрашивания имен файлов по типу имени файла в соответствии с вашими требованиями. Это отличается от man, например, который использует фиксированный набор альтернативных цветов в дополнение к черному и белому.

Например, папки можно отображать темно-синим цветом, а ссылки — светло-голубым.

Вы можете запросить цвет для указанных форматов терминала (например, ansi или putty), а также по базовому типу файла (например, папка, блок или липкий) и/или по соответствующему расширению имени файла (например, *.sh или *.png). Это делается путем изменения выходных цветовых кодов ANSI по типу имени файла с использованием настроек, заданных переменной среды LS_COLORS. Ниже описано, как это сделать.

2Б)Существуют также специальные цветовые схемы вvimиспользуя например :colorscheme default. (Тема для другого дня.)

3)Ваш терминал (Терминал GNOME в моем случае) затем интерпретирует все коды ANSI для генерации фактических цветов дисплея, которые вы видите.


ГЛОБАЛЬНАЯ НАСТРОЙКА ЦВЕТОВ В ВАШЕМ ЭМУЛЯТОРЕ ТЕРМИНАЛА

Если вы измените настройки цвета в GNOME Terminal(или, возможно, в любом эмуляторе терминала, который поддерживает эту функцию), это повлияет на наблюдаемые цвета всех текстовых программ, которые выводят цветовые коды ANSI. Эти изменения цвета будут одновременно изменены во всех открытых окнах терминала (при условии, что вы используете один и тот же эмулятор терминала для всех окон).

Если вы используете два разных эмулятора терминала (например, GNOME Terminalи XTerm), то каждый из них может по-разному настраивать цвета конечного вывода.

С помощью настроек терминала GNOME вы можете точно настроить общесистемную «цветовую палитру» (т. е. набор из 16 цветов, доступных текстовым приложениям) на свой собственный набор цветов.

GNOME TerminalПомощь говорит:

Традиционно эмуляторы терминала предлагали палитру из 16 цветов, это то, что вы можете изменить здесь. Терминал поддерживает расширенный набор из 256 цветов, но дополнительные 240 цветов не могут быть отредактированы здесь. Терминал даже предлагает прямой доступ к более чем 16 миллионам цветов, это называется режимом «true color».

Если изменения, внесенные вами в палитру, не дают эффекта, вероятно, содержимое, которое вы видите, состоит из цветов расширенной палитры или настоящих цветов, а не из 16 базовых цветов.


ИСПОЛЬЗОВАНИЕ DIRCOLORS

Вот как это работает:

a)  Run  $ dircolors -p >/etc/DIR_COLORS   # to produce DIR_COLORS template file

b)  Hand edit /etc/DIR_COLORS to adjust ANSI color codes that will be output
    for various things to display.  For example, any filenames like *.png can 
    request a particular ANSI color combination.  (ANSI color codes are escape
    prefixes.)

c)  Run dircolors again, this time in both 
       /etc/profile       (for logins)           and
       /etc/bash.bashrc   (for terminal windows)
    to read DIR_COLORS and create and export the LS_COLORS 
      environment variable, like this:

        $ eval "$(dircolors -b /etc/DIR_COLORS)"

Я вызываю его dircolorsв самом начале /etc/profile, где я использую его для настройки и экспорта LC_COLORS.

# === Create DEFAULT LS_COLORS ENVIRONMENT VARIABLE ===========================
# /etc/DIR_COLORS is a data file from:  $ dircolors -p > /etc/DIR_COLORS
eval "$(dircolors -b /etc/DIR_COLORS)"      # This reads /etc/DIR_COLORS 
# and then runs these two commands:   
#
#   $ LS_COLORS=...     # <-- where this value is created from /etc/DIR_COLORS
#   $ export LS_COLORS

Для справки, как я включаю цвета в различных командах в /etc/profile (который считывается при каждом входе в систему, (включая $ bash --login)), описано ниже, в самом низу этого ответа.

Обратите внимание, что есть некоторые папки и файлы обратного видео, которые отображаются странно ls(например, файлы резервных копий DOS). Никакие манипуляции с Терминалом GNOME (ниже) не влияют на эти цвета. Но вы можете отредактировать DIR_COLORS, используемый dircolors(см. примечания выше), чтобы настроить LS_COLORS.

введите описание изображения здесь


СОВЕТЫ ПО НАСТРОЙКЕ ЦВЕТОВ ВАШЕЙ СИСТЕМЫ

В меню терминала GNOME выберите Edit| Preferences. В левой панели выберите профиль, который вы хотите настроить, а в правой панели выберите вкладку Colors.

!! ПРЕЖДЕ ЧЕМ ПРОДОЛЖИТЬ, Я НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ ВАМ СДЕЛАТЬ РЕЗЕРВНУЮ КОПИЮ ВАШИХ СУЩЕСТВУЮЩИХ НАСТРОЕК. Скриншот будет неплох. Смотрите мой скриншот ниже.

TL;DR- Если вы не хотите устанавливать этот флажок: введите описание изображения здесь

чтобы использовать самые основные настройки по умолчанию, но вместо этого вы хотите черный рабочий фон с цветными bash, vim, grep, ls, ... приложениями, то попробуйте настроить цвета следующим образом:

введите описание изображения здесь

Сначала я нашел этот диалог цветов немного запутанным, но он становится логичным, как только вы в нем разберетесь. Самая большая проблема в том, что все мои текстовые приложения используют одну и ту же цветовую палитру, но используют ее несколько по-разному, особенно ls.

Вот точные цвета, которые я использую:

black           aqua            green           orange          light yellow    purple          blue, primary   gray (X)        <-- X=Don't care
#000000         #01B9E0         #389400         #FF8A00         #F4FF92         #C401C4         #005EEA         #AAAAAA
0               1               2               3               4               5               6               7
------------    ------------    ------------    ------------    ------------    ------------    ------------    ------------    <-- 1st set are     "normal   colors"

------------    ------------    ------------    ------------    ------------    ------------    ------------    ------------    <-- 2nd set are the "brighter colors" (for check box below)
8               9               10              11              12              13              14              15
#555555         #FF5555         #55FF55         #FFFF55         #5397FE         #FF55FF         #55FFFF         #D6D6D6
dark gray (X)   red/orange      lime            yellow (X)      blue, medium    pink            aqua, bright    light gray (X)  <-- X=Don't care

ПОНИМАНИЕ ДИАЛОГА «НАСТРОЙКИ - ПРОФИЛЬ» ТЕРМИНАЛА GNOME

Верхняя и нижняя секции ( Text and Background Colorи Palette), похоже, работают почти полностью независимо, за исключением того, что Paletteвыборки являются слоем поверх (т.е. дополнительно изменяют) верхних настроек в Text and Background Color. (Кроме того, даже если Use colors from system themeотмечено , Show bold text in bright colorsв нижней части все еще имеет значение, по крайней мере для ls.)


Для начала давайте поиграемся с Text and Background Colorнастройками.

Они определяют цвета по умолчанию для основных, неспециальных Textи Backgroundцветов. Вы также можете выбрать необязательные модификаторы для Boldили Highlightтекста, и для фиксированного цвета курсора, если вы этого хотите, например, ярко-оранжевый, который может сделать некоторых людей счастливыми.

Флажок Use colors from system theme, похоже, решает, хотите ли вы наследовать настройки цвета или определить их самостоятельно. Когда вы снимаете флажок, вы можете выбрать встроенную или пользовательскую схему из выпадающего списка.

Выбранные вами цвета будут помещены в образцы Textи Backgroundниже, за исключением Custom.

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

Также обратите внимание, что если вы сначала нажмете на образец Textили Background, вы увидите окно выбора цвета, и как только вы сделаете Selectв нем выбор, оно установит выпадающее Built-in schemesменю на «Пользовательский».

Если вы отметите Bold colorи установите цвет, то текст, который программой указан как жирный, получит переопределение этого цвета.

Если вы отметите этот флажок Cursor color, то сможете выбрать фиксированные цвета для курсора. (Обратите внимание, вам придется навести курсор на текст, чтобы увидеть его изменение.) Если этот флажок не установлен, курсор будет меняться в зависимости от цвета текста, над которым он находится.

Если вы отметите этот флажок Highlight color, вы увидите эффект этих двух образцов, например, в vim, когда вы перетаскиваете мышь, чтобы скопировать текст.


Теперь пришло время повозиться с Paletteнастройками.

Подобно вышеприведенному, раскрывающийся список помещает набор цветов в образцы под ним. Вы заметите, что есть две строки по 8. Эти образцы переопределяют 8 цветов ANSI переднего плана и 8 цветов фона, установленных terminfo.

Важно отметить, что вы можете настроить эти образцы на тонкие цветовые вариации.

Кроме того, изменения, которые вы здесь вносите, влияют на все или почти все ваши текстовые программы, в которых включена поддержка цвета. Так что будьте осторожны. (Я не могу вам сказать, как это сделать, потому что я пока не знаю. Сделайте как минимум снимок экрана.)

Хотя я и не знаю, для чего используются все эти образцы, некоторые эксперименты привели меня к следующему выводу.

Прежде чем начать тестирование, откройте несколько вещей из GNOME Terminal: vimсеанс редактирования кода bash, и еще один из c, lsвашего домашнего каталога, treeзапуск и tmuxсеанс. По мере того, как вы меняете что-то ниже, вы сможете лучше видеть, что меняется.

Попробуйте сначала внести небольшие изменения. И обязательно нажмите и снимите флажок внизу (подробнее об этом ниже).

Осторожность:Если вы установите и затем вручную настроите 16 цветовых образцов, как я предлагаю, будьте осторожны, потому что если вы снова выберете что-то другое в , это сотрет ваши предыдущие настройки, и если вы снова захотите, Paletteвам придется начинать все заново, что является головной болью. (Кажется, нет способа сохранить ваши пользовательские настройки цветов, кроме как с помощью снимка экрана или путем их записи по одному.)CustomBuilt-in schemes:PaletteCustom

Built-in schemes: Custom-- Color palette:настройки

tmux    status text                     status-backgr
tmux vi                 literals                        flow (orange)   comments&fcns   $names          var  names      ?
vi C    -               literals        types           flow (brown)    comments&fcns   macros          -               ?
vi Bash -               literals        -               flow (brown)    comments&fcns   Environ         var  names      ?               flow: brown (can't change with gnome)
Bash    -                               user@dir $
Bash ls -                               Reverse-backg                   Reverse-foregr
gcc

        black           aqua            green           orange          dark yellow    purple          blue, primary   gray (X)        <-- X=Don't care
        #000000         #01B9E0         #389400         #FF8A00         #C6CF76         #C401C4         #005EEA         #AAAAAA
        0               1               2               3               4               5               6               7
        ------------    ------------    ------------    ------------    ------------    ------------    ------------    ------------    <-- 1st set are     "normal   colors"

        ------------    ------------    ------------    ------------    ------------    ------------    ------------    ------------    <-- 2nd set are the "brighter colors" (for check box below)
        8               9               10              11              12              13              14              15
        #555555         #FF5555         #55FF55         #FFFF55         #5397FE         #FF55FF         #55FFFF         #D6D6D6
        dark gray (X)   red/orange      lime            yellow (X)      blue, medium    pink            aqua, bright    light gray (X)  <-- X=Don't care

tmux    ?                                               ?                                                               ?
tmux vi ?                                               ?                                                               ?
vi C    ?                                               ?                                                               ?
vi Bash ?                                               ?                                                               ?
Bash    ?               root@dir #                      ?                                                               ?
Bash ls ?                               x.sh            ?               directories     media files     links           ?
gcc     ?               errors                          ?                                                               ?

Наконец, внизу есть Show bold text in bright colorsфлажок. Справка GNOME говорит:

Яркие цвета для жирного текста

Традиционно терминалы не разделяли жирный шрифт и интенсивные цвета, часто оба они были включены вместе. Недавние улучшения, такие как введение поддержки истинного цвета и определенных цветовых схем (например, Solarized) сделали желательным разделение двух концепций, то есть сделать яркость независимой от веса шрифта.

...

Disable Show bold text in bright colors for the new default behavior, the complete separation of color intensity and font weight;

или включите эту опцию для улучшения обратной совместимости.

Если отмечено, то берется то, что отображалось в верхних строках, и вместо этого отображаются цвета нижней строки. Если вы отметите это, вы заметите, что некоторые имена из lsнемного изменят цвета. Я думаю, это связано с последовательностями цветов ISO 6429 № 1, «для более ярких цветов» в $ man dir_colors. Похоже, что это влияет в основном на ls, а не на vim.


КАК ВЫГЛЯДЯТ ЦВЕТА ИЗ ВСТРОЕННЫХ СХЕМ

Когда built-in schemesбыли испытаны с помощью утилиты проверки цвета, описанной здесьЯ вижу следующие результаты (советую скомпилировать и связать с этим $ gcc -Wall -lcurses color-demo.C):

Обратите вниманиеShow bold text in bright colorsФлажок отмечен. Если флажок не отмечен, цвета высокой и низкой интенсивности одинаковы.

  • Linux console(судя по всему, это оригинальный набор цветов CGI):

введите описание изображения здесь

  • xterm:

введите описание изображения здесь

  • rxvt(не по порядку, поскольку этот вариант ближе к предыдущим):

введите описание изображения здесь

  • Tango(не по порядку, поскольку это ближе к Solarized ниже):

введите описание изображения здесь

  • Solarized:

введите описание изображения здесь


КАК НАСТРОИТЬ КОМАНДЫ ДЛЯ ОТОБРАЖЕНИЯ В ЦВЕТЕ?

В вашем /etc/.bashrc.shared(называется ~/.bashrcи /root/.bashrc), или если у вас этого нет в вашем ~/.bashrcи /root/.bashrc:

# === ADD COLOR UNLESS DUMB TERMINAL ========================================
if [ "$TERM" != "dumb" ]; then
    # ENVIRONMENT: 
    #   You can turn off these colorizing aliases in the interactive environment by invoking 
    #       shell with  TERM="dumb bash".
    
    #   Assume LS_COLORS is already set by dircolors in /etc/profile.  It can be adjusted later.
    
    # Using color to distinguish file types is disabled both by default and with --color=never.  
    #   With --color=auto, ls emits color codes only when standard output is connected to a terminal.  
     export COLOR_MODE='--color=auto'


    #   The use of  alias  limits color effects to the interactive command usage. 
    #       It has advantage over exporting environment variable "export COLOR_MODE='--color=auto'" 
    #       since color can be seen under pager programs such as less(1). If you wish to suppress 
    #       color when piping to other programs, use "--color=auto" instead in the above example 
    #       for "~/.bashrc".
    #       !! NOTE - alias is very picky about extra spaces around = sign

    # --- grep
    # Surround the matched (non-empty) strings, matching lines, context lines, file names, 
    #   line numbers, byte offsets, and separators (for fields and groups of context lines) 
    #   with escape sequences to display them in color on the terminal.  
    #   The colors are defined by the environment variable GREP_COLORS, (plural).
    #       See grep man page for GREP_COLORS instructions.
     alias  grep=' grep ${COLOR_MODE}'
     alias egrep='egrep ${COLOR_MODE}'
     alias fgrep='fgrep ${COLOR_MODE}'
     alias zgrep='zgrep ${COLOR_MODE}'

    # --- ls ------------------------
     alias ls='ls ${COLOR_MODE}'

    #   These next two use the ls alias above, i.e. the first one below is really 'ls ${LS_OPTS} -l'
     alias ll='ls -l'                   # -l = long
     alias  l='ls -lA'                  # -A = amost all (.*, but not . nor ..)

    # --- tree ----------------------
     alias tree='tree -C'               # -C adds color to tree

    # --- less ----------------------
     alias  less='less -R'              # Output raw control chars for ANSI colors

    # --- man -----------------------
    # ref: http://www.tuxarena.com/2012/04/tutorial-colored-man-pages-how-it-works/
    #   NOTE these seem to use TERMCAP which is obsolite.
    # ANSI "color" escape sequences are sequences of the form:      ESC [ ... m
        export LESS_TERMCAP_mb=$(printf '\e[01;31m')        # enter blinking            mode
        export LESS_TERMCAP_md=$(printf '\e[01;38;5;75m')   # enter double-bright       mode
        export LESS_TERMCAP_me=$(printf '\e[0m')            # turn off all appearance   modes (mb, md, so, us)

        export LESS_TERMCAP_so=$(printf '\e[01;33m')        # enter standout            mode
        export LESS_TERMCAP_se=$(printf '\e[0m')            #  leave standout           mode

        export LESS_TERMCAP_us=$(printf '\e[04;38;5;200m')  # enter underline           mode
        export LESS_TERMCAP_ue=$(printf '\e[0m')            #  leave underline          mode

fi

решение3

Откуда команда dircolors --print-databaseберет настройки, если файла нет.

В соответствии сруководство, он использует предварительно скомпилированную базу данных при отсутствии файла.

Если указан файл, dircolors считывает его, чтобы определить, какие цвета использовать для каких типов файлов и расширений. В противном случае используется предварительно скомпилированная база данных. Для получения подробной информации о формате этих файлов запустите ' dircolors --print-database'.

Чтобы изменить настройки для всех, вы можете создать /etc/dircolorsфайл и добавить в него следующее /etc/bashrc:

d=/etc/dircolors
test -r $d && eval "$(dircolors $d)"

решение4

Linux устанавливает цвета фона консоли с помощью dircolors:

Ваш файл dircolors управляет цветами слов, которые появляются через ls на консоли. Найдите этот .dircolorsфайл для вашего дистрибутива, ссылка для помощи:

http://www.linuxfromscratch.org/blfs/view/svn/postlfs/profile.html

У меня в Fedora 17 файл dircolors выглядит так:/etc/DIR_COLORS

Скопируйте /etc/DIR_COLORSв свой /home/el/.dircolorsкаталог. Создайте его, если он не существует.

Отредактируйте /home/el/.dircolors, найдите текст «dir».

Изменить это:

DIR 01;34   # directory

К этому:

DIR 01;36   # directory

Сохраните, закройте и перезапустите оболочку. Каталоги меняются от темно-синего на черном (нечитаемые) до ярко-бирюзового на черном (читаемые).

Связанный контент