Emacs lisp-自动完成书签名称

Emacs lisp-自动完成书签名称,emacs,elisp,bookmarks,Emacs,Elisp,Bookmarks,我是埃利普的新手。列出交互参数的“代码字符”,AFAIK会在提示用户输入时修改输入机制的行为(例如:如果指定输入是存在的文件名,emacs的自动完成功能将查找存在的文件名) 我试图找到一个已经存在的书签名的代码-即:emacs将提示用户输入书签名,按下tab键后,emacs将显示可能的书签名完成情况 是否存在这样的代码?使用完成读取。您可以编写一个函数,提示用户输入书签,如下所示: (defun my-function () (interactive) (let ((bookmark (

我是埃利普的新手。列出交互参数的“代码字符”,AFAIK会在提示用户输入时修改输入机制的行为(例如:如果指定输入是存在的文件名,emacs的自动完成功能将查找存在的文件名)

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


是否存在这样的代码?

使用
完成读取。您可以编写一个函数,提示用户输入书签,如下所示:

(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文件中(我已相应地更新了答案)。运气好吗?