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

font kerning / rendering sometimes breaks #1931

Closed
dead10ck opened this issue Apr 28, 2022 · 17 comments
Closed

font kerning / rendering sometimes breaks #1931

dead10ck opened this issue Apr 28, 2022 · 17 comments
Labels
bug Something isn't working

Comments

@dead10ck
Copy link

What Operating System(s) are you seeing this problem on?

Linux Wayland

WezTerm version

20220408-101518-b908e2dd AppImage

Did you try the latest nightly build to see if the issue is better (or worse!) than your current version?

No, and I'll explain why below

Describe the bug

I've noticed recently that sometimes the font rendering will suddenly get messed up, misaligning characters inside their boxes. For example, this is with Pragmata Pro, and how the font should look:

wezterm-font-good

And seemingly at random times, it will suddenly look like this:

wezterm-font-bad

It seems as if the glyphs lose their correct position somehow. I'm not a font expert, but I'm not sure if this might have something to do with kerning?

To add to the strangeness, it seems to be isolated to a specific window and/or tmux attachment. If I open a new window, the issue is not present. In the example above, when I have a window doing this with the fonts, if I detach from tmux, the font renders fine again. So I thought maybe somehow this was a tmux issue. But if I attach to the same session in a different window, it doesn't have the problem. Other terminals like Alacritty and Gnome Terminal don't have this problem.

To Reproduce

Hard to say, since it seems to happen randomly.

Configuration

local wezterm = require 'wezterm';

return {
  font = wezterm.font("monospace"),
  font_size = 17.0,
  initial_cols = 120,
  initial_rows = 48,
  enable_tab_bar = false,
  enable_wayland = true,

  -- Solarized Dark Higher Contrast Modified
  colors = {
    foreground = "#9cc2c3",
    background = "#002b36",
    cursor_bg = "#9cc2c3",
    cursor_border = "#9cc2c3",
    cursor_fg = "#002831",
    selection_bg = "#003748",
    selection_fg = "#7a8f8e",
    
    ansi = {"#002831","#d11c24","#6cbe6c","#a57706","#2176c7","#c61c6f","#259286","#eae3cb"},
    brights = {"#006488","#f5163b","#51ef84","#b27e28","#178ec8","#e24d8e","#00b39e","#fcf4dc"},
  }
}

Expected Behavior

No response

Logs

10:20:18.541 ERROR wezterm_gui::termwindow > PaneOutput: wanted mux_window_id=1 from mux, but was not found, cancel mux subscription
11:22:32.164 INFO wezterm_gui::termwindow > Ding! (this is the bell) in pane 2
11:22:32.164 INFO wezterm_gui::termwindow > Ding! (this is the bell) in pane 2
11:22:32.164 INFO wezterm_gui::termwindow > Ding! (this is the bell) in pane 2
11:22:32.164 INFO wezterm_gui::termwindow > Ding! (this is the bell) in pane 2
11:49:42.892 INFO wezterm_gui::termwindow > Ding! (this is the bell) in pane 2
11:49:42.892 INFO wezterm_gui::termwindow > Ding! (this is the bell) in pane 2
11:49:42.892 INFO wezterm_gui::termwindow > Ding! (this is the bell) in pane 2
11:49:42.892 INFO wezterm_gui::termwindow > Ding! (this is the bell) in pane 2
11:57:43.023 WARN wezterm_term::terminalstate > unhandled DecPrivateMode ResetDecPrivateMode(Unspecified(1005))
11:57:43.023 WARN wezterm_term::terminalstate > unhandled DecPrivateMode ResetDecPrivateMode(Unspecified(7727))
11:58:06.370 WARN wezterm_term::terminalstate > unhandled DecPrivateMode ResetDecPrivateMode(Unspecified(1005))
11:58:06.382 WARN wezterm_term::terminalstate > unhandled DecPrivateMode SetDecPrivateMode(Unspecified(7727))
11:58:06.383 WARN wezterm_term::terminalstate > unhandled DecPrivateMode SetDecPrivateMode(Unspecified(7727))
12:01:51.558 ERROR window::os::wayland::copy_and_paste > Offer dnd_action None
12:01:51.559 ERROR window::os::wayland::copy_and_paste > Offer source_actions Copy | Move | Ask
12:02:11.716 ERROR window::os::wayland::copy_and_paste > Offer dnd_action None
12:02:11.716 ERROR window::os::wayland::copy_and_paste > Offer source_actions Copy | Move | Ask

