
У меня одновременно открыто несколько проектов: диссертация, клиентские задачи, личные инструменты. Каждый — в своей вкладке iTerm2. Через час работы я уже не помню, какая вкладка чья.
Решение простое: цвет вкладки = проект. Диссертация всегда зелёная, Klemma жёлтая, Sokin голубой — мозг быстро запоминает.
Как это работает
ZSH поддерживает хук chpwd — он срабатывает при каждом cd. Добавляем в него вызов функции, которая отправляет iTerm2 escape-последовательность для смены цвета вкладки:
printf '\033]6;1;bg;red;brightness;%d\a' "$R"
printf '\033]6;1;bg;green;brightness;%d\a' "$G"
printf '\033]6;1;bg;blue;brightness;%d\a' "$B"
Три команды — три канала RGB. iTerm2 читает их и красит вкладку.
Функция _iterm2_project_color сравнивает текущий путь с паттернами проектов через case "$PWD" in ... esac и вызывает нужный RGB. Файл с паттернами генерируется автоматически из JSON-конфига.
Команда proj
Чтобы не лезть в конфиги вручную, написал скрипт ~/bin/proj:
proj list # все проекты и цвета
proj add sokin # добавить проект (авто-цвет из палитры)
proj add foo 255 0 0 # добавить с конкретным RGB
proj remove sokin # удалить
proj scan # авто-добавить все новые папки из ~/projects/ и _pipeline/
proj scan — особенно удобен: он смотрит в оба источника проектов, дедуплицирует имена и добавляет всё новое. После — генерирует ZSH-файл и просит сделать source ~/.zshrc.
Конфиг хранится в ~/.config/iterm2-projects.json, ZSH-файл с case-паттернами — в ~/.cache/iterm2-project-colors.zsh. .zshrc просто сорсит кэш-файл, не захламляется.
Бонус: шпаргалка при открытии вкладки
Параллельно добавил: при каждом открытии нового терминала показывается компактный список кастомных команд.
╭─ Commands ──────────────────────────────────────╮
│ brain Second Brain: утренний брифинг │
│ proj Tab colors: add · scan · list │
│ quiz Claude quiz skill │
│ cly Claude Code без подтверждений │
╰─────────────────────────────────────────────────╯
Список читается из ~/.config/zsh-commands.conf (формат команда|описание). При source ~/.zshrc не повторяется — спасибо флагу CHEAT_SHOWN в окружении. Команда cheat — показать в любой момент.
Весь код — три файла: ~/bin/proj (~130 строк Python), ~/.config/iterm2-projects.json, ~/.config/zsh-cheatsheet.conf. Никаких зависимостей, только стандартный Python 3 и ZSH.