我是elisp的新手。 http://www.gnu.org/s/emacs/manual/html_node/elisp/Interactive-Codes.html#Interactive-Codes列出交互式参数的“代码字符”,AFAIK在提示用户输入时修改输入机制的行为(例如:如果您指定输入是存在的文件名,则emacs的自动完成功能将会显示对于存在的文件名。。
我正在尝试找到已存在的书签名称的代码 - 即:emacs将提示用户输入书签名称,按下标签后,emacs将显示可能的书签名称完成。
这样的代码是否存在?
答案 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
,如果您想接受新书签名称或完全针对现有名称,这个版本非常有用。