2011-05-06 97 views
5

我是新来的elisp。 http://www.gnu.org/s/emacs/manual/html_node/elisp/Interactive-Codes.html#Interactive-Codes列出了用于交互参数的'代码字符',当提示用户输入时,AFAIK修改输入机制的行为(例如:如果您指定输入是存在的文件名,emacs的自动完成功能将查找文件名存在)。Emacs lisp - 自动完成书签名称

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

这样的代码是否存在?

回答

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) 
+0

这就是那里的大部分 - 你知道是否有一些emacs用来存储书签的默认列表? – Taras 2011-05-09 02:42:43

+0

这应该是'bookmark-all-names'返回的列表。你能否检查上面更新的代码?我自己不使用书签......如果书签列表为空,会发生什么情况? – Thomas 2011-05-10 10:56:25

+0

很抱歉对于迟到的回复 - 由于某种原因,SO没有通过电子邮件通知我(??)。我收到以下错误消息:符号的函数定义是void:bookmark-all-names。更新:我认为你需要将书签列表加载到缓冲区中(M-x bookmark-bmenu-list) – Taras 2011-05-13 04:23:40

1

功能bookmark-completing-read是完成书签名称的标准方式。你做不是需要这个下级函数completing-read。例如:

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

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

  • ALIST - 书签的ALIST从(而不是所有书签选择:bookmark-alist

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

  • HIST - 输入历史列表

还有一个功能,bmkp-completing-read-lax,如果你想接受一个新的书签名称或完全与现有的名字,这是有用的非严格的版本。