O XTerm não exibe corretamente * alguns * caracteres unicode?

6

Eu não tenho um problema geral com XTerm e Unicode. Na maioria das vezes, as coisas estão funcionando. Isso funciona muito bem:

$ echo "¿dónde está la llama?"
¿dónde está la llama?

Como isso:

$ echo -e "\xE2\x98\xA0"
☠

Mas isso falha:

$ echo -e "\xE2\xA4\xB7"

Em vez da saída esperada (⤷, também conhecida como SETA APONTANDO PARA BAIXO, ENTÃO CURVANDO PARA A DIREITA Eu recebo a caixa temida. Atualmente estou usando:

xterm*faceName: Hack Regular:size=12:antialias=true

Esta é a mesma fonte que eu uso com gnome-terminal , que exibe o mesmo caractere corretamente. Eu também tentei a mesma coisa com um variedade de outras fontes monoespaçadas (Droid Sans Mono, DejaVu Sans Mono, Liberation Mono), que todos têm o mesmo comportamento no XTerm (mas funcionam bem em outro lugar). De fato, olhando os caracteres entre \u2620 , que exibe corretamente, e \u2937 , o que não, há um número de caracteres que não parecem ser exibidos corretamente no XTerm:

$ python
>>> for x in range(0x2620, 0x2938):
...    print(unichr(x))

Eu gostaria de entender o que está acontecendo aqui. Por que o XTerm tem dificuldade para exibir alguns destes caracteres, mas não outros?

    
por larsks 03.05.2016 / 17:58

1 resposta

5

curto: o xterm usa uma fonte única (exceto para os casos especiais de caracteres de largura dupla), enquanto os outros terminais usam fontes adicionais (e eles usam aquelas fontes para os caracteres não encontrados em sua fonte solicitada).

long: o caractere em que você está interessado é não parte da fonte, que parece ser algo como fonts-hack-tty no Debian. O código ausente é 0x2937, que você pode ver usando xfd -fa hack não é fornecido pela fonte (dica: o primeiro na página é 0x29 8 7):

Abrevedescriçãodafonteforneceousopretendido:

Nofrills.Nogimmicks.Hackishandgroomedandopticallybalancedtobeaworkhorsefaceforcode.

qual(jáque"código" geralmente é o conjunto de caracteres POSIX, mais o que as pessoas acham que faz bons comentários) provavelmente será pequeno. Este exemplo tem mais caracteres não-POSIX do que o normal. Começando com o ASCII + Latin1:

existemalgumascentenasdeglifosnafonte(seriamnecessáriasmaisdeumadúziadecapturasdetelaparamostrá-las,emboramaisdametademostreumpequenonúmerodeglifos).Asegundapágina,porexemplo,éparcialmentesuportada:

Solicitado por um comentário, rastreei o gnome-terminal para ver se ele carrega esses arquivos de fontes:

/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoBd.ttf
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraSeBd.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf

e que 0x2937 é fornecido pelo último. Os detalhes reais podem ser diferentes em sua configuração.

    
por 04.05.2016 / 00:52