118 lines
3.0 KiB
Plaintext
Raw Permalink Normal View History

2024-10-29 18:12:34 -05:00
#!/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