Como verificar programaticamente se o terminal suporta itálico?

5

Gostaria de verificar se o terminal atual é capaz de exibir o itálico corretamente.

Verificar manualmente é fácil:

echo -e "\e[3mfoo\e[23m"

Se a saída for foo , o terminal (-emulador) suporta itálico. No entanto, gostaria de testar no meu .zshrc se o itálico for suportado programaticamente.

Qual é a melhor prática para fazer isso?

Se (de todo) possível, eu gostaria que meu console Linux padrão pudesse usar itálico também. O problema é que o teste manual falha, alguma idéia de como fazer itálico possível lá?

(isso não faz parte da pergunta original. É muito vago e sem sentido para perguntar como uma questão stand-along, no entanto.)

    
por polemon 08.09.2015 / 21:54

2 respostas

2

Não é possível testar de forma confiável se o terminal realmente suporta itálico. Você pode, verificando a saída de tput sitm ou tput ritm , testar se o valor de $TERM e sua descrição de terminal correspondente reivindicações são compatíveis - mas a declaração e o comportamento real podem facilmente estar fora de sincronia em qualquer direção.

Eu realmente duvido que o console Linux suporte ou suporte a itálico no futuro previsível.

    
por 13.09.2015 / 00:17
2

São várias perguntas:

  • Se o console do Linux suportasse itálico, isso usaria uma fonte diferente ou usaria alguma técnica, como inclinar os caracteres para imitá-lo em itálico.
  • Supondo que você fez isso, você precisaria de uma ferramenta que pudesse despejar a imagem do que é exibido no console para ver isso em um programa. Mas os despejos de tela do console Linux fornecem apenas texto - sem imagens. Não há informações de fonte disponíveis no dump (nem mesmo em negrito ou cor).
  • O setterm e o screendump abrem o dispositivo vcsa bruto (embora screendump como alternativa use o padrão para o TIOCLINUX ioctl, que tem o mesmo conteúdo)
  • Você poderia escrever uma ferramenta adequada para despejar atributos como cor e se o negrito foi usado, com este ioctl obsoleto (ou seja, seu kernel é muito antigo):

    TIOCLINUX, subcode=8
    Dump screen width and height, cursor position, and all the character-attribute pairs. (Kernels 1.1.67 through 1.1.91 only. With kernel 1.1.92 or later, read from /dev/vcsa* instead.)

  • Em suma, não há mecanismo suportado para encontrar o que está na tela do console do Linux.

Além de não haver nenhuma solução para programaticamente determinar se o itálico é implementado, além de usar algum recurso especial para aumentar a resolução, há poucas razões para esperar que as fontes do console Linux sejam desenhadas em itálico. A página de fontes do Terminus (que é relevante, já que tenta dar o mesmo efeito no X que as fontes do console do Linux) diz isso na sua seção Perguntas frequentes :

Q. Italic version?

A. No. The quality is significantly lower, and preserving the font width requires overlapping characters, which are not handled very well by X11/Xft. Anyway, the modern GUIs support automatic slanting; if you are not satisfied with it, try mkitalic from FreeBSD or bdfslant from Debian.

Q. Scalable version?

A. Long story short, when the average display resolution becomes at least 150 DPI. Prefferably 200.

Leitura adicional:

por 20.10.2016 / 01:53