-
-
Save Erreur32/34149919010d7b517207807a7ea41305 to your computer and use it in GitHub Desktop.
bash prompt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
txtwht="\[\e[00m\]" # White | |
txtred="\[\e[0;31m\]" # Red | |
txtgrn="\[\e[0;32m\]" # Green | |
txtpur="\[\e[0;35m\]" # Purple | |
txtblu="\[\e[0;34m\]" # Blue | |
bldgrn="\[\e[1;32m\]" # Green | |
bldcyn="\[\e[1;36m\]" # Cyan | |
function parse_git_this_branch { | |
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/' | |
} | |
function parse_git_deleted { | |
[[ $(git status 2> /dev/null | grep deleted:) != "" ]] && echo "-" | |
} | |
function parse_git_added { | |
[[ $(git status 2> /dev/null | grep "Untracked files:") != "" ]] && echo "+" | |
} | |
function parse_git_modified { | |
[[ $(git status 2> /dev/null | grep modified:) != "" ]] && echo "*" | |
} | |
function parse_git_dirty { | |
echo "$(parse_git_added)$(parse_git_modified)$(parse_git_deleted)" | |
} | |
function parse_git_branch { | |
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/(\1$(parse_git_dirty))/" | |
} | |
function parse_ps1 { | |
echo "${bldcyn}[\W]${txtwht}\$(parse_git_branch)\n$> " | |
} | |
if [ "$color_prompt" = yes ]; then | |
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' | |
else | |
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' | |
fi | |
unset color_prompt force_color_prompt | |
export PS1=$(parse_ps1) | |
source "$HOME/bin/ps1_functions" | |
ps1_set --prompt ∴ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# | |
# Source this file in your ~/.bash_profile or interactive startup file. | |
# This is done like so: | |
# | |
# [[ -s "$HOME/.rvm/contrib/ps1_functions" ]] && | |
# source "$HOME/.rvm/contrib/ps1_functions" | |
# | |
# Then in order to set your prompt you simply do the following for example | |
# | |
# Examples: | |
# | |
# ps1_set --prompt ∫ | |
# | |
# or | |
# | |
# ps1_set --prompt ∴ | |
# | |
# This will yield a prompt like the following, for example, | |
# | |
# 00:00:50 wayneeseguin@GeniusAir:~/projects/db0/rvm/rvm (git:master:156d0b4) ruby-1.8.7-p334@rvm | |
# ∴ | |
# | |
ps1_titlebar() | |
{ | |
case $TERM in | |
(xterm*|rxvt*) | |
printf "%s" "\033]0;\\u@\\h: \W\\007" | |
;; | |
esac | |
} | |
ps1_identity() | |
{ | |
if (( $UID == 0 )) ; then | |
printf "%s" "\[\033[31m\]\\u\[\033[0m\]@\[\033[36m\]\\h\[\033[35m\]:\w\[\033[0m\] " | |
else | |
printf "%s" "\[\033[32m\]\\u\[\033[0m\]@\[\033[36m\]\\h\[\033[35m\]:\w\[\033[0m\] " | |
fi | |
} | |
ps1_git() | |
{ | |
local branch="" sha1="" line="" attr="" color=0 | |
shopt -s extglob # Important, for our nice matchers :) | |
command -v git >/dev/null 2>&1 || { | |
printf " \033[1;37m\033[41m[git not found]\033[m " | |
return 0 | |
} | |
branch=$(git symbolic-ref -q HEAD 2>/dev/null) || return 0 # Not in git repo. | |
branch=${branch##refs/heads/} | |
# Now we display the branch. | |
sha1=$(git rev-parse --short --quiet HEAD) | |
case "${branch:-"(no branch)"}" in | |
production|prod) attr="1;37m\033[" ; color=41 ;; # red | |
master|deploy) color=31 ;; # red | |
stage|staging) color=33 ;; # yellow | |
dev|develop|development) color=34 ;; # blue | |
next) color=36 ;; # gray | |
*) | |
if [[ -n "${branch}" ]] ; then # Feature Branch :) | |
color=32 # green | |
else | |
color=0 # reset | |
fi | |
;; | |
esac | |
[[ $color -gt 0 ]] && | |
printf "\[\033[${attr}${color}m\](git:${branch}$(ps1_git_status):$sha1)\[\033[0m\] " | |
} | |
ps1_git_status() | |
{ | |
local git_status="$(git status 2>/dev/null)" | |
[[ "${git_status}" = *deleted* ]] && printf "%s" "-" | |
[[ "${git_status}" = *Untracked[[:space:]]files:* ]] && printf "%s" "+" | |
[[ "${git_status}" = *modified:* ]] && printf "%s" "*" | |
} | |
ps1_ruby() | |
{ | |
printf "%s %s" $(echo $RUBY_ENGINE) $(echo $RUBY_VERSION) | |
} | |
ps1_update() | |
{ | |
local prompt_char='$' separator="\n" notime=0 | |
(( $UID == 0 )) && prompt_char='#' | |
while [[ $# -gt 0 ]] ; do | |
local token="$1" ; shift | |
case "$token" in | |
--trace) | |
export PS4="+ \${BASH_SOURCE##\${rvm_path:-}} : \${FUNCNAME[0]:+\${FUNCNAME[0]}()} \${LINENO} > " | |
set -o xtrace | |
;; | |
--prompt) | |
prompt_char="$1" | |
shift | |
;; | |
--noseparator) | |
separator="" | |
;; | |
--separator) | |
separator="$1" | |
shift | |
;; | |
--notime) | |
notime=1 | |
;; | |
*) | |
true # Ignore everything else. | |
;; | |
esac | |
done | |
if (( notime > 0 )) ; then | |
PS1="$(ps1_titlebar)$(ps1_identity)$(ps1_git)$(ps1_ruby)${separator}${prompt_char} " | |
else | |
PS1="$(ps1_titlebar)\D{%H:%M:%S} $(ps1_identity)$(ps1_git)$(ps1_ruby)${separator}${prompt_char} " | |
fi | |
} | |
ps2_set() | |
{ | |
PS2=" \[\033[0;40m\]\[\033[0;33m\]> \[\033[1;37m\]\[\033[1m\]" | |
} | |
ps4_set() | |
{ | |
export PS4="+ \${BASH_SOURCE##\${rvm_path:-}} : \${FUNCNAME[0]:+\${FUNCNAME[0]}()} \${LINENO} > " | |
} | |
# WARNING: This clobbers your PROMPT_COMMAND so if you need to write your own, call | |
# ps1_update within your PROMPT_COMMAND with the same arguments you pass | |
# to ps1_set | |
# | |
# The PROMPT_COMMAND is used to help the prompt work if the separator is not a new line. | |
# In the event that the separtor is not a new line, the prompt line may become distored if | |
# you add or delete a certian number of characters, making the string wider than the | |
# $COLUMNS + len(your_input_line). | |
# This orginally was done with callbacks within the PS1 to add in things like the git | |
# commit, but this results in the PS1 being of an unknown width which results in the prompt | |
# being distored if you add or remove a certain number of characters. To work around this | |
# it now uses the PROMPT_COMMAND callback to re-set the PS1 with a known width of chracters | |
# each time a new command is entered. see PROMPT_COMMAND for more details. | |
# | |
ps1_set() | |
{ | |
PROMPT_COMMAND="ps1_update $@" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment