summaryrefslogtreecommitdiffstats
path: root/zsh/oh-my-zsh/plugins/mercurial
diff options
context:
space:
mode:
Diffstat (limited to 'zsh/oh-my-zsh/plugins/mercurial')
-rw-r--r--zsh/oh-my-zsh/plugins/mercurial/README.md69
-rw-r--r--zsh/oh-my-zsh/plugins/mercurial/mercurial.plugin.zsh118
2 files changed, 187 insertions, 0 deletions
diff --git a/zsh/oh-my-zsh/plugins/mercurial/README.md b/zsh/oh-my-zsh/plugins/mercurial/README.md
new file mode 100644
index 0000000..19d4a17
--- /dev/null
+++ b/zsh/oh-my-zsh/plugins/mercurial/README.md
@@ -0,0 +1,69 @@
+# Mercurial plugin
+
+This plugin adds some handy aliases for using Mercurial as well as a few
+utility and prompt functions that can be used in a theme.
+
+To use it, add `mercurial` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... mercurial)
+```
+
+## Aliases
+
+| Alias | Command |
+| ------- | ------------------------------------------- |
+| `hga` | `hg add` |
+| `hgc` | `hg commit` |
+| `hgca` | `hg commit --amend` |
+| `hgci` | `hg commit --interactive` |
+| `hgb` | `hg branch` |
+| `hgba` | `hg branches` |
+| `hgbk` | `hg bookmarks` |
+| `hgco` | `hg checkout` |
+| `hgd` | `hg diff` |
+| `hged` | `hg diffmerge` |
+| `hgp` | `hg push` |
+| `hgs` | `hg status` |
+| `hgsl` | `hg log --limit 20 --template "<template>"` |
+| `hgun` | `hg resolve --list` |
+| `hgi` | `hg incoming` |
+| `hgl` | `hg pull -u` |
+| `hglr` | `hg pull --rebase` |
+| `hgo` | `hg outgoing` |
+| `hglg` | `hg log --stat -v` |
+| `hglgp` | `hg log --stat -p -v` |
+
+## Prompt usage
+
+- Switch to a theme which uses `hg_prompt_info`
+
+- Or customize the `$PROMPT` variable of your current theme to contain current folder mercurial repo info.
+ This can be done by putting a custom version of the theme in `$ZSH_CUSTOM` or by changing `$PROMPT` in
+ `.zshrc` after loading the theme.
+
+ For example, for the `robbyrussell` theme you need to modify `$PROMPT` var by adding `$(hg_prompt_info)`
+ after `$(git_prompt_info)`, so it looks like this:
+
+ ```zsh
+ PROMPT='${ret_status}%{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)$(hg_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'
+ ```
+
+You can also redefine additional vars used in the plugin (after Oh My Zsh is sourced):
+
+```zsh
+ZSH_THEME_HG_PROMPT_PREFIX="%{$fg_bold[magenta]%}hg:(%{$fg[red]%}"
+ZSH_THEME_HG_PROMPT_SUFFIX="%{$reset_color%}"
+ZSH_THEME_HG_PROMPT_DIRTY="%{$fg[magenta]%}) %{$fg[yellow]%}✗%{$reset_color%}"
+ZSH_THEME_HG_PROMPT_CLEAN="%{$fg[magenta]%})"
+```
+
+### Display repo branch and directory status in prompt
+
+This is the same as git plugin does. **Note**: additional changes to `.zshrc`, or using a theme designed
+to use `hg_prompt_info`, are required in order for this to work.
+
+## Maintainers
+
+- [ptrv](https://github.com/ptrv): original creator
+- [oshybystyi](https://github.com/oshybystyi)
diff --git a/zsh/oh-my-zsh/plugins/mercurial/mercurial.plugin.zsh b/zsh/oh-my-zsh/plugins/mercurial/mercurial.plugin.zsh
new file mode 100644
index 0000000..9b85d02
--- /dev/null
+++ b/zsh/oh-my-zsh/plugins/mercurial/mercurial.plugin.zsh
@@ -0,0 +1,118 @@
+# aliases
+alias hga='hg add'
+alias hgc='hg commit'
+alias hgca='hg commit --amend'
+alias hgci='hg commit --interactive'
+alias hgb='hg branch'
+alias hgba='hg branches'
+alias hgbk='hg bookmarks'
+alias hgco='hg checkout'
+alias hgd='hg diff'
+alias hged='hg diffmerge'
+alias hgp='hg push'
+alias hgs='hg status'
+alias hgsl='hg log --limit 20 --template "{node|short} | {date|isodatesec} | {author|person}: {desc|strip|firstline}\n" '
+alias hgun='hg resolve --list'
+# pull and update
+alias hgi='hg incoming'
+alias hgl='hg pull -u'
+alias hglr='hg pull --rebase'
+alias hgo='hg outgoing'
+alias hglg='hg log --stat -v'
+alias hglgp='hg log --stat -p -v'
+
+function hgic() {
+ hg incoming "$@" | grep "changeset" | wc -l
+}
+
+function hgoc() {
+ hg outgoing "$@" | grep "changeset" | wc -l
+}
+
+# functions
+function hg_root() {
+ local dir="$PWD"
+ while [[ "$dir" != "/" ]]; do
+ if [[ -d "$dir/.hg" ]]; then
+ echo "$dir"
+ return 0
+ fi
+ dir="${dir:h}"
+ done
+ return 1
+}
+
+function in_hg() {
+ hg_root >/dev/null
+}
+
+function hg_get_branch_name() {
+ local dir
+ if ! dir=$(hg_root); then
+ return
+ fi
+
+ if [[ ! -f "$dir/.hg/branch" ]]; then
+ echo default
+ return
+ fi
+
+ echo "$(<"$dir/.hg/branch")"
+}
+
+function hg_get_bookmark_name() {
+ local dir
+ if ! dir=$(hg_root); then
+ return
+ fi
+
+ if [[ ! -f "$dir/.hg/bookmarks.current" ]]; then
+ return
+ fi
+
+ echo "$(<"$dir/.hg/bookmarks.current")"
+}
+
+function hg_prompt_info {
+ local dir branch dirty
+ if ! dir=$(hg_root); then
+ return
+ fi
+
+ if [[ ! -f "$dir/.hg/branch" ]]; then
+ branch=default
+ else
+ branch="$(<"$dir/.hg/branch")"
+ fi
+
+ dirty="$(hg_dirty)"
+
+ echo "${ZSH_THEME_HG_PROMPT_PREFIX}${branch:gs/%/%%}${dirty}${ZSH_THEME_HG_PROMPT_SUFFIX}"
+}
+
+function hg_dirty {
+ # Do nothing if clean / dirty settings aren't defined
+ if [[ -z "$ZSH_THEME_HG_PROMPT_DIRTY" && -z "$ZSH_THEME_HG_PROMPT_CLEAN" ]]; then
+ return
+ fi
+
+ # Check if there are modifications
+ local hg_status
+ if [[ "$DISABLE_UNTRACKED_FILES_DIRTY" = true ]]; then
+ if ! hg_status="$(hg status -q 2>/dev/null)"; then
+ return
+ fi
+ else
+ if ! hg_status="$(hg status 2>/dev/null)"; then
+ return
+ fi
+ fi
+
+ # grep exits with 0 when dirty
+ if command grep -Eq '^\s*[ACDIMR!?L].*$' <<< "$hg_status"; then
+ echo $ZSH_THEME_HG_PROMPT_DIRTY
+ return
+ fi
+
+ echo $ZSH_THEME_HG_PROMPT_CLEAN
+}