summaryrefslogtreecommitdiff
path: root/plugins/fossil/fossil.plugin.zsh
blob: fadf6095d7604bdb9c08876645371b8981b83cea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
_FOSSIL_PROMPT=""

# Prefix at the very beginning of the prompt, before the branch name
ZSH_THEME_FOSSIL_PROMPT_PREFIX="%{$fg_bold[blue]%}fossil:(%{$fg_bold[red]%}"

# At the very end of the prompt
ZSH_THEME_FOSSIL_PROMPT_SUFFIX="%{$fg_bold[blue]%})"

# Text to display if the branch is dirty
ZSH_THEME_FOSSIL_PROMPT_DIRTY=" %{$fg_bold[red]%}✖"

# Text to display if the branch is clean
ZSH_THEME_FOSSIL_PROMPT_CLEAN=" %{$fg_bold[green]%}✔"

function fossil_prompt_info() {
  local branch=$(fossil branch current 2>&1)

  # if we're not in a fossil repo, don't show anything
  ! command grep -q "use --repo" <<< "$branch" || return

  local changes=$(fossil changes)
  local dirty="$ZSH_THEME_FOSSIL_PROMPT_CLEAN"

  if [[ -n "$changes" ]]; then
    dirty="$ZSH_THEME_FOSSIL_PROMPT_DIRTY"
  fi

  printf '%s %s %s %s %s' \
    "$ZSH_THEME_FOSSIL_PROMPT_PREFIX" \
    "${branch:gs/%/%%}" \
    "$ZSH_THEME_FOSSIL_PROMPT_SUFFIX" \
    "$dirty" \
    "%{$reset_color%}"
}

function _fossil_prompt () {
  local current=`echo $PROMPT $RPROMPT | grep fossil`

  if [ "$_FOSSIL_PROMPT" = "" -o "$current" = "" ]; then
    local _prompt=${PROMPT}
    local _rprompt=${RPROMPT}

    local is_prompt=`echo $PROMPT | grep git`

    if [ "$is_prompt" = "" ]; then
      RPROMPT="$_rprompt"'$(fossil_prompt_info)'
    else
      PROMPT="$_prompt"'$(fossil_prompt_info) '
    fi

    _FOSSIL_PROMPT="1"
  fi
}

autoload -U add-zsh-hook
add-zsh-hook precmd _fossil_prompt