{"id":17132969,"url":"https://github.com/shikhalev/xbash","last_synced_at":"2025-10-31T08:46:49.039Z","repository":{"id":138883020,"uuid":"402101209","full_name":"shikhalev/xbash","owner":"shikhalev","description":"bash-extensions for prompt and subcommands","archived":false,"fork":false,"pushed_at":"2022-11-14T20:47:53.000Z","size":128,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-29T11:28:28.886Z","etag":null,"topics":["bash","command-line","programming","shell","shell-extensions"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shikhalev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-01T14:59:23.000Z","updated_at":"2022-11-02T15:30:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"85f22d39-9199-4410-bd15-b42675fc8052","html_url":"https://github.com/shikhalev/xbash","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shikhalev%2Fxbash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shikhalev%2Fxbash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shikhalev%2Fxbash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shikhalev%2Fxbash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shikhalev","download_url":"https://codeload.github.com/shikhalev/xbash/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245217792,"owners_count":20579297,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","command-line","programming","shell","shell-extensions"],"created_at":"2024-10-14T19:29:01.636Z","updated_at":"2025-10-31T08:46:44.012Z","avatar_url":"https://github.com/shikhalev.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# xbash\n\nРасширение оболочки bash для удобства разработки.\n\n-----\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/shikhalev/xbash/blob/main/doc/img/screen.png\" title=\"Скриншот использования\" alt=\"Скриншот\"\u003e\n\u003c/p\u003e\n\nПри разработке в Linux зачастую активно используется командная строка, причем значительную часть команд\nсоставляют субкоманды системы управления версиями, такой как `git`, и системы сборки и управления\nзависимостями, например `cargo` (для языка Rust), или `gem` (для Ruby).\n\nЭто расширение позволяет делать следующее:\n\n* Использовать субкоманды напрямую, т.е. писать `commit` вместо `git commit` и `run` вместо `cargo run`.\n\n  При этом такая подстановка активна, только когда мы находимся внутри каталога проекта. И, соответственно,\n  не для всех возможных систем управления версиями и сборки, а для тех, которые задействованы в текущем\n  проекте.\n\n* В приглашении командной строки отображать кратко некоторые элементы состояния проекта и репозитория.\n\n## Текущая версия\n\n**0.1.3-alpha** — глубокий пре-релиз, активная разработка. Хотя пользоваться уже можно.\n\n*В пререлизе возможны несовместимые изменения даже между минорными версиями.*\n\n## Установка и использование (пререлизной версии)\n\n1. Сохранить куда-то каталог с исходниками (склонировать репозиторий, скачать и распаковать релиз — непринципиально).\n   Куда поместить, тоже непринципиально, пусть это будет, скажем — `$HOME/scripts/xbash/`.\n\n2. Добавить загрузку в `$HOME/.bashrc`:\n\n   ```bash\n   source $HOME/scripts/xbash/xbash.bash\n   ```\n3. Создать конфигурационный файл `$HOME/.config/xbash` с одной строчкой:\n\n   ```bash\n   xb_user_dir=$HOME/scripts/xbash/xbash\n   ```\n\n4. Войти в shell, например, открыв заново любимый эмулятор терминала.\n\n## Принцип работы и особенности реализации\n\n### Организация кода\n\nОсновной код находится во включаемом файле xbash.bash, однако работа с конкретными системами определяется\nв соответствующих модулях. Каждый такой модуль определяет функцию проверки применимости (обязательно) и\nодну или обе из функций для формирования а) приглашения командной строки, б) списка алиасов команд.\n\nЭти фунции, в случае применимости будут вызваны из `$PROMPT_COMMAND` и `command_not_found_handle()` соответственно.\n\nВажно: обработка через `command_not_found_handle()` означает, что *субкоманды никогда не перекрывают команды\nиз `$PATH`, встроенные конструкции bash или синонимы заданные через `alias`*. Таким образом, мы не можем задать\nперенаправление `diff =\u003e git diff` — будет вызвана `/usr/bin/diff` еще до нашей обработки; вместо этого\nв модуле [`git.bash`](xbash/git.bash) задано короткое имя `g-diff`. Аналогично, префиксами устраняются конфликты\nмежду разными системами сборки, так, например, `git clean` становится `g-clean`, чтобы не конфликтовать\nс `clean =\u003e cargo clean`, и, с другой стороны, `cargo fetch` сокращено до `c-fetch`, поскольку `fetch =\u003e git fetch`\nпредставляется куда более часто используемым. Запоминать редко используемые сокращения не обязательно, поскольку\nа) есть функция `xb_info`, которая выводит их список; и б) всегда можно использовать полный вариант — `git clean`,\nнапример.\n\n### Конфигурационные файлы\n\nДля управления настройками есть два файла: `/etc/xbash` и `$HOME/.config/xbash`. В них предполагаются следующие установки:\n\n* Во-первых, пути к модулям. Это могут быть три каталога, задаваемые тремя переменными, по-умолчанию такие:\n\n  ```bash\n  xb_vendor_dir=/usr/share/xbash;\n  xb_system_dir=/etc/xbash.d;\n  xb_user_dir=$HOME/.local/xbash;\n  ```\n\n* Во-вторых, отключения отдельных модулей, чтобы не удалять их из вышеуказанных каталогов. Для этого есть три переменные:\n  `xb_disable`, `xb_disable_commands` и `xb_disable_prompt` — модули в первой отключаются полностью, во второй и третьей\n  только функции формирования списка команд и приглашения соответственно. Важно: *эти переменные — массивы и изменять их\n  надо соответственно*, например:\n\n  ```bash\n  xb_disable+=( 'git' );\n  ```\n\n\n## TODO\n\n### До версии 0.1-alpha\n\n- [x] Сформировать список команд `git` и отладить.\n- [x] Сделать prompt для `git`.\n- [x] Сделать функцию `xb_info()`.\n- [x] Сделать определение репозитория, даже когда мы глубоко внутри.\n\n### До версии 0.9-beta\n\n- [ ] Аналогично предыдущему для\n  - [x] `cargo`,\n  - [ ] `jekyll`,\n  - [ ] `hg`,\n  - [ ] `bundle`,\n  - [ ] `gem`.\n- [ ] Доработать `xb_info()` до визуальной ясности.\n- [ ] Сделать инсталлятор (вероятнее всего — через `make install`).\n- [ ] Языки и цветовые схемы.\n- [ ] Написать полноценное README:\n  - [x] Для чего нужно,\n  - [x] Установка,\n  - [x] Коротко о настройке.\n  - [ ] По модулям.\n  - [ ] Английская версия (обязательно!)\n\n### До релиза 1.0\n\n- [ ] Отладить.\n- [ ] Документировать.\n- [ ] Подумать об опакечивании (под вопросом).\n- [ ] Автодополнение (completion) — под вопросом.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshikhalev%2Fxbash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshikhalev%2Fxbash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshikhalev%2Fxbash/lists"}