blob: 295a0f369c4dfd43fb496a2defd58002c87062b8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# Based on the brilliant https://redandblack.io/blog/2020/bash-prompt-with-updating-time/
NEWLINE="\n"
SINGLE_SPACE=" "
PRINTING_OFF="\["
PRINTING_ON="\]"
RESTORE_CURSOR_POSITION="\e[u"
SAVE_CURSOR_POSITION="\e[s"
NON_COLOUR="$(tput sgr0)"
DEF_COLOUR="$(tput setaf 240)"
TIM_COLOUR="$(tput bold)$(tput setaf 32)"
DIR_COLOUR="$(tput bold)$(tput setaf 201)"
ERR_COLOUR="$(tput setaf 9)"
DOL_COLOUR="$(tput rev)$(tput setaf 34)"
VCS_COLOUR="$(tput setaf 214)"
HOST="\H:"
PS2_PROMPT=">"
DIRECTORY="\w"
TIMESTAMP="date +%m/%H.%M"
move_cursor_to_start_of_ps1() {
command_rows=$(history 1 | wc -l)
if [ "$command_rows" -gt 1 ]; then
let vertical_movement=$command_rows+1
else
command=$(history 1 | sed 's/^\s*[0-9]*\s*//')
command_length=${#command}
ps1_prompt_length=${#PS1_PROMPT}
let total_length=$command_length+$ps1_prompt_length
let lines=$total_length/${COLUMNS}+1
let vertical_movement=$lines
fi
tput cuu $vertical_movement
}
PS0_ELEMENTS=(
"$SAVE_CURSOR_POSITION" "\$(move_cursor_to_start_of_ps1)"
"(" "$TIM_COLOUR" "\$($TIMESTAMP)" "$NON_COLOUR" ")" "$RESTORE_CURSOR_POSITION"
)
PS0=$(IFS=; echo "${PS0_ELEMENTS[*]}")
set_ps1_prompt() {
local rval=$?;
local PS1_SYMBOL="#";
(( $(id -u) )) && PS1_SYMBOL=\$;
if (( $rval )); then
local PROMPT_COLOUR="$(tput rev)$ERR_COLOUR"
local ERROR_ELEMENTS=(
"$PRINTING_OFF" "$ERR_COLOUR" "$PRINTING_ON"
"<$rval>"
"$PRINTING_OFF" "$DEF_COLOUR" "$PRINTING_ON"
)
local ERROR_VALUE=$(IFS=; echo "${ERROR_ELEMENTS[*]}")
else
local PROMPT_COLOUR="$DOL_COLOUR"
local ERROR_VALUE=""
fi
PS1_ELEMENTS=(
"(" "$PRINTING_OFF" "$DEF_COLOUR" "$PRINTING_ON" "\$($TIMESTAMP)"
"$PRINTING_OFF" "$NON_COLOUR" "$PRINTING_ON" ")" "[" "$HOST"
"$PRINTING_OFF" "$DIR_COLOUR" "$PRINTING_ON" "$DIRECTORY"
"$PRINTING_OFF" "$NON_COLOUR" "$PRINTING_ON" "]"
"$PRINTING_OFF" "$VCS_COLOUR" "$PRINTING_ON" "\$(vcs)"
"$ERROR_VALUE"
"$PRINTING_OFF" "$PROMPT_COLOUR" "$PRINTING_ON" "$PS1_SYMBOL"
"$PRINTING_OFF" "$NON_COLOUR" "$PRINTING_ON" "$SINGLE_SPACE"
)
PS1=$(IFS=; echo "${PS1_ELEMENTS[*]}")
}
PROMPT_COMMAND=set_ps1_prompt
PS2_ELEMENTS=(
"$PRINTING_OFF" "$PROMPT_COLOUR" "$PRINTING_ON" "$PS2_PROMPT"
"$SINGLE_SPACE" "$PRINTING_OFF" "$NON_COLOUR" "$PRINTING_ON"
)
PS2=$(IFS=; echo "${PS2_ELEMENTS[*]}")
shopt -s histverify
PS4='[$EPOCHREALTIME]'
|