fabrizioschiavi / pragmatapro

PragmataPro font is designed to help pros to work better
https://www.fsd.it/shop/fonts/pragmatapro/
1.41k stars 40 forks source link

Terminal.app is very slow with Pragmata fonts #76

Closed cedeber closed 6 years ago

cedeber commented 7 years ago

Both of Pragmata (normal and mono) make Terminal.app very slow on macOS. Everything runs perfectly with SF Mono for instance, so it doesn't look like that it is a generic performance problem (I reset the Terminal to be sure) Strangely, PragmataPro Mono Bold is not affected and the Terminal runs smoothly.

Tekl commented 7 years ago

I can confirm that PragmataPro slows down the frame rate of scrolling. In my case it helped to use the PragmataPro Mono without ligatures.

fabrizioschiavi commented 7 years ago

Thanks @Tekl and @cedeber to let me know it. I'm almost sure that this is caused by the high number of glyphs of PragmataPro (9000 vs. ≈300 of the usual monospaced). The solution is to create a light weight version with ligatures. To do this I need to know which are the essential Unicode sets for you. Could you help me in this choice?

graycrow commented 6 years ago

I have exactly the same issue. Especially the apps using ncurses library are extremely slow. To answer your question, I can not speak for everyone of course, but for me it would be acceptable if light version will include Basic Latin, Latin-1 Supplement, Latin Extended-A, Cyrillic and Box Drawing.

andreypopp commented 6 years ago

Can confirm, the slowdown is even more noticable when inside tmux.

chauncey-garrett commented 6 years ago

I use tmux as well and it's absolutely unusable with PragmataPro in Terminal.app. PragmataPro Essential works fine.

@fabrizioschiavi I think if you were to make a subset similar to Fura Code Powerline (basically, FiraCode with Nerd Fonts -- https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts/FiraCode) that it work better. I've been using Fura Code without problems for a while now.

Porges commented 6 years ago

I've also noticed that it's really slow in notepad. I don't remember it being this bad in the past, though, so maybe there's something that can be fixed? It seems to be fine in Visual Studio or gVim...

mengelbrecht commented 6 years ago

Like @Tekl I noticed that using PragmataPro Mono without ligatures is much faster than using the other variants.

railwaycat commented 6 years ago

Same case for me. I notice that iTerm handles it a bit better, but can still feel a lag comparing with other fonts like SF Mono.

Even with PragmataPro Mono without ligatures, when scrolling fast (for example compiling with tons output lines or keep scrolling a large text file), the slow/lag appears.

A PragmataPro lite would a great idea!

andreypopp commented 6 years ago

fwiw I've switched to alacritty which is super fast. It doesn't support ligatures but PragmataPro is great even without them.

fabrizioschiavi commented 6 years ago

I decided to release a new Essential PragmataPro version in order to fix this issue. Could you help me to find the very essential Unicode ranges and OpenType features, please? https://www.fsd.it/2018/06/01/essential-pragmatapro-survey/

andreypopp commented 6 years ago

After Alacritty I've tried Kitty and settled with it — it supports ligatures and performs very well even with such big fonts as PragmataPro.

Screenshot:

plain-light
jordwalke commented 6 years ago

I can confirm Kitty is super fast with PP. MacVim chokes on the number of glyphs I believe (even without ligatures, but especially with ligatures).

carloscabanero commented 6 years ago

My 2 cents as I would love to see this fixed too. Within Blink PP flies, but the liga is definitely slower. In our case you only notice it when loading or resizing, scroll is ok and cat large files is good too, but if you are used to the non-liga will notice the difference.

Just filled out the survey, but let me know if you would like us to help you test anything, we may have better control of the rendering.

fabrizioschiavi commented 6 years ago

Thanks friends! I have a suspect now: probably 'CALT' Open Type feature is the very guilty of this issue. Probably OpenType experts like @tphinney @schriftgestalt @arialcrime @FontBoss @LettError can help

LettError commented 6 years ago

Make simpler fonts?

schriftgestalt commented 6 years ago

I don’t think that the number of characters is to blame. Have you tried to remove all OpenType features? Then add them piece by piece and see then it becomes slow again.

fabrizioschiavi commented 6 years ago

Good suggestion! Thanks Georg!

pkazmier commented 6 years ago

I, too, can vouch for Kitty with Pragmata Pro - works great!

@andreypopp off-topic, but what nvim theme are you using? Although I've always preferred a dark theme, your screenshot has intrigued me. It looks super clean with Pragmata Pro and its lovely bold font.

