diff --git a/bash/.bash_prompt b/bash/.bash_prompt new file mode 100644 index 0000000..ac57e78 --- /dev/null +++ b/bash/.bash_prompt @@ -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 +