bookmark+ 中书签设置的问题 (emacs 24.5)

Trouble with bookmark-set in bookmark+ (emacs 24.5)

Emacs 在书签集上提高 "funcall: Symbol's value as variable is void: choices"。

禁用 bookmark+ 后,bookmark-set 开始正常工作。

有人知道如何解决这个问题吗?

我找不到在 Bookmark+ 代码中使用名为 choices 的变量。

您在 Bookmark+ source-file headers 中看到的最近 Last-Updated 日期是什么时候?

我建议你这样做,如果你还没有这样做的话:

  1. 检查bmkp-after-set-hook中是否有东西。如果是这样,请尝试将其删除以查看是否可以消除错误。

  2. 下载最新的 Bookmark+ 源文件 (from Emacs Wiki or from MELPA)。

  3. 删除您可能拥有的任何 byte-compiled(即 *.elc)版本的文件。

  4. 再试一次,看看是否出现同样的错误。如果是这样,请通过电子邮件向我报告:M-x bmkp-send-bug-report.

  5. 如果不是(不再有这样的错误):

    一个。加载源文件 bookmark+-mac.el,它定义了其他文件使用的 Lisp 宏。

    b。 Byte-compile bookmark+-mac.el.

    c。 Byte-compile 其他文件。 (一个简单的方法是在 Dired 中标记它们并使用 B。)

    d。重新启动 Emacs 并查看是否再次出现错误(这次您将使用 byte-compiled 文件)。如果是,M-x bmkp-send-bug-report.

很抱歉给您带来麻烦。让我知道,我会修好它。如果您使用 M-x bmkp-send-bug-report 那么请尝试提供一个完整的方法来重现问题,最好从 emacs -Q 开始(没有初始化文件)。谢谢

Drew 找到了答案:

这是一个 ido-completing-read+.el 错误。你会想要报告 它给那个图书馆的维护者。这是的相关部分 源代码:

(when (and def (listp def)) (setq choices (append def (nreverse (cl-set-difference choices def))) def (car def)))

(when (and def initial (stringp initial) (not (string= initial ""))) (setq choices (cons def (remove def choices)) def nil))

变量 CHOICES 没有用 (defvar choices) 声明,并且 该文件将局部变量 lexical-binding 设置为 t。这表示 CHOICES 被认为是词法绑定变量。但 永远不会被词汇束缚。

可能库维护者只需要添加 (defvar choices)。 或者绑定 choices。或者删除 `lexical-binding' 的设置 到 t.