dircolors: modifica as configurações de cores globalmente

dircolors: modifica as configurações de cores globalmente

Eu entendo lsos usos dircolorspara exibir saída colorida. dircolorspossui banco de dados padrão de cores associadas às extensões de arquivos, que podem ser impressas com o comando

dircolors --print-database

Pelo man dir_colorsque li, o banco de dados de todo o sistema deve estar localizado em /etc/DIR_COLORS. Mas este arquivo não existe no meu sistema (Debian). Como posso modificar as configurações de cores de todo o sistema dircolors? De onde o comando dircolors --print-databasetira as configurações, quando não existe nenhum arquivo.

Estou ciente de que o usuário pode ter um arquivo específico ~/.dircolorscom suas configurações, mas isso não é adequado para mim, pois preciso alterar as configurações para todos.

Uma segunda questão é se é possível usar cores de 8 bits para dircolors. Meu terminal é xterm-256color.

Responder1

lspega as configurações de cores da variável de ambiente LS_COLORS. dircolorsé apenas uma maneira conveniente de gerar essa variável de ambiente. Para que esta variável de ambiente tenha efeito em todo o sistema, coloque-a no arquivo de inicialização do seu shell.

Para bash, você colocaria isso em /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)"

Para zsh, você o colocaria /etc/zshrcou providenciaria para zshleitura /etc/profilena inicialização. Sua distribuição zshjá pode ter feito isso. Apenas mencionei isso para salientar que a configuração dircolorspara todos depende do shell que eles usam.

Quanto à origem dircolorsde suas configurações, quando você não especifica um arquivo, ele apenas usa alguns padrões internos.

Você pode usar xtermos códigos de escape de 256 cores em seu arquivo dircolors, mas esteja ciente de que eles funcionarão apenas para xtermterminais compatíveis. Eles não funcionarão no console de texto do Linux, por exemplo.

O formato para códigos de escape de 256 cores é 38;5;colorNpara cores de primeiro plano e 48;5;colorNcores de fundo. Então, por exemplo:

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

Responder2

RESPOSTA CURTA

dircolors(abreviação de Directory Colors) não pode ser usado para modificar cores globalmente. Para fazer isso, você provavelmente deseja ajustar a paleta de cores em seu emulador de terminal.

Por exemplo, dircolorsnão é usado para ajustar as cores solicitadas por grep, vi, tmux, ou man.

dircolorsé usado para ajustar as cores que os comandos lsetree solicitarpara ser exibidoao exibir seus nomes de arquivos.

eu me estressosolicitar para ser exibido, porque as cores solicitadas por um comando são apenas as enviadas ao seu emulador de terminal. Seu emulador de terminal pode então optar por exibir cores diferentes das solicitadas. O que é solicitado e o que finalmente é exibido na tela do terminal que você verá podem ser dois conjuntos diferentes de cores.


VISÃO GERAL DO PROCESSO DE COLORAÇÃO

1) Qualquer programa baseado em texto ou shell integrado, pode, por design, gerar ANSI (American National Standards Institute)solicitação de corcódigos de escape. Ressalto aqui que se trata apenas de solicitações ao terminal, que tem a decisão final de como exibi-las. O sistema de código de cores ANSI é um sistema muito antigo, originado inicialmente em terminais de hardware independentes.

Uma solicitação de texto colorido se parece com:

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

A parte 'cor solicitada' não é exibida. Em vez disso, é usado pelo emulador de terminal para fazer com que a tela mostre 'texto a ser exibido naquela cor' na cor solicitada.

Os programas podem chamar [ncurses][1]a saída de códigos ANSI para o emulador de terminal. Você tem basicamente 8 cores padrão e mais 8 cores fortes/brilhantes que podem ser solicitadas. (ncurses é a abreviação de New Curses, onde 'curses' é um trocadilho com Otimização de Cursor ou uma biblioteca de software para saída eficiente baseada em texto para uma tela de terminal.)

Muitos comandos comuns baseados em texto podem ser configurados para gerar códigos de cores ANSI parasolicitarque sua saída seja colorida pelo terminal. Exemplos são: ls, tree, vim, grep, tmux, e man.

