Зачем: улучшение визуального опыта работы в терминале с отображением git-ветки, venv и статуса последней команды. Что: создан файл .bash_prompt с цветным двухстрочным prompt, индикацией git-ветки, активного venv и статуса exit code. Проверка: source ~/.bashrc, проверить отображение в git-репозитории и с активированным venv.
47 lines
1.5 KiB
Bash
47 lines
1.5 KiB
Bash
# ---------- Цвета ----------
|
|
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
|
|
|