aboutsummaryrefslogtreecommitdiff
path: root/bash/10-prompt.bash
diff options
context:
space:
mode:
Diffstat (limited to 'bash/10-prompt.bash')
-rw-r--r--bash/10-prompt.bash35
1 files changed, 35 insertions, 0 deletions
diff --git a/bash/10-prompt.bash b/bash/10-prompt.bash
new file mode 100644
index 0000000..ab3b977
--- /dev/null
+++ b/bash/10-prompt.bash
@@ -0,0 +1,35 @@
+# vi:syntax=sh
+
+function prompt_command () {
+ local EXIT="$?"
+ local REMOTE=""
+ local VENV=""
+ local EXECTIME=""
+
+ local NOW=$(date +%s)
+
+ [ $EXIT -eq 0 ] && EXIT=""
+ [ ! -z "$SSH_CONNECTION" ] && REMOTE="${orange}[R] "
+ [ -z "$VIRTUAL_ENV" ] || VENV="$(basename "$VIRTUAL_ENV")"
+
+ if [ -n "$__LAST_PROMPT" ]; then
+ EXECTIME=" ($(( NOW - __LAST_PROMPT ))s)"
+ fi
+
+ PS1="\n${yellow}\t${EXECTIME}${reset_color}\n${REMOTE}${white}\u@${cyan}\h: ${reset_color} ${yellow}\w ${green}${VENV}\n${red}${EXIT} ${reset_color}→ "
+ __LAST_PROMPT="$(date +%s)"
+}
+
+function preexec() {
+ __LAST_PROMPT="$(date +%s)"
+}
+
+preexec_invoke_exec () {
+ [ -n "$COMP_LINE" ] && return # do nothing if completing
+ [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
+ local this_command=`HISTTIMEFORMAT= history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//"`;
+ preexec "$this_command"
+}
+trap 'preexec_invoke_exec' DEBUG
+
+PROMPT_COMMAND=prompt_command