]> git.phdru.name Git - dotfiles.git/blobdiff - admin/prog/bash_prompt
bash: Move code related to prompt to `admin/prog/bash_prompt`
[dotfiles.git] / admin / prog / bash_prompt
index 315543d1d7507fee16757060f63ee7084ba36503..a262e5e4bd32ce65a1a155ac9e6c7c2ff01ac0f5 100644 (file)
@@ -1,3 +1,11 @@
+cgmem_which_prompt() {
+   local _cgmem_which
+   _cgmem_which="`cgmem_which 2>/dev/null`"
+   if [ -n "$_cgmem_which" ]; then
+      echo "[$_cgmem_which] "
+   fi
+}
+
 short_curdir() {
    if [ "$PWD" = / ]; then
       echo /
@@ -14,3 +22,83 @@ short_curdir() {
    fi
    echo "${_short_curdir}"
 }
+
+# bash_prompt; adapted from
+# https://github.com/necolas/dotfiles/blob/master/shell/bash_prompt and
+# http://vitus-wagner.livejournal.com/1176589.html?thread=40146189#t40146189
+
+prompt_git() {
+    local s=""
+    local branchName=""
+
+    # check if the current directory is in a git repository
+    if git rev-parse --is-inside-work-tree &>/dev/null; then
+
+        # check if the current directory is in .git before running git checks
+        if [ "$(git rev-parse --is-inside-git-dir 2> /dev/null)" == "false" ]; then
+
+            # ensure index is up to date
+            #git update-index --really-refresh -q &>/dev/null
+
+            # check for uncommitted changes in the index
+            if ! $(git diff --quiet --ignore-submodules --cached); then
+                s="$s+";
+            fi
+
+            # check for unstaged changes
+            if [ -n "$(git ls-files --modified)" ]; then
+                s="$s!";
+            fi
+
+            # check for untracked files
+            if [ -n "$(git ls-files --others --exclude-standard)" ]; then
+                s="$s?";
+            fi
+
+            # check for stashed files
+            if $(git rev-parse --verify refs/stash &>/dev/null); then
+                s="$s$";
+            fi
+
+        fi
+
+        # get the short symbolic ref
+        # if HEAD isn't a symbolic ref, get the short SHA
+        # otherwise, just give up
+        branchName="$(git symbolic-ref --quiet --short HEAD 2> /dev/null || \
+                      git rev-parse --short HEAD 2> /dev/null || \
+                      printf "(unknown)")"
+
+        [ -n "$s" ] && s=" [$s]"
+        printf "%s" "$branchName$s "
+    fi
+}
+
+set_prompts() {
+      OPS1=''
+      # display the user, host and current working directory
+      # in the terminal title
+      case "$TERM" in
+         *rxvt*|screen*|*term*|vt100)
+            OPS1+="\[\033]0;${debian_chroot:+($debian_chroot)}\u@\h:\w\007\]"
+            case "$TERM" in
+               screen*)
+                  OPS1+="\[\033k${debian_chroot:+($debian_chroot)}"
+                  OPS1+="\u@\h:\w\033\\\\\]" # Set screen/tmux caption
+               ;;
+            esac
+         ;;
+
+         *)
+            OPS1=""
+         ;;
+      esac
+
+   OPS1+="${debian_chroot:+($debian_chroot)}"
+   OPS1+="\`cgmem_which_prompt\`\u@\${HOSTNAME::5}:\`short_curdir\` "
+   OPS1+="\$(prompt_git)"
+   OPS1+="\\$"
+}
+
+#set_prompts
+#unset set_prompts