Emacs lisp - автозаполнение имен закладок - PullRequest
5 голосов
/ 06 мая 2011

Я новичок в elisp.http://www.gnu.org/s/emacs/manual/html_node/elisp/Interactive-Codes.html#Interactive-Codes перечисляет «кодовые символы» для интерактивных параметров, которые AFAIK изменяет поведение механизма ввода при запросе пользователя на ввод (например: если вы укажете, что вход является существующим именем файла, функция автозаполнения emacs будетищите имена файлов, которые существуют).

Я пытаюсь найти код для имени закладки, которая уже существует - то есть: emacs запросит у пользователя имя закладки, и после нажатия на вкладку emacs покажет возможныйдополнения к имени закладки.

Существует ли такой код?

Ответы [ 2 ]

1 голос
/ 20 августа 2011

Функция bookmark-completing-read - это стандартный способ ввода имени закладки. Вам не нужна функция нижнего уровня completing-read для этого. Пример:

    (bookmark-completing-read "Bookmark" bookmark-current-bookmark)

Если вы используете Закладка + , тогда bookmark-completing-read принимает некоторые необязательные аргументы (аналогично completing-read), которые могут помочь:

  • ALIST - список закладок на выбор (вместо всех закладок: bookmark-alist)

  • PRED - предикат, который фильтрует список кандидатов в закладки

  • HIST - список истории ввода

Существует также нестрогая версия функции, bmkp-completing-read-lax, которая полезна, если вы хотите принять новое имя закладки или дополнить существующие имена.

1 голос
/ 06 мая 2011

Используйте completing-read для этого.Вы можете написать функцию, которая запрашивает у пользователя закладку, например так:

(defun my-function ()
  (interactive)
  (let ((bookmark (completing-read "Bookmark: " (bookmark-all-names))))
    ...))

Если вы предпочитаете, чтобы подсказка была частью interactive (чтобы результат автоматически привязывался к аргументам вашей функции), вы можете использовать следующую альтернативу:

(defun my-function (bookmark)
  (interactive (list (completing-read "Bookmark: " (bookmark-all-names))))
  ...)

Чтобы Emacs мог найти функцию bookmark-all-names, вы также должны добавить следующую строку в ваш файл .emacs:

(require 'bookmark)
...