Anything else?

No response

@dead10ck dead10ck added the bug Something isn't working label Apr 28, 2022
@wez
Copy link
Owner

wez commented Apr 29, 2022

Try a more recent nightly build? Harfbuzz (the font shaping library that performs this function) has been updated since that last release and it may have improved things

@wez wez added the waiting-on-op Waiting for more information from the original poster label Apr 29, 2022
@dead10ck
Copy link
Author

dead10ck commented May 2, 2022

Looks like the latest nightly AppImage does not work for some reason

~/Downloads on ☁️  strln-prod
❯ ./WezTerm-nightly-Ubuntu18.04.AppImage
10:43:08.847  ERROR  wezterm_gui::frontend > Failed to create window: with_egl_lib failed: with_egl_lib(libEGL.so.1) failed: egl GetDisplay: Failed but with error code: SUCCESS, with_egl_lib(libEGL.so) failed: egl GetDisplay: Failed but with error code: SUCCESS, with_egl_lib(libEGL.so.1) failed: egl GetDisplay: Failed but with error code: SUCCESS, with_egl_lib(libEGL.so) failed: egl GetDisplay: Failed but with error code: SUCCESS

This is on Fedora 35 on Wayland. I'll see if I can build myself and get that working.

@github-actions github-actions bot removed the waiting-on-op Waiting for more information from the original poster label May 2, 2022
@wez wez added the waiting-on-op Waiting for more information from the original poster label May 2, 2022
@dead10ck
Copy link
Author

dead10ck commented May 3, 2022

A local build of an AppImage worked, so I'll try it out for the next couple days and see if I still see the issue.

Not sure what's going on with the pre-packaged AppImage; should I file another bug for this?

@github-actions github-actions bot removed the waiting-on-op Waiting for more information from the original poster label May 3, 2022
@wez
Copy link
Owner

wez commented May 4, 2022

re: AppImage, I've had a few reports that they aren't working on some distros. It couldn't hurt to open an issue specifically for that.

@wez wez added the waiting-on-op Waiting for more information from the original poster label May 4, 2022
@dead10ck
Copy link
Author

dead10ck commented May 6, 2022

I haven't seen this happen in a few days, so the harfbuzz upgrade must have fixed it. Thanks!

@dead10ck dead10ck closed this as completed May 6, 2022
@github-actions github-actions bot removed the waiting-on-op Waiting for more information from the original poster label May 6, 2022
@dead10ck
Copy link
Author

dead10ck commented May 6, 2022

Actually, I'm sorry, I spoke too soon. I just saw it happen now. Here's a new screenshot with wezterm 20220501-214322-e0785311

Good:

wezterm-nightly-font-misalignment-good

Bad:

wezterm-nightly-font-misalignment-bad

It's more subtle now than it was, but it's definitely still there. You can see it in particular on the u in AuditLogEntries, and in the l in the fetch all the log entries comment.

@dead10ck dead10ck reopened this May 6, 2022
@wez
Copy link
Owner

wez commented May 6, 2022

Can you try experimenting with: https://wezfurlong.org/wezterm/config/font-shaping.html

@wez
Copy link
Owner

wez commented May 6, 2022

It may also be helpful to try:

wezterm ls-fonts --text "fetch all the log entries"

to see what the shaper is telling wezterm to do

@dead10ck
Copy link
Author

dead10ck commented May 6, 2022

Sorry, what things should I experiment with? That link looks like stuff for adding otf features?

Here's the output of that ls-fonts command:

LeftToRight                                                                                                                                  [10/17]
 0 f    \u{66}       x_adv=11 cells=1  glyph=f,73   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
 1 e    \u{65}       x_adv=11 cells=1  glyph=e,72   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
 2 t    \u{74}       x_adv=11 cells=1  glyph=t,87   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
 3 c    \u{63}       x_adv=11 cells=1  glyph=c,70   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
 4 h    \u{68}       x_adv=11 cells=1  glyph=h,75   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
 5      \u{20}       x_adv=11 cells=1  glyph=space,3    wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
 6 a    \u{61}       x_adv=11 cells=1  glyph=a,68   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
 7 l    \u{6c}       x_adv=11 cells=1  glyph=l,79   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
 8 l    \u{6c}       x_adv=11 cells=1  glyph=l,79   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
 9      \u{20}       x_adv=11 cells=1  glyph=space,3    wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
