Problem z renderowaniem czcionek w urxvt - za dużo miejsca między znakami

27

Począwszy od dzisiaj, mam problemy z renderowaniem czcionek w rxvt-unicode. W szczególności z wieloma czcionkami dostaję mnóstwo dodatkowej przestrzeni między znakami. W innych czcionkach rxvt odmawia zmiany rozmiarów.

Oto przykład problemu z odstępami między urxvt i xterm.

Zasoby czcionek:

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

I renderingi

  • urxvt złe czcionki
  • xterm dobre czcionki

Próbowałem wszystkich permutacji podpowiedzi i antyaliasingu. Zmiana rozmiaru lub rozmiaru pikseli powoduje zmianę rozmiaru czcionki w urxvt, ale zwiększa to również dodatkowe odstępy.

Czy ktoś ma pomysły, które mogę spróbować naprawić?

Casey
źródło
1
Nie sądzę, że xtermużywa tej samej czcionki. JI 0są wyraźnie różne. Możesz to potwierdzić, używając nieistniejącej czcionki w pliku zasobów ( xterm*faceName: xft:Nosuchfont:medium:size=10). Jeśli nadal wygląda tak samo, to oczywiście nie jest Terminus.
goldilocks
@Goldilocks Wygląda na to, że masz rację. Urxvt wybiera niewłaściwą czcionkę i strasznie ją renderuje.
Casey
1
Zauważyłem to przed gvimużyciem w / mojej konfiguracji w systemie, w którym pożądana czcionka nie została zainstalowana. xftlub coś spada na czcionkę inną niż monospace i tak właśnie wyglądają.
goldilocks
2
@goldilocks Okazuje się, że w trakcie aktualizacji wprowadzono złą regułę fontconfig i blokowano dostęp do wszystkich czcionek bitmapowych. Uderzyłem go i wróciłem do normy.
Casey

Odpowiedzi:

15

Urxvt posiada opcję dla podstawowego kerningu: letterSpace. Zobacz man urxvt:

-letsp number
Skompiluj falbanki: Kwota do dostosowania szerokości obliczanego znaku przez kontrolę ogólnego odstępu między literami. Wartości ujemne zaostrzą odstępy między literami, wartości dodatnie zwiększą odstępy między literami. Przydatne do obejścia mierników czcionek nieparzystych; list zasobu.

Możesz więc dostosować odstępy, dodając do swojego wiersza ~/.Xresources:

URxvt.letterSpace: -1

Uwaga: trudno jest stwierdzić na podstawie pierwszego zrzutu ekranu, ale wygląda na to, że Urxvt wraca do domyślnej czcionki, ponieważ nie może znaleźć ani załadować Terminusa, stąd szerokie odstępy. Terminus jest czcionką bitmapową (która prawdopodobnie jest domyślnie wyłączona), więc powinieneś użyć, xfontselaby skopiować prawidłowy ciąg czcionek do definicji.

Zobacz stronę Arch Wiki na X Logical Font Description, aby uzyskać szczegółowy opis działania tego systemu.

jasonwryan
źródło
3
Też miałem ten problem i uznałem, że urxvt -letsp -2jest to dla mnie konieczne. Używanie -1było lepsze, ale początkowo nie zdawałem sobie z tego sprawy, ponieważ to nie wystarczyło.
Adam Katz
Możesz także użyć fc-match <font-name>zamiast zamiast, xfontseljeśli nie jest zainstalowany ( nazwa-czcionki to wyrażenie podane w URxvt*fontnazwie czcionki twojej linii). Jeśli wyświetli się wartość zgodna z wyrażeniem, czcionka zostanie poprawnie załadowana. np. jeśli fc-match "Noto Mono"daje DejaVuSans.ttf: "DejaVu Sans" "Book", można uznać, że jest to niepoprawne wyrażenie czcionki.
Avinash R
6

Okazuje się, że w moim systemie została włączona reguła blokująca czcionki bitmapowe, takie jak Terminus.

Ta reguła (w moim systemie) była /etc/fonts/conf.d/70-no-bitmap-fontsi zawierała:

<?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>

Usunąłem to z conf.dkatalogu, a moje czcionki ponownie renderują się poprawnie urxvt.

Casey
źródło
3

Pamiętaj, że istnieje raport o błędzie dotyczący odstępów między literami.

Miałem podobne problemy. Zgodnie z zaleceniami dyskusji bug, ustawić Xft.rgba: nonei Xft.hintstyle: hintfullw ~/.Xdefaults(zamiast Xft.rgba: rgba Xft.hintstyle: hintslight). Naprawiłem to dla mnie - użyłem Ubuntu Mono jako czcionki.

balu
źródło
3

Moje rozwiązanie było proste:

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

Teraz działa idealnie.

b3h3m0th
źródło
0

Może to wynikać z rzeczywistego pliku czcionek (w moim przypadku Monospace), bardziej niż z czegokolwiek w urxvt. Jeśli czcionka (błędnie) zadeklaruje, że niektóre glify są zbyt szerokie, urxvt jest zmuszane również do zwiększenia szerokości siatki.

W moim przypadku czcionką „OK”, którą znalazłem, był Bitstream Vera Sans Mono.

exa
źródło