Problema de renderização de fonte no urxvt - muito espaço entre caracteres

27

A partir de hoje, estou recebendo problemas de renderização de fontes com o rxvt-unicode. Especificamente com muitas fontes, recebo uma abundância de espaço extra entre os caracteres. Em outras fontes, o rxvt se recusa a alterar os tamanhos.

Aqui está um exemplo do problema de espaçamento entre urxvt e xterm.

Os recursos de fontes:

URxvt*font:     xft:Terminus:medium:size=10
xterm*faceName: xft:Terminus:medium:size=10

E as renderizações

  • urxvt fontes ruins
  • xterm boas fontes

Eu tentei todas as permutações de sugestões e antialiasing. Alterar o tamanho ou o tamanho do pixel redimensiona a fonte no urxvt, mas isso também aumenta o espaçamento extra.

Alguém tem idéias que eu posso tentar corrigir isso?

Casey
fonte
1
Eu não acho que xtermestá realmente usando a mesma fonte. O Je o 0são distintamente diferentes. Você pode confirmar isso usando uma fonte inexistente no arquivo de recurso ( xterm*faceName: xft:Nosuchfont:medium:size=10). Se ainda parece o mesmo, obviamente não é Terminus.
precisa
@goldilocks Parece que você está certo. O Urxvt está escolhendo a fonte errada e tornando-a terrivelmente.
quer
1
Já notei isso antes com a gvimminha configuração em um sistema em que a fonte que eu queria não estava instalada. xftou algo recai sobre uma fonte não monoespaçada e é assim que elas aparecem.
precisa
2
@goldilocks Acontece que uma regra incorreta do fontconfig entrou em vigor durante uma atualização e estava impedindo a disponibilidade de todas as fontes de bitmap. Coloquei nuked e voltei ao normal.
quer

Respostas:

15

Urxvt tem uma opção para kerning básica: letterSpace. Veja man urxvt:

-letsp number
Compile babados: quantidade para ajustar a largura dos caracteres calculados para controlar o espaçamento geral das letras. Valores negativos aumentam o espaçamento entre letras, valores positivos espaçam mais as letras. Útil para solucionar métricas de fontes ímpares; recurso letterSpace.

Assim, você pode ajustar o espaçamento adicionando uma linha ao seu ~/.Xresources, assim:

URxvt.letterSpace: -1

Nota: é difícil distinguir da sua primeira captura de tela, mas parece que o Urxvt está voltando à fonte padrão, pois não consegue encontrar ou carregar o Terminus, daí o amplo espaçamento. Terminus é uma fonte de bitmap (que provavelmente está desativada por padrão); portanto, você deve xfontselcopiar a string de fonte correta em sua definição.

Consulte a página do Arch Wiki em X Logical Font Description para obter uma descrição detalhada de como este sistema funciona.

jasonwryan
fonte
3
Eu também tive esse problema e achei que urxvt -letsp -2era necessário para mim. Usar -1era melhor, mas inicialmente não percebi isso, pois não era suficiente.
Adam Katz
Além disso, você pode usar o em fc-match <font-name>vez de xfontselse não estiver instalado ( nome da fonte é a expressão fornecida no URxvt*fontnome da fonte da sua linha). Se isso aparecer com um valor correspondente à expressão, a fonte será carregada corretamente. por exemplo, se fc-match "Noto Mono"der DejaVuSans.ttf: "DejaVu Sans" "Book", pode ser considerada uma expressão de fonte incorreta.
Avinash R
6

Acontece que uma regra foi ativada no meu sistema que bloqueou fontes de bitmap, como o Terminus.

Esta regra (no meu sistema) estava dentro /etc/fonts/conf.d/70-no-bitmap-fontse continha:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!-- Reject bitmap fonts -->
 <selectfont>
  <rejectfont>
   <pattern>
     <patelt name="scalable"><bool>false</bool></patelt>
   </pattern>
  </rejectfont>
 </selectfont>
</fontconfig>

Eu removi isso do conf.ddiretório e minhas fontes estão novamente sendo renderizadas corretamente urxvt.

Casey
fonte
3

Observe que há um relatório de erro referente ao espaçamento entre letras.

Eu tive problemas semelhantes. Seguindo as recomendações da discussão sobre os bugs, defino Xft.rgba: nonee Xft.hintstyle: hintfullin ~/.Xdefaults( em vez de Xft.rgba: rgbe Xft.hintstyle: hintslight). Isso foi corrigido para mim - eu usei o Ubuntu Mono como fonte.

balu
fonte
3

Minha solução foi simples:

URxvt*font:     xft:mono:medium:size=10
xterm*faceName: xft:mono:medium:size=10

Agora funciona perfeitamente.

b3h3m0th
fonte
0

Isso pode resultar de um arquivo de fonte real (Monospace no meu caso), mais provavelmente do que de qualquer coisa no urxvt. Se a fonte (erroneamente) declarar alguns glifos muito grandes, o urxvt também será forçado a aumentar a grade.

No meu caso, a fonte "OK" que encontrei foi o Bitstream Vera Sans Mono.

exa
fonte