Emacs lisp - 自动填充书签名称

时间:2011-05-06 01:31:21

标签: emacs elisp bookmarks

我是elisp的新手。 http://www.gnu.org/s/emacs/manual/html_node/elisp/Interactive-Codes.html#Interactive-Codes列出交互式参数的“代码字符”,AFAIK在提示用户输入时修改输入机制的行为(例如:如果您指定输入是存在的文件名,则emacs的自动完成功能将会显示对于存在的文件名。。

我正在尝试找到已存在的书签名称的代码 - 即:emacs将提示用户输入书签名称,按下标签后,emacs将显示可能的书签名称完成。

这样的代码是否存在?

2 个答案:

答案 0 :(得分:1)

使用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)

答案 1 :(得分:1)

函数bookmark-completing-read是完成书签名称的标准方法。为此, not 需要较低级别的函数completing-read。例如:

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

如果您使用Bookmark+,那么bookmark-completing-read会接受一些可以帮助的可选参数(类似于completing-read):

  • ALIST - 可供选择的书签列表(而非所有书签:bookmark-alist

  • PRED - 过滤候选书签列表的谓词

  • HIST - 输入历史记录列表

还有一个非严格版本的函数bmkp-completing-read-lax,如果您想接受新书签名称或完全针对现有名称,这个版本非常有用。