继续我迁移最新最好的 Emacs 23.2 的过程,我遇到了另一个令人不快的惊喜:minibuffer 中的动态扩展不再起作用!
我所说的“迷你缓冲区中的动态扩展”是指让你盲目地按空格键来完成文件名、变量等的功能。
我还调用了“Emacs -Q”(以排除任何 .emacs 工件),问题不仅存在于 Windows XP 上的 Emacs 23.2,甚至存在于 Ubuntu 上的 Emacs 22.1。
Emacs 的默认行为发生了一些变化,但它是什么?
继续我迁移最新最好的 Emacs 23.2 的过程,我遇到了另一个令人不快的惊喜:minibuffer 中的动态扩展不再起作用!
我所说的“迷你缓冲区中的动态扩展”是指让你盲目地按空格键来完成文件名、变量等的功能。
我还调用了“Emacs -Q”(以排除任何 .emacs 工件),问题不仅存在于 Windows XP 上的 Emacs 23.2,甚至存在于 Ubuntu 上的 Emacs 22.1。
Emacs 的默认行为发生了一些变化,但它是什么?
从(22.1)新闻文件中:
** 当 Emacs 提示输入文件名时,SPC 不再完成文件名。 这样可以输入带有嵌入空格的文件名,而无需 需要用 Cq 引用空格。基本面的变化 在 minibuffer 中处于活动状态的键映射如下所述 “用于输入文件名的新键盘映射”。 如果您想恢复旧的行为,请将这两个键绑定添加到您的 ~/.emacs 初始化文件: (定义键 minibuffer-local-filename-completion-map " " 'minibuffer-complete-word) (定义键 minibuffer-local-must-match-filename-map " " 'minibuffer-complete-word)
发布的解决方案有效,但一旦我们到达 Emacs v24 及更高版本就会中断。我建议您将define-key
电话与新地图的存在联系起来,如下所示:
(if (boundp 'minibuffer-local-filename-completion-map)
(define-key minibuffer-local-filename-completion-map " " 'minibuffer-complete-word))
(if (boundp 'minibuffer-local-must-match-filename-map)
(define-key minibuffer-local-must-match-filename-map " " 'minibuffer-complete-word))
这应该适用于所有 Emacs 版本。
回答我的第二个问题(在评论中):
(defmacro GNUEmacs23 (&rest body)
(list 'if (string-match "GNU Emacs 23" (version))
(cons 'progn body)))
(defmacro GNUEmacs22 (&rest body)
(list 'if (string-match "GNU Emacs 22" (version))
(cons 'progn body)))
(GNUEmacs22
(define-key minibuffer-local-filename-completion-map " " 'minibuffer-complete-word)
(define-key minibuffer-local-must-match-filename-map " " 'minibuffer-complete-word)
)
(GNUEmacs23
(define-key minibuffer-local-filename-completion-map " " 'minibuffer-complete-word)
(define-key minibuffer-local-must-match-filename-map " " 'minibuffer-complete-word)
)
如果你想出一个更优雅的解决方案,那就太好了,但以上对我有用(现在)。