Emacs lisp-自动完成书签名称
我是埃利普的新手。列出交互参数的“代码字符”,AFAIK会在提示用户输入时修改输入机制的行为(例如:如果指定输入是存在的文件名,emacs的自动完成功能将查找存在的文件名) 我试图找到一个已经存在的书签名的代码-即:emacs将提示用户输入书签名,按下tab键后,emacs将显示可能的书签名完成情况Emacs lisp-自动完成书签名称,emacs,elisp,bookmarks,Emacs,Elisp,Bookmarks,我是埃利普的新手。列出交互参数的“代码字符”,AFAIK会在提示用户输入时修改输入机制的行为(例如:如果指定输入是存在的文件名,emacs的自动完成功能将查找存在的文件名) 我试图找到一个已经存在的书签名的代码-即:emacs将提示用户输入书签名,按下tab键后,emacs将显示可能的书签名完成情况 是否存在这样的代码?使用完成读取。您可以编写一个函数,提示用户输入书签,如下所示: (defun my-function () (interactive) (let ((bookmark (
是否存在这样的代码?使用
完成读取。您可以编写一个函数,提示用户输入书签,如下所示:
(defun my-function ()
(interactive)
(let ((bookmark (completing-read "Bookmark: " (bookmark-all-names))))
...))
如果您希望提示成为交互式
(以便结果将自动绑定到函数的参数)的一部分,可以使用以下替代方法:
(defun my-function (bookmark)
(interactive (list (completing-read "Bookmark: " (bookmark-all-names))))
...)
要让Emacs找到函数为所有名称添加书签
,还必须在.Emacs文件中添加以下行:
(require 'bookmark)
函数
书签完成读取
是完成书签名称的标准方法。您不需要使用较低级别的功能来完成读取。例如:
(bookmark-completing-read "Bookmark" bookmark-current-bookmark)
(书签完成阅读“书签”书签当前书签)
如果使用,则bookmark completing read
接受一些可选参数(类似于completing read
),这些参数可以帮助:
——可供选择的书签列表(而不是所有书签:ALIST
)书签列表
——筛选书签候选列表的谓词PRED
——输入历史记录列表HIST
还有一个非严格版本的函数,
bmkp completing read lax
,如果您想接受新的书签名称或根据现有名称完成,这很有用。这是最常用的方法-您知道emacs是否使用一些默认列表来存储书签吗?这应该是为所有名称添加书签返回的列表。你能检查一下上面更新的代码吗?我自己不使用书签。。。如果书签列表是空的,该怎么办?很抱歉回复太晚-所以出于某种原因没有通过电子邮件通知我(?)。我收到以下错误消息:Symbol的函数定义为void:将所有名称标记为书签。更新:我认为您需要将书签列表加载到一个缓冲区(M-x bookmark bmenu list),这是因为默认情况下不会加载bookmark all names
。将(require'bookmark)
添加到.emacs文件中(我已相应地更新了答案)。运气好吗?