Подтвердить что ты не робот

Как добавить вкладку в приложение Nodejs CLI

Я хочу добавить вкладку в приложение Nodejs CLI (желательно генерировать динамическое завершение вкладки).

Я нашел несколько модулей npm, но не уверен, как их реализовать:

https://github.com/hij1nx/complete

https://github.com/mklabs/node-tabtab

Так что я ищу, так что у меня может быть файл nodejs, который выглядит примерно так:

my-cmd create arg1 arg2

Но тогда я мог бы автозаполнять как:

my-cmd cr<tab> -> create

Спасибо!

4b9b3361

Ответ 1

Используйте omelette пакет, который я создал. Если у вас есть какие-либо вопросы, свяжитесь со мной.

Ответ 2

Изменить - быстрый ответ

После того, как я ответил, я немного читал источник tabtab и заметил, что я также могу запустить

 pkgname completion install 

чтобы установить завершение. потому что моя среда была уже грязной, я не знаю, действительно ли она что-то сделала, но мне кажется, что это так.

Более длинный ответ

@CameronLittle предоставил отличную документацию.

Для нетерпеливых вы можете начать с запуска

sudo bash -c 'pkgname completion > /etc/bash_completion.d/pkgname'
source /etc/bash_completion.d/pkgname

Это добавит завершение в текущий сеанс bash.

Насколько я знаю, новые сеансы автоматически получат завершение.

Чтобы сделать процесс бесшовным для пользователя, вы можете использовать крючки install и postinstall в package.json

https://docs.npmjs.com/misc/scripts

Обязательно ничего не печатайте по умолчанию. означает, что запуск pkgname не должен приводить к выходу, иначе он не будет работать.

Важный! установить tabtab только с мастера

Кажется, у tabtab есть раздражающая ошибка, которая была решена у мастера, но так и не попала в релиз.

Соответствующая фиксация, чтобы исправить это: https://github.com/mklabs/node-tabtab/commit/f8473555bf7278a300eae31cbe3377421e2eeb26

который обрабатывает завершение для строк, начинающихся с --.

Фиксировать, если с февраля 2014 года, однако последняя версия по состоянию на (январь 2015 года) равна 0.0.2 с января 2014 года. Я предполагаю, что больше не будет выпусков.

Итак, если вы хотите получить это исправление, и вы должны (!), установить tabtab только из мастера.

не теряйте 2 часа, выясняя, что вы сделали не так, как я:)

Как я достиг этого ответа? TL; DR

В то время как ответ @CameronLittle дает объяснение позади сцены, я хотел бы объяснить, как я дошел до ответа.

Я попытался использовать пакет tabtab, в котором есть явный раздел об установке. см. https://www.npmjs.com/package/tabtab#completion-install

Однако, похоже, это не работало для меня.

Посмотрев на код, который они инструктируют добавить, я вижу следующий process.argv.slice(2)[0] === 'completion', который заставил меня запустить команду pkgname completion, которая выводит то, что начинается с

###-begin-pkgname-completion-###
### credits to npm, this file is coming directly from isaacs/npm repo
#
# Just testing for now. (trying to learn this cool stuff)
#
# npm command completion script
#
# Installation: pkgname completion >> ~/.bashrc  (or ~/.zshrc)
#

слова this file is coming directly from isaacs/npm repo заставили меня больше задаться вопросом. следуя другому ответу здесь, я посмотрел /etc/bash _completion.d/npm - который показал тот же точный контент.. и так комментарий.

Я решил запустить

pkgname completion > /etc/bash_completion.d/pkgname

однако для этого требуются права sudo и поэтому становится

sudo bash -c "pkgname completion > /etc/bash_completion.d/pkgname

а затем, чтобы применить его к текущему сеансу bash, мне пришлось запустить

 source /etc/bash_completion.d/pkgname

и вуаля! он работает!

когда я попытался открыть другой терминал, он все еще работал, поэтому я предполагаю, что он применим ко всем пользователям. если нет - вы должны добавить его в .bashrc или что-то в этом роде.

Ответ 3

Я хотел бы добавить, что есть npm package yargs, который позволяет сочетать bash -completion для команд и параметров.

Он имеет возможность выводить завершение .bashrc script. Bash завершение завершается путем поиска сгенерированного script.

В настоящее время он активно поддерживает пакет на npm с более чем миллионом загрузок в месяц.

Ответ 4

Как сказал @Joe, это то, что предоставляет ваша пользовательская оболочка. Для bash вы по существу создаете и регистрируете функцию, которая запускается, когда пользовательские вкладки после ввода имени вашей программы. Функция возвращает строки, доступные для автозаполнения.

См. этот учебник для введения

http://www.debian-administration.org/article/316/An_introduction_to_bash_completion_part_1

Мне также нравится этот пример, потому что он прост и показывает, что нужно продолжать. Это для них инструмент для инструментов python.

https://raw.githubusercontent.com/marcelor/fabric-bash-autocompletion/master/fab