1
0
Fork 0
mirror of synced 2024-11-19 14:35:34 -05:00
zimfw/modules/git-info
Eric Nielsen d84587e1a5 Add git-info module
based on the Prezto git module
[function](https://github.com/sorin-ionescu/prezto/blob/master/modules/git/functions/git-info)
and further refactored and simplified.

What changed:
- Commit format only in 'detached HEAD' state, so
  `$(coalesce "%b" "%c")` is not needed, because you only get one of
  those.
- Removed the `added`, `deleted`, `modified`, `renamed` and `unmerged`
  verbose contexts.
- `git status` is only used in verbose mode.
- In non-verbose mode, the `untracked` context is not available, and
  also untracked files are not considered for computing the `dirty`
  context. Using `git status` or checking for untracked files is
  [expensive](https://gist.github.com/sindresorhus/3898739).
2016-12-02 17:20:13 -05:00
..
init.zsh Add git-info module 2016-12-02 17:20:13 -05:00
README.md Add git-info module 2016-12-02 17:20:13 -05:00

Git-info

Exposes git repository status information to prompts.

Many thanks to Sorin Ionescu and Colin Hebert for the original code.

Git 1.7.2 is the minimum required version.

Settings

Ignore Submodules

Retrieving the status of a repository with submodules can take a long time. Submodules may be ignored when 'none', 'untracked', 'dirty', or 'all', which is the default.

zstyle ':zim:git-info' ignore-submodules 'none'

Verbose Mode

Verbose mode uses git status and computes the count of indexed, unindexed and also untracked files. It can be enabled with the following zstyle:

zstyle ':zim:git-info' verbose 'yes'

In non-verbose mode, the 'untracked' context is not available (see Main Contexts below), and also untracked files are not considered for computing the 'dirty' context. Using git status or checking for untracked files is expensive.

Theming

To display information about the current repository in a prompt, define the following styles in the prompt_name_setup function, where the syntax for setting a style is:

zstyle ':zim:git-info:context' format 'string'

Main Contexts

Name Code Description
action %s Special action name (see Special Action Contexts below)
ahead %A Commits ahead of remote count
behind %B Commits behind of remote count
branch %b Branch name
commit %c Commit short hash (when in 'detached HEAD' state)
clean %C Clean state
dirty %D Dirty state (count with untracked files if verbose enabled)
indexed %i Indexed files (count if verbose enabled)
unindexed %I Unindexed files (count if verbose enabled)
position %p Commits from nearest tag count (when in 'detached HEAD' state)
remote %R Remote name
stashed %S Stashed states count
untracked %u Untracked files count (only if verbose enabled)

Untracked Contexts

Name Format Default Value
action:apply value 'apply'
action:bisect value 'bisect'
action:cherry-pick value 'cherry-pick'
action:cherry-pick-sequence value 'cherry-pick-sequence'
action:merge value 'merge'
action:rebase value 'rebase'
action:rebase-interactive value 'rebase-interactive'
action:rebase-merge value 'rebase-merge'

Formatting example for special actions:

zstyle ':zim:git-info:action:bisect' format '<B>'
zstyle ':zim:git-info:action:merge'  format '>M<'
zstyle ':zim:git-info:action:rebase' format '>R>'

Usage

First, format the repository state attributes. For example, to format the branch name, commit, and remote name, define the following styles:

zstyle ':zim:git-info:branch' format 'branch:%b'
zstyle ':zim:git-info:commit' format 'commit:%c'
zstyle ':zim:git-info:remote' format 'remote:%R'

Second, format how the above attributes are displayed in prompts:

zstyle ':zim:git-info:keys' format \
  'prompt'  'git(%b%c)' \
  'rprompt' '[%R]'

Last, add $git_info[prompt] to $PROMPT and $git_info[rprompt] to $RPROMPT respectively and call git-info in the prompt_name_preexec hook function.