rework the bash PS1 prompt
This commit is contained in:
55
.bashrc
55
.bashrc
@@ -9,20 +9,6 @@
|
||||
[[ $- != *i* ]] && return
|
||||
[[ -z "${PS1-}" ]] && return
|
||||
|
||||
# wrapper for lazily loading __git_ps1 whenever it is actually needed
|
||||
_lazy_git_ps1() {
|
||||
if [[ -z $__GIT_PROMPT_SOURCED ]]; then
|
||||
. /usr/share/bash-completion/completions/git &>/dev/null
|
||||
. /usr/share/git/completion/git-prompt.sh &>/dev/null
|
||||
if [ -d .git ] || git worktree list &>/dev/null; then
|
||||
export __GIT_PROMPT_SOURCED=1
|
||||
__git_ps1 "$@"
|
||||
fi
|
||||
else
|
||||
__git_ps1 "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# lazy loading of ssh agents
|
||||
_lazy_ssh() {
|
||||
if [[ -z $SSH_AUTH_SOCK ]]; then
|
||||
@@ -43,16 +29,37 @@ _make() {
|
||||
-e "s/^.*error.*$/\x1b[31m&\x1b[0m/I" >&2)
|
||||
}
|
||||
|
||||
#
|
||||
# envs
|
||||
#
|
||||
# set PS1
|
||||
PS1='\[\033[?25h\]' # show cursor
|
||||
PS1="$PS1"'\[\033[01;35m\]\u@\h' # user@host
|
||||
PS1="$PS1"'\[\033[00m\]:' # separator
|
||||
PS1="$PS1"'\[\033[01;34m\]\w' # working directory
|
||||
PS1="$PS1"'\[\033[01;93m\]$(_lazy_git_ps1)' # github branch
|
||||
PS1="$PS1"'\[\033[00m\]\$ ' # shell sign
|
||||
# lazily loads the git utilities, to prevent slowdowns
|
||||
__lazy_git_ps1() {
|
||||
if [ -z "$__GIT_PROMPT_SOURCED__" ]; then
|
||||
if [ -d .git ] || git worktree list &>/dev/null; then
|
||||
. /usr/share/bash-completion/completions/git &>/dev/null
|
||||
. /usr/share/git/completion/git-prompt.sh &>/dev/null
|
||||
export __GIT_PROMPT_SOURCED__=1
|
||||
__git_ps1
|
||||
fi
|
||||
else __git_ps1; fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# regenerates the PS1 prompt
|
||||
__regenprompt() {
|
||||
local err=$? # acquire the error code of the last executed command
|
||||
local git=$(__lazy_git_ps1)
|
||||
|
||||
if [ $err -ne 0 ]; then
|
||||
err="\033[s\033[$((COLUMNS - 4))G${err}\033[u"
|
||||
else unset err; fi
|
||||
|
||||
PS1="\[\033[?25h\]" # show cursor
|
||||
PS1="$PS1\[\033[01;35m\]\u@\h" # user@host
|
||||
PS1="$PS1\[\033[00m\]:" # separator
|
||||
PS1="$PS1\[\033[01;34m\]\w" # working directory
|
||||
PS1="$PS1\[\033[01;93m\]$git" # git branch
|
||||
PS1="$PS1\[\033[01;31m\]\[$err\]" # error code
|
||||
PS1="$PS1\[\033[00m\]\$ " # shell sign
|
||||
}
|
||||
PROMPT_COMMAND=__regenprompt
|
||||
|
||||
# history settings
|
||||
HISTSIZE=2048
|
||||
|
||||
Reference in New Issue
Block a user