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

Speed up git-info #221

Closed
paulmillr opened this Issue Jul 22, 2012 · 34 comments

Comments

Projects
None yet
7 participants
@paulmillr

So, git-info is currently about 408 lines long, but many themes don't need all stuff it does.

Actually I don't mind about everything there, but the reason I created this issue is its speed. It's freaking slow.

How about adding light-git-info that will only do: git symbolic-ref HEAD 2> /dev/null (get current branch)?

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Jul 22, 2012

Owner

'Freaking slow' doesn't help me make it faster. vcs_info is even larger.

Owner

sorin-ionescu commented Jul 22, 2012

'Freaking slow' doesn't help me make it faster. vcs_info is even larger.

@paulmillr

This comment has been minimized.

Show comment
Hide comment
@paulmillr

paulmillr Jul 23, 2012

Right, but I do not think profiling will help much. It just seems logical. When your machine constantly does IO and you have HDD instead of SSD, doing one IO command will be faster than doing 5 (10?).

also you seem made a typo in this guy's name.

Right, but I do not think profiling will help much. It just seems logical. When your machine constantly does IO and you have HDD instead of SSD, doing one IO command will be faster than doing 5 (10?).

also you seem made a typo in this guy's name.

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Jul 23, 2012

Owner

I do not have a SSD, and, for me, it's fast enough. You can execute git-info off for very large repositories.

I'm going to invite @ColinHebert into this conversation.

Owner

sorin-ionescu commented Jul 23, 2012

I do not have a SSD, and, for me, it's fast enough. You can execute git-info off for very large repositories.

I'm going to invite @ColinHebert into this conversation.

@clvv

This comment has been minimized.

Show comment
Hide comment
@clvv

clvv Jul 23, 2012

Try it on a removable usb drive. I reckon that would make a difference.