10 t    \u{74}       x_adv=11 cells=1  glyph=t,87   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
11 h    \u{68}       x_adv=11 cells=1  glyph=h,75   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
12 e    \u{65}       x_adv=11 cells=1  glyph=e,72   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
13      \u{20}       x_adv=11 cells=1  glyph=space,3    wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
14 l    \u{6c}       x_adv=11 cells=1  glyph=l,79   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
15 o    \u{6f}       x_adv=11 cells=1  glyph=o,82   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
16 g    \u{67}       x_adv=11 cells=1  glyph=g,74   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
17      \u{20}       x_adv=11 cells=1  glyph=space,3    wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
18 e    \u{65}       x_adv=11 cells=1  glyph=e,72   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
19 n    \u{6e}       x_adv=11 cells=1  glyph=n,81   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
20 t    \u{74}       x_adv=11 cells=1  glyph=t,87   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
21 r    \u{72}       x_adv=11 cells=1  glyph=r,85   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
22 i    \u{69}       x_adv=11 cells=1  glyph=i,76   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
23 e    \u{65}       x_adv=11 cells=1  glyph=e,72   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})
                                      /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf, FontConfigMatch("monospace")
24 s    \u{73}       x_adv=11 cells=1  glyph=s,86   wezterm.font("PragmataPro Mono Liga", {weight="Regular", stretch="Normal", style="Normal"})

@wez
Copy link
Owner

wez commented May 7, 2022

Something else to try:

hb-shape /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf --trace "all" --show-extents --show-flags --no-glyph-names

and:

hb-shape /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf --trace "url" --show-extents --show-flags --no-glyph-names

which should compare how it shapes "all" with how it shapes "url".

You can see a basic rendering of that text inline in the terminal using:

hb-view /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf all -O png | wezterm imgcat
hb-view /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf url -O png | wezterm imgcat

but please redirect each of those to a file (instead of piping through imgcat) and attach to this issue; that will help to determine the data from the shaper looks good.

@wez wez added the waiting-on-op Waiting for more information from the original poster label May 7, 2022
@dead10ck
Copy link
Author

