Poprawione czcionki Powerline w OSX 10.9.3 - iTerm2 i Chrome

18

Szukam działającego rozwiązania do renderowania znaków Powerline na OSX w iTerm2 i Chrome. Jest wiele dokumentacji, w których próbowałem użyć kilku metod, żadna jak dotąd nie działa poprawnie (chociaż przygotowane wcześniej czcionki z fontbookiem częściowo działają). Szczegóły zawarte poniżej.

  1. Czy istnieje działająca metoda uzyskania poprawnego renderowania glifów Powerline w iTerm2 na OSX 10.9.3?
  2. Czy glify Powerline powinny być poprawnie renderowane na stronach internetowych? Masz pojęcie, dlaczego tak nie jest i jak mogę to naprawić?

Jak działa rendering tych znaków (na poziomie systemu / aplikacji)? Czy różni się w zależności od aplikacji? W chrome, jeśli bieżąca czcionka nie zawiera powiązań dla glifów, czy chrome spróbuje znaleźć powiązania w innej czcionce obecnej w systemie i użyć ich? Czy istnieje sposób zapewnienia powiązań dla tych znaków Unicode na poziomie systemowym, aby renderowały się przy użyciu tej czcionki, niezależnie od używanej czcionki?

Znaki obszaru prywatnego Unicode

Jeśli rozumiem sposób działania poprawionych czcionek kompatybilnych z Powerline, wiążą one skalowalną grafikę z określonymi wartościami w obszarze prywatnego użytku Unicode:

U+E0A0     Version control branch
U+E0A1     LN (line) symbol
U+E0A2     Closed padlock
U+E0B0     Rightwards black arrowhead
U+E0B1     Rightwards arrowhead
U+E0B2     Leftwards black arrowhead
U+E0B3     Leftwards arrowhead

Aby przetestować glify w terminalu, przeczytałem, że to powinno działać:

echo -e "\ue0a0\ue0a1\ue0a2\ue0b0\ue0b1\ue0b2\ue0b3"

Jednak dla mnie to nie działa (OSX 10.9.3, iTerm2, zsh) nawet z zainstalowaną czcionką z łatką Powerline i iTerm2 skonfigurowaną do używania jednej z tych czcionek.

Wypróbowałem kilka metod instalowania poprawionych czcionek:

FontBook i wstępnie przygotowane czcionki

Pobrałem czcionki z Localtog / powerline-fonts i zainstalowałem je za pomocą FontBook. Na tych samych stronach niektóre glify są renderowane, a inne nie. Na innych stronach żaden z glifów nie wyświetla:

Motyw Agnoster
(źródło: staticflickr.com )

Dokumentacja Powerline
(źródło: staticflickr.com )

W iTerm2 (dzieje się tak ze wszystkimi testowanymi czcionkami Powerline) niektóre znaki są renderowane, ale inne nie:

iTerm2 i zsh
(źródło: staticflickr.com )

W macvim (terminal) z zainstalowanym vim-airlinesem niektóre znaki są renderowane, ale niektóre renderują się niepoprawnie:

vim-linie lotnicze
(źródło: staticflickr.com )

Fontconfig

Odinstalowałem wszystkie czcionki z łatką Powerline, zainstalowałem fontconfig z Homebrew, zainstalowałem czcionkę Powerline i przebudowałem pamięć podręczną czcionek:

wget -P ~/.fonts/ https://github.com/Lokaltog/powerline/raw/develop/font/PowerlineSymbols.otf
wget -P ~/.config/fontconfig/conf.d/ https://github.com/Lokaltog/powerline/raw/develop/font/10-powerline-symbols.conf
fc-cache -vf ~/.fonts

Czcionka została wykryta, a fontconfig powiedział, że został zainstalowany, jednak nie pojawił się w FontBook i nie mogłem go wybrać w iTerm2.

Po uruchomieniu tego usunąłem czcionki, zmieniłem pamięć podręczną fc-cache i odinstalowałem fontconfig.

Obecnie korzystam z gotowych czcionek zainstalowanych w fontbooku, które częściowo działają, ale mam nadzieję, że ktoś pomoże mi lepiej zrozumieć problem, dzięki czemu znajdę działające rozwiązanie.

Aktualizacja

Ta metoda wydaje się sprawiać, że wszystko działa w iTerm2, chociaż nadal nie jestem pewien co do problemów z renderowaniem chrome / systemu.

FontForge

Zainstaluj fontforge z powiązaniami Pythona:

brew install fontforge --with-python

Zainstaluj powerline-fontpatcher:

mkdir -p ~/.local/src
git clone https://github.com/Lokaltog/powerline-fontpatcher.git ~/.local/src/powerline-fontpatcher
cd ~/.local/src/powerline-fontpatcher && python setup.py install && cd
export powerline_symbols=~/.local/src/powerline-fontpatcher/fonts/powerline-symbols.sfd

Pobierz, popraw i zainstaluj czcionkę:

wget http://sourceforge.net/projects/sourcecodepro.adobe/files/SourceCodePro_FontsOnly-1.017.zip
unzip SourceCodePro_FontsOnly-1.017.zip

find SourceCodePro_FontsOnly-1.017/TTF -name \*.ttf -exec powerline-fontpatcher --source-font=$powerline_symbols --no-rename {} \;
mv *.ttf /Library/Fonts
nfarrar
źródło

Odpowiedzi:

12

Wystarczy zainstalować czcionkę Input Mono , z pełnym wsparciem dla powerline.

Aby następujące czynności działały, czcionka Input Mono musi mieć wersję 1.1. Możesz sprawdzić wersję czcionki, przechodząc do Font Book → View → Show Font Infoi patrząc na numer wersji.

Z Terminal.app działa od razu po wyjęciu z pudełka. Po prostu wybierz czcionkę i jesteś gotowy.

W iTerm2 musisz zmodyfikować kilka rzeczy:

  • Idź do Preferencje → Profile → Tekst i odznacz `Użyj innej czcionki dla tekstu spoza ASCII.
  • Tuż powyżej kliknij Change Fonti wybierz Input Mono. Dodatkowo musisz zmienić Character Spacing → Verticalna 110%. Wydaje się, że Terminal i iTerm2 renderują odstępy między znakami w inny sposób.
Jherran
źródło
Odznaczenie Use a different font for non-ASCII text.zrobiło dla mnie różnicę.
rumianek
2

Możliwe, że nie zaktualizowałeś się bash. OS X jest dostarczany z bash < 4, więc nie możesz printfani echo -ekodów Unicode.

Kroki aktualizacji za bashpomocą homebrew:

  1. brew install bash
  2. Znajdź prefiks bashzainstalowanego przez homebrew, mój był /usr/local/Cellar/bash/4.3.30/, więc mój bash był /usr/local/Cellar/bash/4.3.30/bin/bash.
  3. sudo (vim|nano|emacs|etc) /etc/shells
  4. Zdobądź wspomnianą ścieżkę bash i dodaj ją na końcu listy (lub zamień /usr/bin, jeśli naprawdę jesteś odważny).
  5. chsh
  6. Zmień Shell:linię, aby dopasować swoją bashścieżkę.
  7. Uruchom ponownie termin.

I powinieneś być naprawiony.


źródło