Я пытаюсь принять пользовательский ввод для утилиты командной строки в емакс У меня есть несколько слов, которые я могу использовать в этой командной строке (что-то вроде возможного целевого списка вызова make), и я хочу иметь возможность автозаполнения слов, о которых я знаю, разрешить пользователю вводить более одной записи в моем словаре, а также разрешить пользователю писать то, чего нет в моем словаре. Некоторая библиотека, которая позволяет завершать слова в минибуфере с использованием пользовательского словаря, была бы как раз тем, что нужно.
Я не требую полного решения, но несколько указаний о том, с чего начать поиск, были бы весьма признательны. Кроме того, я бы предпочел по возможности избегать использования навязчивых библиотек, таких как icicles
или ido
. Я не хочу, чтобы пользователи этого пакета были ограничены в том, как они настраивают остальные их установки.
На данный момент моим лучшим решением является использование завершения-чтения
несколько раз для каждой цели, пока пользователь не введет пустую строку.
Приведенный ниже ответ event_jr помог. Окончательный код, который я использовал, выглядит так:
(require 'crm)
(let ((crm-separator " ")
(crm-local-completion-map (copy-keymap crm-local-completion-map)))
(define-key crm-local-completion-map " " 'self-insert-command)
(completing-read-multiple "prompt: " '("foo" "foobar" "baz"))))