Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Linux] Question about fallback fonts #75

Closed
wbthomason opened this issue Jan 28, 2020 · 35 comments
Closed

[Linux] Question about fallback fonts #75

wbthomason opened this issue Jan 28, 2020 · 35 comments
Labels
bug Something isn't working waiting Waiting on someone else

Comments

@wbthomason
Copy link
Contributor

I'm having an issue with fallback fonts (I think?), and was wondering if more information about how that mechanism works could help me debug.

For context, I'm on Arch Linux, building from master. When I run neovide, I get something that looks like the below:
neovide
Note the improperly rendered characters in the statusline. In the terminal (kitty, specifically), the same view looks like:
terminal
with symbols correctly rendered. The same font (Fira Code Retina) is set as both my terminal font and my guifont in ginit.vim.

Given that I know kitty does use fallback font handling for symbols (particularly the "Nerd Font" symbols), I'm guessing that there's some issue with how neovide is choosing a fallback font on my system.

Can you elaborate on how the fallback mechanism works/where in the code I should be reading to try and debug this? Thanks!

@Kethku
Copy link
Member

Kethku commented Jan 28, 2020

Could you try with this font: https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts/FiraCode/Retina/complete

Give me a sec to write up a blurb about the font recognition

@wbthomason
Copy link
Contributor Author

Sure, just a sec.

@Kethku
Copy link
Member

Kethku commented Jan 28, 2020

Neovide relies on Skribo (a largely unfinished project by Raph Levien) to delegate to harfbuzz its rendering. https://github.com/linebender/skribo
Skribo uses types from the FontKit project to locate the system fonts. https://docs.rs/font-kit/0.5.0/font_kit/source/trait.Source.html#method.select_best_match
Neovide builds a font collection using the configured font if available, the systems monospace font, and then an emoji font if it finds one. Unfortunately I don't have a nerd font in that list, so it won't have characters for the dividers like you've pointed out.

I have plans to embed fonts for the nerd portion, the emojis, and a basic ligature enabled monospace font, but I haven't done it yet.

@Kethku
Copy link
Member

Kethku commented Jan 28, 2020

The font collection is built here: https://github.com/Kethku/neovide/blob/master/src/renderer/caching_shaper.rs#L36
The caching shaper is in charge of loading the initial collection, caching skia fonts based on that collection and shaping text using harfbuzz via skribo and caching the results for performance reasons

@wbthomason
Copy link
Contributor Author

Alright. Unfortunately, setting the Nerd Font directly doesn't seem to have changed anything.

