118 lines
3.0 KiB
Bash
Executable File
118 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# This script sets iTerm2 user-defined variables describing the state of the git
|
|
# repo in the current directory.
|
|
#
|
|
# For more information on the status bar, see:
|
|
# https://www.iterm2.com/3.3/documentation-status-bar.html
|
|
#
|
|
# Installation instructions for this script:
|
|
#
|
|
# bash: Place this in .bashrc.
|
|
# --------------------------------------------------------------------------------------
|
|
# function iterm2_print_user_vars() {
|
|
# it2git
|
|
# }
|
|
|
|
# fish: Place this in ~/.config/fish/config.fish after the line
|
|
# "source ~/.iterm2_shell_integration.fish".
|
|
# --------------------------------------------------------------------------------------
|
|
# function iterm2_print_user_vars
|
|
# it2git
|
|
# end
|
|
|
|
# tcsh: Place this in .tcshrc
|
|
# --------------------------------------------------------------------------------------
|
|
# alias get_current_branch "bash -c '((git branch 2> /dev/null) | grep \* | cut -c3-)'"
|
|
# alias _iterm2_user_defined_vars 'it2git'
|
|
|
|
# zsh:Place this in .zshrc after "source /Users/georgen/.iterm2_shell_integration.zsh".
|
|
# --------------------------------------------------------------------------------------
|
|
# iterm2_print_user_vars() {
|
|
# it2git
|
|
# }
|
|
|
|
GIT_BINARY=/usr/bin/git
|
|
|
|
dirty() {
|
|
# Outputs "dirty" or "clean"
|
|
OUTPUT=$("$GIT_BINARY" status --porcelain --ignore-submodules -unormal 2>/dev/null)
|
|
if (($?)); then
|
|
echo "clean"
|
|
return
|
|
fi
|
|
if [ -z "$OUTPUT" ]; then
|
|
echo "clean"
|
|
else
|
|
echo "dirty"
|
|
fi
|
|
}
|
|
|
|
counts() {
|
|
OUTPUT=$("$GIT_BINARY" rev-list --left-right --count HEAD...@'{u}' 2>/dev/null)
|
|
if (($?)); then
|
|
echo "error"
|
|
return
|
|
fi
|
|
echo "$OUTPUT"
|
|
}
|
|
|
|
branch() {
|
|
OUTPUT=$("$GIT_BINARY" symbolic-ref -q --short HEAD 2>/dev/null || git rev-parse --short HEAD 2>/dev/null)
|
|
if (($?)); then
|
|
return
|
|
fi
|
|
echo "$OUTPUT"
|
|
}
|
|
|
|
adds() {
|
|
"${GIT_BINARY}" ls-files --others --exclude-standard | wc -l
|
|
}
|
|
|
|
deletes() {
|
|
"${GIT_BINARY}" ls-files --deleted --exclude-standard | wc -l
|
|
}
|
|
function iterm2_begin_osc {
|
|
printf "\033]"
|
|
}
|
|
|
|
function iterm2_end_osc {
|
|
printf "\007"
|
|
}
|
|
|
|
function iterm2_set_user_var() {
|
|
iterm2_begin_osc
|
|
printf "1337;SetUserVar=%s=%s" "$1" $(printf "%s" "$2" | base64 | tr -d '\n')
|
|
iterm2_end_osc
|
|
}
|
|
|
|
git_poll () {
|
|
DIRECTORY="$1"
|
|
cd "$DIRECTORY"
|
|
DIRTY=$(dirty)
|
|
COUNTS=$(counts)
|
|
PUSH_COUNT=$(cut -f1 <<< "$COUNTS")
|
|
PULL_COUNT=$(cut -f2 <<< "$COUNTS")
|
|
BRANCH=$(branch)
|
|
|
|
iterm2_set_user_var gitBranch "$BRANCH"
|
|
iterm2_set_user_var gitDirty "$DIRTY"
|
|
iterm2_set_user_var gitPushCount "$PUSH_COUNT"
|
|
iterm2_set_user_var gitPullCount "$PULL_COUNT"
|
|
iterm2_set_user_var gitAdds "$ADDS"
|
|
iterm2_set_user_var gitDeletes "$DELETES"
|
|
}
|
|
|
|
"$GIT_BINARY" rev-parse --git-dir 2>/dev/null >/dev/null
|
|
if (($?)); then
|
|
iterm2_set_user_var gitBranch ""
|
|
iterm2_set_user_var gitDirty ""
|
|
iterm2_set_user_var gitPushCount ""
|
|
iterm2_set_user_var gitPullCount ""
|
|
iterm2_set_user_var gitAdds ""
|
|
iterm2_set_user_var gitDeletes ""
|
|
else
|
|
git_poll "$PWD"
|
|
fi
|
|
|
|
|