hb-shape /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf --trace "all" --show-extents --show-flags --no-glyph-names
trace: start table GSUB	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 5	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 5	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 7	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 7	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 10	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 10	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 13	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 13	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 16	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 16	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 18	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 18	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 24	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 24	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 26	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 26	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 36	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 36	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 45	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 45	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 50	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 50	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 52	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 52	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 61	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 61	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 64	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 64	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 68	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 68	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 74	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 74	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 81	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 81	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 86	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 86	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 88	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 88	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 90	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 90	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 113	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 113	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 115	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 115	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 117	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 117	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 119	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 119	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 143	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 143	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 144	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 144	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 146	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 146	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 147	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 147	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 148	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 148	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 149	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 149	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 151	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 151	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 152	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 152	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 153	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 153	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 154	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 154	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start lookup 156	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end lookup 156	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: end table GSUB	buffer: [68=0<101,1153,753,-1172>|79=1<103,1526,786,-1526>|79=2<103,1526,786,-1526>]
trace: start table GPOS	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024<103,1526,786,-1526>|79=2+1024<103,1526,786,-1526>]
trace: start lookup 0	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024<103,1526,786,-1526>|79=2+1024<103,1526,786,-1526>]
trace: end lookup 0	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 1	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 1	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 2	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 2	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 3	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 3	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 4	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 4	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 5	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 5	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 6	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 6	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 7	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 7	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 8	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 8	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 9	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 9	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 10	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 10	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 11	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 11	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 12	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 12	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 13	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 13	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 14	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 14	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 15	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 15	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 16	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 16	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 17	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 17	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 18	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 18	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 19	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 19	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 20	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 20	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
trace: end table GPOS	buffer: [68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
[68=0+1024<101,1153,753,-1172>|79=1+1024#1<103,1526,786,-1526>|79=2+1024#1<103,1526,786,-1526>]
hb-shape /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf --trace "url" --show-extents --show-flags --no-glyph-names
trace: start table GSUB	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 5	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 5	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 7	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 7	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 10	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 10	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 13	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 13	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 16	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 16	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 18	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 18	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 24	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 24	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 26	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 26	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 36	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 36	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 45	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 45	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 50	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 50	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 52	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 52	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 61	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 61	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 64	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 64	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 68	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 68	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 74	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 74	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 81	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 81	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 86	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 86	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 88	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 88	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 90	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 90	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 113	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 113	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 115	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 115	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 117	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 117	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 119	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 119	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 143	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 143	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 144	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 144	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 146	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 146	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 147	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 147	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 148	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 148	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 149	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 149	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 151	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 151	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 152	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 152	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 153	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 153	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 154	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 154	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start lookup 156	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end lookup 156	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: end table GSUB	buffer: [88=0<145,1132,734,-1151>|85=1<214,1153,737,-1153>|79=2<103,1526,786,-1526>]
trace: start table GPOS	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024<214,1153,737,-1153>|79=2+1024<103,1526,786,-1526>]
trace: start lookup 0	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024<214,1153,737,-1153>|79=2+1024<103,1526,786,-1526>]
trace: end lookup 0	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 1	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 1	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 2	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 2	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 3	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 3	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 4	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 4	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 5	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 5	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 6	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 6	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 7	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 7	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 8	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 8	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 9	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 9	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 10	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 10	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 11	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 11	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 12	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 12	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 13	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 13	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 14	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 14	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 15	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 15	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 16	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 16	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 17	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 17	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 18	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 18	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 19	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 19	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: start lookup 20	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end lookup 20	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
trace: end table GPOS	buffer: [88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]
[88=0+1024<145,1132,734,-1151>|85=1+1024#1<214,1153,737,-1153>|79=2+1024#1<103,1526,786,-1526>]

which should compare how it shapes "all" with how it shapes "url".

You can see a basic rendering of that text inline in the terminal using:

hb-view /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf all -O png | wezterm imgcat
hb-view /home/dead10ck/.local/share/fonts/PragmataPro_Mono_R_liga_0829.otf url -O png | wezterm imgcat

but please redirect each of those to a file (instead of piping through imgcat) and attach to this issue; that will help to determine the data from the shaper looks good.

Here are the png's.

all

quad

url

Nothing seems wrong when they are freshly rendered. It seems to happen on its own while typing sometimes. I've noticed since making this issue that it seems to become triggered while typing. Sometimes after typing some character combinations, the letters shift around, and don't go back to where they should be.

@github-actions github-actions bot removed the waiting-on-op Waiting for more information from the original poster label May 10, 2022
@wez
Copy link
Owner

wez commented Jun 1, 2022

Can you try setting freetype_load_flags = "NO_HINTING"?

@wez wez added the waiting-on-op Waiting for more information from the original poster label Jun 1, 2022
@github-actions
Copy link
Contributor

This issue has been automatically closed because there has been no response to our request for more information from the original author. With only the information that is currently in the issue, we don't have enough information to take action. Please reach out if you have or find the answers we need so that we can investigate further.

@dead10ck
Copy link
Author

Oh I'm sorry, I lost track of this. I did not try the hinting setting above yet, but I do think it's worth noting that I've been using a build that I made on my local laptop for a couple weeks, and I haven't seen the issue happen. I'm guessing maybe this could be an issue with some lib that's bundled with the AppImage? Maybe one that's incompatible with the one in use on Ubuntu?

@github-actions github-actions bot removed the waiting-on-op Waiting for more information from the original poster label Jun 15, 2022
@github-actions github-actions bot reopened this Jun 15, 2022
@wez
Copy link
Owner

wez commented Jun 15, 2022

OK, then let's close this out. If you see it again, please try changing that hinting setting, and let me know how it goes!

@wez wez closed this as completed Jun 15, 2022
@dead10ck
Copy link
Author

I've been trying out the latest release using the fedora .rpm build, and this issue still happens, even with the no hinting setting you suggested above.

@github-actions
Copy link
Contributor

github-actions bot commented Feb 3, 2023

I'm going to lock this issue because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues. If you have found a problem that seems similar to this, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 3, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants