https://github.com/shikhalev/xbash
bash-extensions for prompt and subcommands
https://github.com/shikhalev/xbash
bash command-line programming shell shell-extensions
Last synced: 2 months ago
JSON representation
bash-extensions for prompt and subcommands
- Host: GitHub
- URL: https://github.com/shikhalev/xbash
- Owner: shikhalev
- License: gpl-3.0
- Created: 2021-09-01T14:59:23.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2022-11-14T20:47:53.000Z (about 3 years ago)
- Last Synced: 2025-01-29T11:28:28.886Z (11 months ago)
- Topics: bash, command-line, programming, shell, shell-extensions
- Language: Shell
- Homepage:
- Size: 125 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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`:
```bash
source $HOME/scripts/xbash/xbash.bash
```
3. Создать конфигурационный файл `$HOME/.config/xbash` с одной строчкой:
```bash
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`](xbash/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`. В них предполагаются следующие установки:
* Во-первых, пути к модулям. Это могут быть три каталога, задаваемые тремя переменными, по-умолчанию такие:
```bash
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` — модули в первой отключаются полностью, во второй и третьей
только функции формирования списка команд и приглашения соответственно. Важно: *эти переменные — массивы и изменять их
надо соответственно*, например:
```bash
xb_disable+=( 'git' );
```
## TODO
### До версии 0.1-alpha
- [x] Сформировать список команд `git` и отладить.
- [x] Сделать prompt для `git`.
- [x] Сделать функцию `xb_info()`.
- [x] Сделать определение репозитория, даже когда мы глубоко внутри.
### До версии 0.9-beta
- [ ] Аналогично предыдущему для
- [x] `cargo`,
- [ ] `jekyll`,
- [ ] `hg`,
- [ ] `bundle`,
- [ ] `gem`.
- [ ] Доработать `xb_info()` до визуальной ясности.
- [ ] Сделать инсталлятор (вероятнее всего — через `make install`).
- [ ] Языки и цветовые схемы.
- [ ] Написать полноценное README:
- [x] Для чего нужно,
- [x] Установка,
- [x] Коротко о настройке.
- [ ] По модулям.
- [ ] Английская версия (обязательно!)
### До релиза 1.0
- [ ] Отладить.
- [ ] Документировать.
- [ ] Подумать об опакечивании (под вопросом).
- [ ] Автодополнение (completion) — под вопросом.