0

继续我迁移最新最好的 Emacs 23.2 的过程,我遇到了另一个令人不快的惊喜:minibuffer 中的动态扩展不再起作用!

我所说的“迷你缓冲区中的动态扩展”是指让你盲目地按空格键来完成文件名、变量等的功能。

我还调用了“Emacs -Q”(以排除任何 .emacs 工件),问题不仅存在于 Windows XP 上的 Emacs 23.2,甚至存在于 Ubuntu 上的 Emacs 22.1。

Emacs 的默认行为发生了一些变化,但它是什么?

4

3 回答 3

2

从(22.1)新闻文件中:

** 当 Emacs 提示输入文件名时,SPC 不再完成文件名。
这样可以输入带有嵌入空格的文件名,而无需
需要用 Cq 引用空格。基本面的变化
在 minibuffer 中处于活动状态的键映射如下所述
“用于输入文件名的新键盘映射”。

如果您想恢复旧的行为,请将这两个键绑定添加到您的
~/.emacs 初始化文件:

  (定义键 minibuffer-local-filename-completion-map
         " " 'minibuffer-complete-word)
  (定义键 minibuffer-local-must-match-filename-map
         " " 'minibuffer-complete-word)
于 2010-08-16T17:51:31.400 回答
1

发布的解决方案有效,但一旦我们到达 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 版本。

于 2011-02-07T04:06:28.770 回答
0

回答我的第二个问题(在评论中):

(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)
)

如果你想出一个更优雅的解决方案,那就太好了,但以上对我有用(现在)。

于 2010-08-16T19:27:25.473 回答