summaryrefslogtreecommitdiff
path: root/01_Internal.zsh
diff options
context:
space:
mode:
authorHugues Hiegel <hugues.hiegel@qosmos.com>2012-01-24 17:18:40 +0100
committerHugues Hiegel <hugues.hiegel@qosmos.com>2012-01-24 17:18:40 +0100
commitf8dfa7bf4d674d6b5a2b5c02ef484ac1d228a0e0 (patch)
tree6c8fb86b52be2b835e8865ac5b6eb985699a7729 /01_Internal.zsh
parent6eb31533615e06e7701c075398cafa13658c52fe (diff)
-- HUGE CLEANUP -- Phase #1
Diffstat (limited to '01_Internal.zsh')
-rw-r--r--01_Internal.zsh322
1 files changed, 322 insertions, 0 deletions
diff --git a/01_Internal.zsh b/01_Internal.zsh
new file mode 100644
index 0000000..8e4991a
--- /dev/null
+++ b/01_Internal.zsh
@@ -0,0 +1,322 @@
+##
+## Part of configuration files for Zsh 4
+## by Hugues Hiegel <hugues@hiegel.fr>
+##
+## NO WARRANTY PROVIDED, USE AT YOUR OWN RISKS
+##
+## You are encouraged to use, modify, and redistribute
+## these files with or without this notice.
+##
+
+##
+## User-defined functions
+##
+#
+# For preexec, precmd, chpwd and other built-in functions,
+# go see the file Prompts.zsh
+#
+
+
+__cmd_exists ()
+{
+ which -p $1 >/dev/null 2>&1
+}
+
+__term_title()
+{
+ # Jobs
+ typeset -A command
+ for word in ${=@} ; command[$#command]=$word
+ if [ "$command[0]" = "fg" ]
+ then
+ lastjob=$(ps t `tty` | grep "[0-9]\+[[:blank:]]\+`tty | sed 's/\/dev\///'`[[:blank:]]\+T.\? \+.:.. \\\_ " | tail -n1 | cut -c32-)
+ set "$lastjob"
+ fi
+ if [ "$command[0]" = "screen" -o "$command[0]" = "tmux" ]
+ then
+ # discards screen args
+ set $command[0]
+ fi
+
+ [ ! "$@" = "" ] && set " |" $@
+
+ if [[ -t 1 ]]
+ then
+ case $TERM in
+ sun-cmd)
+ print -Pn "\e]l%n@%m %~$@\e\\" # Never tested..
+ ;;
+ *term*|rxvt*|putty)
+ print -Pn "\e]0;%n@%m (%l) %~$@\a" # Sets term title
+ ;;
+ screen*)
+ local _sep=""
+ [ $# -gt 0 ] && _sep=$1 && shift # gets and discards the separator, if any.
+ #if [ ! -z "$TMUX" ]
+ #then
+ # Tmux
+ #print -Pn "\e]0;%n@%m (%l) %~${_sep:+$_sep #[fg=yellow,bold]}$@\a" # Sets term title
+ print -Pn "\e]0;#[fg=red]%n#[fg=default,bold]@#[fg=red]%m#[default] (#[fg=cyan]%l#[fg=default]) #[fg=red]%~${_sep:+#[default,fg=default]$_sep #[fg=yellow,bold]$@}#[default,fg=default]\a"
+ #else
+ # Classic screen
+ # hardstatus
+ #print -Pn "\e]2;{+b W}SCREEN #n {-b W}| {R}?u(u) ?{W}{r}%n@%m{W} ({c}%l{W}) {R}%~{W}${_sep:+$_sep \{+b Y\}}$@{-b W}\a" # Sets hardstatus line (term title)
+ # print -Pn "\e]2;{R}?u(u) ?{W}{r}%n{R}@{r}%m{-b W} ({+b c}%l{-b W}) {R}%~{W}${_sep:+$_sep \{+b Y\}}$@{-b W}\a" # Sets hardstatus line (term title)
+ # caption
+ # print -Pn "\ek"
+ # [ "$SUDO_USER" != "" ] && print -Pn "($USER) "
+ # print -Pn "${@:-%~}"
+ # print -Pn "\e\\"
+ #fi
+ ;;
+ *)
+ ;;
+ esac
+ fi
+}
+
+__preprint()
+{
+ local my_color i
+ my_color=${2-"$_prompt_colors[generic]"}
+
+ hbar=$T_
+ for i in {1..$((74 - ${#1} - 5))}
+ do
+ hbar=${hbar}$_tq_
+ done
+ hbar=${hbar}$_T
+
+ if [ "$1" != "" ]
+ then
+ print -Pn "${C_}$my_color;1${_C}${hbar}$T_$_tj_$_T${C_}0;$my_color${_C} $1 ${C_}0;$my_color;1${_C}$T_$_tm_$_tq_$_T\r${C_}0${_C}"
+ else
+ print -Pn "${C_}$my_color;1${_C}${hbar}$T_$_tq_$_tq_$_tq_$_tq_$_tq_$_T${C_}0${_C}"
+ fi
+}
+
+__get_gcl_branch ()
+{
+ case $1 in
+ git)
+ __get_git_branch
+ ;;
+ hg)
+ __get_hg_branch
+ ;;
+ *)
+ ;;
+ esac
+}
+
+__get_hg_branch ()
+{
+ HGROOT=$(hg root 2>/dev/null)
+ if [ ! -z "$HGROOT" ]
+ then
+ hg branch
+ fi
+}
+
+__get_git_branch ()
+{
+ local my_git_branch checkouted_branch="yes"
+
+ if [ -f ".repo/manifests.git/config" ]
+ then
+ my_git_branch=$(grep merge .repo/manifests.git/config | awk '{print $3}')
+ if [ $my_git_branch != "" ]
+ then
+ echo "[$my_git_branch]"
+ return
+ fi
+ fi
+
+ # Get git branch only from git managed folders (not ignored subfolders..)
+ [ "$( ( git ls-files ; git ls-tree HEAD . ) 2>&- | head -n1)" = "" -a \( ! -d .git -o "$(git rev-parse --git-dir 2>&-)" != ".git" \) -a "$(git rev-parse --is-inside-git-dir 2>&-)" != "true" ] && return
+
+ GIT_DIR=$(git rev-parse --git-dir)
+
+ # Get current working GIT branch
+ my_git_branch="$(git branch 2>&- | grep -E '^\* ' | cut -c3-)"
+
+ if [ "$my_git_branch" != "" ]
+ then
+ # If not on a working GIT branch, get the named current commit-ish inside parenthesis
+ [ "$my_git_branch" = "(no branch)" ] &&\
+ checkouted_branch="" && \
+ my_git_branch="$(git name-rev --name-only HEAD 2>&- | sed 's,^tags/,,;s,^remotes/,,;s,\^0$,,')"
+
+ # If neither on a named commit-ish, show commit-id
+ if [ "$my_git_branch" = "undefined" ]
+ then
+ my_git_branch="$(git rev-parse --verify HEAD 2>&-)"
+ fi
+ else
+ # Initial commit
+ if [ -L $GIT_DIR/HEAD -a ! -f $GIT_DIR/HEAD ]
+ then
+ my_git_branch="$(basename $GIT_DIR/$(LC_ALL=C stat --printf="%N\n" $GIT_DIR/HEAD | tr '`' "'" | cut -d\' -f4))"
+ else
+ my_git_branch="$(basename $GIT_DIR/$(cat $GIT_DIR/HEAD | sed 's/^\([0-9a-f]\{2\}\)\([0-9a-f]\{38\}\)$/objects\/\1\/\2/;s/^ref: //'))"
+ fi
+ fi
+
+ # Rebase in progress ?
+ if [ -d $GIT_DIR/rebase-merge -o -d $GIT_DIR/rebase-apply ]
+ then
+ local rebase current last
+ local REBASE_DIR
+
+ if [ -d $GIT_DIR/rebase-merge ]
+ then
+ REBASE_DIR=$GIT_DIR/rebase-merge
+ else
+ REBASE_DIR=$GIT_DIR/rebase-apply
+ fi
+
+ if [ "$REBASE_DIR" = "$GIT_DIR/rebase-merge" ]
+ then
+ current=$(< $REBASE_DIR/done wc -l)
+ last=$(( $current + $(< $REBASE_DIR/git-rebase-todo grep -v "^#\|^[[:blank:]]*$" | wc -l) ))
+ rebase=$rebase$rebase_in_progress": "
+ else
+ current=$(cat $REBASE_DIR/next)
+ last=$(cat $REBASE_DIR/last)
+ fi
+
+ # Then the result
+ my_git_branch="[rebase $current/$last: "$(git name-rev --name-only "$(cat $REBASE_DIR/onto 2>/dev/null)" 2>/dev/null)".."$my_git_branch"]"
+ [ -r $REBASE_DIR/head-name ] && my_git_branch=$my_git_branch" "$(< $REBASE_DIR/head-name sed 's/^refs\///;s/^heads\///')
+ else
+ # No rebase in progress, put '(' ')' if needed
+ [ ! "$checkouted_branch" ] && my_git_branch="($my_git_branch)"
+ fi
+
+ if [ "$(git status 2>&- | grep "new file" | head -n1)" != "" ] ; then
+ # ADDED FILES
+ my_git_branch=$my_git_branch
+ fi
+
+ echo $my_git_branch
+}
+
+__get_guilt_series ()
+{
+ # Guilt
+ #
+ guilt=""
+
+ if ( __cmd_exists guilt && guilt status >/dev/null 2>&- )
+ then
+ applied=$(guilt applied 2>/dev/null | wc -l)
+ unapplied=$(guilt unapplied 2>/dev/null | wc -l)
+ if [ $(($applied + $unapplied)) -gt 0 ]
+ then
+ guilt=" "$c_$_guilt_colors[applied]$_C
+ while [ $applied -gt 0 ]
+ do
+ guilt=$guilt"·"
+ applied=$(($applied - 1))
+ done
+ guilt=$guilt$c_$_guilt_colors[unapplied]$_C
+ while [ $unapplied -gt 0 ]
+ do
+ guilt=$guilt"·"
+ unapplied=$(($unapplied - 1))
+ done
+ guilt=$guilt$C_$colors[none]$_C
+ fi
+ fi
+
+ echo $guilt
+}
+
+# We *must* have previously checked that
+# we obtained a correct GIT branch with
+# a call to `__get_git_branch`
+__get_git_status ()
+{
+ local my_git_status cached not_up_to_date managment_folder
+
+ if [ ! -z "$DO_NOT_CHECK_GIT_STATUS" ]
+ then return
+ fi
+
+ if [ -f ".repo/manifests.git/config" ]
+ then
+ echo "$_git_colors[up_to_date]";
+ return
+ fi
+
+ if [ "$(git rev-parse --is-inside-git-dir)" = "true" -o "$(git config --get core.bare)" = "true" ] ; then
+ echo "$_git_colors[managment_folder]"
+ return
+ fi
+
+ if [ "$(git diff --cached 2>&- | grep '^diff ' | head -n1 )" != "" ] ; then
+ cached="yes"
+ fi
+ if [ "$(git ls-files -m 2>&- | head -n1)" != "" ] ; then
+ not_up_to_date="yes"
+ fi
+
+ GIT_DIR=$(git rev-parse --git-dir 2>/dev/null)
+
+ if [ "$cached" != "" -a "$not_up_to_date" != "" ] ; then
+ my_git_status="$_git_colors[cached_and_not_up_to_date]"
+ elif [ "$cached" != "" ] ; then
+ my_git_status="$_git_colors[cached]"
+ elif [ "$not_up_to_date" != "" ] ; then
+ my_git_status="$_git_colors[not_up_to_date]"
+ elif [ "$(git cat-file -t HEAD 2>/dev/null)" != "commit" ] ; then
+ if [ ! -z "$(git ls-files)" ] ; then
+ my_git_status="$_git_colors[cached]"
+ else
+ my_git_status="$_git_colors[init_in_progress]"
+ fi
+ else
+ if [ -f $GIT_DIR/MERGE_HEAD ]
+ then
+ my_git_status="$_git_colors[cached]"
+ else
+ my_git_status="$_git_colors[up_to_date]"
+ fi
+ fi
+
+ echo $my_git_status
+}
+
+__zsh_status ()
+{
+ if [ $ZDOTDIR != "" ]
+ then
+ cd $ZDOTDIR >/dev/null
+ _status="$(git describe --always)"
+ if [ "$( (git diff --cached ; git diff) | head -n1)" != "" ]
+ then
+ _status=$_status"-$( (git diff --cached ; git diff) | md5sum | sed 's/^\(.......\).*$/-D1rTY-\1/')"
+ fi
+ echo $_status
+ else
+ echo
+ fi
+}
+
+__normal_user ()
+{
+ if [ -e /etc/login.defs ]
+ then
+ eval `grep -v '^[$#]' /etc/login.defs | grep "^UID_" | tr -d '[:blank:]' | sed 's/^[A-Z_]\+/&=/'`
+ [ \( $UID -ge $UID_MIN \) ]
+ else
+ [ "`whoami`" != "root" ]
+ fi
+}
+
+__privileged_user ()
+{
+ ! __normal_user
+}
+
+