ввод в минибуфер: завершение слов с помощью пользовательского словаря

Я пытаюсь принять пользовательский ввод для утилиты командной строки в емакс У меня есть несколько слов, которые я могу использовать в этой командной строке (что-то вроде возможного целевого списка вызова 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"))))
5
задан vhallac 15 May 2012 в 16:03
поделиться