43 lines
1.5 KiB
Bash
43 lines
1.5 KiB
Bash
# shellcheck shell=bash
|
|
|
|
draw_prompt_divider() {
|
|
local timestamp prefix prefix_length line_length i
|
|
printf -v timestamp '%(%H:%M:%S)T' -1
|
|
prefix="$timestamp ├"
|
|
prefix_length=${#prefix}
|
|
line_length=$(( ${COLUMNS:-80} - prefix_length ))
|
|
|
|
printf '%s' "$prefix"
|
|
for ((i = 0; i < line_length; i++)); do printf '─'; done
|
|
echo
|
|
}
|
|
|
|
_CACHED_USER_HOST="$USER@$HOSTNAME"
|
|
_CACHED_USER_HOST_LENGTH=${#_CACHED_USER_HOST}
|
|
|
|
calculate_git_alignment() {
|
|
[[ -z "$GITSTATUS_PROMPT" ]] && { GIT_ALIGNMENT_PADDING=""; return; }
|
|
|
|
local cleaned branch_name needed_padding
|
|
cleaned=$(echo "$GITSTATUS_PROMPT" | sed -e 's/\x01//g' -e 's/\x02//g' -e 's/\x1b\[[0-9;]*m//g')
|
|
branch_name="${cleaned%% *}"
|
|
needed_padding=$((_CACHED_USER_HOST_LENGTH - ${#branch_name}))
|
|
[[ $needed_padding -lt 8 ]] && needed_padding=8
|
|
printf -v GIT_ALIGNMENT_PADDING '%*s' "$needed_padding" ''
|
|
}
|
|
|
|
append_new_history() {
|
|
history -a
|
|
}
|
|
|
|
[ -r "$HOME/.config/bash/gitstatus-custom.sh" ] && . "$HOME/.config/bash/gitstatus-custom.sh"
|
|
|
|
PROMPT_COMMAND="append_new_history; draw_prompt_divider; my_gitstatus_prompt_update; calculate_git_alignment"
|
|
|
|
command_not_found_handle() {
|
|
printf '\033[01;31mbash: %s: command not found\033[00m\n' "$1" >&2
|
|
return 127
|
|
}
|
|
|
|
_error_block='██████'
|
|
PS1='\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[1;34m\]\w\[\033[00m\]\n${GITSTATUS_PROMPT:+$GIT_ALIGNMENT_PADDING$GITSTATUS_PROMPT\n}$([ "$?" -eq 0 ] && echo "" || echo "\[\033[01;31m\]$_error_block\[\033[00m\] ")\$ \[\e]0;\u@\h: \w\a\]'
|