diff options
Diffstat (limited to 'bash/bashrc.d/prompt.bash')
-rw-r--r-- | bash/bashrc.d/prompt.bash | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/bash/bashrc.d/prompt.bash b/bash/bashrc.d/prompt.bash index 123c4146..a6506a60 100644 --- a/bash/bashrc.d/prompt.bash +++ b/bash/bashrc.d/prompt.bash @@ -15,25 +15,25 @@ prompt() { # Basic prompt shape depends on whether we're in SSH or not PS1= if [[ -n $SSH_CLIENT || -n $SSH_CONNECTION ]] ; then - PS1=$PS1'\u@\h:' + PS1=$PS1'\h:' fi PS1=$PS1'\w' # Add sub-commands; VCS, job, and return status checks PS1=$PS1'$(ret=$?;prompt vcs;prompt job;prompt ret)' + # Add a helpful prefix if this shell appears to be exotic + case ${SHELL##*/} in + (bash) ;; + (*) PS1=bash:$PS1 ;; + esac + # Add prefix and suffix PS1='${PROMPT_PREFIX}'$PS1'${PROMPT_SUFFIX}' # Add terminating "$" or "#" sign PS1=$PS1'\$' - # Add > symbols to show nested shells - local shlvl - for ((shlvl = 1; shlvl < SHLVL; shlvl++)) ; do - PS1='>'$PS1 - done - # Declare variables to contain terminal control strings local format reset @@ -81,10 +81,13 @@ prompt() { # Revert to simple inexpensive prompts off) unset -v PROMPT_COMMAND PROMPT_DIRTRIM - PS1='\$ ' + PS1='$ ' PS2='> ' PS3='? ' PS4='+ ' + if [[ -n $SSH_CLIENT || -n $SSH_CONNECTION ]] ; then + PS1=$(hostname -s)'$ ' + fi ;; # Git prompt function @@ -110,7 +113,7 @@ prompt() { git describe --tags --exact-match HEAD || git rev-parse --short HEAD ) || return - name=${name##*/} + name=${name#refs/*/} [[ -n $name ]] || return # Check various files in .git to flag processes @@ -164,7 +167,10 @@ prompt() { # Print the status in brackets; add a git: prefix only if there # might be another VCS prompt (because PROMPT_VCS is set) printf '(%s%s%s%s)' \ - "${PROMPT_VCS:+git:}" "$name" "${proc:+:"$proc"}" "$state" + "${PROMPT_VCS:+git:}" \ + "${name//\\/\\\\}" \ + "${proc:+:"${proc//\\/\\\\}"}" \ + "${state//\\/\\\\}" ;; # Subversion prompt function @@ -190,6 +196,7 @@ prompt() { branch=${branch#/} branch=${branch#branches/} branch=${branch%%/*} + [[ -n $branch ]] || branch=unknown # Parse the output of svn status to determine working copy state local symbol @@ -207,7 +214,9 @@ prompt() { ((untracked)) && state=${state}'?' # Print the state in brackets with an svn: prefix - printf '(svn:%s%s)' "${branch:-unknown}" "$state" + printf '(svn:%s%s)' \ + "${branch//\\/\\\\}" \ + "${state//\\/\\\\}" ;; # VCS wrapper prompt function; print the first relevant prompt, if any @@ -221,7 +230,7 @@ prompt() { # Show return status of previous command in angle brackets, if not zero ret) # shellcheck disable=SC2154 - ((ret)) && printf '<%u>' "$ret" + ((ret)) && printf '<%u>' "${ret//\\/\\\\}" ;; # Show the count of background jobs in curly brackets, if not zero @@ -230,7 +239,7 @@ prompt() { while read -r ; do ((jobc++)) done < <(jobs -p) - ((jobc)) && printf '{%u}' "$jobc" + ((jobc)) && printf '{%u}' "${jobc//\\/\\\\}" ;; # No argument given, print prompt strings and vars @@ -246,5 +255,5 @@ prompt() { esac } -# Start with full-fledged prompt -prompt on +# Default to a full-featured prompt, but use PROMPT_MODE if that's set +prompt "${PROMPT_MODE:-on}" |