feat(bash): добавлен кастомный двухстрочный prompt
Зачем: улучшение визуального опыта работы в терминале с отображением git-ветки, venv и статуса последней команды. Что: создан файл .bash_prompt с цветным двухстрочным prompt, индикацией git-ветки, активного venv и статуса exit code. Проверка: source ~/.bashrc, проверить отображение в git-репозитории и с активированным venv.
This commit is contained in:
1 parent
30ba8b6ac6
commit
1ee049db4a
1 file changed
+46
@@ -0,0 +1,46 @@
|
||||
# ---------- Цвета ----------
|
||||
RED="\[\033[0;31m\]"
|
||||
GREEN="\[\033[0;32m\]"
|
||||
YELLOW="\[\033[1;33m\]"
|
||||
BLUE="\[\033[1;34m\]"
|
||||
PURPLE="\[\033[0;35m\]"
|
||||
RESET="\[\033[0m\]"
|
||||
|
||||
# Не даём стандартному venv ломать наш PS1
|
||||
export VIRTUAL_ENV_DISABLE_PROMPT=1
|
||||
|
||||
# ---------- Функция, которая вызывается перед показом приглашения ----------
|
||||
set_bash_prompt() {
|
||||
local exit_code=$?
|
||||
|
||||
# Символ приглашения: красный, если предыдущая команда упала
|
||||
local prompt_symbol="$"
|
||||
if [ "$exit_code" -ne 0 ]; then
|
||||
prompt_symbol="${RED}\$${RESET}"
|
||||
fi
|
||||
|
||||
# ---- venv ----
|
||||
local venv_part=""
|
||||
if [ -n "$VIRTUAL_ENV" ]; then
|
||||
venv_part="${BLUE}($(basename "$VIRTUAL_ENV"))${RESET} "
|
||||
fi
|
||||
|
||||
# ---- git branch ----
|
||||
local branch=""
|
||||
# Быстрее и проще, чем парсить `git branch` через sed :contentReference[oaicite:1]{index=1}
|
||||
branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
|
||||
local git_part=""
|
||||
if [ -n "$branch" ] && [ "$branch" != "HEAD" ]; then
|
||||
git_part=" ${PURPLE}($branch)${RESET}"
|
||||
fi
|
||||
|
||||
# ---- Собираем двухстрочный PS1 ----
|
||||
# Пример:
|
||||
# (myenv) dmitry@wsl:/mnt/d/projects/myproj (main)
|
||||
# $
|
||||
PS1="\n${venv_part}${GREEN}\u@\h${RESET}:${YELLOW}\w${RESET}${git_part}\n${prompt_symbol} "
|
||||
}
|
||||
|
||||
# Запускаем set_bash_prompt перед каждым показом приглашения
|
||||
PROMPT_COMMAND=set_bash_prompt
|
||||
|
||||
Reference in new issue
Block a user