dop commented 6 years ago

Having the same issue here, Terminal.app is unusable.

stefanfrede commented 6 years ago

I too have the problem with the Terminal.app, and I think that switching the editor can't be the solution.

fabrizioschiavi commented 6 years ago

@LettError I just tried to remove 4000 glyphs but nothing changed. I suspect that the number of glyphs aren’t the cause. Probably some hide and untouchable glyph for Terminal?

LettError commented 6 years ago

¯_(ツ)_/¯

Erik

On 16 Jul 2018, at 09:34, Fabrizio Schiavi notifications@github.com wrote:

@LettError I just tried to remove 4000 glyphs but nothing changed. I suspect that the number of glyphs aren’t the cause. Probably some hide and untouchable glyph for Terminal?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

tuscland commented 6 years ago

@fabrizioschiavi I noticed something recently. On macOS, if you disable subpixel font rendering, Terminal becomes smooth and fast again. (In System Preferences / General, disable "Use LCD font smoothing when available.)

FYI, macOS Mojave might not have subpixel rendering anymore.

fabrizioschiavi commented 6 years ago

Thanks @tuscland for letting me know this! Anyway don’t worry because with the great help of @kelas the next release will be 10x faster!

kelas commented 6 years ago

Hello everybody,

I'm helping out @fabrizioschiavi with profiling and optimisations for the upcoming version of calt feature. Could someone please share a set of practical steps to reproduce an "unusable" Terminal.app on your system, using 826 Regular with ligatures enabled and empty scroll buffer? Please include your macOS version, font and window sizes, full content of the screen buffer and your system-wide sub-pixel setting.

This would be of immense help!

k.

cedeber commented 6 years ago

Hi. I notice no differences with or without subpixel optimization. I did a copy of the default "Pro" theme and changed the font to Pragmata. I am using macOS 10.13.6 on a MacBook Pro 13" end 2013. The performance issue is visible after a few ls. I've got nothing special into the folder.

tuscland commented 6 years ago

Hi @cedeber, You are right. I suppose I got fooled by the fact I have two terminals running here with lots of data but for some reason there's no slowdown at all. I incorrectly inferred that my recent change to subpixel rendering was the reason it was smooth. Sorry for the noise...

kelas commented 6 years ago

@cedeber @tuscland Just trying to make sure I'm getting this right. In the simplest possible example, 0.826 Regular gives you a clearly noticeable lag while typing a series of 1 into a fresh blank terminal window, can you confirm that?

tuscland commented 6 years ago

HI @kelas, Unfortunately I am unable to confirm this. Do you use a custom prompt?

kelas commented 6 years ago

@tuscland Yes — I tried a few exotic PS1 prompts, including powerline and powerline-go. Altogether, I tested Terminal.app with 0.826R on three generations of Macs and should be safe to say I can't reproduce the problem, even remotely. iTerm2 also doesn't show any noticeable slowdown, with or without ligatures.

Good news is that the upcoming ligature substitution table routinely outperforms 0.826 by 10-20x depending on text layout engine in use and the actual input stream.

I might add, it is well-known that Terminal.app is using some pretty shady internal mechanisms to achieve acceptable scroll performance. As it happens, under certain conditions exotic designs can often produce the opposite effect. See https://news.ycombinator.com/item?id=14798211

stefanfrede commented 6 years ago

I just gave Pragmata Pro 0.826 another try and the performance issues are still unbearable.

Here is what I did:

Here are my specs:

kelas commented 6 years ago

@stefanfrede I must admit, this one beats me completely. @fabrizioschiavi, it would be great to ask @stefanfrede to test 0.827 beta on his system, at least to narrow it down? Although I am pretty sure ligatures are not the culprit.

kelas commented 6 years ago

@stefanfrede Although one can never be sure when it comes to Apple software, there is a good indication that Terminal.app is still using Core Text to render glyphs. CT is a native macOS API, which makes me believe Pragmata would be showing same effect everywhere on your system. Like, TextEdit, maybe?

stefanfrede commented 6 years ago

I just gave TextEdit a shot and there is seems to work fine.

kelas commented 6 years ago

@stefanfrede I think you pointed me in the right direction.

I was just able to reproduce a dramatic frame drop in Terminal.app, under zsh with the following input stream:

image

kelas commented 6 years ago

The scroll lags terribly over this area, and then resumes smooth operation.

The worst thing about it is that when I paste this buffer into a fresh Terminal window, the scroll works perfectly fine although optically it is identical to the broken window.

kelas commented 6 years ago

@fabrizioschiavi I'm inclined to give up on this one. Exactly the kind of issue your local Apple Genius is guaranteed to scratch his head about :)

iTerm is free and open source. As in "makes it possible to check the code and figure out what's going on."

kelas commented 6 years ago

The only thing I can confirm with certainty is that the scroll issue has nothing to do with ligatures — it keeps occurring even with all OpenType features physically removed from Pragmata's font file.

My best guess is that upon discovery of 🍺 or similar nonsense in the input, Terminal is looking something up in Pragmata's supplementary Unicode planes. And it seems to be doing that every time you scroll over, which really makes one wonder about this otherwise formidable piece of software.

tuscland commented 6 years ago

Could this also be when bold variants are displayed? I had the impression that mixed fonts could be what was triggering the slowness.

kelas commented 6 years ago

@tuscland I'm having the problem with brew output without additional faces installed. I only have the bare Regular without ligatures. Also, I think Bold is only a couple of thousand glyphs, opposed to ~9,000 in Regular.

The answer to this is to ask @fabrizioschiavi to modularise the font, or switch to a decent terminal emulator, of those there is no shortage.

carloscabanero commented 6 years ago

Wanna give my 2c in case it helps as it may be another clue.

Within Blink, Pragmata with and without ligatures is almost same speed (cat big files, etc...). When it lags more noticeably is when performing a zoom. Blink calculates the new width of the characters and that seems to be the operation that drives it crazy in the ligatures case. Maybe @yury has more insights on this. There may be nothing on screen when we perform this, just the "blink>" prompt.

If it is helpful and you know what you want to try, we may be able to tweak on typekit faster to see if we can disable some characters or anything and see where it goes nuts.

kelas commented 6 years ago

@carloscabanero What is likely happening on font size change is Blink re-rasterizing its glyph atlas, which is a very expensive operation indeed but has absolutely nothing to do with ligatures. In this case, ligature is simply another glyph to be re-rendered. What is usually happening after atlas resize is text reflow, which is where ligature substitution would have some performance impact but it is absolutely negligible unless you are re-flowing a few megabytes of text.

Poor font resize implementations are not uncommon. Sublime Text, for example (an absolutely amazing piece of machinery otherwise) can easily jam for 10-15 seconds if you hit Cmd+equal a few times in a row with a reasonably big document open.

Sublime's excuse is that they chose to implement their own layout engine and rasteriser, which are not perfect but do the job. This is precisely why Sublime usually lags two years behind the competition on things like ligature support, for example.

On the other hand, Sublime Text is pretty much THE golden reference all Atoms and VSCodes of this world are looking up to.

carloscabanero commented 6 years ago

@kelas why do you think it takes longer to reraster the glyph atlas in the ligature font case? Larger amount of glyphs?

schriftgestalt commented 6 years ago

What I do in cases like this is to remove stuff from the font until the issue is fixed. Then add different pieces back to see when the issue reappears.

So:

And so on. That way I usually have the culprit in 10-20 min.

kelas commented 6 years ago

@schriftgestalt Thanks — that's pretty much exactly what we've done here so far. This is called binary search, and it is known to work really well :)