A solution is to use timeout. But of course it can only be used on one command, not the entire function. Or it maybe possible to create a timeout function to set running-time limit on a shell function. Something like this (link to my dotfile repo, implementation doesn't really work on zsh).

clvv commented Jul 23, 2012

Try it on a removable usb drive. I reckon that would make a difference.

A solution is to use timeout. But of course it can only be used on one command, not the entire function. Or it maybe possible to create a timeout function to set running-time limit on a shell function. Something like this (link to my dotfile repo, implementation doesn't really work on zsh).

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Jul 23, 2012

Owner

How does git-info compare to vcs_info? Do you consider that git-info does slightly more than vcs_info in some cases.

Owner

sorin-ionescu commented Jul 23, 2012

How does git-info compare to vcs_info? Do you consider that git-info does slightly more than vcs_info in some cases.

@benohara

This comment has been minimized.

Show comment
Hide comment
@benohara

benohara Jul 23, 2012

Contributor

Hard to explain, but it takes a second for the prompt to display compared to using vcs_info

see http://codestre.am/7668bbd5a1dcb3607ff738b09

Contributor

benohara commented Jul 23, 2012

Hard to explain, but it takes a second for the prompt to display compared to using vcs_info

see http://codestre.am/7668bbd5a1dcb3607ff738b09

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Jul 23, 2012

Owner

I wonder if vcs_info is caching. @benohara git-info is not that complicated. Don't be afraid to look it over.

Owner

sorin-ionescu commented Jul 23, 2012

I wonder if vcs_info is caching. @benohara git-info is not that complicated. Don't be afraid to look it over.

@ColinHebert

This comment has been minimized.

Show comment
Hide comment
@ColinHebert

ColinHebert Jul 23, 2012

Contributor

For @benohara, If I had to guess, I would say that it's due to git submodules, it tends to slow down git status which is the biggest call made in git-info.
You can try that theory with zstyle ':omz:module:git:ignore' submodule 'all' it should skip git status on your submodules and go way faster.


Regarding the speed of git-info itself I think it could be slightly improved by checking if the appropriate zstyle is set (zstyle -t context style [ strings ...] does that I believe).

For example, no need to run git symbolic-ref -q HEAD if you don't get the branch name or git rev-parse --symbolic-full-name --verify HEAD@{upstream} if you display nothing when the local branch isn't synchronised with the remote branch.

Those are minor improvements but should be make things slightly faster (I think).


And to answer the initial question, should we have a git-info light; I think that if you need a lighter git-info (ie. with less features) you should consider using vcs_info.

git-info is, as far as I am know, not here to be lighter or faster than vcs_info, but to add more features that you couldn't do in vcs_info without writing a terrible code (because there is not enough hooks for everything) or a slower one.

I have nothing personal against vcs_info and it works very well if you want to keep you shell simple (and you can use the same style for every VCS). The reason why I don't use it is because I work all day long with git, and I need more info than just "is the local repo dirty" and the current branch name; I think I use 90% of what is executed in git-info.

Contributor

ColinHebert commented Jul 23, 2012

For @benohara, If I had to guess, I would say that it's due to git submodules, it tends to slow down git status which is the biggest call made in git-info.
You can try that theory with zstyle ':omz:module:git:ignore' submodule 'all' it should skip git status on your submodules and go way faster.


Regarding the speed of git-info itself I think it could be slightly improved by checking if the appropriate zstyle is set (zstyle -t context style [ strings ...] does that I believe).

For example, no need to run git symbolic-ref -q HEAD if you don't get the branch name or git rev-parse --symbolic-full-name --verify HEAD@{upstream} if you display nothing when the local branch isn't synchronised with the remote branch.

Those are minor improvements but should be make things slightly faster (I think).


And to answer the initial question, should we have a git-info light; I think that if you need a lighter git-info (ie. with less features) you should consider using vcs_info.

git-info is, as far as I am know, not here to be lighter or faster than vcs_info, but to add more features that you couldn't do in vcs_info without writing a terrible code (because there is not enough hooks for everything) or a slower one.

I have nothing personal against vcs_info and it works very well if you want to keep you shell simple (and you can use the same style for every VCS). The reason why I don't use it is because I work all day long with git, and I need more info than just "is the local repo dirty" and the current branch name; I think I use 90% of what is executed in git-info.

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Jul 23, 2012

Owner

I have looked at vcs_info, more specifically VCS_INFO_get_data_git. It does not cache. It does not do anything clever to be faster. It uses git diff-index to get a few things, namely staged, non-staged, and commit in addition to the branch and action.

git-status is slow. There is no way around it as far as I know. If you do not need a lot of information, use a theme that uses vcs_info. If you want a lot of information, use a theme that uses git-info.

As @ColinHebert said, any changes that can be done to git-info are trivial and are not likely to provided a perceptible increase in speed.

Owner

sorin-ionescu commented Jul 23, 2012

I have looked at vcs_info, more specifically VCS_INFO_get_data_git. It does not cache. It does not do anything clever to be faster. It uses git diff-index to get a few things, namely staged, non-staged, and commit in addition to the branch and action.

git-status is slow. There is no way around it as far as I know. If you do not need a lot of information, use a theme that uses vcs_info. If you want a lot of information, use a theme that uses git-info.

As @ColinHebert said, any changes that can be done to git-info are trivial and are not likely to provided a perceptible increase in speed.

@pbrisbin

This comment has been minimized.

Show comment
Hide comment
@pbrisbin

pbrisbin Jul 29, 2012

For what it's worth, I have a git-info-fast in my branch. It doesn't do some of the remote lookups and runs much faster (measured subjectively of course.) than the existing git-info.

I've been meaning to do a proper pull request (for this and other things) and now that the repo's been split, hopefully that can happen soon.

If anyone's interested, it's sitting here for now.

For what it's worth, I have a git-info-fast in my branch. It doesn't do some of the remote lookups and runs much faster (measured subjectively of course.) than the existing git-info.

I've been meaning to do a proper pull request (for this and other things) and now that the repo's been split, hopefully that can happen soon.

If anyone's interested, it's sitting here for now.

@ColinHebert

This comment has been minimized.

Show comment
Hide comment
@ColinHebert

ColinHebert Jul 29, 2012

Contributor

What does git-info-fast do that couldn't be available (easily) with vcs_info?

I mean, as said in this discussion the difference between git-info and vcs_info is that one provides more information while the other has the compatibility system with every (or most of them) VCS.
It seems to me (correct me if I'm wrong) that git-info-fast provides the same amount of details as vcs_info while not being compatible with other VCS systems like git-info.

Not that what you did isn't efficient or useful, but how does this solution compare to the two existing solutions already used by OMZ users?

Contributor

ColinHebert commented Jul 29, 2012

What does git-info-fast do that couldn't be available (easily) with vcs_info?

I mean, as said in this discussion the difference between git-info and vcs_info is that one provides more information while the other has the compatibility system with every (or most of them) VCS.
It seems to me (correct me if I'm wrong) that git-info-fast provides the same amount of details as vcs_info while not being compatible with other VCS systems like git-info.

Not that what you did isn't efficient or useful, but how does this solution compare to the two existing solutions already used by OMZ users?

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Jul 29, 2012

Owner

@pbrisbin I am not merging that. Other than what @ColinHebert said, it's broken, especially the way it checks if you are inside of a repository.

I am open to making git-info faster without removing functionality, perhaps by using different low level git executables, such as git-diff-index.

Owner

sorin-ionescu commented Jul 29, 2012

@pbrisbin I am not merging that. Other than what @ColinHebert said, it's broken, especially the way it checks if you are inside of a repository.

I am open to making git-info faster without removing functionality, perhaps by using different low level git executables, such as git-diff-index.

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Sep 30, 2012

Owner

Is there a Git daemon that uses inotify (Linux), FSEvents (Mac OS X), kqueue (Mac OS X, BSD), ReadDirectoryChangesW (Windows) to always be up to date on work tree changes in order for git status to run instantly by not having to walk said tree?

Should we cache git status then use a directory change notification library to update the changed file counts for added, modified, removed, renamed, and so on?

Owner

sorin-ionescu commented Sep 30, 2012

Is there a Git daemon that uses inotify (Linux), FSEvents (Mac OS X), kqueue (Mac OS X, BSD), ReadDirectoryChangesW (Windows) to always be up to date on work tree changes in order for git status to run instantly by not having to walk said tree?

Should we cache git status then use a directory change notification library to update the changed file counts for added, modified, removed, renamed, and so on?

@paulmillr

This comment has been minimized.

Show comment
Hide comment

@sorin-ionescu awesome idea, 👍

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Sep 30, 2012

Owner

@paulmillr Someone else has had the same idea: inotify daemon speedup for git. Unfortunately, it was not successful.

Owner

sorin-ionescu commented Sep 30, 2012

@paulmillr Someone else has had the same idea: inotify daemon speedup for git. Unfortunately, it was not successful.

@sorin-ionescu sorin-ionescu reopened this Oct 2, 2012

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Oct 2, 2012

Owner

So, who wants to extend kqwait to attempt caching + file system notifications? You cannot expect me to everything?

Owner

sorin-ionescu commented Oct 2, 2012

So, who wants to extend kqwait to attempt caching + file system notifications? You cannot expect me to everything?

@ColinHebert

This comment has been minimized.

Show comment
Hide comment
@ColinHebert

ColinHebert Oct 2, 2012

Contributor

I'm not really fond of having that inside Prezto. If anything was done I would prefer to see an extension of git itself speeding up the git status, I'm not sure I'm comfortable with having my shell spawning daemons in every git repo I own and caching things weirdly.

I would be all for a new project to replace git status or enhance it. (As I'm trying to play with ruby on my weekends I might try that actually, but it's for fun, don't expect anything)

Contributor

ColinHebert commented Oct 2, 2012

I'm not really fond of having that inside Prezto. If anything was done I would prefer to see an extension of git itself speeding up the git status, I'm not sure I'm comfortable with having my shell spawning daemons in every git repo I own and caching things weirdly.

I would be all for a new project to replace git status or enhance it. (As I'm trying to play with ruby on my weekends I might try that actually, but it's for fun, don't expect anything)

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Oct 2, 2012

Owner

You can't do it in Ruby. It's low level kernel stuff. You'll have to do it in C.

Owner

sorin-ionescu commented Oct 2, 2012

You can't do it in Ruby. It's low level kernel stuff. You'll have to do it in C.

@pbrisbin

This comment has been minimized.

Show comment
Hide comment
@pbrisbin

pbrisbin Oct 2, 2012

You could write 95% of it in Ruby on top of 5% of C bindings. Some already
exist for inotify and libgit2.

Personally, I think there's a whole in the market for a "git-prompt" which
efficiently gives prompt-friendly (and formattable) status output.

Daemon-watcher-caching sounds useful, but a secondary concern to me. My git
prompt's plenty fast so long as I'm on an SSD (which will soon be the norm)
and I take out the calls that needed network.

I also agree -- as the requirements for this grow, you've moved well out of
shellrc territory.

On Tue, Oct 2, 2012 at 4:46 PM, Sorin Ionescu notifications@github.comwrote:

You can't do it in Ruby. It's low level kernel stuff. You'll have to do it
in C.


Reply to this email directly or view it on GitHubhttps://github.com/sorin-ionescu/prezto/issues/221#issuecomment-9086281.

pbrisbin commented Oct 2, 2012

You could write 95% of it in Ruby on top of 5% of C bindings. Some already
exist for inotify and libgit2.

Personally, I think there's a whole in the market for a "git-prompt" which
efficiently gives prompt-friendly (and formattable) status output.

Daemon-watcher-caching sounds useful, but a secondary concern to me. My git
prompt's plenty fast so long as I'm on an SSD (which will soon be the norm)
and I take out the calls that needed network.

I also agree -- as the requirements for this grow, you've moved well out of
shellrc territory.

On Tue, Oct 2, 2012 at 4:46 PM, Sorin Ionescu notifications@github.comwrote:

You can't do it in Ruby. It's low level kernel stuff. You'll have to do it
in C.


Reply to this email directly or view it on GitHubhttps://github.com/sorin-ionescu/prezto/issues/221#issuecomment-9086281.

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Oct 2, 2012

Owner

So, I've been toying with trying to make git-info faster. I've done a lot of changes on this issue's branch.

Besides the boat load of if statements to test if a zstyle has been defined, it now also lets you choose between classic git-info status (full) and vcs_info status (partial), which only shows indexed (staged), via format code %i, and unindexed (unstaged), via format code %I.

zstyle ':prezto:module:git:info' status 'partial'
zstyle ':prezto:module:git:info:branch' format ':%F{green}%b%f'
zstyle ':prezto:module:git:info:indexed' format ' %B%F{green}i%f%b'
zstyle ':prezto:module:git:info:unindexed' format ' %B%F{blue}I%f%b'
zstyle ':prezto:module:git:info:keys' format \
  'prompt' ' %F{blue}git%b' \
  'rprompt' '%i%I'

Please test this new git-info for speed and bugs.

# Switch to git-info theme.
time (git-info)

# Switch to vcs_info theme.
time (vcs_info)
Owner

sorin-ionescu commented Oct 2, 2012

So, I've been toying with trying to make git-info faster. I've done a lot of changes on this issue's branch.

Besides the boat load of if statements to test if a zstyle has been defined, it now also lets you choose between classic git-info status (full) and vcs_info status (partial), which only shows indexed (staged), via format code %i, and unindexed (unstaged), via format code %I.

zstyle ':prezto:module:git:info' status 'partial'
zstyle ':prezto:module:git:info:branch' format ':%F{green}%b%f'
zstyle ':prezto:module:git:info:indexed' format ' %B%F{green}i%f%b'
zstyle ':prezto:module:git:info:unindexed' format ' %B%F{blue}I%f%b'
zstyle ':prezto:module:git:info:keys' format \
  'prompt' ' %F{blue}git%b' \
  'rprompt' '%i%I'

Please test this new git-info for speed and bugs.

# Switch to git-info theme.
time (git-info)

# Switch to vcs_info theme.
time (vcs_info)
@ColinHebert

This comment has been minimized.

Show comment
Hide comment
@ColinHebert

ColinHebert Oct 2, 2012

Contributor

@sorin-ionescu I don't intend to do any low level stuff there is already plenty of tools to use inotify and FSEvent. Worse case scenario I would have to do some ruby ffi (I would very much like to avoid that anyway).

Plus it would be easier to move to C if a POC can be setup quickly, there IMHO is only perl, python and ruby as viable languages for this POC, there is no way I do that in perl, so I'll try with ruby.

@pbrisbin I think it will still be useful when you work with a lot of submodules (which is my case, about 100 submodules in my main project at work)

@sorin-ionescu heh, applying ifs to check if the zstyle is used rings a bell. But anyway, I think our main problem is (and will stay for a while) this git status which is incredibly slow (at least that's what bothers me the most).

Contributor

ColinHebert commented Oct 2, 2012

@sorin-ionescu I don't intend to do any low level stuff there is already plenty of tools to use inotify and FSEvent. Worse case scenario I would have to do some ruby ffi (I would very much like to avoid that anyway).

Plus it would be easier to move to C if a POC can be setup quickly, there IMHO is only perl, python and ruby as viable languages for this POC, there is no way I do that in perl, so I'll try with ruby.

@pbrisbin I think it will still be useful when you work with a lot of submodules (which is my case, about 100 submodules in my main project at work)

@sorin-ionescu heh, applying ifs to check if the zstyle is used rings a bell. But anyway, I think our main problem is (and will stay for a while) this git status which is incredibly slow (at least that's what bothers me the most).

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Oct 2, 2012

Owner

@ColinHebert Well, with %i and %I, you can now have vcs_info status, including its deficiency of not detecting untracked files. The new boat load of if statements, we should probably keep. The vcs_info style status, I'm not too sure.

Benchmarking it against vcs_info themes would be useful.

Owner

sorin-ionescu commented Oct 2, 2012

@ColinHebert Well, with %i and %I, you can now have vcs_info status, including its deficiency of not detecting untracked files. The new boat load of if statements, we should probably keep. The vcs_info style status, I'm not too sure.

Benchmarking it against vcs_info themes would be useful.

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Oct 2, 2012

Owner

The new git-info is slightly faster.

Old:
0.04s user 0.09s system 85% cpu 0.153 total

New (status enabled):
0.04s user 0.08s system 87% cpu 0.138 total

New (status not enabled):
0.02s user 0.05s system 87% cpu 0.085 total
Owner

sorin-ionescu commented Oct 2, 2012

The new git-info is slightly faster.

Old:
0.04s user 0.09s system 85% cpu 0.153 total

New (status enabled):
0.04s user 0.08s system 87% cpu 0.138 total

New (status not enabled):
0.02s user 0.05s system 87% cpu 0.085 total
@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Oct 2, 2012

Owner

I've toyed with a peepcode theme clone called peepcode_git_info that uses git-info.

peepcode (vcs_info):
0.04s user 0.07s system 87% cpu 0.124 total

peepcode_git_info (git-info):
0.03s user 0.06s system 86% cpu 0.104 total

It's probably faster because git-info does not have stgit support.

The git-info version is a lot more readable than the vcs_info version.

Comments?

Owner

sorin-ionescu commented Oct 2, 2012

I've toyed with a peepcode theme clone called peepcode_git_info that uses git-info.

peepcode (vcs_info):
0.04s user 0.07s system 87% cpu 0.124 total

peepcode_git_info (git-info):
0.03s user 0.06s system 86% cpu 0.104 total

It's probably faster because git-info does not have stgit support.

The git-info version is a lot more readable than the vcs_info version.

Comments?

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Oct 3, 2012

Owner

@ColinHebert How does multiple calls to git ls-files compare to one call to git status --porcelain, I wonder?

Owner

sorin-ionescu commented Oct 3, 2012

@ColinHebert How does multiple calls to git ls-files compare to one call to git status --porcelain, I wonder?

@ColinHebert

This comment has been minimized.

Show comment
Hide comment
@ColinHebert

ColinHebert Oct 3, 2012

Contributor

Hum, I'm not so sure about ls-files it's really recommended to stay away from it (for scripting). If we want to go with plumbing commands, we should take a look at git diff-index and git diff-files.

I did a really quick test, here is what we would like to have:

added (to the WD/untracked) :

git ls-files -o --exclude-standard

added (to the index):

git diff-index HEAD --name-status --cached (--find-renames)

removed (from the WD):

git diff-files --name-status

removed (from the index):

git diff-index HEAD --name-status --cached (--find-renames)

modified (in the WD):

git diff-files --name-status

modified (in the index):

git diff-index HEAD --name-status --cached (--find-renames)

renamed (in the WD):
NOT RELEVANT

renamed (in the index):

git diff-index HEAD --name-status --cached --find-renames

I haven't checked the unmerged yet. And there is a big problem with all of that, almost all of those commands require HEAD which doesn't exist until the initial commit is done.


Overall I think that we should stick with git status which already does the aggregation we're about to do. I'm not sure that doing that ourselves will give better results.

Contributor

ColinHebert commented Oct 3, 2012

Hum, I'm not so sure about ls-files it's really recommended to stay away from it (for scripting). If we want to go with plumbing commands, we should take a look at git diff-index and git diff-files.

I did a really quick test, here is what we would like to have:

added (to the WD/untracked) :

git ls-files -o --exclude-standard

added (to the index):

git diff-index HEAD --name-status --cached (--find-renames)

removed (from the WD):

git diff-files --name-status

removed (from the index):

git diff-index HEAD --name-status --cached (--find-renames)

modified (in the WD):

git diff-files --name-status

modified (in the index):

git diff-index HEAD --name-status --cached (--find-renames)

renamed (in the WD):
NOT RELEVANT

renamed (in the index):

git diff-index HEAD --name-status --cached --find-renames

I haven't checked the unmerged yet. And there is a big problem with all of that, almost all of those commands require HEAD which doesn't exist until the initial commit is done.


Overall I think that we should stick with git status which already does the aggregation we're about to do. I'm not sure that doing that ourselves will give better results.

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Dec 24, 2012

Owner

Has anybody bothered to test these changes for speed and bugginess?

Owner

sorin-ionescu commented Dec 24, 2012

Has anybody bothered to test these changes for speed and bugginess?

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Dec 26, 2012

Owner

I am inviting @skpw into this conversation.

Owner

sorin-ionescu commented Dec 26, 2012

I am inviting @skpw into this conversation.

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Dec 26, 2012

Owner

I have made git-info faster by only computing information when a particular zstyle is defined. However, since git-status is slow and many do not want as much repository information as my theme shows, I have also added a mode, simple, in lieu of complex, feel free to suggest better names, that behaves similarly to vcs_info, which informs of staged and unstaged files, which for the purpose of git-info, they shall be known as indexed files and unindexed files, the %S format code is in use for stashed files.

Select the mode you want for your theme:

zstyle ':prezto:module:git:info' status 'simple/complex'

I have come up with two versions of the simple mode, known as v1 and v2, which I shall discuss next.


v1 behaves similarly to vcs_info, but unlike vcs_info, unindexed also informs of untracked files because I have noticed that many vcs_info themes hack support for untracked files using a vcs_info hook since most people consider both unindexed and untracked as one and the same — not in the index. See the peepcode theme for an example. They can be separated, of coarse; I just chose to follow the hook hack.

The performance between vcs_info and git-info is virtually identical provided that the vcs_info theme also checks for untracked files.

The following format codes are available.

Name Format Code Description
indexed %i Indexed files indicator
unindexed %I Unindexed (including untracked) files indicator

The deficiency of this version of the simple mode is that these format codes have to be set to a coloured UTF-8 character or word. There is no count of indexed and unindexed files like in other contexts.


v2 behaves similarly to the classic git-info and calls the same git porcelain commands as v1 but presents the information computed differently. unindexed no longer mashes together unindexed files and untracked files; they are now split into separate unindexed and untracked contexts. Furthermore, the file count for each context is provided.

This version also transplants two contexts from the complex mode, clean and dirty. Many people just want to know when a repository is dirty by displaying the character.

So, what is dirty?

 dirty = indexed + unindexed + untracked

The above three contexts are initialised to 0 and unless defined in the theme, they are never computed. If dirty to you means unindexed and untracked but not indexed, and you want to show the character you'll have to define the following:

zstyle ':prezto:module:git:info:unindexed' format ' '
zstyle ':prezto:module:git:info:untracked' format ' '
zstyle ':prezto:module:git:info:dirty' format ' %F{red}✗%f'

The following format codes are available.

Name Format Code Description
clean %C Clean state
dirty %D Dirty files count
indexed %i Indexed files count
unindexed %I Unindexed files count
untracked %u Untracked files count

v2 is slightly slower than v1 because for indexed and unindexed, we can no longer rely on exit codes and have to count files.

Using time (vcs_info) and time (git-info), I have got the following numbers in a repository with 1 indexed file, 3 unindexed files, and 1 untracked file.

  • peepcode vcs_info: 0.118
  • peepcode simple v1: 0.120
  • peepcode simple v2: 0.136
  • sorin complex: 0.249

Please vote for or against v1 or v2. You can also suggest your own or none at all. I'm not particularly fond of adding more features to git-info.

Owner

sorin-ionescu commented Dec 26, 2012

I have made git-info faster by only computing information when a particular zstyle is defined. However, since git-status is slow and many do not want as much repository information as my theme shows, I have also added a mode, simple, in lieu of complex, feel free to suggest better names, that behaves similarly to vcs_info, which informs of staged and unstaged files, which for the purpose of git-info, they shall be known as indexed files and unindexed files, the %S format code is in use for stashed files.

Select the mode you want for your theme:

zstyle ':prezto:module:git:info' status 'simple/complex'

I have come up with two versions of the simple mode, known as v1 and v2, which I shall discuss next.


v1 behaves similarly to vcs_info, but unlike vcs_info, unindexed also informs of untracked files because I have noticed that many vcs_info themes hack support for untracked files using a vcs_info hook since most people consider both unindexed and untracked as one and the same — not in the index. See the peepcode theme for an example. They can be separated, of coarse; I just chose to follow the hook hack.

The performance between vcs_info and git-info is virtually identical provided that the vcs_info theme also checks for untracked files.

The following format codes are available.

Name Format Code Description
indexed %i Indexed files indicator
unindexed %I Unindexed (including untracked) files indicator

The deficiency of this version of the simple mode is that these format codes have to be set to a coloured UTF-8 character or word. There is no count of indexed and unindexed files like in other contexts.


v2 behaves similarly to the classic git-info and calls the same git porcelain commands as v1 but presents the information computed differently. unindexed no longer mashes together unindexed files and untracked files; they are now split into separate unindexed and untracked contexts. Furthermore, the file count for each context is provided.

This version also transplants two contexts from the complex mode, clean and dirty. Many people just want to know when a repository is dirty by displaying the character.

So, what is dirty?

 dirty = indexed + unindexed + untracked

The above three contexts are initialised to 0 and unless defined in the theme, they are never computed. If dirty to you means unindexed and untracked but not indexed, and you want to show the character you'll have to define the following:

zstyle ':prezto:module:git:info:unindexed' format ' '
zstyle ':prezto:module:git:info:untracked' format ' '
zstyle ':prezto:module:git:info:dirty' format ' %F{red}✗%f'

The following format codes are available.

Name Format Code Description
clean %C Clean state
dirty %D Dirty files count
indexed %i Indexed files count
unindexed %I Unindexed files count
untracked %u Untracked files count

v2 is slightly slower than v1 because for indexed and unindexed, we can no longer rely on exit codes and have to count files.

Using time (vcs_info) and time (git-info), I have got the following numbers in a repository with 1 indexed file, 3 unindexed files, and 1 untracked file.

  • peepcode vcs_info: 0.118
  • peepcode simple v1: 0.120
  • peepcode simple v2: 0.136
  • sorin complex: 0.249

Please vote for or against v1 or v2. You can also suggest your own or none at all. I'm not particularly fond of adding more features to git-info.

@paulmillr

This comment has been minimized.

Show comment
Hide comment

👍 v2

@lunaryorn

This comment has been minimized.

Show comment
Hide comment
@lunaryorn

lunaryorn Dec 26, 2012

Contributor

👍 v2

Contributor

lunaryorn commented Dec 26, 2012

👍 v2

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu Dec 27, 2012

Owner

Perhaps minimal and verbose are better names for the two modes than simple and complex.

Owner

sorin-ionescu commented Dec 27, 2012

Perhaps minimal and verbose are better names for the two modes than simple and complex.

gmaghera added a commit to gmaghera/prezto that referenced this issue May 19, 2013

Merge remote-tracking branch 'upstream/master'
* upstream/master:
  Make gpg-agent and ssh-agent work with each other
  [Fix #425] Rewrite module ssh-agent; rename it to ssh
  [Fix #103] Add documentation for editor
  Remove the git-info SIGINT message
  [Fix #307] Do not auto-off git-info
  Remove ununsed variable
  Clarify Git listing aliases descriptions
  Swap aliases gsd and gsL
  Rename alias gRc to gRp
  [Fix #221] Add a simple git-info
  [#221] Do not format undefined zstyles
  Initialize ahead and behind local variables
  Add rar command to archive module
  Refactor Emacs module
  Load completion for Carton

admk added a commit to admk/prezto that referenced this issue May 20, 2013

Merge branch 'master' of https://github.com/sorin-ionescu/prezto into…
… HEAD

* 'master' of https://github.com/sorin-ionescu/prezto: (35 commits)
  Make gpg-agent and ssh-agent work with each other
  [Fix #425] Rewrite module ssh-agent; rename it to ssh
  [Fix #103] Add documentation for editor
  Remove the git-info SIGINT message
  [Fix #307] Do not auto-off git-info
  Remove ununsed variable
  Clarify Git listing aliases descriptions
  Swap aliases gsd and gsL
  Rename alias gRc to gRp
  [Fix #221] Add a simple git-info
  [#221] Do not format undefined zstyles
  Initialize ahead and behind local variables
  Add rar command to archive module
  Refactor Emacs module
  Load completion for Carton
  Correct syntax error in variable assignment
  Ensure that the tmux server is started
  [Fix #426] Correct syntax error in variable assignment
  [Fix #419] Rewrite module gpg-agent; rename it to gpg
  [Fix #52] Add zstyles to configure history-substring-search
  ...
@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu May 22, 2013

Owner

If anybody has got ideas on how to speed it up further, I'm listening. Yes, you'll have to read and comprehend the giant git-info function.

Owner

sorin-ionescu commented May 22, 2013

If anybody has got ideas on how to speed it up further, I'm listening. Yes, you'll have to read and comprehend the giant git-info function.

@sorin-ionescu

This comment has been minimized.

Show comment
Hide comment
@sorin-ionescu

sorin-ionescu May 22, 2013

Owner

If all you want to show is a dirty repository indicator, no counts, vcs_info is still your best bet.

Owner

sorin-ionescu commented May 22, 2013

If all you want to show is a dirty repository indicator, no counts, vcs_info is still your best bet.

trongrg added a commit to trongrg/prezto that referenced this issue May 27, 2013

Merge remote-tracking branch 'upstream/master'
* upstream/master: (39 commits)
  [Fix #436] Remove Bombich rsync references
  Add the RubyGems bin directory to PATH on other Unix systems
  Do not substitute /tmp since $TMPDIR is always set
  [Fix #437] Always set $TMPDIR
  Make gpg-agent and ssh-agent work with each other
  [Fix #425] Rewrite module ssh-agent; rename it to ssh
  [Fix #103] Add documentation for editor
  Remove the git-info SIGINT message
  [Fix #307] Do not auto-off git-info
  Remove ununsed variable
  Clarify Git listing aliases descriptions
  Swap aliases gsd and gsL
  Rename alias gRc to gRp
  [Fix #221] Add a simple git-info
  [#221] Do not format undefined zstyles
  Initialize ahead and behind local variables
  Add rar command to archive module
  Refactor Emacs module
  Load completion for Carton
  Correct syntax error in variable assignment
  ...

adamrights added a commit to adamrights/prezto that referenced this issue Jun 7, 2013

Merge branch 'master' of https://github.com/sorin-ionescu/prezto
* 'master' of https://github.com/sorin-ionescu/prezto: (42 commits)
  Rename archive module functions
  [Fix #436] Update link to Bombich rsync
  Revert "[Fix #436] Remove Bombich rsync references"
  [Fix #436] Remove Bombich rsync references
  Add the RubyGems bin directory to PATH on other Unix systems
  Do not substitute /tmp since $TMPDIR is always set
  [Fix #437] Always set $TMPDIR
  Make gpg-agent and ssh-agent work with each other
  [Fix #425] Rewrite module ssh-agent; rename it to ssh
  [Fix #103] Add documentation for editor
  Remove the git-info SIGINT message
  [Fix #307] Do not auto-off git-info
  Remove ununsed variable
  Clarify Git listing aliases descriptions
  Swap aliases gsd and gsL
  Rename alias gRc to gRp
  [Fix #221] Add a simple git-info
  [#221] Do not format undefined zstyles
  Initialize ahead and behind local variables
  Add rar command to archive module
  ...

Conflicts:
	runcoms/zpreztorc

jeffknupp pushed a commit to jeffknupp/prezto that referenced this issue Oct 15, 2013

jeffknupp pushed a commit to jeffknupp/prezto that referenced this issue Oct 15, 2013

linuslundahl added a commit to linuslundahl/prezto that referenced this issue Oct 17, 2013

linuslundahl added a commit to linuslundahl/prezto that referenced this issue Oct 17, 2013

zeroasterisk added a commit to zeroasterisk/prezto that referenced this issue Oct 22, 2013

zeroasterisk added a commit to zeroasterisk/prezto that referenced this issue Oct 22, 2013

lildude pushed a commit to lildude/prezto that referenced this issue Jan 12, 2014

lildude pushed a commit to lildude/prezto that referenced this issue Jan 12, 2014

lackac added a commit to lackac/prezto that referenced this issue Jan 19, 2014

lackac added a commit to lackac/prezto that referenced this issue Jan 19, 2014

matthoffman added a commit to matthoffman/oh-my-zsh that referenced this issue Sep 18, 2014

matthoffman added a commit to matthoffman/oh-my-zsh that referenced this issue Sep 18, 2014

fanf added a commit to fanf/prezto that referenced this issue Nov 12, 2015

fanf added a commit to fanf/prezto that referenced this issue Nov 12, 2015

kodelint pushed a commit to kodelint/prezto that referenced this issue Nov 15, 2016

kodelint pushed a commit to kodelint/prezto that referenced this issue Nov 15, 2016

kodelint pushed a commit to kodelint/prezto that referenced this issue Nov 15, 2016

Gee-Bee added a commit to Gee-Bee/prezto that referenced this issue Jul 20, 2018

Update submodules
 Submodule changes to be committed:

 * modules/autosuggestions/external 15931f0...c7d4a85 (1):
   > Merge pull request #299 from zsh-users/develop

 * modules/base16/base16-shell 8643aca...9114596 (43):
   > Update LICENSE.md
   > Create LICENSE.md
   > Updates output
   > Merge pull request #143 from mattaw/master
   > Updates output
   > Updates output
   > Merge pull request #137 from julio-b/custom_hooks
   > Updates output
   > Fixes #131
   > Merge pull request #136 from diegs/seti-ui
   > Updates output
   > Merge pull request #128 from robbiewxyz/master
   > Merge pull request #125 from junzh0u/env_var
   > Merge pull request #124 from junzh0u/master
   > Merge pull request #123 from junzh0u/master
   > Merge pull request #119 from junzh0u/fish
   > Updates output
   > Merge pull request #117 from elnawe/master
   > Merge pull request #116 from elnawe/master
   > Scheme updates
   > Update README.md
   > Update README.md
   > Merge pull request #113 from blueyed/template-fixes
   > Merge pull request #108 from binaryplease/master
   > Merge pull request #107 from jeremejevs/master
   > Merge pull request #106 from danielrs/master
   > Merge pull request #104 from danielrs/master
   > Merge pull request #99 from nomoon/zsh_plugin
   > Merge pull request #92 from coderonline/master
   > Merge pull request #96 from danielrs/master
   > Updates output
   > Update default.mustache
   > Updates output
   > Adds fix from old builder
   > Updates output
   > Merge pull request #90 from ghprince/force_clobbering
   > Merge pull request #89 from tylerball/vimrc-background-newlines
   > Merge pull request #87 from tylerball/dont-overwrite-colorscheme
   > Updates themes
   > Merge branch 'master' of ssh://github.com/chriskempson/base16-shell
   > Merge branch 'master' of ssh://github.com/chriskempson/base16-shell
   > Updates builder output
   > Updates output

 * modules/completion/external c2dde89...70a7a5c (158):
   > Merge pull request #545 from dkarter/patch-1
   > Merge pull request #542 from svvac/patch-1
   > Merge pull request #538 from okapia/master
   > Merge pull request #537 from danteu/master
   > Merge pull request #536 from bezhermoso/tmuxp
   > follow normal zsh case conventions in some functions
   > review the howto guide
   > Revert "experiment for testing gcloud completion"
   > experiment for testing gcloud completion
   > Also add gitter badge
   > Fix link to #zsh-completions
   > Add link to Void Linux package
   > Remove license header from compdefs I wrote (switching to the Zsh license)
   > Change default license to the Zsh license (as discussed on zsh-workers mailing-list)
   > Merge pull request #532 from nicolasdespres/caffeinate
   > Merge pull request #531 from hlx98007/master
   > Merge pull request #530 from tomonacci/fix-ibus-positional-arguments
   > Merge pull request #526 from anderkonzen/mix_improvements
   > Merge pull request #525 from jeffwidman/patch-1
   > Merge pull request #524 from dark-panda/pgsql-enhancements
   > Merge pull request #523 from kapsh/yaml_ext
   > Merge pull request #522 from tomonacci/feature-xsel
   > Merge pull request #521 from tomonacci/feature-ibus
   > Merge pull request #517 from lenormf/_kak
   > Merge pull request #509 from Tuurlijk/master
   > Merge pull request #511 from yous/fix-bsd-sed
   > Merge pull request #512 from lenormf/_kak
   > Merge pull request #513 from jvwdev/master
   > Merge pull request #514 from kloetzl/fix-exclusion-list
   > Merge pull request #515 from kloetzl/add-sublime-text
   > Merge pull request #516 from kloetzl/add-resilio-sync
   > Merge pull request #507 from Dannyzen/master
   > Merge pull request #506 from knu/sed_-E
   > Merge pull request #501 from mtorromeo/rkt
   > Merge pull request #500 from mtorromeo/yarn
   > Merge pull request #499 from tejanium/master
   > Merge pull request #497 from ianks/master
   > Merge pull request #496 from patrick96/gist-read
   > Merge pull request #494 from i3wm/master
   > Merge pull request #489 from pelim/force-cli-completion
   > Merge pull request #491 from aschrab/openssl
   > Merge pull request #493 from arcan1s/master
   > Update repository infos
   > Merge pull request #490 from SmartFinn/ffind-completion
   > Merge pull request #488 from SmartFinn/patool-completion
   > Merge pull request #487 from ypid/ansible/debops_hosts_support
   > Merge pull request #470 from lenoch/yaourt-pkg-tar
   > Add RPM installation info
   > Merge pull request #483 from olejorgenb/udisksctl
   > Merge pull request #481 from olejorgenb/util-linux-column
   > Merge pull request #482 from olejorgenb/util-linux-paste
   > Merge pull request #479 from zsh-users/go-subdir-comp
   > Merge pull request #478 from kota65535/master
   > Merge pull request #476 from olejorgenb/patch-1
   > Merge pull request #474 from cjk/httpie-raw-json-file-paths
   > Merge pull request #472 from ViktorHaag/revert-471-ag-past-version-one
   > Merge pull request #471 from ViktorHaag/ag-past-version-one
   > README improvements/fixes
   > Add completion script for Software Collections (https://www.softwarecollections.org)
   > Merge pull request #469 from kastiglione/rg-types
   > Merge pull request #468 from kastiglione/rg-arrays
   > Merge pull request #466 from niko2342/git_journal_completion
   > Merge pull request #464 from pseyfert/cmake_module_path
   > Merge pull request #462 from arcizan/ripgrep
   > Merge pull request #461 from cmcaine/patch-1
   > Merge pull request #456 from JindrichPilar/trash-cli
   > Merge pull request #452 from pseyfert/cmake
   > Merge pull request #459 from blueyed/envdir
   > Merge pull request #453 from JindrichPilar/afew
   > Merge pull request #455 from JindrichPilar/archlinux-java
   > Merge pull request #458 from foudfou/master
   > adding cloudfoundry compdef
   > #207: remove compdefs without a license header
   > Merge pull request #449 from KrisShannon/dget
   > Merge pull request #448 from jkraemer/rails-test
   > Merge pull request #447 from olejorgenb/util-linux-lsblk
   > Merge pull request #442 from syohex/fix-go-tool-pprof
   > Merge pull request #440 from leoj3n/patch-2
   > Merge pull request #437 from syohex/trailing-space
   > Merge pull request #439 from leoj3n/patch-1
   > Merge pull request #443 from arcan1s/drop-docker-machine
   > #207: Add license header to _cmake, with explicit permission from Scott Kroll <skroll@gmail.com>
   > Merge pull request #435 from michaelmior/rsvm
   > Merge pull request #431 from lukechilds/patch-1
   > Merge pull request #429 from JonasGroeger/patch-1
   > #207: Add license header to @sorin-ionescu compdefs
   > Merge pull request #423 from markupboy/master
   > #207: add license headers to compdefs from zsh-users mailing list
   > #207: add license header to _google (with permission of @dadrc)
   > #207: delete heroku, no license header and author not reachable
   > Merge pull request #422 from vasilykraev/drush-license-update
   > Merge pull request #421 from g5pw/master
   > Merge pull request #420 from ilkka/patch-1
   > Merge pull request #419 from vhbit/patch-1
   > Merge pull request #418 from Soliah/master
   > Merge pull request #416 from peteryates/master
   > Merge pull request #415 from arcan1s/master
   > Merge pull request #410 from dserodio/docker-machine
   > Merge pull request #406 from superlukas/permissions
   > Merge pull request #405 from JindrichPilar/scrub
   > Merge pull request #403 from xen0l/ansible
   > Merge pull request #404 from netromdk/master
   > Merge pull request #401 from JindrichPilar/chattr
   > Merge pull request #400 from JindrichPilar/jrnl
   > Merge pull request #399 from fumikony/fumikony-patch-1
   > Merge pull request #398 from Cronos87/master
   > add completion function for rkt command
   > Merge pull request #393 from zsh-users/add-multirust
   > Merge pull request #392 from kastiglione/compilation-database
   > Merge pull request #396 from JindrichPilar/pixz
   > Merge pull request #395 from JindrichPilar/dad
   > Merge pull request #394 from JindrichPilar/ufw
   > Merge pull request #390 from mitukiii/license
   > Merge pull request #388 from JindrichPilar/cheat
   > Merge pull request #387 from JindrichPilar/diana_completion
   > Merge pull request #386 from Cronos87/master
   > Merge pull request #383 from pismute/master
   > Merge pull request #384 from black2754/openssl
   > Merge pull request #382 from zsh-users/remote-boot2docker
   > Merge pull request #381 from jozefizso/license_middleman
   > Merge pull request #380 from nono/license
   > Merge pull request #379 from arcan1s/master
   > Merge pull request #378 from black2754/openssl
   > Merge pull request #377 from lencioni/bower-license
   > Merge pull request #376 from mafrosis/supervisorctl
   > Merge pull request #375 from shtouff/feat-fleetctl
   > Merge pull request #374 from zv/patch-1
   > #305: Remove brew completion, already maintained in Homebrew project
   > #313: Remove docker completions, already maintained in docker project
   > Update contributing guidelines.
   > Remove some compdefs that are available directly in zsh
   > Merge pull request #373 from blueyed/xinput
   > Merge pull request #371 from tieubao/master
   > Merge pull request #370 from vitorgalvao/patch-1
   > Merge pull request #368 from WoLpH/master
   > Merge pull request #361 from zacchiro/master
   > Merge pull request #360 from vitorgalvao/patch-1
   > Merge pull request #357 from rxwen/android_option
   > Merge pull request #356 from zv/master
   > Merge pull request #351 from mikkeloscar/manage.py
   > Merge pull request #355 from mikkeloscar/go
   > Merge pull request #350 from mmckinst/missing_licenses
   > Merge pull request #347 from sarg/master
   > Merge pull request #346 from nesneros/master
   > Merge pull request #336 from danteu/master
   > Merge pull request #329 from NigoroJr/bundle-install-options
   > Merge pull request #328 from shtouff/feat-fleetctl
   > Merge pull request #288 from mafrosis/supervisorctl
   > Merge pull request #316 from itegebo/master
   > Merge pull request #304 from rjcoelho/master
   > Merge pull request #300 from supki/master
   > Merge pull request #298 from vincentbernat/fix/adb-completion
   > Merge pull request #297 from ncaq/master
   > Merge pull request #296 from patrikha/master
   > Merge pull request #287 from maxandersen/mvntychomodes
   > Merge pull request #284 from lineinthesand/patch-1
   > Merge pull request #282 from grosendorf/feature/knife-diff-completion
   > Merge pull request #281 from loranger/master

 * modules/history-substring-search/external 2c29543...47a7d41 (22):
   > Fix typo in README.md (#91)
   > support for installing as Oh-My-Zsh plugin (#87)
   > Merge pull request #86 from iroedius/master
   > Update README.md
   > Clean up global variable declarations
   > feat: add fuzzy search
   > README: add installation instructions for Homebrew
   > Merge pull request #67 from gezalore/master
   > README: upgrade to CommonMark; move <C-v> note up
   > Merge pull request #78 from RuRo/patch-1
   > Merge pull request #62 from alyssais/declare
   > Merge pull request #66 from disarmer/master
   > README: don't assume UP/DOWN arrows; configure it!
   > README: bind arrow keys after observing key codes
   > GH-44: fix "parameter not set" warning by `set -u`
   > README: fix markdown rendering on Github: - and _
   > README: format HISTORY as list; mention @gezalore
   > README: remove incorrect statement
   > Merge pull request #55 from gezalore/ensure_unique
   > GH-53: configure arrow keys for iTerm2 with cuu/d1
   > Merge pull request #51 from Eriner/master
   > drop oh-my-zsh config file: they supply their own

 * modules/prompt/external/agnoster 43cb371...3ad94b6 (3):
   > Fix additional prompt expansion in prompt_git
   > Merge pull request #29 from Cellophan/master
   > Merge pull request #11 from MichaelAquilina/python_virtualenv

 * modules/prompt/external/async b001fa5...001f40e (2):
   > Skip test_all_options on zsh 5.0.8
   > travis: Allow failures on zsh 5.0.2 and 5.0.8

 * modules/prompt/external/powerlevel9k d5ac173...afb7387 (229):
   > Documenting missing field  from #716.
   > Merge pull request #722 from lemarsu/master
   > Merge pull request #713 from magicalraccoon/patch-1
   > Merge pull request #686 from Corwynt/master
   > Merge pull request #685 from kenhys/disable-alias-grep
   > Updating build status to be `master` only.
   > Merge pull request #680 from dinhnv/pyenv-patched
   > Merge pull request #676 from iScrE4m/patch-2
   > Merge pull request #667 from akranga/master
   > Merge pull request #660 from brianmoran/ISS-650-pythonpath-in-prompt
   > Merge pull request #663 from MarcHauptmann/master
   > Merge pull request #656 from ylluminarious/remove-weird-glyphs
   > Merge pull request #651 from claycephas/more-documentation
   > Merge pull request #647 from sbutler2901/master
   > Merge pull request #643 from terencode/patch-1
   > Fixing `vcs.spec` tests after adding space.
   > Adding a space after VCS_BRANCH_ICON by default
   > Merge pull request #640 from simonvpe/master
   > Merge pull request #636 from ZeGentzy/master
   > Merge pull request #616 from trashbat/patch-2
   > Merge pull request #611 from Typositoire/fix/prompt_kubecontextlocal1
   > Merge pull request #608 from tippl/fix_load_segment
   > README: Quick typo fix.
   > README: Quick fix to MD formatting
   > Updating CHANGELOG for v0.6.4
   > Merge branch 'master' into next
   > Merge pull request #605 from tadeoos/next
   > Merge pull request #596 from eumiro/truncate_to_unique
   > Merge branch 'master' into next
   > Merge pull request #592 from tippl/dir_write-588
   > Merge pull request #581 from docwhat/pr/show-signals
   > Merge pull request #583 from docwhat/pr/rvm-575
   > Merge pull request #573 from AdrienHorgnies/feature/status-cross-ok-option-set
   > Merge pull request #541 from golgoth31/next
   > Merge pull request #569 from docwhat/pr/home-folder-abbr-test
   > Merge pull request #570 from docwhat/pr/docker-known-issues
   > Merge pull request #571 from docwhat/pr/merge-master
   > Merge pull request #567 from docwhat/pr/docker
   > Merge pull request #562 from docwhat/pr/cleanup-directory-detection
   > Merge pull request #554 from derekbassett/Prompt_Hang_Kubecontext_Minikube
   > Fixes for README and CHANGELOG re: `vpn` segment.
   > Updating CHANGELOG with new `vpn` segment
   > Merge pull request #539 from golgoth31/next
   > Updating README and CHANGELOG
   > add kubecontext test spec file to travis build
   > add tests
   > empty namespace value is 'default'
   > fix variable name typo
   > use p9k print_icon for kubecontext segment
   > added the current context prompt for your kubectl config
   > Merge branch 'master' into next
   > Moving some parts of README to the Wiki.
   > Merge branch 'host_user' of https://github.com/onaforeignshore/powerlevel9k into onaforeignshore-host_user
   > Merge branch 'host_user' of https://github.com/onaforeignshore/powerlevel9k into onaforeignshore-host_user
   > Merge branch 'next' of github.com:bhilburn/powerlevel9k into next
   > Merge branch 'master' into next
   > Updating the README to add a note about `teardown` feature.
   > Fixing typo in #525 to teardown `RPROMPT`
   > Merge branch 'pr/teardown' of https://github.com/docwhat/powerlevel9k into docwhat-pr/teardown
   > Incorporating @dritter's feedback from #524.
   > Merge branch 'pr/newline' of https://github.com/docwhat/powerlevel9k into docwhat-pr/newline
   > Merge pull request #515 from docwhat/pr/pipe-status
   > Merge branch 'master' into next
   > Merge pull request #521 from guixxx/devel
   > Merge branch 'master' into next
   > Updates to README and CHANGELOG for changes from #498.
   > Merge branch 'battery' of https://github.com/onaforeignshore/powerlevel9k into onaforeignshore-battery
   > Merge pull request #502 from shibumi/detect-virt-debugging
   > Updating CHANGELOG for v0.6.3.
   > Merge branch 'master' into next
   > Merge pull request #496 from belak/options-oddities
   > Merge branch 'master' into next
   > Fix double expansion of prompt variables
   > Merge pull request #484 from shibumi/svn-debugging
   > Merge branch 'master' into next
   > Converting timer start time to hex
   > Improve logic
   > Adds useful comment
   > Adds Android icon/battery plugin support
   > Merge pull request #461 from julienfalque/dir-home
   > Updating README to use @V1rgul's screenshot.
   > Merge pull request #463 from liblit/handle-echotc-Co-failure
   > Fixing Link to Step 2 of Installation Guide
   > Updating CHANGELOG for v0.6.2 release.
   > Merge branch 'master' into next
   > Merge pull request #452 from dritter/improve_travis_and_vms
   > Merge pull request #446 from dritter/fix_442
   > Merge pull request #449 from dritter/ordered_icons_list
   > nerdfont config: changing order, removing duplicates
   > Merge pull request #451 from lcorsini/next
   > iTerm2 debugger: changed error code, added Source Code Pro to fontcheck
   > Add warn message if XCode is not installed
   > Add iTerm2 debugging script
   > Add changelog entry for changed `ram` segment
   > Add missing changelog entry for font debugger (#433)
   > Merge branch 'Darkheir-next' into next
   > Merge branch 'master' into next
   > Merge pull request #433 from dritter/add_font_debugger
   > Merge pull request #426 from dritter/fix_changelog
   > Merge pull request #412 from dritter/truncate_composer_json
   > readme: adding note about `jq` installation
   > Add tests for `truncate_with_package_name` strategy of dir segment
   > Fix parsing package name from complex package.json files
   > Merge pull request #424 from dritter/add_freebsd_vm
   > unittest: fixing space after branch indicator
   > changelog: updating for v0.6.0 release
   > Fixing AWS icon for nerdfonts, fixing branch icon space.
   > Merge pull request #413 from davidmpaz/icon_by_repo
   > Update awesome-fontconfig SERVER_ICON to 
   > nerdfont: updating name for nerdfont selection
   > Merge branch 'nerdfont' of https://github.com/kaymmm/powerlevel9k into kaymmm-nerdfont
   > Added support for customizable context segment
   > Setting new `newline` flag to false as default.
   > Adding option POWERLEVEL9K_PROMPT_ADD_NEWLINE to create a blank line before each prompt
   > Adding a \n before prompt
   > README: cleaning up new `command_execution_time` segment docs
   > Add documentation for the `command_execution_time` segment
   > Merge branch 'next' into execution_time
   > Use GMT as timezone for `command_execution_time` segment
   > Refactor `command_execution_time` segment
   > Add tests for `command_execution_time` segment
   > Fix wrong variable name
   > Format command execution time human readable
   > Add documentation for `command_execution_time` segment
   > Reworked `command_execution_time` segment
   > Add `command_execution_time` segment
   > Merge pull request #395 from dritter/benoits_dir_writable_segment
   > Merge pull request #393 from dritter/fix_vanilla_prompt
   > Merge pull request #391 from dritter/simplify_public_ip
   > Merge pull request #387 from dritter/fix_truncate_with_package_name
   > Merge pull request #386 from dritter/fix_public_ip
   > Merge pull request #379 from dritter/fix_swift_segment
   > CHANGELOG: Updating to reflect work on `next`
   > README: fixing name of `detect-virt` to `detect_virt`
   > README: default segment list was no longer accurate
   > Merge pull request #378 from bhilburn/anion155-hdd-segment
   > Merge branch 'master' into next
   > Merge branch 'master' into next
   > Merge branch 'master' into next
   > Merge branch 'master' into next
   > Change powerlevel9k_init to prompt_powerlevel_setup
   > Merge pull request #376 from jshort/next
   > Merge pull request #368 from rjorgenson/public_ip_segment
   > Merge pull request #369 from rjorgenson/context_host_depth
   > Merge pull request #366 from rjorgenson/next
   > Merge pull request #360 from davidmpaz/icon_by_repo
   > Merge branch 'master' into next
   > Merge pull request #362 from shibumi/detect-virt-next
   > Merge pull request #347 from thomaspaulmann/swift
   > Merge pull request #346 from dritter/configurable_path_separators
   > Merge pull request #341 from rjorgenson/next
   > Merge branch 'master' into next
   > Merge pull request #332 from eviltak/show-ok-in-non-verbose-status
   > Merge branch 'master' into next
   > Merge branch 'master' into next
   > bugfix: typo in "POWERLEVEL9K" broke the VCS tag display
   > Improved speed of `prompt_vcs` by 50%-66%.
   > Removing `zle-*` overrides, appear fixed in new ZSH.
   > Merge pull request #309 from krischer/conda-prompt-changes
   > vcs: adding detection of unstaged / staged for svn repos
   > fixed svn-detect-changes().. the svn prompt has now the same behaviour as the git prompt..
   > swapped half and full dirty in svn-detect-changes
   > added svn hooks.. hope this works
   > added vi-svn-detect-changes() in functions/vcs.zsh
   > Enabling subversion support for the `vcs` segment.
   > Merge pull request #300 from andjscott/prompt_dir_shortening
   > Finally adding a license to powerlevel9k
   > Merge branch 'noverbose-battery' of https://github.com/dnmiller/powerlevel9k into nonverbose-battery
   > Merging ability to hide tags from VCS segment.
   > Merge branch 'next' of https://github.com/Xetius/powerlevel9k into xetius-vcs-hide-tags
   > Now printing a warning if $LANG is set incorrectly.
   > Merge branch 'master' into next
   > revise mac battery error when mac default date use linux's
   > Make prompt_custom not print the segment if empty
   > Merge pull request #282 from Mrngilles/new_python_icon
   > Merge pull request #275 from andjscott/prompt_dir_shortening
   > Merge pull request #276 from andjscott/package_name
   > Merge pull request #261 from wadkar/pyenv
   > Merge pull request #260 from thuandt/python-icon
   > Merge pull request #266 from dritter/264_fix_script_location
   > Merge pull request #256 from cbourgeois/next
   > Merge pull request #252 from rawkode/feature/better-battery-core-improvements
   > Changelog: Remove tag "next" for version 0.4.0
   > Changelog: Add a note about TravisCI
   > Changelog: Add a note about vcs untracked state
   > Changelog: Add a note about `rbenv` segment
   > Changelog: Add a note about `swap` segment
   > Changelog: Reformat; first changes then additions
   > Changelog: Reformat; first changes then additions
   > Changelog: Add entry about new `nodeenv` segment
   > Changelog: Fix name for docker_machine segment
   > Changelog: Add a note about the changed shorten delimiter
   > Changelog: Update headlines for better readability
   > Changelog: Add entry for new anaconda segment
   > Changelog: Add a note about obsolete variables
   > Making `anaconda` list item a link to full description.
   > Merge pull request #249 from jaermanx9/anaconda-segment
   > Merge pull request #247 from orhanbalci/next
   > Merge branch 'vcs-tag-display' into next
   > Catching up CHANGELOG with new segments.
   > Update CHANGELOG about new package.json shortening strategy
   > Merge pull request #229 from alexlafroscia/add-package-name-shortening-strategy
   > Merge pull request #242 from dritter/fix_actionformat_color
   > Merge pull request #230 from sabricot/docker_machine
   > Merge pull request #233 from wadkar/nvm_return_if_none
   > readme: more touchup to the segment list
   > readme: add horizontal bar
   > readme: code-as-links transition in segment list
   > readme: testing code-as-link in MD code
   > readme: re-organizing the segment list
   > Merge pull request #228 from wadkar/next_chruby_prompt
   > Fixing #217, also making the `actionformats` color configurable in VCS segment.
   > Merge branch 'master' into next. Fixes Symfony typo in README.
   > Merge pull request #221 from dritter/fix_vcs_test
   > Merge pull request #220 from dritter/rename_vcs_default_state
   > Merge pull request #219 from rmad17/nodeenv-support
   > Merge pull request #214 from dritter/fix_vcs_foreground_color
   > Merge pull request #216 from natemccurdy/issues/215
   > Reflect submodule status in VCS prompty by default.
   > README: Adding Travis-CI status to README
   > Merge pull request #212 from dritter/unit_testing
   > Merge pull request #211 from Falkor/feature/better_dirty_check
   > Merge pull request #208 from dritter/fix_joining
   > Pull PR #204 into `next`. Introduces new VCS state, `untracked`
   > Merge branch 'master' into next
   > Merge pull request #205 from dritter/dir_delimiter
   > Merge pull request #198 from dritter/vcs_customizable
   > Merge pull request #181 from dritter/split_up_ram_segment
   > Merge pull request #202 from dritter/join_conditional_segments

 * modules/prompt/external/powerline 8e81152...c48e4c6 (3):
   > Merge pull request #7 from Eriner/master
   > Merge pull request #6 from Eriner/master
   > Merge pull request #2 from TheZoc/patch-1

 * modules/prompt/external/pure 95e7fd7...a3b22b2 (73):
   > Prevent multiple prompt resets in one execution cycle (#368)
   > More thorough handling (hiding) of match results
   > Avoid implicit creation of global var prompt_pure_git_arrows
   > 1.6.0
   > Link to pure.zsh and async.zsh for better clarity (#358)
   > Readme tweaks
   > Link to a Pure-inspired prompt done in Rust
   > Avoid implicit global var creation and cleanup (#347)
   > Fix grammar in readme (#344)
   > Update oh-my-zsh instructions in readme
   > Remove extra $fpath from npm postinstall fail instructions
   > Simplify readme avatar URLs
   > Use glob instead of regex for dir matching (#328)
   > Simplify oh-my-zsh instructions, avoid confusion
   > Add support for python virtualenv (#325)
   > Change dirty check delay threshold from 2 to 5 secs (#326)
   > Remove deprecated clear-screen ZLE widget (#322)
   > Use pattern to matching newline, fix regex compile
   > Restore old virtualenv behavior by only modifying preprompt (#321)
   > Perform all git checks (vcs_info) asynchronously (#273)
   > Update prezto link and instructions in readme
   > Add `purer` fork to readme (#307)
   > 1.5.2
   > Ensure prompt_subst is unset when the expanded preprompt is stored (#305)
   > Parse git aliases for better pull/fetch detection (#289)
   > Link inside pure directory as npm install fallback (#285)
   > 1.5.1
   > Fix wrong assumption about promptinit in setup (#291)
   > 1.5.0
   > Check and set `prompt_opts` when not using `promptinit` (#277)
   > Check for git arrows asynchronously (#272)
   > Evaluate $PROMPT at render time (#274)
   > Update zsh-async to 1.5.0 (#271)
   > Disable interactive passwords in SSH for git fetch (#269)
   > Change prezto url to the active prezto repo (#268)
   > Simplify zplug instructions in readme (#267)
   > Change integration examples from commands to configuration lines (#265)
   > Add zplug install instructions (#261)
   > Readme improvements (#259)
   > Add install instructions for Zim (#262)
   > Add issue template (#260)
   > 1.4.1
   > Update zsh-async to fix issue with zsh 5.3
   > Mention intelfx/pure fork in readme (#247)
   > `HyperTerm` => `Hyper`
   > Restore prompt_subst setopt when rendering prompt (#231)
   > Update zsh-async to fix multi-space path bug
   > Use ; instead of && for promptinit (#227)
   > Prevent parameter expansion in preprompt
   > Revert "Fix double variable interpolation in branch name"
   > Fix double variable interpolation in branch name
   > Fix link to bash port (#219)
   > 1.4.0
   > Compare expanded preprompt when rendering (#214)
   > Update async.zsh (#218)
   > update screenshot
   > Correct link to Droid Sans Mono Font (#216)
   > Add async.zsh to the download step in the readme
   > Merge pull request #205 from fvargas/master
   > Merge pull request #204 from fvargas/master
   > Merge pull request #201 from fvargas/master
   > readme - mention that the git check is done asynchronously #187
   > Merge pull request #196 from sindresorhus/emacs-fixes
   > Clarify Prezto usage
   > Close #192 PR: Added `console` language where needed.
   > Merge pull request #186 from edouard-lopez/patch-1
   > Merge pull request #181 from caarlos0/patch-1
   > Merge pull request #178 from jedahan/master
   > Merge pull request #177 from veggiemonk/patch-1
   > Close #175 PR: Refresh pure screenshot.
   > 1.3.0
   > Update bundled zsh-async to 1.1.0
   > Close #171 PR: Attempt to detect user initiated git fetch. Fixes #162

 * modules/syntax-highlighting/external 44e5323...5e9b7c4 (367):
   > main: Add test for previous
   > main: Fix end of buffer check for path_prefix with non-null PREBUFFER
   > driver, main: Add -z to autoload calls
   > main: Mark ZSH_HIGHLIGHT_DIRS_BLACKLIST experimental
   > main: Add ZSH_HIGHLIGHT_DIRS_BLACKLIST
   > main: Move - to end of character class
   > main: Simplify for next commit; no functional change
   > regexp: Add test for subexpression match
   > tests: Directly diff expected_region_highlight against region_highlight
   > main: Test suffix aliases if zsh/parameter is available
   > main: Fix off by one errors in quote helper functions
   > main: Do not highlight for regions that end before the start of BUFFER
   > driver: Do not highlight newlines or past BUFFER for zle standout
   > driver: Replace eval with ${(P)
   > main: Update test for issue #501 XFAIL
   > tests: Escape newlines in TAP description
   > regexp: Add missing local for arrays match mbegin mend
   > 'main': Don't highlight bare '$foo' as a filename, as it's a parameter expansion.
   > main: Add XFAIL to redirections2 for process-substitution #494
   > 'main': Do not expand special parameters.  Fixes #489.
   > main: Highlight backticks in double quotes
   > main: Consolidate } handling
   > main: Add test for quotes in options
   > main: Highlight options as base_style
   > main: Correct typos
   > main: Only highlight characters special to globbing as globbing
   > main: Use =~ for globbing test
   > main: Only highlight one base_style in _highlight_arguments
   > main: Have helper functions return highlights in reply
   > main: Explicitly pass $style to _highlight_path_separators
   > 'main': Don't match redirection operators in command substitutions as <-> number range globs.  Fixes #483.
   > 'main': Add a regression test for issue #483, concerning «: $(<foo)».
   > 'main': Add an explicit test for escaped single quotes within single quotes, «'foo'\''bar'».
   > docs: main: Clarify back-quoted-argument, back-double-quoted-argument, back-dollar-quoted-argument, and assign.
   > docs: main: Add missing hyphens.
   > tests: Include the filename in error messages.
   > main: Highlight unclosed backtick subshells
   > 'main': Fix highlighting of «<->»-style numeric globs.
   > main: Highlight path after globbing checks
   > 'main': Add a regression test for issue #474.
   > Happy New Year 2017.
   > Bump copyright years.
   > main: Add *-quoted-argument-unclosed styles
   > 'main': Add a regression test for issue #468.
   > main: Add tests
   > main: Highlight partially quoted arguments correctly
   > main: Add ' helper function
   > main: Make " and $' helper functions responsible for highlighting quote
   > main: Remove trailing whitespace
   > main: A redirection token is an invalid redirection target
   > docs: Fix links; thanks @dukex for noticing
   > driver: Run under emulate -L zsh and add zsyh_user_options
   > tests: Avoid using new zmodload flags
   > tests: Skip when zsh/pcre is not available
   > 'main': Add tests for «ls \~» and for not performing parameter expansion on the command word.
   > main: Expand paths before removing quoting
   > main: Add fallback for useroptions if zsh/parameter is absent
   > Add regexp highlighter
   > noop: Add comments.
   > Followup to parents: Restore sudo-* tests on platforms that don't have sudo.
   > Followup to last: Don't require 'sudo' to test prefix redirections.
   > tests: Add skips for tests that require sudo
   > 'main': Highlight 'sudo' correctly when it's not installed.
   > docs: Point to repology for finding packages.
   > README: Fix typo.
   > brackets: Ignore quotes
   > main: Split declaration and assignment
   > main: Save user options in a single variable
   > 'main': Skip tests that break on msys2
   > tests: Add ability to skip tests
   > tests: Support SKIP directive in tap-colorizer
   > tests: Run tests with WARN_CREATE_GLOBAL
   > tests: Declare local variables
   > driver: Revert previous commit, unbreaking the build on zsh<5.0.8.
   > driver: Correctly escape assoc key pattern
   > tests: Run tests with NOUNSET
   > tests: Set ZLE variables to sane defaults
   > tests: Ensure region highlight is unset if NONE is expected
   > Default possibly unset variables to empty
   > tests: Use idiomatic set check
   > brackets: Use idiomatic set check
   > brackets: Disallow negative nesting level
   > brackets: Don't call _zsh_highlight_add_highlight with empty style
   > brackets: Add test for highlighting errors with no styles
   > driver: _zsh_highlight_bind_widgets: Be resilient to NO_UNSET being set in the calling scope.
   > docs: Add Void Linux link.
   > CI: customize IRC notifcation message
   > tests: Remove superfluous comment.
   > tests: run the most recent versions first
   > tests: add zsh 5.4.2
   > release.md: Make a little more copy-pasteable.
   > Post-release version number bump.
   > Tag version 0.6.0.
   > Tests: add zsh 5.4 and 5.4.1
   > #440: Identify the output.
   > #440: Make sure zsh's git hash is printed when testing against zsh master branch
   > #440: Fix minimum required Zsh version (4.3.11 instead of 4.3.17)
   > #440: Test on Zsh master and intermediate releases since 4.3.11
   > #440: docs: Remove the travis links from README during 'make install'.
   > #440: Make README more readable in source form.
   > #440: Setup IRC/gitter notifications
   > #440: Add build status badge
   > #440: Print zsh version before tests
   > #440: Fix Travis-CI configuration
   > #440: Add Travis-CI configuration
   > release.md: Correct 'git push' instructions.
   > Post-release version number bump.
   > Tag version 0.6.0-rc1.
   > release.md: Create annotated tags, fix markup.
   > changelog: Update through dea1fedc7358.
   > #419: Add links to OpenSUSE build service deb/rpm repositories
   > Merge remote-tracking branch 'upstream/pr/433'
   > changelog: Update through 5feed23962df.
   > docs: Unbreak Fedora link.
   > driver: Fix printing error message to file when cannot resolve highlighters directory location
   > driver: Workaround pattern isearch bug in zsh ≤ 5.3.1, already fixed upstream.
   > 'main': Highlight mismatched 'if'/'fi'.
   > driver: Improve «unhandled ZLE widget 'foo'» error message.
   > 'main': Don't consider «$*» a glob.
   > tests: zsh 5.4-to-be compatibility: Set a new "I am shooting myself in the foot" option.
   > driver: Fix duplicated slash in error message
   > docs: Update zplug install instruction
   > driver: Handle aliases that begin with a '+'
   > driver: Be immune to 'alias' having been redefined.
   > 'main': Highlight possible history expansions in double-quoted strings.
   > docs: Update Homebrew link.
   > driver: Be immune to weird aliases in the calling scope.
   > 'main': Fix highlighting of comments followed by non-comments (on a subsequent line).
   > 'main': Fix a bug concerning command word with embedded colon-space sequences.
   > Add FreeBSD port
   > Add Fedora package
   > changelog: Update for changes pulled out of 0.5.x.
   > Follow-up to 28d7056: Fix test expectations.
   > README: Set alt="" attributes.
   > README: Add a third image.
   > README: Add another image.
   > README: Use a more minimal example iamge.
   > README: Add before/after images
   > changelog: Update through 28d7056.
   > 'main': Escape '!' within double-quoted strings.
   > Post-branch version number bump.
   > changelog: Write `arg0` entry.
   > changelog: Markup tweak.
   > changelog: Add the last few entries.  One remains as a TODO.
   > release.md: Record the specific command I used.
   > changelog: Review.
   > changelog: Update through 0020f59.
   > changelog: Update through d37c55c.
   > changelog: Copyedit.
   > changelog: Update through cef4975.
   > changelog: Start 0.5.0 section.  Update through bc7f8ea.
   > 'main': Followup to fdaeec4: Update comment.
   > 'main': Introduce style fallback for the command word.
   > dev tools: Automagically handle newlines (\n) in $BUFFER.
   > tests: Also test arguments to an anonymous function.
   > Merge remote-tracking branch 'upstream/pr/374' into HEAD
   > 'main': Highlight several more special (non-alphabetic) parameters.
   > 'main': Highlight shell's PID ($$) inside double quotes.
   > 'main': Highlight command substitutions inside double quotes.
   > 'main': Permit subshells to end at command position.
   > 'main': Highlight mismatched foreach/end.
   > dev tools: Add a TODO to introduce code reuse.
   > 'main': Highlight mismatched do/done.
   > 'main': Yet another test for mismatched braces.
   > 'main' / *_check_path: Precompute $#BUFFER and use it for speed gain
   > dev tools: Remove a superfluous empty line.
   > 'main': Highlight 'always' blocks.
   > 'main': Don't find command positions within multiline array literals.
   > dev tools: Stage the copyright block to make diffs smaller.
   > dev tools: Tolerate invalid input.
   > 'main': Restore compatibility with zsh-4.3.14 and older (after e3182c18de8f).
   > dev tools: Automate a recurring step: Set year correctly for new tests.
   > 'main': Highlight first command word in named functions defined in the sh syntax when MULTI_FUNC_DEF is set.
   > 'main': More tests for mismstached parentheses and braces.
   > 'main': Highlight mismatched parentheses and braces.
   > driver: Warn just once when a highlighter is missing.
   > 'main': Support the IGNORE_BRACES option.
   > 'main': Add tests for the IGNORE_BRACES option.
   > 'main': Followup to 51614ca: Run cheaper conditions first.
   > 'brackets': Don't highlight corresponding bracket on accept-line
   > driver: Declare global variables
   > 'main': Avoid triggering a zsh bug related to hashed commands.
   > *: error messages: Fix quoting.
   > *: Change highlighters' namespace.
   > driver: Followup to 80148f6: don't squat on the highlighters' namespace.
   > driver: Followup to d711563: actually make the driver reentrant.
   > noop: Rewrap.
   > README: Add a reference to upstream's documentation.
   > README: Rephrase a question non-negatively^W neutrally.
   > noop: Add comments.
   > 'main': The word after 'sudo' is only a non-command word if it is an option.
   > 'main': Test for redirection earlier.
   > noop: Restructure code for clarity.
   > noop: Fix indentation.
   > driver: Followup to last: make the value more unique.
   > driver: Make it reentrant.
   > minor: Fix typo in development usage message.
   > driver: Enable highlighting during isearch under zsh≥5.3.
   > Merge remote-tracking branch 'danielsh/m0vie-i288-v2' (revised version of upstream/pr/288)
   > dev tools: Extend tests/generate.zsh.
   > dev tools: Add a script that generates a test-data file.
   > 'main': Enable test for issue #238.
   > 'main': Add test for issue #343, concerning the 'command' precommand.
   > 'main': Highlight a broken symlink as a file.
   > 'main': New test, related to issue #328.
   > *: s/echo/print/
   > docs: Minor tweak.
   > docs: State highlighters' designated namespace.
   > docs: s/myhighlighter/acme/g
   > driver: Change a variable name to avoid squatting the highlighters' namespace.
   > 'main': Support vi linewise region (REGION_ACTIVE == 2).
   > driver: Widget binding: Use ${(k)widgets} instead of $(zle -la)
   > 'main': Document _pathseparator styles
   > 'main': Path separators: Leave styles empty by default
   > driver: Stop requiring function_argzero.
   > 'main': simple parameter expansions at command word: Don't use an undefined value.
   > 'main': Add missing arguments.
   > 'main': Try the "non-command word" codepath when a word may be either a command word or a non-command word.
   > dev docs: Document a useful tab completion setting.
   > minor: Fix typo in comment.
   > 'main': Fix issue #290, «Mishighlights "longloops" 'repeat'».
   > minor: tests: Formatting tweak to XPASS output.
   > 'main': Add XFail test for issue #330, concerning command word after array assignment.
   > 'main': Highlight scalar assignments to argv
   > tests: Explicitly test 'default' style inside an array assignment.
   > minor: 'main': Only search for prefixes if :h is a directory
   > 'main': Internal cleanup: drop $style_override.
   > 'main': Highlight path separators
   > 'main': Implement simple command type cache
   > 'main': Use zsh/parameter instead of type -w
   > 'main': Support multiple styles in _zsh_highlight_main_add_region_highlight
   > minor: tests: Add comment for NONE in expected_region_highlight
   > docs: Give example of test that modifies its environment
   > docs: Mention `$BUFFER`
   > docs: Document use of NONE in expected_region_highlight
   > docs: Document writing tests
   > tests: Fail on stderr output
   > Merge part of PR #298
   > Bump copyright years.
   > Merge remote-tracking branch 'upstream/pr/308' into HEAD
   > docs: Namespace highlighters' styles.
   > 'main': Don't leak the PATH_DIRS options.
   > 'main': 2nd optimization that in my tests shows 2.2s -> 2.0s
   > Merge remote-tracking branch 'upstream/pr/315' into HEAD
   > docs: Honour $ZDOTDIR in code examples.
   > docs: Simplify/clarify installation instructions.
   > tests: New test to capture off-by-ones.
   > 'brackets': Fix for one-based indexing
   > docs: Added style key prefix convention
   > driver: Track rename of an unreleased upstream API.
   > docs: Document installation with other plugin managers
   > dev docs: Document testing quirks
   > tests: Add tests for 'brackets' and 'pattern'
   > tests: Followup to last: echo(1) is evil.
   > minor: tests: Quote $BUFFER differently on output.
   > tests: TAP support: Emit a 'description' for all test points
   > minor: tests: Introduce a local variable. No functional change.
   > minor: tests: Tighten up local variable scope.
   > tests: TAP compliance: Do not emit literal '#' in the 'description' part
   > tests: Followup to fd061b5: quote both expected and actual output.
   > 'brackets': Allow unset ZSH_HIGHLIGHT_STYLES
   > tests: Set ZSH_HIGHLIGHT_STYLES=() during tests
   > tests: Remove unused_highlight
   > tests: Test ZSH_HIGHLIGHT_STYLES keys directly
   > brackets: Fix bug introduced in 95d8256
   > 'brackets': Check if brackets match on first pass
   > 'brackets': Use one-based indexing
   > 'brackets': Move highlight call outside conditional
   > 'brackets': Lift local declarations from inside loops
   > dev docs: Create HACKING.md.
   > minor: Rewrap docs for uncompiled readability.
   > tests: Use 'NONE' to denote no highlighting
   > docs: highlighters should use _zsh_highlight_add_highlight
   > Bump copyright years.
   > highlighters: Use _zsh_highlight_add_highlight
   > highlighters: Pass around the style key instead of the style itself
   > tests: Specify the style key instead of the style itself
   > cleanup: Avoid colon after parameter expansion to avoid risking introducing a colon modifier.
   > root-highlighter: use EUID instead of id -u command
   > brackets: Optimize a tiny bit.
   > plugin.zsh: Convert from symlink to plain file
   > release.md: Add a release checklist line item.
   > tests: Expect the correct style
   > tests: Quote style in expected_region_highlight
   > tests: Fix grep syntax
   > apply suffix and isearch zle_highlights on top
   > 'main': Restore support for zsh-4.3.10 and older.
   > widget binding: Fix crucial typo in last commit.
   > widget binding: Further unbreak the build.
   > widget binding: Properly escape widget names at definition.
   > noop: Remove stray statement terminators and line joiners.
   > widget binding: Unbreak the build.
   > widget binding: Remove an unnecessary layer of indirection.
   > Refactor the application of zle_highlight settings
   > 'main': Highlight lone '!' correctly: it's not a history expansion.
   > docs: Clarify oh-my-zsh installation instructions.
   > widget binding: Remove some too-wide exclusions
   > docs: use https:// instead of git://
   > 'main': Don't highlight in vared
   > Merge pull request #272 from psprint/master
   > changelog: Update for upcoming 0.4.1 release.
   > Version number bump.
   > 'main': Don't highlight at the $PS3 prompt.
   > test harness: Properly quote error message interpolations.
   > Revert "wrapping: Don't add '--' when invoking widgets."
   > aliases: Highlight aliases with '=' in their LHS as error.  (Part of issue #263.)
   > aliases: Add a test for one variant of issue #263.
   > tests: Add a 'print failures only' mode to 'make test', called 'make quiet-test'.
   > tests: Add another comment.  No functional change.
   > tests: Add a comment.  No functional change.
   > docs: Note that Debian package has migrated to (been added to) Debian stretch.
   > docs: Note Debian package name.
   > Fix issue #248: Highlight 'pkexec' as a precommand.
   > Fix part of issue #238, "fd redirections at command word".
   > tests: Add two XFail tests for issue #238, "fd redirections at command word".
   > tests: Cover [default].
   > tests: Improve tests by using $unused_highlight.
   > command word: Do not attempt to interpret command separator tokens as anything else.
   > changelog: Start 0.4.1 section.
   > release.md: Clarify release procedure.
   > Post-release version number bump.
   > Tag version 0.4.0.
   > changelog: Update through HEAD (952a97d).
   > docs: Tweaks to highlighters.md after recent refactoring branch.
   > docs; INSTALL.md: Make 'system-wide' section easier to read.
   > docs: INSTALL.md: Streamling .zshrc installation instructions.
   > docs: Minor clarifications.
   > versionstamp: Better $ZSH_HIGHLIGHT_REVISION reporting when running from git.
   > driver: Fix error message wording
   > docs: Grammar fix.
   > docs: Port new text to individual highlighters' documentation.
   > docs: Follow-up to last: Fix markup.
   > docs: Clarify highlighters documentation.
   > docs: Split README.md into INSTALL.md.
   > docs: Fix broken symlinks
   > Merge remote-tracking branch 'phy1729/doc-all'
   > Merge remote-tracking branch 'danielsh/docs-copyedit-v1'
   > 'make perf': Unbreak by porting over 'make test' harness changes.
   > 'main': Fix state check.
   > changelog: Update through HEAD (1933de8).
   > 'make install': Remove +x permission from installed library and documntation files.
   > 'make install': Unbreak PREFIX=~/foo usage.
   > Support the '|&', '&!', '&|' command separators.
   > noop: Consolidate two identical conditionals.
   > internal: Document the ':regular' state.
   > docs: 'main': Improve styles documentation.
   > 'make perf': Designate this target as '.PHONY'.
   > minor: docs: Improve dollar-double-quoted-argument documentation.
   > docs: Clarify 'create a new highlighter' documentation.
   > Fix issue #219: install documentation fully and properly.
   > Drop unnecessary shebang lines.
   > Fix copyright year.
   > Highlight parameter expansions that are a command word.
   > noop: Break out a helper function.
   > tests: Tweak the isolation wrapper for style and robustness.
   > driver: Tolerate KSH_ARRAYS being set in the calling context.
   > dollar-double-quoted-argument: Support the syntax «"${foo}"».  (Issue #186.)
   > tests: Add an XFail test for highlighting «"${foo}"».  (Issue #186.)
   > cursor: Remove cursor highlighting when accepting a line.
   > Fix issue #228, "Support the PATH_DIRS option".
   > tests: Add an XFail test for issue #228, "Support the PATH_DIRS option".
   > minor: Rename a test file to a not-escape-needing name.
   > tests: Provide an independent, auto-cleaned working directory to each test.
   > tests: Document test isolation, implemented some time ago.
   > 'make install': Allow setting $(SHARE_DIR).
   > Add an XFail test for issue #231, "Assignment terminating subshell flags closing parenthesis as an error".
   > brackets: Highlight closing ')' of array assignments correctly.  (Issue #226.)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment