0

最新で最高のEmacs23.2を移行するプロセスを続けると、もう1つの不愉快な驚きにぶつかりました。ミニバッファーでの動的拡張機能しなくなったのです!

「ミニバッファの動的拡張」とは、スペースバーをやみくもに押してファイル名や変数などを完成させる機能を意味します。

また、「Emacs -Q」(.emacsアーティファクトを除外するため)を呼び出しました。この問題は、WindowsXPのEmacs23.2だけでなく、UbuntuのEmacs22.1にも存在します。

Emacsのデフォルトの動作に何か変更がありましたが、それは何ですか?

4

3 に答える 3

2

(22.1) NEWS ファイルから:

** Emacs がファイル名を要求するとき、SPC はもはやファイル名を補完しません。
これは、スペースが埋め込まれたファイル名を
Cq でスペースを引用する必要があります。根本的な変化
ミニバッファーでアクティブなキーマップについては、以下で説明します。
「ファイル名を入力するための新しいキーマップ」.

古い動作に戻したい場合は、これら 2 つのキー バインドを
~/.emacs 初期化ファイル:

  (define-key minibuffer-local-filename-completion-map
         " " 'minibuffer-complete-word)
  (define-key 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

私の2番目の質問に答える(コメントで):

(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 に答える