Расширение оболочки 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) — под вопросом.