Esses códigos de cores de saída (códigos de controle prefixados de escape) solicitam que a exibição mude para uma determinada combinação de cores (primeiro plano, plano de fundo e atributos) antes da saída do próximo texto. Novamente, esses códigos de escape não determinam realmente as cores que você vê. Em vez disso, eles especificam opções de paleta específicas.

No passado havia uma paleta de cores padrão. Se você solicitasse verde, veria verde.

Mas um emulador de terminal, como GNOME Terminalpor exemplo, pode mudar esse comportamento. Por exemplo, se um programa solicitarverde, por meio de um código de escape verde ANSI, você pode decidir que isso deve ser exibido emvermelho cerejana sua tela. O que é importante lembrar é que isso significa que:todosos verdes solicitados, em todos os programas do terminal, serão convertidos para vermelhos. Em outras palavras, você não pode simplesmente ajustar as cores de saída de um programa específico, grepdesta forma.

2A) Comandos de diretório como lse treesão um tanto especiais, pois eles podem ser configurados pelo usuário para colorir nomes de arquivos por tipo de nome de arquivo de acordo com sua especificação. Isto é diferente de man, por exemplo, que utiliza um conjunto fixo de cores alternativas além do preto e branco.

Por exemplo, pode ser solicitado que as pastas sejam mostradas em azul marinho, enquanto os links devem ser mostrados em azul claro.

Você pode solicitar cores para formatos de terminal especificados (como ansi ou putty) e por tipo básico de arquivo (como pasta, bloco ou adesivo) e/ou pela extensão de nome de arquivo correspondente (como *.sh ou *.png). Isso é feito alterando os códigos de cores de saída ANSI por tipo de nome de arquivo usando as configurações fornecidas pela variável de ambiente LS_COLORS. Veja abaixo como.

2B)Existem também esquemas de cores especiais emvimusando por exemplo :colorscheme default. (Um assunto para outro dia.)

3)Seu terminal (Terminal GNOME no meu caso) então interpreta quaisquer códigos ANSI para gerar as cores de exibição reais que você vê.


AJUSTE GLOBAL DE CORES NO SEU EMULADOR DE TERMINAL

Se você ajustar as configurações de cores GNOME Terminal(ou provavelmente em qualquer emulador de terminal que suporte esse recurso), isso afetará as cores observáveis ​​de todo e qualquer programa de texto que produza códigos de cores ANSI. Essas alterações de cores serão ajustadas simultaneamente em todas as janelas de terminal abertas (assumindo que você esteja usando o mesmo emulador de terminal para todas as janelas).

Se você estivesse usando 2 emuladores de terminal diferentes (como ambos GNOME Terminale XTerm), cada um poderia ajustar as cores da saída final de maneira diferente.

Com as Preferências do Terminal GNOME você pode ajustar a 'paleta de cores' de todo o sistema (ou seja, o conjunto de 16 cores disponíveis para aplicativos baseados em texto), para seu próprio conjunto personalizado de cores.

GNOME TerminalAjuda diz:

Tradicionalmente, os emuladores de terminal ofereciam uma paleta de 16 cores, é isso que você pode alterar aqui. O Terminal suporta um conjunto estendido de 256 cores, mas as 240 cores adicionais não podem ser editadas aqui. O Terminal ainda oferece acesso direto a mais de 16 milhões de cores, chamado de modo “true color”.

Se as alterações feitas na paleta não parecem surtir efeito, provavelmente o conteúdo que você vê consiste nessas cores estendidas da paleta ou cores verdadeiras, em vez das 16 cores básicas.


USANDO DIRCOLORES

Veja como isso funciona:

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)"

Eu ligo dircolorsno início /etc/profileonde eu uso para configurar e exportar arquivos 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

Para referência, como estou habilitando cores em vários comandos em /etc/profile (que é lido sempre que um login é feito (incluindo $ bash --login)) está abaixo, no final desta resposta.

Observe que existem algumas pastas e arquivos de vídeo reversos que são exibidos de forma engraçada ls(por exemplo, arquivos de backup do DOS). Nenhuma bagunça no Terminal GNOME (abaixo) parece afetar essas cores. Mas você pode editar DIR_COLORS usado por dircolors(veja as notas acima) para ajustar as coisas com LS_COLORS.

