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.
- Czy istnieje działająca metoda uzyskania poprawnego renderowania glifów Powerline w iTerm2 na OSX 10.9.3?
- 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:
(źródło: staticflickr.com )
(źródło: staticflickr.com )
W iTerm2 (dzieje się tak ze wszystkimi testowanymi czcionkami Powerline) niektóre znaki są renderowane, ale inne nie:
(źródło: staticflickr.com )
W macvim (terminal) z zainstalowanym vim-airlinesem niektóre znaki są renderowane, ale niektóre renderują się niepoprawnie:
(ź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
Use a different font for non-ASCII text.
zrobiło dla mnie różnicę.