aboutsummaryrefslogtreecommitdiff
path: root/bash/bashrc.d/prompt.bash
diff options
context:
space:
mode:
Diffstat (limited to 'bash/bashrc.d/prompt.bash')
-rw-r--r--bash/bashrc.d/prompt.bash39
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}"