Есть ли эквивалент Perl для ido-completion Emacs?

Я создал ряд вспомогательных функций для работы, которые могут быть полезны другим членам моей команды&mdash. Но я написал их все в Emacs' Elisp, и заставить их конвертировать из Notepad++ НЕ получится.

Итак, я думаю преобразовать функции в Perl. Без проблем.

За исключением того, что я все время использую ido-completion, чтобы ограничить ответы:

  (setq client (ido-completing-read "Select a Client: " '("IniTrade" "HedgeCorp" "GlobalTech" "OCP") nil t))

РЕДАКТИРОВАТЬ: ido-completing-read похож на complete-read, за исключением того, что все параметры видны, и их можно выбрать с помощью циклического переключения [клавиши со стрелками, как правило] или завершения ввода. В приведенном выше примере подсказка будет выглядеть так

  Select a Client: {IniTrade | HedgeCorp | GlobalTech | OCP}

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

nil в этом примере является неиспользуемым параметром, но «t» требует точного совпадения — например, пользователь должен сделать один из выборов. Функция возвращает строку, например "IniTrade".

Мои «вспомогательные функции» предназначены для внутренних нужд — открытие определенного журнала ошибок, восстановление пакета на сервере и т. д. Для этих операций пользователю необходимо указать тестовую или производственную среду, клиент, этап и т. д. Почти во всех случаях , это выборки строк, которые используются для построения другой команды оболочки. Если возвращается числовой элемент, он, в свою очередь, может быть повторно преобразован в строку, но, поскольку выбор обычно представляет собой требуемую строку, было бы неплохо, если бы этот шаг можно было пропустить. [конец РЕДАКТИРОВАТЬ]

Есть ли эквивалент Perl? Я просмотрел Term::Prompt который предлагает пронумерованное меню... самое близкое, что я нашел. Это не так красиво, как ido-completion, и мне все равно придется преобразовывать числовой результат в строку (не большая проблема, просто раздражает).

Составляя это, я заметил, что использовал термин «меню», поэтому провел еще несколько поисков и нашел Term::Menus. Я еще не пробовал это.


person Michael Paulukonis    schedule 03.01.2009    source источник
comment
Это может помочь получить ответ, если вы объясните ido-completion.   -  person Schwern    schedule 03.01.2009
comment
Было бы полезно узнать, какие типы вспомогательных функций вы написали. Хорошо ли они подходят для подхода Term::Menus?   -  person Joe Casadonte    schedule 04.01.2009
comment
РЕДАКТИРОВАТЬ, чтобы выполнить эти предложения. Спасибо!   -  person Michael Paulukonis    schedule 05.01.2009
comment
В последние несколько лет я перешел на NodeJS из-за специальных инструментов, а не на Perl. Недавно я столкнулся с пакетом Inquirer — npmjs.com/package/inquirer (видел его в инициализаторе конфигурации eslint).   -  person Michael Paulukonis    schedule 11.08.2015


Ответы (1)


Term::ReadLine может делать то, что вы ищете, хотя, вероятно, это больше похоже на «завершение-чтение», чем «идо-завершение-чтение».

person Joe Casadonte    schedule 05.01.2009
comment
Я использую Term::ReadLine. версия Gnu выглядит так, как будто в ней есть именно то, что мне нужно, но я не могу найти пакет Win32. Такие вот дела.... - person Michael Paulukonis; 09.01.2009
comment
Term::ReadLine::Perl не делает то, что вам нужно? Если нет, у cygwin есть библиотека readline GNU, которая может разрешить сборку Term::ReadLine::Gnu. - person Joe Casadonte; 10.01.2009