Como permitir que o gnome-terminal use fontes específicas para exibir pontuações em suas formas de largura total? (· '' “”)

1

Eu gostaria de usar a fonte SimSun (宋体) para exibir pontos intermediários / intermediários· , aspas simples (onduladas) ‘’, aspas duplas (onduladas)“” em seus formulários de largura total , porque é fácil diferenciá-los de .(ponto) '(aspas simples) "(aspas duplas) e essa visibilidade distinta é especialmente útil ao digitar código usando o método de entrada, porque o método de entrada pode inserir caracteres · '' “” facilmente e fazer com que o código não possa ser compilado ( char *str=“will not compile”;).

No editor do gedit, geany e leafpad, defina a fonte como SimSun para que ele funcione conforme o esperado.

Editor Geany, fonte SimSun, formulários de largura total

No entanto, no gnome-terminal, defina a fonte como SimSun não obtém o resultado esperado. Ele parece uso gnome-terminal outra fonte para exibir suas formas de largura metade, ou parece que eles estão apenas amontoados.

gnome-terminal, fonte SimSun, formas com meia largura

Eu também tentei lxterminal (LXDE) e Terminal (xfce) e ROXTerm, eles eram exibidos da mesma forma que o gnome-terminal.

Como permitir que esses emuladores de terminal exibam pontuações em suas formas de largura total, como Geany faz?

Texto de amostra

1234567890
·“”‘’

Pontos de código Unicode (HEX)

   UTF16  UTF8
· 00B7   C2B7
‘ 2018   E28098
’ 2019   E28099
“ 201C   E2809C
” 201D   E2809D
LiuYan 刘 研
fonte

Respostas:

1

Para versões mais antigas do gnome-terminal, você deve exportar uma VTE_CJK_WIDTH=widevariável antes de iniciar a primeira instância do gnome-terminal.

As versões mais recentes do gnome-terminal (provavelmente a partir de 3.12 ou 3.14) moveram isso para uma configuração da interface do usuário: Preferências de perfil -> Compatibilidade -> Caracteres de largura ambígua: Estreito (padrão) ou Amplo (o que você está procurando).

Observe que qualquer aplicativo complexo (por exemplo, editor de texto) que você esteja executando dentro do seu terminal também deve ser notificado sobre essa alteração, caso contrário, haverá falsas suposições sobre a localização do cursor e a tela provavelmente desmoronará. Não conheço um método genérico para isso (pode / deve haver um local onde wcwidth () retorne 2 para esses caracteres em vez de 1, mas acho que não há nenhum), portanto, você precisará configurar cada aplicativo separadamente (se eles tiverem essa opção de configuração). Utilitários simples que não se importam com o cursor, por exemplo, um catcomando devem funcionar sem modificações.

Egmont
fonte
E para esclarecer: no terminal gnomo, a largura de um caractere (ocupando uma ou duas células) nunca é derivada da fonte.
Egmont
Muito obrigado!!! A configuração da interface do usuário na versão mais recente do gnome-terminalfunciona bem (embora exija a abertura de uma nova instância). VTE_CJK_WIDTH=widefunciona para alguns outros terminais, incluindo lxterminal lilyterm, mas não mate-terminal- o do MATE Desktop (que é derivado do GNOME2).
LiuYan #
Parece que há um erro no bash, quando VTE_CJK_WIDTH = wide: se colei ·“”‘’na linha de comando do bash, não consigo mover o cursor de volta à página inicial da entrada da linha de comando, só posso mover o cursor de volta para o meio da·“”‘’
LiuYan #
Este não é um bug no bash em si. Todo aplicativo que faz o posicionamento do cursor precisa conhecer a alteração. Você pode ter esquecido isso na minha resposta ou não achou que o bash também provém dessa categoria. Eu não acho que o bash suporta isso e não tenho certeza se esse recurso deve pertencer ao bash ou ao sistema de localidade. Infelizmente, com essas configurações, você fica restrito a utilitários que produzem algum fluxo de saída contínuo sem se preocupar com a posição do cursor, e a aplicativos que realizam o movimento do cursor, mas podem lidar com caracteres de largura ambígua com largura dupla.
precisa
Se eu corro a vimpartir da linha de comando do bash, o vim pode lidar com o formulário de largura total corretamente (exibindo e movendo o cursor), catestá agindo como o bash.
#LiuYan #