insira a descrição da imagem aqui


DICAS DE COMO AJUSTAR AS CORES DO SEU PRÓPRIO SISTEMA

No menu do Terminal GNOME, selecione Edit| Preferences. No painel esquerdo, escolha o perfil que deseja ajustar e, no painel direito, selecione a Colorsguia.

!! ANTES DE PROSSEGUIR, SUGIRO FORTEMENTE QUE VOCÊ FAÇA UM BACKUP DE SUAS PREFERÊNCIAS EXISTENTES. Uma captura de tela servirá perfeitamente. Veja a captura de tela minha abaixo.

DR- Se você não quiser marcar esta caixa de seleção: insira a descrição da imagem aqui

para usar os padrões mais básicos, mas em vez disso você deseja um fundo preto de trabalho com aplicativos coloridos bash, vim, grep, ls, ... e tente definir suas cores assim:

insira a descrição da imagem aqui

Achei essa caixa de diálogo de cores um pouco confusa no início, mas é lógico quando você descobre. O maior problema é que todos os meus aplicativos de texto compartilham a mesma paleta de cores, mas a usam de maneira um pouco diferente, especialmente ls.

Aqui estão as cores exatas que estou usando:

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

ENTENDENDO O DIÁLOGO 'PREFERÊNCIAS - PERFIL' DO TERMINAL GNOME

As seções superior e inferior ( Text and Background Colore Palette) parecem operar de forma quase completamente independente, exceto que as Paletteseleções são uma camada sobre (ou seja, modificam ainda mais) as configurações superiores em Text and Background Color. (Mesmo que Use colors from system themeesteja marcado, Show bold text in bright colorsna parte inferior ainda importa, pelo menos para ls.)


Primeiro vamos mexer nas Text and Background Colorconfigurações.

Eles determinam as cores padrão para cores básicas, não especiais Texte Backgroundcores. Você também pode escolher modificadores opcionais para Boldou Highlighttexto e para uma cor fixa do cursor, se desejar, como laranja brilhante, por exemplo, pode deixar algumas pessoas felizes.

A Use colors from system themecaixa de seleção parece decidir se você deseja herdar as configurações de cores ou defini-las você mesmo. Ao desmarcá-la, você pode escolher um esquema integrado ou personalizado no menu suspenso.

O que você escolhe é colocado nas Textamostras Backgroundabaixo, exceto Custom.

Observe que suas escolhas aqui não afetam as outras três caixas de seleção abaixo dela.

Observe também que se você clicar primeiro na amostra Textou Background, você obterá um seletor de cores e, depois de escolher Select, o Built-in schemesmenu suspenso será definido como Personalizado.

Se você marcar Bold colore definir uma cor, o texto especificado como negrito por um programa obterá essa substituição de cor.

Se você marcar Cursor color, poderá escolher cores fixas para o cursor. (Observe que você terá que mover o cursor sobre o texto para vê-lo mudar.) Sem esta opção marcada, o cursor parece variar com a cor do texto.

Se você marcar Highlight color, verá o efeito dessas duas amostras, por exemplo, no vim, ao arrastar o mouse para copiar algum texto.


Agora é hora de mexer nas Paletteconfigurações.

Semelhante ao anterior, o menu suspenso coloca um conjunto de cores nas amostras abaixo dele. Você notará que há duas linhas de 8. Essas amostras substituem as 8 cores de primeiro plano ANSI e as 8 cores de fundo definidas por terminfo.

O que é importante ver é que você pode definir essas amostras para variações sutis de cores.

Além disso, as alterações feitas aqui afetam todos ou quase todos os programas baseados em texto que possuem cores ativadas. Portanto, tenha cuidado aqui. (Não posso dizer como fazer backup primeiro, porque ainda não sei. Faça, no mínimo, uma captura de tela.)

Embora eu não saiba para que servem todas essas amostras, alguns experimentos deduziram o seguinte.

Antes de começar a testar, abra algumas coisas de GNOME Terminal: uma vimsessão de edição de código de bashe outra cde lsseu diretório inicial, uma treeexecução e uma tmuxsessão. À medida que você altera as coisas abaixo, você poderá ver melhor o que está mudando.