The problem is that Terminal.app is producing absolutely disastrous results for some people, and the lucky ones can hardly reproduce anything at all.

kelas commented 6 years ago

@carloscabanero It all depends on the specific strategy of glyph atlas maintenance. I can easily imagine there is someone out there re-rasterizing ALL glyphs in the font at once, which is what they probably consider good enough for "most fonts out there" (although I'm really hoping nobody is doing something like that). But regardless, Pragmata Pro is a clear edge case, and it tests the limits of most editors and terminal emulators it is used with like nothing else.

cedeber commented 6 years ago

I just had a crazy idea and thought about why not test zsh instead of sh. So, I did it and I had a strange behavior: Different scroll performance depending on what shown on the screen. I did a copy of the Pro theme.

This is the console log:

Last login: Mon Aug 13 23:31:29 on ttys002
MacBook-Pro-de-Cedric:~ cedeber$ zsh
[Oh My Zsh] Would you like to check for updates? [Y/n]: Y
Updating Oh My Zsh
remote: Counting objects: 1575, done.
remote: Compressing objects: 100% (786/786), done.
remote: Total 1575 (delta 842), reused 1398 (delta 689), pack-reused 0
Receiving objects: 100% (1575/1575), 364.34 KiB | 585.00 KiB/s, done.
Resolving deltas: 100% (842/842), completed with 186 local objects.
From https://github.com/robbyrussell/oh-my-zsh
 * branch              master     -> FETCH_HEAD
   d848c948..af1709cf  master     -> origin/master
Updating d848c948..af1709cf
Fast-forward
 LICENSE.txt                                             |    2 +-
 README.md                                               |   51 +-
 custom/themes/example.zsh-theme                         |    4 +
 lib/compfix.zsh                                         |   44 +-
 lib/completion.zsh                                      |    3 +
 lib/correction.zsh                                      |    1 +
 lib/directories.zsh                                     |    4 -
 lib/functions.zsh                                       |   18 +-
 lib/git.zsh                                             |   14 +-
 lib/history.zsh                                         |   56 +-
 lib/spectrum.zsh                                        |    2 +-
 lib/termsupport.zsh                                     |    2 +-
 oh-my-zsh.sh                                            |   40 +-
 plugins/adb/README.md                                   |    2 +-
 plugins/adb/_adb                                        |   11 +-
 plugins/archlinux/README.md                             |   33 +-
 plugins/archlinux/archlinux.plugin.zsh                  |   70 +-
 plugins/asdf/asdf.plugin.zsh                            |   18 +-
 plugins/autojump/autojump.plugin.zsh                    |    6 +-
 plugins/aws/aws.plugin.zsh                              |   30 +-
 plugins/bbedit/README.md                                |    6 +-
 plugins/bgnotify/README.md                              |    4 +-
 plugins/bundler/README.md                               |    6 +-
 plugins/bundler/bundler.plugin.zsh                      |    7 +-
 plugins/bwana/bwana.plugin.zsh                          |    4 +-
 plugins/cargo/_cargo                                    |    5 +-
 plugins/catimg/catimg.plugin.zsh                        |    2 +-
 plugins/catimg/catimg.sh                                |    2 +-
 plugins/chruby/chruby.plugin.zsh                        |   22 +-
 plugins/chucknorris/LICENSE                             |    2 -
 plugins/chucknorris/fortunes/chucknorris                | 2545 ++++++++++++++++++++++++++++++++++++++---------
 plugins/coffee/_coffee                                  |    4 +-
 plugins/colored-man-pages/colored-man-pages.plugin.zsh  |    2 +-
 plugins/colorize/colorize.plugin.zsh                    |    5 +-
 plugins/command-not-found/command-not-found.plugin.zsh  |    2 +-
 plugins/common-aliases/common-aliases.plugin.zsh        |    4 +-
 plugins/composer/composer.plugin.zsh                    |    2 +-
 plugins/copydir/README.md                               |   10 +
 plugins/copyfile/README.md                              |   10 +
 plugins/dash/dash.plugin.zsh                            |   86 ++
 plugins/debian/debian.plugin.zsh                        |   11 +-
 plugins/dirhistory/dirhistory.plugin.zsh                |   57 ++
 plugins/django/django.plugin.zsh                        |    1 +
 plugins/docker-compose/_docker-compose                  |   38 +-
 plugins/docker-compose/docker-compose.plugin.zsh        |    2 +
 plugins/docker-machine/README.md                        |   19 +
 plugins/docker-machine/_docker-machine                  |  359 +++++++
 plugins/docker-machine/docker-machine.plugin.zsh        |   33 +
 plugins/docker/README.md                                |    2 +-
 plugins/docker/_docker                                  |  500 +++++++---
 plugins/doctl/doctl.plugin.zsh                          |    9 +
 plugins/dotenv/README.md                                |   19 +-
 plugins/dotenv/dotenv.plugin.zsh                        |   15 +-
 plugins/droplr/README.md                                |    2 +-
 plugins/eecms/eecms.plugin.zsh                          |   20 +
 plugins/emacs/emacs.plugin.zsh                          |    2 +-
 plugins/ember-cli/README.md                             |    4 +-
 plugins/ember-cli/ember-cli.plugin.zsh                  |    2 +-
 plugins/emoji/README.md                                 |    6 +-
 plugins/emoji/emoji-data.txt                            |    4 +-
 plugins/emoji/update_emoji.pl                           |   12 +-
 plugins/emotty/emotty.plugin.zsh                        |    5 +-
 plugins/extract/_extract                                |    2 +-
 plugins/extract/extract.plugin.zsh                      |    8 +-
 plugins/fasd/fasd.plugin.zsh                            |    2 +-
 plugins/fedora/README.md                                |    3 -
 plugins/fedora/fedora.plugin.zsh                        |   17 +-
 plugins/forklift/README.md                              |    2 +-
 plugins/forklift/forklift.plugin.zsh                    |  100 +-
 plugins/frontend-search/README.md                       |   12 +-
 plugins/frontend-search/frontend-search.plugin.zsh      |   10 +-
 plugins/geeknote/README.md                              |    2 +-
 plugins/git-extras/README.md                            |    2 +-
 plugins/git-extras/git-extras.plugin.zsh                |    6 +-
 plugins/git-flow-avh/git-flow-avh.plugin.zsh            |  823 ++++++++-------
 plugins/git-flow/git-flow.plugin.zsh                    |    4 +
 plugins/git-hubflow/git-hubflow.plugin.zsh              |    2 +-
 plugins/git-prompt/git-prompt.plugin.zsh                |    2 +-
 plugins/git-prompt/gitstatus.py                         |    4 +-
 plugins/git/git.plugin.zsh                              |   19 +-
 plugins/github/README.md                                |    6 +-
 plugins/github/_hub                                     |    2 +
 plugins/github/github.plugin.zsh                        |   10 +-
 plugins/gitignore/gitignore.plugin.zsh                  |    4 +-
 plugins/globalias/README.md                             |    2 +-
 plugins/golang/golang.plugin.zsh                        |    4 +-
 plugins/gpg-agent/gpg-agent.plugin.zsh                  |   49 +-
 plugins/gradle/gradle.plugin.zsh                        |    6 +-
 plugins/hanami/README.md                                |   32 +
 plugins/hanami/hanami.plugin.zsh                        |   19 +
 plugins/helm/helm.plugin.zsh                            |    7 +
 plugins/heroku/_heroku                                  |  151 ---
 plugins/heroku/heroku.plugin.zsh                        |    9 +
 plugins/history-substring-search/README.md              |    6 +-
 plugins/homestead/homestead.plugin.zsh                  |   10 +
 plugins/httpie/README.md                                |    4 +-
 plugins/iterm2/iterm2.plugin.zsh                        |   68 ++
 plugins/jake-node/jake-node.plugin.zsh                  |    4 +-
 plugins/jira/README.md                                  |    1 +
 plugins/jira/_jira                                      |    1 +
 plugins/jira/jira.plugin.zsh                            |   26 +-
 plugins/kitchen/_kitchen                                |    4 +-
 plugins/kops/kops.plugin.zsh                            |    9 +
 plugins/kube-ps1/README.md                              |   81 ++
 plugins/kube-ps1/kube-ps1.plugin.zsh                    |  147 +++
 plugins/kubectl/kubectl.plugin.zsh                      |   69 +-
 plugins/laravel5/laravel5.plugin.zsh                    |    2 +-
 plugins/last-working-dir/last-working-dir.plugin.zsh    |    6 +-
 plugins/lein/_lein                                      |   69 ++
 plugins/lein/lein.plugin.zsh                            |   43 -
 plugins/lighthouse/lighthouse.plugin.zsh                |    2 +-
 plugins/lol/lol.plugin.zsh                              |    3 +-
 plugins/magic-enter/Readme.md                           |   14 +
 plugins/magic-enter/magic-enter.plugin.zsh              |   24 +
 plugins/meteor/_meteor                                  |   47 +-
 plugins/minikube/minikube.plugin.zsh                    |    6 +
 plugins/mix-fast/README.md                              |    4 +-
 plugins/mix-fast/mix-fast.plugin.zsh                    |    2 +-
 plugins/mix/_mix                                        |   30 +-
 plugins/mvn/README.md                                   |    1 +
 plugins/mvn/mvn.plugin.zsh                              |  162 ++-
 plugins/nmap/nmap.plugin.zsh                            |   14 +-
 plugins/npm/README.md                                   |   26 +
 plugins/npm/npm.plugin.zsh                              |   13 +-
 plugins/npx/README.md                                   |   31 +
 plugins/npx/npx.plugin.zsh                              |    7 +
 plugins/nvm/_nvm                                        |   19 +-
 plugins/oc/oc.plugin.zsh                                |    7 +
 plugins/osx/README.md                                   |   27 +
 plugins/osx/osx.plugin.zsh                              |  269 +----
 plugins/osx/spotify                                     |  438 ++++++++
 plugins/pass/_pass                                      |   17 +-
 plugins/per-directory-history/README.md                 |   24 +-
 plugins/per-directory-history/per-directory-history.zsh |    2 +-
 plugins/percol/README.md                                |   20 +
 plugins/percol/percol.plugin.zsh                        |   22 +
 plugins/perl/perl.plugin.zsh                            |    2 +-
 plugins/perms/README.md                                 |    6 +-
 plugins/perms/perms.plugin.zsh                          |    8 +-
 plugins/pip/_pip                                        |    1 +
 plugins/pod/_pod                                        |    2 +-
 plugins/pow/pow.plugin.zsh                              |    2 +-
 plugins/pyenv/pyenv.plugin.zsh                          |   60 +-
 plugins/python/_python                                  |   54 -
 plugins/rails/_rails                                    |    3 +
 plugins/rails/rails.plugin.zsh                          |    8 +-
 plugins/rake-fast/README.md                             |    2 +-
 plugins/rand-quote/README.md                            |   15 +
 plugins/rand-quote/rand-quote.plugin.zsh                |   36 +-
 plugins/rbenv/rbenv.plugin.zsh                          |    3 +
 plugins/repo/README.md                                  |    2 +-
 plugins/ruby/ruby.plugin.zsh                            |    8 +
 plugins/rust/_rust                                      |   67 +-
 plugins/safe-paste/safe-paste.plugin.zsh                |    4 +-
 plugins/sbt/_sbt                                        |    1 +
 plugins/sbt/sbt.plugin.zsh                              |    1 +
 plugins/scala/_scala                                    |    4 +-
 plugins/scd/README.md                                   |    4 +-
 plugins/scw/_scw                                        |    2 +-
 plugins/shrink-path/README.md                           |    6 +-
 plugins/shrink-path/shrink-path.plugin.zsh              |   17 +-
 plugins/spring/README.md                                |   10 +-
 plugins/sprunge/sprunge.plugin.zsh                      |   22 +-
 plugins/ssh-agent/README.md                             |    4 +-
 plugins/ssh-agent/ssh-agent.plugin.zsh                  |    7 +-
 plugins/sublime/README.md                               |    6 +-
 plugins/sublime/sublime.plugin.zsh                      |   48 +-
 plugins/svn/README.md                                   |    2 +-
 plugins/swiftpm/_swift                                  |  362 +++++++
 plugins/symfony2/symfony2.plugin.zsh                    |    2 +
 plugins/systemadmin/systemadmin.plugin.zsh              |    1 -
 plugins/taskwarrior/README.md                           |    2 +-
 plugins/taskwarrior/_task                               |    2 +-
 plugins/terraform/README.md                             |   14 +-
 plugins/terraform/_terraform                            |  190 +++-
 plugins/terraform/terraform.plugin.zsh                  |    7 +
 plugins/textastic/README.md                             |    4 +-
 plugins/thefuck/thefuck.plugin.zsh                      |    5 +-
 plugins/tmux/tmux.plugin.zsh                            |  153 ++-
 plugins/tmuxinator/_tmuxinator                          |   55 +-
 plugins/tmuxinator/tmuxinator.plugin.zsh                |    5 +
 plugins/transfer/README.md                              |   24 +
 plugins/transfer/transfer.plugin.zsh                    |   67 ++
 plugins/ubuntu/readme.md                                |    2 +-
 plugins/ubuntu/ubuntu.plugin.zsh                        |   79 +-
 plugins/ufw/_ufw                                        |  115 +++
 plugins/urltools/urltools.plugin.zsh                    |    2 +-
 plugins/vagrant-prompt/README.md                        |    6 +
 plugins/vagrant-prompt/vagrant-prompt.plugin.zsh        |   38 +
 plugins/vagrant/_vagrant                                |    4 +-
 plugins/vault/README.md                                 |    8 +-
 plugins/vim-interaction/vim-interaction.plugin.zsh      |   10 +-
 plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh  |   18 +-
 plugins/vscode/README.md                                |   38 +
 plugins/vscode/vscode.plugin.zsh                        |   19 +
 plugins/vundle/vundle.plugin.zsh                        |    2 +-
 plugins/wd/README.md                                    |   23 +-
 plugins/wd/_wd.sh                                       |   21 +-
 plugins/wd/wd.sh                                        |   71 +-
 plugins/web-search/web-search.plugin.zsh                |    2 +
 plugins/wp-cli/README.md                                |    8 +-
 plugins/wp-cli/wp-cli.plugin.zsh                        |    2 +-
 plugins/xcode/README.md                                 |    6 +-
 plugins/xcode/xcode.plugin.zsh                          |   22 +-
 plugins/yarn/README.md                                  |   33 +
 plugins/yarn/_yarn                                      |  345 +++++++
 plugins/yarn/yarn.plugin.zsh                            |   99 +-
 plugins/z/z.1                                           |    6 +-
 plugins/z/z.sh                                          |   75 +-
 plugins/zeus/_zeus                                      |  110 +-
 plugins/zsh-navigation-tools/LICENSE                    |    8 +-
 plugins/zsh_reload/README.md                            |   23 +
 plugins/zsh_reload/zsh_reload.plugin.zsh                |   19 +-
 templates/zshrc.zsh-template                            |   16 +-
 themes/adben.zsh-theme                                  |    6 +-
 themes/agnoster.zsh-theme                               |    6 +-
 themes/arrow.zsh-theme                                  |    2 +-
 themes/avit.zsh-theme                                   |    6 +-
 themes/bira.zsh-theme                                   |    2 +-
 themes/clean.zsh-theme                                  |    2 +-
 themes/cloud.zsh-theme                                  |    4 +-
 themes/duellj.zsh-theme                                 |    2 +-
 themes/emotty.zsh-theme                                 |    4 +
 themes/example.zsh-theme                                |    5 -
 themes/funky.zsh-theme                                  |    4 +-
 themes/gallifrey.zsh-theme                              |    2 +-
 themes/gnzh.zsh-theme                                   |    1 -
 themes/half-life.zsh-theme                              |    6 +-
 themes/itchy.zsh-theme                                  |    2 -
 themes/jreese.zsh-theme                                 |    2 -
 themes/lambda.zsh-theme                                 |    2 -
 themes/lukerandall.zsh-theme                            |    2 +-
 themes/macovsky-ruby.zsh-theme                          |    2 +-
 themes/macovsky.zsh-theme                               |    2 +-
 themes/mh.zsh-theme                                     |    4 +-
 themes/michelebologna.zsh-theme                         |   10 +-
 themes/mikeh.zsh-theme                                  |    4 +-
 themes/mortalscumbag.zsh-theme                          |    6 +
 themes/philips.zsh-theme                                |    2 +-
 themes/pmcgee.zsh-theme                                 |    2 +-
 themes/rkj-repos.zsh-theme                              |    7 +-
 themes/rkj.zsh-theme                                    |    2 +-
 themes/simple.zsh-theme                                 |    2 +-
 themes/sorin.zsh-theme                                  |    8 +-
 themes/sporty_256.zsh-theme                             |    2 +-
 themes/steeef.zsh-theme                                 |    9 +-
 themes/sunaku.zsh-theme                                 |    1 -
 themes/tonotdo.zsh-theme                                |    4 +-
 themes/xiong-chiamiov-plus.zsh-theme                    |    2 +-
 themes/xiong-chiamiov.zsh-theme                         |    2 +-
 tools/check_for_upgrade.sh                              |   10 +-
 tools/install.sh                                        |   16 +-
 tools/theme_chooser.sh                                  |    2 +-
 tools/upgrade.sh                                        |    2 +-
 254 files changed, 7566 insertions(+), 2500 deletions(-)
 create mode 100644 custom/themes/example.zsh-theme
 delete mode 100644 plugins/chucknorris/LICENSE
 create mode 100644 plugins/copydir/README.md
 create mode 100644 plugins/copyfile/README.md
 create mode 100644 plugins/dash/dash.plugin.zsh
 create mode 100644 plugins/docker-machine/README.md
 create mode 100644 plugins/docker-machine/_docker-machine
 create mode 100644 plugins/docker-machine/docker-machine.plugin.zsh
 create mode 100644 plugins/doctl/doctl.plugin.zsh
 create mode 100644 plugins/eecms/eecms.plugin.zsh
 delete mode 100644 plugins/fedora/README.md
 mode change 100644 => 120000 plugins/fedora/fedora.plugin.zsh
 mode change 100644 => 100755 plugins/git-flow-avh/git-flow-avh.plugin.zsh
 create mode 100644 plugins/hanami/README.md
 create mode 100644 plugins/hanami/hanami.plugin.zsh
 create mode 100644 plugins/helm/helm.plugin.zsh
 delete mode 100644 plugins/heroku/_heroku
 create mode 100644 plugins/heroku/heroku.plugin.zsh
 create mode 100644 plugins/homestead/homestead.plugin.zsh
 create mode 100644 plugins/iterm2/iterm2.plugin.zsh
 create mode 100644 plugins/kops/kops.plugin.zsh
 create mode 100644 plugins/kube-ps1/README.md
 create mode 100644 plugins/kube-ps1/kube-ps1.plugin.zsh
 create mode 100644 plugins/lein/_lein
 delete mode 100644 plugins/lein/lein.plugin.zsh
 create mode 100644 plugins/magic-enter/Readme.md
 create mode 100644 plugins/magic-enter/magic-enter.plugin.zsh
 create mode 100644 plugins/minikube/minikube.plugin.zsh
 create mode 100644 plugins/npm/README.md
 create mode 100644 plugins/npx/README.md
 create mode 100644 plugins/npx/npx.plugin.zsh
 create mode 100644 plugins/oc/oc.plugin.zsh
 create mode 100644 plugins/osx/spotify
 create mode 100644 plugins/percol/README.md
 create mode 100644 plugins/percol/percol.plugin.zsh
 delete mode 100644 plugins/python/_python
 create mode 100644 plugins/rand-quote/README.md
 create mode 100644 plugins/swiftpm/_swift
 create mode 100644 plugins/terraform/terraform.plugin.zsh
 create mode 100644 plugins/tmuxinator/tmuxinator.plugin.zsh
 create mode 100644 plugins/transfer/README.md
 create mode 100644 plugins/transfer/transfer.plugin.zsh
 create mode 100644 plugins/ufw/_ufw
 create mode 100644 plugins/vagrant-prompt/README.md
 create mode 100644 plugins/vagrant-prompt/vagrant-prompt.plugin.zsh
 create mode 100644 plugins/vscode/README.md
 create mode 100644 plugins/vscode/vscode.plugin.zsh
 create mode 100644 plugins/yarn/README.md
 create mode 100644 plugins/yarn/_yarn
 create mode 100644 plugins/zsh_reload/README.md
 delete mode 100644 themes/example.zsh-theme
Current branch master is up to date.
         __                                     __   
  ____  / /_     ____ ___  __  __   ____  _____/ /_  
 / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \ 
/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / / 
\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/  
                        /____/                       
Hooray! Oh My Zsh has been updated and/or is at the current version.
To keep up on the latest news and updates, follow us on twitter: https://twitter.com/ohmyzsh
Get your Oh My Zsh swag at:  http://shop.planetargon.com/

 23:32:03  ~ 
$ ls
Applications                 Luniitheque                  Sites
Desktop                      Movies                       Snapshots
Documents                    Music                        cedeber.hvault
Downloads                    Pictures                     certbot.log
Library                      Public                       safari_custom_stylesheet.css

 23:32:05  ~ 
$ ls
Applications                 Luniitheque                  Sites
Desktop                      Movies                       Snapshots
Documents                    Music                        cedeber.hvault
Downloads                    Pictures                     certbot.log
Library                      Public                       safari_custom_stylesheet.css

 23:32:06  ~ 
$ ls
Applications                 Luniitheque                  Sites
Desktop                      Movies                       Snapshots
Documents                    Music                        cedeber.hvault
Downloads                    Pictures                     certbot.log
Library                      Public                       safari_custom_stylesheet.css

 23:32:07  ~ 
$ ls
Applications                 Luniitheque                  Sites
Desktop                      Movies                       Snapshots
Documents                    Music                        cedeber.hvault
Downloads                    Pictures                     certbot.log
Library                      Public                       safari_custom_stylesheet.css

 23:32:08  ~ 
$ 

I don't know if it can help, I don't find any logic here except the amount of space char 🤔

kelas commented 6 years ago

@cedeber Totally agree, there is no rhyme or reason to any of this :) I am also getting very bizarre behaviour (see 🍺report above).

However, looking at your scroll buffer... Could you do me a favour and temporarily kill your $PS1 provider script, then restart Terminal and test from scratch?

I get a feeling Terminal chokes on non-BMP code points.

kelas commented 6 years ago

So basically these are not your friends:

image

kelas commented 6 years ago

@carloscabanero Staying on the subject of terminal emulators, here's a good example what not to do in terms of GPU-side glyph cache management. Although it is designed to make an optical appearance of instant font resizing, Pragmata Pro is the ideal litmus paper to test some interesting assumptions people make when they think about typefaces. Try pasting Pragmata_Pro_All_chars.txt into Kitty's buffer, then change the font size and scroll around a bit.

I guess my point is that it is not always immediately clear what exactly goes "nuts" — the font, or the software that is trying to put it on screen. In case of Terminal.app it is clearly the latter. Not sure about Blink, but happy to discuss.

To the next aspiring engineer working on the next VT100 emulator, I highly recommend using only Pragmata font during the development — not only for his code editor, but also for testing the software :)