Update ps1.sh
This commit is contained in:
105
ps1.sh
105
ps1.sh
@@ -1,5 +1,9 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# -------------------------------------------------
|
||||||
|
# ps1.sh – custom PS1 (must be sourced)
|
||||||
|
# -------------------------------------------------
|
||||||
|
|
||||||
# Must be sourced, not executed
|
# Must be sourced, not executed
|
||||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||||
echo "Dette scriptet må kjøres med:"
|
echo "Dette scriptet må kjøres med:"
|
||||||
@@ -15,98 +19,41 @@ case "$-" in
|
|||||||
*) return 0 ;;
|
*) return 0 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# ---- Emoji pools (edit these) ----
|
# -------------------------------------------------
|
||||||
# Keep them as simple strings; terminals must support the emoji glyphs.
|
# Emoji helper
|
||||||
__PS1_EMOJI_FUN=( "🚀" "✨" "🔥" "🌈" "🧠" "🛠️" "📦" "🧩" "🧪" "⚡" "🐧" "🛰️" )
|
# -------------------------------------------------
|
||||||
|
|
||||||
# ---- Emoji function (simple random) ----
|
|
||||||
_ps1_emoji() {
|
_ps1_emoji() {
|
||||||
local n="${#__PS1_EMOJI_FUN[@]}"
|
local emojis=( "🚀" "✨" "🔥" "🧠" "🛠️" )
|
||||||
# RANDOM is bash built-in
|
printf '%s' "${emojis[RANDOM % ${#emojis[@]}]}"
|
||||||
printf '%s' "${__PS1_EMOJI_FUN[RANDOM % n]}"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# ---- Your PS1 core (edit to taste) ----
|
# -------------------------------------------------
|
||||||
# This is intentionally simple: time, jobs, host, cwd, emoji.
|
# Build PS1 (your requested order)
|
||||||
# Use \\[ \\] around non-printing escape sequences to keep line editing sane.
|
# -------------------------------------------------
|
||||||
_ps1_build() {
|
_ps1_build() {
|
||||||
local emoji="$(_ps1_emoji)"
|
local emoji="$(_ps1_emoji)"
|
||||||
# Colors: 35 (purple) + 38 (cyan-ish) from your earlier style
|
|
||||||
printf '%b' \
|
printf '%b' \
|
||||||
"\[\e[0m\]\[\e[38;5;35m\]╭─(\[\e[38;5;38m\]\t\[\e[38;5;35m\])-(\[\e[38;5;38m\]\j\[\e[38;5;35m\])-(\[\e[38;5;38m\]\H\[\e[38;5;35m\])-(\[\e[38;5;38m\]\w\[\e[38;5;35m\])\n\[\e[38;5;35m\]╰──${emoji} \[\e[0m\]"
|
"\[\e[31m\]\d\[\e[0m\] \
|
||||||
|
\[\e[33m\]\A\[\e[0m\] \
|
||||||
|
\[\e[34m\]\u@\h\[\e[0m\] \
|
||||||
|
\[\e[32m\]\w\[\e[0m\]\n\\$emoji "
|
||||||
}
|
}
|
||||||
|
|
||||||
# ---- PROMPT_COMMAND hook (updates PS1 each prompt) ----
|
# -------------------------------------------------
|
||||||
# We add our updater without nuking an existing PROMPT_COMMAND.
|
# PROMPT_COMMAND handling
|
||||||
__PS1_PREV_PROMPT_COMMAND=""
|
# -------------------------------------------------
|
||||||
|
__PS1_PREV_PROMPT_COMMAND="${PROMPT_COMMAND-}"
|
||||||
|
|
||||||
_ps1_set_prompt_command() {
|
|
||||||
# Save existing PROMPT_COMMAND once
|
|
||||||
if [[ -z "${__PS1_PREV_PROMPT_COMMAND+x}" || -z "$__PS1_PREV_PROMPT_COMMAND" ]]; then
|
|
||||||
__PS1_PREV_PROMPT_COMMAND="${PROMPT_COMMAND-}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
local updater='_PS1=$(_ps1_build); export PS1="$_PS1"'
|
|
||||||
if [[ -z "${PROMPT_COMMAND-}" ]]; then
|
|
||||||
PROMPT_COMMAND="$updater"
|
|
||||||
else
|
|
||||||
# Avoid duplicating if user runs ps1_on multiple times
|
|
||||||
case "$PROMPT_COMMAND" in
|
|
||||||
*"_ps1_build"*) : ;;
|
|
||||||
*)
|
|
||||||
PROMPT_COMMAND="$updater; $PROMPT_COMMAND"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
_ps1_restore_prompt_command() {
|
|
||||||
PROMPT_COMMAND="${__PS1_PREV_PROMPT_COMMAND-}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ---- Public controls ----
|
|
||||||
ps1_on() {
|
ps1_on() {
|
||||||
_ps1_set_prompt_command
|
PROMPT_COMMAND='_PS1="$(_ps1_build)"; export PS1="$_PS1"'
|
||||||
# Force immediate update
|
|
||||||
_PS1="$(_ps1_build)"; export PS1="$_PS1"
|
_PS1="$(_ps1_build)"; export PS1="$_PS1"
|
||||||
}
|
}
|
||||||
|
|
||||||
ps1_off() {
|
ps1_off() {
|
||||||
psanimate_stop >/dev/null 2>&1 || true
|
PROMPT_COMMAND="$__PS1_PREV_PROMPT_COMMAND"
|
||||||
_ps1_restore_prompt_command
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# ---- Animation helpers (simple loop that forces prompt refresh) ----
|
# -------------------------------------------------
|
||||||
# This follows the same basic idea as in the Medium post: background loop updates prompt periodically. :contentReference[oaicite:2]{index=2}
|
# End of file
|
||||||
__PSANIMATE_PIDFILE="/tmp/psanimatepid-$$"
|
# -------------------------------------------------
|
||||||
|
|
||||||
psanimate() {
|
|
||||||
local interval="${1:-0.5}"
|
|
||||||
|
|
||||||
# Stop existing animator for this shell, if any
|
|
||||||
psanimate_stop >/dev/null 2>&1 || true
|
|
||||||
|
|
||||||
# Ensure prompt is enabled
|
|
||||||
ps1_on
|
|
||||||
|
|
||||||
(
|
|
||||||
while :; do
|
|
||||||
# Trigger a prompt rebuild by setting PS1; next prompt draw will use it.
|
|
||||||
_PS1="$(_ps1_build)"; export PS1="$_PS1"
|
|
||||||
sleep "$interval"
|
|
||||||
done
|
|
||||||
) &
|
|
||||||
|
|
||||||
echo "$!" > "$__PSANIMATE_PIDFILE"
|
|
||||||
}
|
|
||||||
|
|
||||||
psanimate_stop() {
|
|
||||||
if [[ -f "$__PSANIMATE_PIDFILE" ]]; then
|
|
||||||
local pid
|
|
||||||
pid="$(cat "$__PSANIMATE_PIDFILE" 2>/dev/null || true)"
|
|
||||||
if [[ -n "${pid:-}" ]]; then
|
|
||||||
kill "$pid" 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
rm -f "$__PSANIMATE_PIDFILE"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user