Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

xbash

Расширение оболочки bash для удобства разработки.


Скриншот

При разработке в Linux зачастую активно используется командная строка, причем значительную часть команд составляют субкоманды системы управления версиями, такой как git, и системы сборки и управления зависимостями, например cargo (для языка Rust), или gem (для Ruby).

Это расширение позволяет делать следующее:

  • Использовать субкоманды напрямую, т.е. писать commit вместо git commit и run вместо cargo run.

    При этом такая подстановка активна, только когда мы находимся внутри каталога проекта. И, соответственно, не для всех возможных систем управления версиями и сборки, а для тех, которые задействованы в текущем проекте.

  • В приглашении командной строки отображать кратко некоторые элементы состояния проекта и репозитория.

Текущая версия

0.1.3-alpha — глубокий пре-релиз, активная разработка. Хотя пользоваться уже можно.

В пререлизе возможны несовместимые изменения даже между минорными версиями.

Установка и использование (пререлизной версии)

  1. Сохранить куда-то каталог с исходниками (склонировать репозиторий, скачать и распаковать релиз — непринципиально). Куда поместить, тоже непринципиально, пусть это будет, скажем — $HOME/scripts/xbash/.

  2. Добавить загрузку в $HOME/.bashrc:

    source $HOME/scripts/xbash/xbash.bash
  3. Создать конфигурационный файл $HOME/.config/xbash с одной строчкой:

    xb_user_dir=$HOME/scripts/xbash/xbash
  4. Войти в 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' );

TODO

До версии 0.1-alpha

  • Сформировать список команд git и отладить.
  • Сделать prompt для git.
  • Сделать функцию xb_info().
  • Сделать определение репозитория, даже когда мы глубоко внутри.

До версии 0.9-beta

  • Аналогично предыдущему для
    • cargo,
    • jekyll,
    • hg,
    • bundle,
    • gem.
  • Доработать xb_info() до визуальной ясности.
  • Сделать инсталлятор (вероятнее всего — через make install).
  • Языки и цветовые схемы.
  • Написать полноценное README:
    • Для чего нужно,
    • Установка,
    • Коротко о настройке.
    • По модулям.
    • Английская версия (обязательно!)

До релиза 1.0

  • Отладить.
  • Документировать.
  • Подумать об опакечивании (под вопросом).
  • Автодополнение (completion) — под вопросом.

Releases

Packages

Contributors

Languages