c консольное приложение автозаполнения динамических аргументов - PullRequest
3 голосов
/ 24 мая 2011

Я ищу способ автоматического завершения консоли - такой, что для данного приложения, например:

int main (int argc, char ** argv)
{
  if (argc == 1) return EXIT_FAILURE;
  if (strcmp(argv[1], "good")==0) printf("good\n");
  if (strcmp(argv[1], "bad")==0) printf("bad\n");
  return EXIT_FAILURE;
}

При запуске я бы хотел нажать [tab] после команды, чтобы онадайте мне один из возможных полезных вариантов.

Пример:

./a.out g[tab]

автоматически завершится до

./a.out good

Я не хочу редактировать /etc/bash-completion.d/, я надеялсядля гораздо более сильного автозаполнения, что-то вроде функции в самом исполняемом файле, которая будет вызываться - возможно, чтобы она могла запрашивать базу данных для списка возможных опций.Или, возможно, выведите сообщение, сообщающее вам, какие есть варианты.

Если вы считаете, что это просто невозможно, дайте мне знать!

Ответы [ 2 ]

3 голосов
/ 24 мая 2011

Завершения - это свойство оболочки, из которой вы запускаете приложение.Вам нужно будет предоставить функции завершения для всех оболочек, которые вы хотите поддерживать (bash, zsh, tcsh и fish имеют настраиваемые дополнения).Функция завершения может вызвать ваше приложение (например, выполнить you_application --list-possible-arguments) или сделать все, что захочет, для генерации завершений - это уже «сильное» завершение в вашей терминологии.

В bash вы объявляете завершения с помощью complete встроенный .Посмотрите в /etc/completion.d примеры (gpg - довольно простой пример; git - довольно сложный пример).

0 голосов
/ 24 мая 2011

Если вы используете BASH, взгляните на этот пост:

Автозаполнение аргументов командной строки

================================

Если вы хотите предоставить свою собственную командную строку, взгляните на Readline library:

Библиотека GNU Readline предоставляет набор функций для использования приложениями, которые позволяют пользователям редактировать командные строки по мере их ввода. Доступны как режимы редактирования Emacs, так и vi.Библиотека Readline включает в себя дополнительные функции для ведения списка ранее введенных командных строк, для вызова и, возможно, для повторного редактирования этих строк, а также для выполнения csh-подобного расширения истории предыдущих команд.

...