Emacs lisp - 自动完成书签名称
问题描述:
我是新来的elisp。 http://www.gnu.org/s/emacs/manual/html_node/elisp/Interactive-Codes.html#Interactive-Codes列出了用于交互参数的'代码字符',当提示用户输入时,AFAIK修改输入机制的行为(例如:如果您指定输入是存在的文件名,emacs的自动完成功能将查找文件名存在)。Emacs lisp - 自动完成书签名称
我试图找到一个已经存在的书签名称的代码 - 即:emacs将提示用户输入书签名称,并在按下标签emacs将显示可能的书签名称完成。
这样的代码是否存在?
答
为此使用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)
答
功能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
,如果你想接受一个新的书签名称或完全与现有的名字,这是有用的非严格的版本。
这就是那里的大部分 - 你知道是否有一些emacs用来存储书签的默认列表? – Taras 2011-05-09 02:42:43
这应该是'bookmark-all-names'返回的列表。你能否检查上面更新的代码?我自己不使用书签......如果书签列表为空,会发生什么情况? – Thomas 2011-05-10 10:56:25
很抱歉对于迟到的回复 - 由于某种原因,SO没有通过电子邮件通知我(??)。我收到以下错误消息:符号的函数定义是void:bookmark-all-names。更新:我认为你需要将书签列表加载到缓冲区中(M-x bookmark-bmenu-list) – Taras 2011-05-13 04:23:40