Skip to content

Commit

Permalink
Add options to disable tracking and local counts
Browse files Browse the repository at this point in the history
By default, the prompt will show counts for both sections. But users can
now easily remove the counts for either or both sections if they want.
  • Loading branch information
telemachus committed Dec 22, 2023
1 parent 82a7e03 commit f3e764e
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 11 deletions.
16 changes: 13 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,14 +144,24 @@ The `symbol` option prints only `ZSH_THEME_GIT_PROMPT_UPSTREAM_SYMBOL`.
Furthermore, a warning symbol can be configured through `ZSH_THEME_GIT_PROMPT_UPSTREAM_NO_TRACKING` for the case where no remote is available.
`ZSH_THEME_GIT_PROMPT_UPSTREAM_NO_TRACKING` can be set independently of `ZSH_GIT_PROMPT_SHOW_UPSTREAM`.

### Show number of stash entries
The number of stash entries will be shown if `ZSH_GIT_PROMPT_SHOW_STASH` is set.
On Git versions older than 2.35.0 this will execute another Git command every time a new prompt is shown!
### Disable display of numbers
By default, the prompt will show counts for each item in the tracking status and local status sections.
(See [Prompt Structure](#prompt-structure) for details about these sections.)
However, you can disable the display of counts for either or both sections of the prompt using `ZSH_GIT_PROMPT_SHOW_TRACKING_COUNTS` and `ZSH_GIT_PROMPT_SHOW_LOCAL_COUNTS`.
If you set these variables to anything other than `1`, then the symbols will show but not the counts.
For example, a prompt such as `[master|✚2]` will become `[master|✚]` instead.

### Show whether there are stash entries
If `ZSH_GIT_PROMPT_SHOW_STASH` is set, the prompt will display a symbol when there are entries in the stash.
Enabling this will execute another Git command every time a new prompt is shown!
To enable stash entries add the following line to your `.zshrc`:

```bash
ZSH_GIT_PROMPT_SHOW_STASH=1
```
By default, the prompt will also show the count of entries in the stash.
The display of a count is controlled by `ZSH_GIT_PROMPT_SHOW_LOCAL_COUNTS`.
See [above][#disable-display-of-counts] for discussion.

### Force blank
Since the prompt is asynchronous by default, the Git status updates slightly delayed.
Expand Down
48 changes: 40 additions & 8 deletions git-prompt.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ autoload -U colors && colors
# Settings
: "${ZSH_GIT_PROMPT_SHOW_UPSTREAM=""}"
: "${ZSH_GIT_PROMPT_SHOW_STASH=""}"
: "${ZSH_GIT_PROMPT_SHOW_TRACKING_COUNTS="1"}"
: "${ZSH_GIT_PROMPT_SHOW_LOCAL_COUNTS="1"}"
: "${ZSH_GIT_PROMPT_ENABLE_SECONDARY=""}"
: "${ZSH_GIT_PROMPT_NO_ASYNC=""}"
: "${ZSH_GIT_PROMPT_FORCE_BLANK=""}"
Expand Down Expand Up @@ -100,6 +102,8 @@ function _zsh_git_prompt_git_status() {
-v DETACHED="$ZSH_THEME_GIT_PROMPT_DETACHED" \
-v BRANCH="$ZSH_THEME_GIT_PROMPT_BRANCH" \
-v UPSTREAM_TYPE="$ZSH_GIT_PROMPT_SHOW_UPSTREAM" \
-v SHOW_TRACKING_COUNTS="$ZSH_GIT_PROMPT_SHOW_TRACKING_COUNTS" \
-v SHOW_LOCAL_COUNTS="$ZSH_GIT_PROMPT_SHOW_LOCAL_COUNTS" \
-v UPSTREAM_SYMBOL="$ZSH_THEME_GIT_PROMPT_UPSTREAM_SYMBOL" \
-v UPSTREAM_NO_TRACKING="$ZSH_THEME_GIT_PROMPT_UPSTREAM_NO_TRACKING" \
-v UPSTREAM_PREFIX="$ZSH_THEME_GIT_PROMPT_UPSTREAM_PREFIX" \
Expand Down Expand Up @@ -204,33 +208,61 @@ function _zsh_git_prompt_git_status() {
}
if (behind < 0) {
prompt_element(BEHIND, behind * -1);
print BEHIND;
if (SHOW_TRACKING_COUNTS == "1") {
printf "%d", behind * -1;
}
print RC;
}
if (ahead > 0) {
prompt_element(AHEAD, ahead * 1);
print AHEAD;
if (SHOW_TRACKING_COUNTS == "1") {
printf "%d", ahead;
}
print RC;
}
prompt_element(SEPARATOR);
if (unmerged > 0) {
prompt_element(UNMERGED, unmerged);
print UNMERGED;
if (SHOW_LOCAL_COUNTS == "1") {
print unmerged;
}
print RC;
}
if (staged > 0) {
prompt_element(STAGED, staged);
print STAGED;
if (SHOW_LOCAL_COUNTS == "1") {
print staged;
}
print RC;
}
if (unstaged > 0) {
prompt_element(UNSTAGED, unstaged);
print UNSTAGED;
if (SHOW_LOCAL_COUNTS == "1") {
print unstaged;
}
print RC;
}
if (untracked > 0) {
prompt_element(UNTRACKED, untracked);
print UNTRACKED;
if (SHOW_LOCAL_COUNTS == "1") {
print untracked;
}
print RC;
}
if (stashed > 0 && SHOW_STASH != "") {
prompt_element(STASHED, stashed);
if (stashed > 0) {
print STASHED;
if (SHOW_LOCAL_COUNTS == "1") {
print stashed;
}
print RC;
}
if (unmerged == 0 && staged == 0 && unstaged == 0 && untracked == 0) {
Expand Down

0 comments on commit f3e764e

Please sign in to comment.