Emacs lisp - 自动完成书签名称

发布于 2024-11-05 12:48:56 字数 412 浏览 1 评论 0原文

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

我正在尝试查找已存在的书签名称的代码 - 即:emacs 将提示用户输入书签名称,并且在按下选项卡时 emacs 将显示可能的书签名称补全。

这样的代码存在吗?

I'm new to elisp. http://www.gnu.org/s/emacs/manual/html_node/elisp/Interactive-Codes.html#Interactive-Codes lists 'code characters' for interactive parameters, which AFAIK modifies the behaviour of the input mechanism when prompting the user for input (eg: if you specify that the input is a filename that exists, emacs' autocomplete functionality will look for file names that exists).

I'm trying to find a code for a bookmark name that already exists - ie: emacs will prompt the user for a bookmark name, and upon pressing tab emacs will show possible bookmark name completions.

Does such a code exist?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

感性不性感 2024-11-12 12:48:56

为此,请使用 completing-read 。您可以编写一个提示用户输入书签的函数,如下所示:

(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 找到函数 bookmark-all-names,您还必须将以下行添加到您的 .emacs 文件中:

(require 'bookmark)

Use completing-read for that. You could write a function that prompts the user for a bookmark like so:

(defun my-function ()
  (interactive)
  (let ((bookmark (completing-read "Bookmark: " (bookmark-all-names))))
    ...))

If you prefer the prompting to be part of interactive (so that the result will be bound automatically to your function's arguments), you could use the following alternative:

(defun my-function (bookmark)
  (interactive (list (completing-read "Bookmark: " (bookmark-all-names))))
  ...)

For Emacs to find the function bookmark-all-names you also have to add the following line to your .emacs file:

(require 'bookmark)
扮仙女 2024-11-12 12:48:56

函数bookmark-completing-read是完成书签名称的标准方法。为此,您不需要需要较低级别的函数completing-read。示例:

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

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

  • ALIST -- 列表可供选择的书签(而不是所有书签:bookmark-alist

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

  • HIST -- 输入历史列表

该函数还有一个非严格版本, bmkp-completing-read-lax,如果您想要接受新的书签名称或根据现有名称完成,这非常有用。

Function bookmark-completing-read is the standard way to complete a bookmark name. You do not need the lower-level function completing-read for this. Example:

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

If you use Bookmark+ then bookmark-completing-read accepts some optional arguments (similar to completing-read) that can help:

  • ALIST -- an alist of bookmarks to choose from (instead of all bookmarks: bookmark-alist)

  • PRED -- a predicate that filters the list of bookmark candidates

  • HIST -- an input history list

There is also a non-strict version of the function, bmkp-completing-read-lax, which is useful if you want to accept a new bookmark name or complete against existing names.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文