Tente fazer pequenas alterações no início. E certifique-se de clicar e desmarcar a caixa de seleção na parte inferior (explicada com mais detalhes abaixo).

Cuidado:Se você definir Palettecomo Custome configurar manualmente as 16 amostras de cores como sugiro, tenha cuidado porque se você escolher outra coisa novamente no arquivo Built-in schemes:, isso apagará suas Paletteconfigurações anteriores e, se você quiser novamente, Customterá que começar tudo de novo. o que é uma dor. (Parece não haver maneira de salvar suas configurações de cores personalizadas, exceto com uma captura de tela ou anotando-as uma por uma.)

Built-in schemes: Custom-- Color palette:configurações

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

Por fim, na parte inferior, está a Show bold text in bright colorscaixa de seleção. A ajuda do GNOME diz:

Cores brilhantes para texto em negrito

Tradicionalmente, os terminais não separavam claramente o peso da fonte em negrito das cores intensas, muitas vezes ambos eram habilitados juntos. Melhorias recentes, como a introdução do suporte a cores verdadeiras e certos esquemas de cores (por exemplo, Solarizado) tornaram desejável separar os dois conceitos, ou seja, tornar o brilho independente da espessura da fonte.

...

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

ou habilite esta opção para melhorar a compatibilidade com versões anteriores.

Quando marcada, ela pega o que foi exibido nas linhas superiores e exibe as cores da linha inferior. Se você verificar isso, notará que alguns dos nomes lsmudarão um pouco de cor. Acho que está vinculado às sequências de cores nº 1 da ISO 6429, "para cores mais brilhantes" em $ man dir_colors. Parece que isso afeta principalmente lse não vim.


COMO SÃO AS CORES NOS ESQUEMAS INTEGRADOS

Quando built-in schemesforam testados com o utilitário de teste de cores descrito aquiVejo os seguintes resultados (dica compilar e vincular com isto $ gcc -Wall -lcurses color-demo.C):

Note oShow bold text in bright colorscaixa de seleção está marcada. Desmarque as cores de alta e baixa intensidade são iguais.

  • Linux console(parece ser o conjunto de cores CGI original):

insira a descrição da imagem aqui

  • xterm:

insira a descrição da imagem aqui

  • rxvt(fora de ordem porque está mais próximo dos acima):

insira a descrição da imagem aqui

  • Tango(fora de serviço porque está mais próximo do Solarizado abaixo):

insira a descrição da imagem aqui

  • Solarized:

insira a descrição da imagem aqui


COMO POSSO CONFIGURAR MEUS COMANDOS PARA MOSTRAR EM CORES?

No seu /etc/.bashrc.shared(chamado por ~/.bashrcand /root/.bashrc), ou se você não tiver isso no seu ~/.bashrcand /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

Responder3

De onde o comando dircolors --print-databasetira as configurações, quando não existe nenhum arquivo.

Conformemanual, ele usa um banco de dados pré-compilado na ausência de um arquivo.

Se file for especificado, dircolors o lê para determinar quais cores usar para quais tipos e extensões de arquivo. Caso contrário, um banco de dados pré-compilado será usado. Para obter detalhes sobre o formato desses arquivos, execute ' dircolors --print-database'.

Para alterar as configurações para todos, você pode criar um /etc/dircolorsarquivo e adicionar o seguinte /etc/bashrc:

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

Responder4

Linux define cores de fundo do console com dircolors:

Seu arquivo dircolors controla as cores das palavras que aparecem por meio de ls no console. Encontre este .dircolorsarquivo para sua distribuição, um link para ajudar:

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

Para mim no Fedora 17, meu arquivo dircolors é:/etc/DIR_COLORS

Copie /etc/DIR_COLORSpara o seu /home/el/.dircolorsdiretório. Crie-o se não existir.

Edite /home/el/.dircolors, procure o texto "dir".

Mude isso:

DIR 01;34   # directory

Para isso:

DIR 01;36   # directory

Salve, feche e reinicie o shell. Os diretórios vão do azul escuro no preto (ilegível) ao verde-azulado brilhante no preto (legível).

informação relacionada