diff --git a/.bash_logout b/.bash_logout index 6eb6716..f59c34b 100644 --- a/.bash_logout +++ b/.bash_logout @@ -16,7 +16,7 @@ fi hash ssh-add ssh-agent >/dev/null 2>&1 && { # Stop any started ssh-agent as long as the shell level is 1 and we're not on a tty. (( SHLVL == 1 )) && [[ "$(tty)" != /dev/tty* ]] && [[ -n "$SSH_AGENT_PID" ]] && { - eval "$(ssh-agent -k >/dev/null 2>&1)" >/dev/null || printf "\\033[1;31;40m%s\\033[0;39m\\n" "Failed to stop ssh-agent." >&2 + eval "$(ssh-agent -k >/dev/null 2>&1)" >/dev/null || printf "\\033[1;31;40m%s\\033[0m\\n" "Failed to stop ssh-agent." >&2 } # Update the ~/.ssh/agents file. diff --git a/.bashrc b/.bashrc index f74e387..1b8c05d 100644 --- a/.bashrc +++ b/.bashrc @@ -23,7 +23,7 @@ __prompt_git_status() { # S:branch_name >5 * # Returns: 0 = Produced a prompt successfully. # 1 = An error occured. - local BRANCH COUNT GIT_PROMPT GIT_PROMPT_MARKER_SET GIT_REPO_INFO IFS= + local BRANCH COUNT GIT_PROMPT GIT_PROMPT_MARKER_SET GIT_REPO_INFO IFS=$'\n' # Bail out if there's no format argument given, or it doesn't contain %s (( $# != 1 )) || [[ "$1" != *%s* ]] && return 1 @@ -165,7 +165,7 @@ __git_prompt_command() { # git config ---local -replace-all --type bool script.DisablePromptPrefetch true # Returns: 0 = Tasks completed successfully. # 1 = An error occured. - local GIT_REPO_INFO LC_ALL="C" NOW REPO_TIMESTAMP SANITISED_REPO TIMESTAMP_VAR + local GIT_REPO_INFO LC_ALL="C" NOW REPO_TIMESTAMP TIMESTAMP_VAR # shellcheck disable=SC2207 GIT_REPO_INFO=( $( git rev-parse --is-inside-work-tree --show-toplevel 2>/dev/null) ) || return 1 @@ -175,7 +175,7 @@ __git_prompt_command() { # Run prefetch tasks if not disabled. [[ -z "$GIT_DISABLE_PROMPT_PREFETCH" ]] && [[ "$(git config --local --get --type bool script.DisablePromptPrefetch 2>/dev/null)" != "true" ]] && { git maintenance run --task=prefetch 2>/dev/null || { - printf "\\033[1;31m%s\\033[39m\\n" "Git maintenance 'prefetch' task failed." >&2 + printf "\\033[1;31m%s\\033[0m\\n" "Git maintenance 'prefetch' task failed." >&2 return 1 } } @@ -188,15 +188,12 @@ __git_prompt_command() { NOW="${NOW/.}" fi - # Make sure the repo path is usable in a variable. - SANITISED_REPO"${GIT_REPO_INFO[1]//[^[:alnum:]]/_}" - # Determine the timestamp variable name depending on bash version. if (( BASH_VERSINFO[0] >= 4 )); then - TIMESTAMP_VAR="GIT_REPO_TIMESTAMP['$SANITISED_REPO']" + TIMESTAMP_VAR="GIT_REPO_TIMESTAMP[${GIT_REPO_INFO[1]//[^[:alnum:]]/_}]" else # This is going to pollute the environment, but Darwin is a PITA. - TIMESTAMP_VAR="GIT_REPO_TIMESTAMP_$SANITISED_REPO" + TIMESTAMP_VAR="GIT_REPO_TIMESTAMP_${GIT_REPO_INFO[1]//[^[:alnum:]]/_}" fi if [[ -n "${!TIMESTAMP_VAR}" ]]; then @@ -207,14 +204,14 @@ __git_prompt_command() { if [[ "$(git config --local --get --type int script.AutoMergeSuccess)" == "true" ]]; then printf "\\033[1;32m%s" "Git auto-merge succeeded for this repo." if [[ "${GIT_REPO_INFO[1]}" == "$HOME" ]]; then - printf " %s\\033[39m\\n" "Re-source .bash* files." + printf " %s\\033[0m\\n" "Re-source .bash* files." else - printf "\\033[39m\\n" + printf "\\033[0m\\n" fi # Update the timestamp in the environment. declare -g "$TIMESTAMP_VAR"="$NOW" else - printf "\\033[1;31m%s\\033[39m\\n" "Git auto-merge failed for this repo - correct manually." >&2 + printf "\\033[1;31m%s\\033[0m\\n" "Git auto-merge failed for this repo - correct manually." >&2 fi } else @@ -249,7 +246,7 @@ __nanorc_prompt_command() { else unalias nano 2>/dev/null fi - printf "\\033[1;31m%s\\033[39m\\n" "No .nanorc for version '$NANO_VER'." >&2 + printf "\\033[1;31m%s\\033[0m\\n" "No .nanorc for version '$NANO_VER'." >&2 fi } @@ -277,17 +274,17 @@ __ssh_agent_prompt_command() { # Find a new socket to use. if __find_ssh_agent_sock; then - printf "\\033[1;33m%s\\033[39m\\n" "Connected to existing ssh-agent socket." + printf "\\033[1;33m%s\\033[0m\\n" "Connected to existing ssh-agent socket." sleep 0.5 else # Start a new agent. eval "$(ssh-agent -s 2>/dev/null | grep -v 'echo'; printf "%s" "ERR=${PIPESTATUS[0]}")" (( ERR > 0 )) && { - printf "\\033[1;31m%s\\033[39m\\n" "Failed to start new ssh-agent - continuing with no agent." + printf "\\033[1;31m%s\\033[0m\\n" "Failed to start new ssh-agent - continuing with no agent." sleep 0.5 return 1 } - printf "\\033[1;32m%s\\033[39m\\n" "Started new ssh-agent." + printf "\\033[1;32m%s\\033[0m\\n" "Started new ssh-agent." __write_ssh_agents sleep 0.5 fi @@ -330,10 +327,10 @@ __read_ssh_agents() { exec 9<"$HOME/.ssh/agents" && flock -E 10 -e -w 0.5 9 ERR=$? if (( ERR == 10 )); then - printf "\\033[1;31m%s\\033[39m\\n" "Failed to obtain lock on ~/.ssh/agents." >&2 + printf "\\033[1;31m%s\\033[0m\\n" "Failed to obtain lock on ~/.ssh/agents." >&2 return 1 elif (( ERR > 0 )); then - printf "\\033[1;31m%s\\033[39m\\n" "Flock usage error." >&2 + printf "\\033[1;31m%s\\033[0m\\n" "Flock usage error." >&2 return 1 fi @@ -354,11 +351,11 @@ __read_ssh_agents() { fi done (( ERR != 0 )) && { - printf "\\033[1;31m%s\\033[39m\\n" "Failed to obtain lock on ~/.ssh/agents." >&2 + printf "\\033[1;31m%s\\033[0m\\n" "Failed to obtain lock on ~/.ssh/agents." >&2 return 1 } else - printf "\\033[1;31m%s\\033[39m\\n" "File locking unsupported on '$PLATFORM'." >&2 + printf "\\033[1;31m%s\\033[0m\\n" "File locking unsupported on '$PLATFORM'." >&2 return 1 fi @@ -379,7 +376,7 @@ __read_ssh_agents() { # Error out if the data couldn't be read. (( ERR != 0 )) && { - printf "\\033[1;31m%s\\033[39m\\n" "Failed to read ssh-agent socket list." >&2 + printf "\\033[1;31m%s\\033[0m\\n" "Failed to read ssh-agent socket list." >&2 unset SSH_AUTH_SOCKS SSH_AGENTS_MTIME return 1 } @@ -418,10 +415,10 @@ __write_ssh_agents() { exec 9<"$HOME/.ssh/agents" && flock -E 10 -e -w 0.5 9 ERR=$? if (( ERR == 10 )); then - printf "\\033[1;31m%s\\033[39m\\n" "Failed to obtain lock on ~/.ssh/agents." >&2 + printf "\\033[1;31m%s\\033[0m\\n" "Failed to obtain lock on ~/.ssh/agents." >&2 return 1 elif (( ERR > 0 )); then - printf "\\033[1;31m%s\\033[39m\\n" "Flock usage error." >&2 + printf "\\033[1;31m%s\\033[0m\\n" "Flock usage error." >&2 return 1 fi elif [[ "$(uname -s)" == "Darwin" ]]; then @@ -441,11 +438,11 @@ __write_ssh_agents() { fi done (( ERR != 0 )) && { - printf "\\033[1;31m%s\\033[39m\\n" "Failed to obtain lock on ~/.ssh/agents." >&2 + printf "\\033[1;31m%s\\033[0m\\n" "Failed to obtain lock on ~/.ssh/agents." >&2 return 1 } else - printf "\\033[1;31m%s\\033[39m\\n" "File locking unsupported on '$PLATFORM'." >&2 + printf "\\033[1;31m%s\\033[0m\\n" "File locking unsupported on '$PLATFORM'." >&2 return 1 fi @@ -462,7 +459,7 @@ __write_ssh_agents() { rm -f "$HOME/.ssh/agents" 2>/dev/null elif (( ERR >= 1 )); then rm -f "$HOME/.ssh/agents" 2>/dev/null - printf "\\033[1;31m%s\\033[39m\\n" "Failed to write ssh-agent socket list." >&2 + printf "\\033[1;31m%s\\033[0m\\n" "Failed to write ssh-agent socket list." >&2 return 1 fi @@ -519,17 +516,17 @@ if (( BASH_VERSINFO[0] >= 4 )); then # Trim the path in the prompt. PROMPT_DIRTRIM=2 # Coloured username + host + directory: - PS1='[\[\033[$(__prompt_user_colour)\]\u\[\033[39m\]@\[\033[1;33m\]\h\[\033[39m\]] \[\033[1;34m\]\w\[\033[39m\]$(__prompt_git_status "\[\\033[1;35m\] (%s)\[\\033[39m\]") ->' + PS1='[\[\033[$(__prompt_user_colour)\]\u\[\033[0m\]@\[\033[1;33m\]\h\[\033[0m\]] \[\033[1;34m\]\w\[\033[0m\]$(__prompt_git_status "\[\\033[1;35m\] (%s)\[\\033[0m\]") ->' else # Set the prompts. # Coloured username + host + directory: # shellcheck disable=SC2154 - PS1='[\[\033[$(__prompt_user_colour)\]\u\[\033[39m\]@\[\033[1;33m\]\h\[\033[39m\]] \[\033[1;34m\]$(printf "%s" "${PWD/#$HOME/~}" | awk -F/ '\''{if (NF>3) {printf ".../" $(NF-1) "/" $NF} else {printf $0}}'\'')\[\033[39m\]$(__prompt_git_status "\[\\033[1;35m\] (%s)\[\\033[39m\]") ->' + PS1='[\[\033[$(__prompt_user_colour)\]\u\[\033[0m\]@\[\033[1;33m\]\h\[\033[0m\]] \[\033[1;34m\]$(printf "%s" "${PWD/#$HOME/~}" | awk -F/ '\''{if (NF>3) {printf ".../" $(NF-1) "/" $NF} else {printf $0}}'\'')\[\033[0m\]$(__prompt_git_status "\[\\033[1;35m\] (%s)\[\\033[0m\]") ->' fi # Set the debugger prompt. # shellcheck disable=SC2155 -export PS4='+(\[\033[1;33m\]$?\[\033[39m\]) \[\033[1;34m\]${BASH_SOURCE##*/}\[\033[39m\]${FUNCNAME[0]:+(\[\033[1;32m\]${FUNCNAME[0]}\[\033[39m\])}:\[\033[1;31m\]$LINENO\[\033[39m\]: ' +export PS4='+(\[\033[1;33m\]$?\[\033[0m\]) \[\033[1;34m\]${BASH_SOURCE##*/}\[\033[0m\]${FUNCNAME[0]:+(\[\033[1;32m\]${FUNCNAME[0]}\[\033[0m\])}:\[\033[1;31m\]$LINENO\[\033[0m\]: ' # Common aliases. hash bc >/dev/null 2>&1 && alias bc='bc -lq'