From e37710be48c1f92d9103ec6c4325b40ab855d23c Mon Sep 17 00:00:00 2001 From: Oleg Broytman Date: Fri, 12 Jun 2020 21:11:27 +0300 Subject: [PATCH] bash: Move code related to prompt to `admin/prog/bash_prompt` --- .bash_prompt | 192 ----------------------------------------- .profile | 23 +---- admin/prog/bash_prompt | 88 +++++++++++++++++++ 3 files changed, 92 insertions(+), 211 deletions(-) delete mode 100644 .bash_prompt diff --git a/.bash_prompt b/.bash_prompt deleted file mode 100644 index 609f19f..0000000 --- a/.bash_prompt +++ /dev/null @@ -1,192 +0,0 @@ -#!/bin/bash - -# 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; printf "%s" $?) == 0 ]; 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 ! $(git diff-files --quiet --ignore-submodules --); 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" "$1$branchName$s" - else - return - fi -} - -set_prompts() { - local black="" - local blue="" - local bold="" - local cyan="" - local dim="" - local green="" - local orange="" - local magenta="" - local red="" - local reset="" - local white="" - local yellow="" - - local dim_black="" - local dim_blue="" - local dim_bold="" - local dim_cyan="" - local dim_green="" - local dim_orange="" - local dim_magenta="" - local dim_red="" - local dim_white="" - local dim_yellow="" - - local charStyle="" - local gitStyle="" - local hostStyle="" - local userStyle="" - local wdirStyle="" - - if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then - tput sgr0 # reset colors - - bold=$(tput bold) - dim=$(tput dim) - reset=$(tput sgr0) - - black=$(tput setaf 0) - blue=$(tput setaf 4) - cyan=$(tput setaf 6) - green=$(tput setaf 2) - orange=$(tput setaf 3) - magenta=$(tput setaf 5) - red=$(tput setaf 1) - white=$bold$(tput setaf 7) - yellow=$(tput setaf 3) - - dim_black=$dim$black - dim_blue=$dim$blue - dim_cyan=$dim$cyan - dim_green=$dim$green - dim_orange=$dim$orange - dim_magenta=$dim$magenta - dim_red=$dim$red - dim_white=$dim$white - dim_yellow=$dim$yellow - else - bold="" - dim="" - reset="\e[0m" - - black="\e[0;30m" - blue="\e[0;34m" - cyan="\e[0;36m" - green="\e[0;32m" - orange="\e[0;33m" - magenta="\e[0;35m" - red="\e[0;31m" - white="\e[0;37m" - yellow="\e[0;33m" - - dim_black="\e[1;30m" - dim_blue="\e[1;34m" - dim_cyan="\e[1;36m" - dim_green="\e[1;32m" - dim_orange="\e[1;33m" - dim_magenta="\e[1;35m" - dim_red="\e[1;31m" - dim_white="\e[1;37m" - dim_yellow="\e[1;33m" - fi - - charStyle="$reset$bold$black" - gitStyle="\[$white\]on \[$magenta\]" - case "$BACKGROUND" in - DARK|dark) - hostStyle="$reset$cyan" - ;; - LIGHT|light) - hostStyle="$reset$blue" - ;; - esac - wdirStyle="$reset$green" - - - # logged in as root - if [[ "$USER" == "root" ]]; then - userStyle="$bold$red" - else - userStyle="$orange" - fi - - # build the prompt - # display the user, host and current working directory in the terminal title - case "$TERM" in - *rxvt*|screen*|*term*|vt100) - PS1="\[\033]0;\u@\h:\w\007\]" - case "$TERM" in - screen*) - PS1+="\[\033k\u@\h:\w\033\\\]" # Set screen/tmux caption - ;; - esac - ;; - - *) - PS1="" - ;; - esac - - #PS1+="\n" # newline - PS1+="\[$userStyle\]\u" # username - PS1+="\[$charStyle\]@" - PS1+="\[$hostStyle\]\h " # host - #PS1+="\[$charStyle\]: " - PS1+="\[$wdirStyle\]\W " # working directory - PS1+='`erco=$?; [ $erco == 0 ] && echo -n ":)" || echo -n '"\"\[$red\]:(\[$reset\] $\""'?=$erco` ' - PS1+="\$(prompt_git \"$gitStyle\")" # git repository details - #PS1+="\n" - PS1+="\[$charStyle\]\$ \[$reset\]" # $ (and reset color) - - export PS1 -} - -set_prompts -unset set_prompts diff --git a/.profile b/.profile index 008efd5..69491d0 100644 --- a/.profile +++ b/.profile @@ -175,30 +175,15 @@ if [ -t 0 ] ; then fi if test -n "$BASH_VERSION"; then - # 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=${OPS1}"\[\033k${debian_chroot:+($debian_chroot)}\u@\h:\w\033\\\\\]" # Set screen/tmux caption - ;; - esac - ;; - - *) - OPS1="" - ;; - esac + . "$ENV" if [ -r "$HOME"/admin/prog/bash_prompt ]; then . "$HOME"/admin/prog/bash_prompt - OPS1=${OPS1}"${debian_chroot:+($debian_chroot)}\u@\${HOSTNAME::5}:\`short_curdir\` \\$" + set_prompts + unset set_prompts else - OPS1=${OPS1}"${debian_chroot:+($debian_chroot)}\u@\h:\W \\$" + OPS1="${debian_chroot:+($debian_chroot)}\u@\h:\W \\$" fi - . "$ENV" else OPS1="${debian_chroot:+($debian_chroot)}`/usr/bin/whoami`@`/bin/hostname -s` >" diff --git a/admin/prog/bash_prompt b/admin/prog/bash_prompt index 315543d..a262e5e 100644 --- a/admin/prog/bash_prompt +++ b/admin/prog/bash_prompt @@ -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 -- 2.39.2