Расширение оболочки bash для удобства разработки.
При разработке в Linux зачастую активно используется командная строка, причем значительную часть команд
составляют субкоманды системы управления версиями, такой как git, и системы сборки и управления
зависимостями, например cargo (для языка Rust), или gem (для Ruby).
Это расширение позволяет делать следующее:
-
Использовать субкоманды напрямую, т.е. писать
commitвместоgit commitиrunвместоcargo run.При этом такая подстановка активна, только когда мы находимся внутри каталога проекта. И, соответственно, не для всех возможных систем управления версиями и сборки, а для тех, которые задействованы в текущем проекте.
-
В приглашении командной строки отображать кратко некоторые элементы состояния проекта и репозитория.
0.1.3-alpha — глубокий пре-релиз, активная разработка. Хотя пользоваться уже можно.
В пререлизе возможны несовместимые изменения даже между минорными версиями.
-
Сохранить куда-то каталог с исходниками (склонировать репозиторий, скачать и распаковать релиз — непринципиально). Куда поместить, тоже непринципиально, пусть это будет, скажем —
$HOME/scripts/xbash/. -
Добавить загрузку в
$HOME/.bashrc:source $HOME/scripts/xbash/xbash.bash
-
Создать конфигурационный файл
$HOME/.config/xbashс одной строчкой:xb_user_dir=$HOME/scripts/xbash/xbash -
Войти в shell, например, открыв заново любимый эмулятор терминала.
Основной код находится во включаемом файле xbash.bash, однако работа с конкретными системами определяется в соответствующих модулях. Каждый такой модуль определяет функцию проверки применимости (обязательно) и одну или обе из функций для формирования а) приглашения командной строки, б) списка алиасов команд.
Эти фунции, в случае применимости будут вызваны из $PROMPT_COMMAND и command_not_found_handle() соответственно.
Важно: обработка через command_not_found_handle() означает, что субкоманды никогда не перекрывают команды
из $PATH, встроенные конструкции bash или синонимы заданные через alias. Таким образом, мы не можем задать
перенаправление diff => git diff — будет вызвана /usr/bin/diff еще до нашей обработки; вместо этого
в модуле git.bash задано короткое имя g-diff. Аналогично, префиксами устраняются конфликты
между разными системами сборки, так, например, git clean становится g-clean, чтобы не конфликтовать
с clean => cargo clean, и, с другой стороны, cargo fetch сокращено до c-fetch, поскольку fetch => git fetch
представляется куда более часто используемым. Запоминать редко используемые сокращения не обязательно, поскольку
а) есть функция xb_info, которая выводит их список; и б) всегда можно использовать полный вариант — git clean,
например.
Для управления настройками есть два файла: /etc/xbash и $HOME/.config/xbash. В них предполагаются следующие установки:
-
Во-первых, пути к модулям. Это могут быть три каталога, задаваемые тремя переменными, по-умолчанию такие:
xb_vendor_dir=/usr/share/xbash; xb_system_dir=/etc/xbash.d; xb_user_dir=$HOME/.local/xbash;
-
Во-вторых, отключения отдельных модулей, чтобы не удалять их из вышеуказанных каталогов. Для этого есть три переменные:
xb_disable,xb_disable_commandsиxb_disable_prompt— модули в первой отключаются полностью, во второй и третьей только функции формирования списка команд и приглашения соответственно. Важно: эти переменные — массивы и изменять их надо соответственно, например:xb_disable+=( 'git' );
- Сформировать список команд
gitи отладить. - Сделать prompt для
git. - Сделать функцию
xb_info(). - Сделать определение репозитория, даже когда мы глубоко внутри.
- Аналогично предыдущему для
-
cargo, -
jekyll, -
hg, -
bundle, -
gem.
-
- Доработать
xb_info()до визуальной ясности. - Сделать инсталлятор (вероятнее всего — через
make install). - Языки и цветовые схемы.
- Написать полноценное README:
- Для чего нужно,
- Установка,
- Коротко о настройке.
- По модулям.
- Английская версия (обязательно!)
- Отладить.
- Документировать.
- Подумать об опакечивании (под вопросом).
- Автодополнение (completion) — под вопросом.
