mirror of
				https://github.com/ohmyzsh/ohmyzsh.git
				synced 2024-05-11 05:55:17 +00:00 
			
		
		
		
	feat(branch): show mercurial bookmarks if used (#9948)
Co-authored-by: Marc Cornellà <hello@mcornella.com>
This commit is contained in:
		@@ -1,31 +1,47 @@
 | 
			
		||||
# Branch
 | 
			
		||||
# Branch plugin
 | 
			
		||||
 | 
			
		||||
Displays the current Git or Mercurial branch fast.
 | 
			
		||||
This plugin displays the current Git or Mercurial branch, fast. If in a Mercurial repository,
 | 
			
		||||
also display the current bookmark, if present.
 | 
			
		||||
 | 
			
		||||
To use it, add `branch` to the plugins array in your zshrc file:
 | 
			
		||||
 | 
			
		||||
```zsh
 | 
			
		||||
plugins=(... branch)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Speed test
 | 
			
		||||
 | 
			
		||||
### Mercurial
 | 
			
		||||
- `hg branch`:
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
$ time hg branch
 | 
			
		||||
0.11s user 0.14s system 70% cpu 0.355 total
 | 
			
		||||
```
 | 
			
		||||
  ```console
 | 
			
		||||
  $ time hg branch
 | 
			
		||||
  0.11s user 0.14s system 70% cpu 0.355 total
 | 
			
		||||
  ```
 | 
			
		||||
 | 
			
		||||
### Branch plugin
 | 
			
		||||
- branch plugin:
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
$ time zsh /tmp/branch_prompt_info_test.zsh
 | 
			
		||||
0.00s user 0.01s system 78% cpu 0.014 total
 | 
			
		||||
```
 | 
			
		||||
  ```console
 | 
			
		||||
  $ time zsh /tmp/branch_prompt_info_test.zsh
 | 
			
		||||
  0.00s user 0.01s system 78% cpu 0.014 total
 | 
			
		||||
  ```
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
Edit your theme file (eg.: `~/.oh-my-zsh/theme/robbyrussell.zsh-theme`)
 | 
			
		||||
adding `$(branch_prompt_info)` in your prompt like this:
 | 
			
		||||
Copy your theme to `$ZSH_CUSTOM/themes/` and modify it to add `$(branch_prompt_info)` in your prompt.
 | 
			
		||||
This example is for the `robbyrussell` theme:
 | 
			
		||||
 | 
			
		||||
```diff
 | 
			
		||||
- PROMPT='${ret_status}%{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'
 | 
			
		||||
+ PROMPT='${ret_status}%{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)$(branch_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'
 | 
			
		||||
diff --git a/themes/robbyrussell.zsh-theme b/themes/robbyrussell.zsh-theme
 | 
			
		||||
index 2fd5f2cd..9d89a464 100644
 | 
			
		||||
--- a/themes/robbyrussell.zsh-theme
 | 
			
		||||
+++ b/themes/robbyrussell.zsh-theme
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
 PROMPT="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )"
 | 
			
		||||
-PROMPT+=' %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'
 | 
			
		||||
+PROMPT+=' %{$fg[cyan]%}%c%{$reset_color%} $(branch_prompt_info)'
 | 
			
		||||
 
 | 
			
		||||
 ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}git:(%{$fg[red]%}"
 | 
			
		||||
 ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Maintainer
 | 
			
		||||
 
 | 
			
		||||
@@ -3,29 +3,33 @@
 | 
			
		||||
# Oct 2, 2015
 | 
			
		||||
 | 
			
		||||
function branch_prompt_info() {
 | 
			
		||||
  # Defines path as current directory
 | 
			
		||||
  local current_dir=$PWD
 | 
			
		||||
  # While current path is not root path
 | 
			
		||||
  while [[ $current_dir != '/' ]]
 | 
			
		||||
  do
 | 
			
		||||
    # Git repository
 | 
			
		||||
    if [[ -d "${current_dir}/.git" ]]
 | 
			
		||||
    then
 | 
			
		||||
      echo '±' ${"$(<"$current_dir/.git/HEAD")"##*/}
 | 
			
		||||
      return;
 | 
			
		||||
  # Start checking in current working directory
 | 
			
		||||
  local branch="" dir="$PWD"
 | 
			
		||||
  while [[ "$dir" != '/' ]]; do
 | 
			
		||||
    # Found .git directory
 | 
			
		||||
    if [[ -d "${dir}/.git" ]]; then
 | 
			
		||||
      branch="${"$(<"${dir}/.git/HEAD")"##*/}"
 | 
			
		||||
      echo '±' "${branch:gs/%/%%}"
 | 
			
		||||
      return
 | 
			
		||||
    fi
 | 
			
		||||
    # Mercurial repository
 | 
			
		||||
    if [[ -d "${current_dir}/.hg" ]]
 | 
			
		||||
    then
 | 
			
		||||
      if [[ -f "$current_dir/.hg/branch" ]]
 | 
			
		||||
      then
 | 
			
		||||
        echo '☿' $(<"$current_dir/.hg/branch")
 | 
			
		||||
 | 
			
		||||
    # Found .hg directory
 | 
			
		||||
    if [[ -d "${dir}/.hg" ]]; then
 | 
			
		||||
      if [[ -f "${dir}/.hg/branch" ]]; then
 | 
			
		||||
        branch="$(<"${dir}/.hg/branch")"
 | 
			
		||||
      else
 | 
			
		||||
        echo '☿ default'
 | 
			
		||||
        branch="default"
 | 
			
		||||
      fi
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
      if [[ -f "${dir}/.hg/bookmarks.current" ]]; then
 | 
			
		||||
        branch="${branch}/$(<"${dir}/.hg/bookmarks.current")"
 | 
			
		||||
      fi
 | 
			
		||||
 | 
			
		||||
      echo '☿' "${branch:gs/%/%%}"
 | 
			
		||||
      return
 | 
			
		||||
    fi
 | 
			
		||||
    # Defines path as parent directory and keeps looking for :)
 | 
			
		||||
    current_dir="${current_dir:h}"
 | 
			
		||||
 | 
			
		||||
    # Check parent directory
 | 
			
		||||
    dir="${dir:h}"
 | 
			
		||||
  done
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user