xterm: #xxxxxx em conversão de cores 0-255 - como?

2

Estou imprimindo todas as 255 cores xterm (plano de fundo) usando sequências ANSI de fundo estendido, assim: 3[48;5;%dm ( %d é substituído de 0-255). Eu defino a cor da janela xterm usando #eee9bf via .Xdefaults com xrdb :

XTerm*background: LemonChiffon2

Como é possível que as cores ANSI não correspondam ao #eee9bf quando inspeciono visualmente com uma pequena ajuda do seletor de cores gimp? A gama de cores xterm é apenas de 0-255, então o que está acontecendo aqui - como o xterm está convertendo #xxxxxx em 0-255? Como a ANSI se encaixa nisso?

import sys

bgn_marker = '3[48;5;%dm '
fgn_marker = '3[%dm'
end_marker = '3[0m'

text = "11. hello, how are you - today is not a it;s d'ay"
space = ' ' * 40

def burp(bg):
    print '######################## %d ####################################' % bg
    for fg in range(30,38):
        print (bgn_marker + fgn_marker + text + space + end_marker) % (bg, fg)

(O que eu estou tentando fazer é escolher um fundo decente para o xterm que não esconda as cores ANSI que geralmente são exibidas quando você usa o vim / dmesg etc.)

    
por veek 11.02.2017 / 14:25

1 resposta

3

ANSI não tem nenhum papel neste processo. Isso nunca aconteceu, exceto pela conveniência de nomenclatura . ANSI definiu um conjunto de 8 cores que a maioria das pessoas numera 0-7. Ao estender o esquema para 16, 88 e 256 cores, era conveniente fazer uma matriz de valores de cor que são endereçados pelo mesmo tipo de índice.

O servidor X (e sua configuração de exibição) desempenham um papel.

xterm pega o valor hexadecimal de seus recursos ou indiretamente através de um nome em rgb.txt e pede ao servidor X uma cor "próxima" do valor R / G / B. O servidor pode (e geralmente faz) aproximar as cores. No código-fonte do xterm, um bom lugar para começar a ler é (apropriadamente o suficiente) AllocateAnsiColor .

Leitura adicional:

por 11.02.2017 / 14:46