From 1ee049db4a87339fb5ca533fbc9f3c32397a489d Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Sat, 21 Feb 2026 18:47:49 +0300 Subject: [PATCH] =?UTF-8?q?feat(bash):=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=BA=D0=B0=D1=81=D1=82=D0=BE=D0=BC=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=B4=D0=B2=D1=83=D1=85=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D1=87=D0=BD=D1=8B=D0=B9=20prompt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Зачем: улучшение визуального опыта работы в терминале с отображением git-ветки, venv и статуса последней команды. Что: создан файл .bash_prompt с цветным двухстрочным prompt, индикацией git-ветки, активного venv и статуса exit code. Проверка: source ~/.bashrc, проверить отображение в git-репозитории и с активированным venv. --- bash/.bash_prompt | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 bash/.bash_prompt 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 +