I confirmed that I have it installed with fc-list | rg "Fira Code Retina Nerd", which shows the expected .otf, and added as the last line of my ginit.vim and init.vim (in case ginit.vim wasn't being sourced for some reason) the line set guifont=Fira\ Code\ Retina\ Nerd\ Font\ Complete:h11.

The rendering does look different, but still incorrect:
neovide

I think my guifont may have been being set incorrectly in the original report (I was using set guifont="Fira Code Retina:h11", which I think didn't work because of the spaces?), but the same issue is exhibited.

@wbthomason
Copy link
Contributor Author

Thanks for the pointer into the code; I'll take a look and see if I can add some debug logging to figure out what's happening when I have a chance (which may not be immediately).

@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

I suspect the name you are using is incorrect. Maybe try "FiraCode\ Nerd\ Font:h11" the name should be the font name not the name of the file.

@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

image

@wbthomason
Copy link
Contributor Author

Ah, good idea. Sorry, I thought either the font or file name would work for lookup.

That did fix some, but not all of the issues:
neovide
Note that while the rounded corners are there, some of the symbols within them are still missing.

As another example, here's a source file in neovide and kitty:
neovide2
terminal2
Note the missing sidebar symbols and the missing/misrendered symbols in the statusline.

I suspect that kitty is using multiple fallback fonts (from what I recall of how its font selection mechanism works); I can figure out if this is the case and share the exact codepoints which are causing problems if that would help.

Also, thank you for the suggestions, help, and great tool!

@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

No problem! The extra rendering issues I believe are from emoji fonts? I'm not sure. Maybe it would be helpful to get a list of fallback fonts kitty uses?

@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

The exact codepoints may be useful. Its hard to figure out what set of fonts is necessary for all use cases

@wbthomason
Copy link
Contributor Author

Sure. On my system, kitty --debug-fonts produces the following when I open the above Lua file:

[028 19:12:28.919800] Preloaded font faces:
[028 19:12:28.919852] normal face: /usr/share/fonts/OTF/FiraCode-Retina.otf:0
[028 19:12:28.919863] bold face: /usr/share/fonts/OTF/FiraCode-Bold.otf:0
[028 19:12:28.919873] italic face: /usr/share/fonts/liberation/LiberationMono-Italic.ttf:0
[028 19:12:28.919882] bi face: /usr/share/fonts/liberation/LiberationMono-BoldItalic.ttf:0
[028 19:12:28.919892] Symbol map faces:
[028 19:12:28.919901] /usr/share/fonts/nerd-fonts-complete/otf/3270-Medium Nerd Font Complete Mono.otf:0
U+ff1f bold Face(family=Noto Sans CJK JP, style=Bold, ps_name=NotoSansCJKjp-Bold, path=/usr/share/fonts/noto-cjk/NotoSansCJK-Bold.ttc, index=0, is_scalable=True, has_color=False, ascender=1160, descender=-288, height=1448, underline_position=-150, underline_thickness=50) (new face)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90) (new face)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+23fa Face(family=Symbola, style=Regular, ps_name=Symbola, path=/usr/share/fonts/TTF/Symbola.ttf, index=0, is_scalable=True, has_color=False, ascender=1896, descender=-700, height=2596, underline_position=-595, underline_thickness=70) (new face)
U+2714 bold Face(family=DejaVu Sans Mono, style=Bold, ps_name=DejaVuSansMono-Bold, path=/usr/share/fonts/TTF/DejaVuSansMono-Bold.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90) (new face)
U+e620 Face(family=FuraMono Nerd Font Mono, style=Regular, ps_name=FuraMonoNerdFontCompleteM-Regular, path=/usr/share/fonts/nerd-fonts-complete/otf/Fura Mono Regular Nerd Font Complete Mono.otf, index=0, is_scalable=True, has_color=False, ascender=1050, descender=-350, height=1400, underline_position=-100, underline_thickness=50) (new face)
U+ff0a Face(family=Noto Sans CJK JP, style=Regular, ps_name=NotoSansCJKjp-Regular, path=/usr/share/fonts/noto-cjk/NotoSansCJK-Regular.ttc, index=0, is_scalable=True, has_color=False, ascender=1160, descender=-288, height=1448, underline_position=-150, underline_thickness=50) (new face)
U+23fa Face(family=Symbola, style=Regular, ps_name=Symbola, path=/usr/share/fonts/TTF/Symbola.ttf, index=0, is_scalable=True, has_color=False, ascender=1896, descender=-700, height=2596, underline_position=-595, underline_thickness=70)
U+2714 bold Face(family=DejaVu Sans Mono, style=Bold, ps_name=DejaVuSansMono-Bold, path=/usr/share/fonts/TTF/DejaVuSansMono-Bold.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+e620 Face(family=FuraMono Nerd Font Mono, style=Regular, ps_name=FuraMonoNerdFontCompleteM-Regular, path=/usr/share/fonts/nerd-fonts-complete/otf/Fura Mono Regular Nerd Font Complete Mono.otf, index=0, is_scalable=True, has_color=False, ascender=1050, descender=-350, height=1400, underline_position=-100, underline_thickness=50)
U+2714 bold Face(family=DejaVu Sans Mono, style=Bold, ps_name=DejaVuSansMono-Bold, path=/usr/share/fonts/TTF/DejaVuSansMono-Bold.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+e620 Face(family=FuraMono Nerd Font Mono, style=Regular, ps_name=FuraMonoNerdFontCompleteM-Regular, path=/usr/share/fonts/nerd-fonts-complete/otf/Fura Mono Regular Nerd Font Complete Mono.otf, index=0, is_scalable=True, has_color=False, ascender=1050, descender=-350, height=1400, underline_position=-100, underline_thickness=50)
U+283c Face(family=Symbola, style=Regular, ps_name=Symbola, path=/usr/share/fonts/TTF/Symbola.ttf, index=0, is_scalable=True, has_color=False, ascender=1896, descender=-700, height=2596, underline_position=-595, underline_thickness=70)
U+2714 bold Face(family=DejaVu Sans Mono, style=Bold, ps_name=DejaVuSansMono-Bold, path=/usr/share/fonts/TTF/DejaVuSansMono-Bold.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+e620 Face(family=FuraMono Nerd Font Mono, style=Regular, ps_name=FuraMonoNerdFontCompleteM-Regular, path=/usr/share/fonts/nerd-fonts-complete/otf/Fura Mono Regular Nerd Font Complete Mono.otf, index=0, is_scalable=True, has_color=False, ascender=1050, descender=-350, height=1400, underline_position=-100, underline_thickness=50)
U+2834 Face(family=Symbola, style=Regular, ps_name=Symbola, path=/usr/share/fonts/TTF/Symbola.ttf, index=0, is_scalable=True, has_color=False, ascender=1896, descender=-700, height=2596, underline_position=-595, underline_thickness=70)
U+2714 bold Face(family=DejaVu Sans Mono, style=Bold, ps_name=DejaVuSansMono-Bold, path=/usr/share/fonts/TTF/DejaVuSansMono-Bold.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+e620 Face(family=FuraMono Nerd Font Mono, style=Regular, ps_name=FuraMonoNerdFontCompleteM-Regular, path=/usr/share/fonts/nerd-fonts-complete/otf/Fura Mono Regular Nerd Font Complete Mono.otf, index=0, is_scalable=True, has_color=False, ascender=1050, descender=-350, height=1400, underline_position=-100, underline_thickness=50)
U+26a0 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+2834 Face(family=Symbola, style=Regular, ps_name=Symbola, path=/usr/share/fonts/TTF/Symbola.ttf, index=0, is_scalable=True, has_color=False, ascender=1896, descender=-700, height=2596, underline_position=-595, underline_thickness=70)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+23fa Face(family=Symbola, style=Regular, ps_name=Symbola, path=/usr/share/fonts/TTF/Symbola.ttf, index=0, is_scalable=True, has_color=False, ascender=1896, descender=-700, height=2596, underline_position=-595, underline_thickness=70)
U+2714 bold Face(family=DejaVu Sans Mono, style=Bold, ps_name=DejaVuSansMono-Bold, path=/usr/share/fonts/TTF/DejaVuSansMono-Bold.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+e620 Face(family=FuraMono Nerd Font Mono, style=Regular, ps_name=FuraMonoNerdFontCompleteM-Regular, path=/usr/share/fonts/nerd-fonts-complete/otf/Fura Mono Regular Nerd Font Complete Mono.otf, index=0, is_scalable=True, has_color=False, ascender=1050, descender=-350, height=1400, underline_position=-100, underline_thickness=50)
U+26a0 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+23fa Face(family=Symbola, style=Regular, ps_name=Symbola, path=/usr/share/fonts/TTF/Symbola.ttf, index=0, is_scalable=True, has_color=False, ascender=1896, descender=-700, height=2596, underline_position=-595, underline_thickness=70)
U+2714 bold Face(family=DejaVu Sans Mono, style=Bold, ps_name=DejaVuSansMono-Bold, path=/usr/share/fonts/TTF/DejaVuSansMono-Bold.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+e620 Face(family=FuraMono Nerd Font Mono, style=Regular, ps_name=FuraMonoNerdFontCompleteM-Regular, path=/usr/share/fonts/nerd-fonts-complete/otf/Fura Mono Regular Nerd Font Complete Mono.otf, index=0, is_scalable=True, has_color=False, ascender=1050, descender=-350, height=1400, underline_position=-100, underline_thickness=50)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+27a4 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+23fa Face(family=Symbola, style=Regular, ps_name=Symbola, path=/usr/share/fonts/TTF/Symbola.ttf, index=0, is_scalable=True, has_color=False, ascender=1896, descender=-700, height=2596, underline_position=-595, underline_thickness=70)
U+2714 bold Face(family=DejaVu Sans Mono, style=Bold, ps_name=DejaVuSansMono-Bold, path=/usr/share/fonts/TTF/DejaVuSansMono-Bold.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+e620 Face(family=FuraMono Nerd Font Mono, style=Regular, ps_name=FuraMonoNerdFontCompleteM-Regular, path=/usr/share/fonts/nerd-fonts-complete/otf/Fura Mono Regular Nerd Font Complete Mono.otf, index=0, is_scalable=True, has_color=False, ascender=1050, descender=-350, height=1400, underline_position=-100, underline_thickness=50)
U+26a0 Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+23fa Face(family=Symbola, style=Regular, ps_name=Symbola, path=/usr/share/fonts/TTF/Symbola.ttf, index=0, is_scalable=True, has_color=False, ascender=1896, descender=-700, height=2596, underline_position=-595, underline_thickness=70)
U+2714 bold Face(family=DejaVu Sans Mono, style=Bold, ps_name=DejaVuSansMono-Bold, path=/usr/share/fonts/TTF/DejaVuSansMono-Bold.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+e620 Face(family=FuraMono Nerd Font Mono, style=Regular, ps_name=FuraMonoNerdFontCompleteM-Regular, path=/usr/share/fonts/nerd-fonts-complete/otf/Fura Mono Regular Nerd Font Complete Mono.otf, index=0, is_scalable=True, has_color=False, ascender=1050, descender=-350, height=1400, underline_position=-100, underline_thickness=50)
U+ff1f bold Face(family=Noto Sans CJK JP, style=Bold, ps_name=NotoSansCJKjp-Bold, path=/usr/share/fonts/noto-cjk/NotoSansCJK-Bold.ttc, index=0, is_scalable=True, has_color=False, ascender=1160, descender=-288, height=1448, underline_position=-150, underline_thickness=50)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)
U+276f Face(family=DejaVu Sans Mono, style=Book, ps_name=DejaVuSansMono, path=/usr/share/fonts/TTF/DejaVuSansMono.ttf, index=0, is_scalable=True, has_color=False, ascender=1901, descender=-483, height=2384, underline_position=-175, underline_thickness=90)

The codepoints are:

  • 🗙

One other (probably unrelated) note: I get a segfault every time I exit; seems likely to be #73.

@wbthomason
Copy link
Contributor Author

And yeah, supporting everybody's preferred fonts/font needs seems really very hard.

@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

Do you still get the segfault on current master? I tried to fix it :(

@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

Also interesting. Are tilde plus and star really not rendering? I could see the other ones failing but those should work

@wbthomason
Copy link
Contributor Author

Unfortunately yes :/

The exact error output is

Error: 'Error reading message'
zsh: segmentation fault (core dumped) target/release/neovide

If you think it's not #73 I'll open a new issue to avoid cluttering this one.

@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

No it seems likely to be similar

@wbthomason
Copy link
Contributor Author

re: Tilde, plus, and star: The normal (ASCII) versions of those symbols work, but the symbols I sent above are full-width versions (the rendering in terminal nvim is prettier than using the "normal" versions).

The characters are these:
Asterisk: http://unicode.scarfboy.com/?s=%EF%BC%8A
Plus: http://unicode.scarfboy.com/?s=%EF%BC%8B
Tilde: http://unicode.scarfboy.com/?s=%EF%BD%9E

@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

woah til

@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

Any chance you know which of your fonts they come from?

@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

Noticed underlines were broken btw in your screencap, so I fixed them. Thanks for the detailed report

@wbthomason
Copy link
Contributor Author

From the kitty output, it seems like they come from "Noto Sans CJK JP" (that's the font associated with the U+ff0a (asterisk) codepoint in the output)

@wbthomason
Copy link
Contributor Author

Noticed underlines were broken btw in your screencap, so I fixed them. Thanks for the detailed report

Haha, nice catch. I hadn't even noticed that myself.

@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

Ok so looks like its a font specialized towards double width characters from non latin based languages. So to solve all of these in one go, I need to embed a standard monospace, a wide space, and a nerd font. Ideally all with normal, bold, italic, and bold-italic variants. That seems doable

@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

Oh also an emoji font. So 3 * 4 + 1 (emoji) in total

@wbthomason
Copy link
Contributor Author

Yikes, sorry :/ That sounds like a lot. Any way I can help (with the caveat that my time for hacking is limited at the moment)?

@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

Nah shouldn't be too bad actually. I already have an embedding system that should work and I think I'm just going to embed the fira code fonts. One thing I need to figure out is a license compliant way to display the font license. Maybe I should create a special NeovideFontLicenses command which writes the license to disk and opens them in the editor...

@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

Maybe I'll default on my MS roots and embed Cascadia Code ;)

@Kethku Kethku added the bug Something isn't working label Jan 29, 2020
@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

I've got them all working except the x emoji
image

Any chance you could use your nifty kitty tricks to figure out which font it comes from?

@Kethku Kethku added the waiting Waiting on someone else label Jan 29, 2020
@wbthomason
Copy link
Contributor Author

Hmm, it's unfortunately not as clear from the logs, but my guess would be either 3270-Medium Nerd Font Complete Mono or Symbola?

@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

Its not the Nerd Font Complete because I already embed a version of that. Its probably a symbol font...

Its frustrating because the real solution is to do os specific font fallback, but there isn't a rust library that does that today. Skribo has it on the roadmap, but as far as I can tell it doesn't do it yet.

@Kethku
Copy link
Member

Kethku commented Jan 29, 2020

So I think my answer is that this is fixed as far as its going to go for now. To really solve it I need better library support (or to write my own) or maybe provide a method for letting the user manually list what fonts they want in their font fallback cascade. Does this solve it sufficiently for you for now?

@wbthomason
Copy link
Contributor Author

Yeah, seems totally reasonable. Thanks!

@p00f
Copy link
Contributor

p00f commented Jul 8, 2020

@wbthomason Can you share your sidebar and statusline details (plugin+config)

Sorry for the spam

@wbthomason
Copy link
Contributor Author

wbthomason commented Jul 9, 2020

@PitcherTear22: I don’t actually use that statusline config anymore, but it was custom (not a plugin) and adapted from https://github.com/elenapan/dotfiles/blob/master/config/nvim/statusline.vim

You can see my current config files at https://github.com/wbthomason/dotfiles/tree/linux/neovim/.config/nvim; if you’re specifically interested in the statusline and sign config, those are mostly in:

My colorscheme (responsible for some of the side bar, etc.) is https://github.com/wbthomason/vim-nazgul

Hope this helps!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working waiting Waiting on someone else
Projects
None yet
Development

No branches or pull requests

3 participants