2010-08-16 21 views
0

Poursuivant mon processus de migration la plus récente & plus grand Emacs 23.2, je frappé une autre mauvaise surprise: l'expansion dynamique dans minibuffer ne fonctionne plus!l'expansion dynamique minibuffer ne fonctionne plus lors du passage de Emacs 21.2

par « l'expansion dynamique du minibuffer » Je veux dire la fonction qui vous permet de frapper aveuglément la barre d'espace pour compléter les variables, les noms de fichiers, etc.

J'invoquait aussi Emacs -Q '(pour écarter tout .emacs artefacts) et le problème existe non seulement avec Emacs 23.2 sur Windows XP, mais même avec Emacs 22.1 sur Ubuntu.

Quelque chose a changé dans le comportement par défaut d'Emacs, mais qu'est-ce que c'est?

Répondre

2

De la (22,1) Fichier NOUVELLES:

 
** When Emacs prompts for file names, SPC no longer completes the file name. 
This is so filenames with embedded spaces could be input without the 
need to quote the space with a C-q. The underlying changes in the 
keymaps that are active in the minibuffer are described below under 
"New keymaps for typing file names". 

If you want the old behavior back, add these two key bindings to your 
~/.emacs init file: 

    (define-key minibuffer-local-filename-completion-map 
     " " 'minibuffer-complete-word) 
    (define-key minibuffer-local-must-match-filename-map 
     " " 'minibuffer-complete-word) 
+0

Cela a effectivement résolu le problème. Merci Scott. Malheureusement, "minibuffer-local-must-match-filename-map" génère une erreur dans Emacs 21.2 que je continue d'exécuter sur quelques autres machines. Est-ce que n'importe quel moyen de faire des versions plus vieilles d'Emacs l'ignore? –

0

Répondre à ma 2ème question (dans le commentaire):

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

Si vous venez avec une solution plus élégante, ce serait génial , mais ce qui précède fonctionne pour moi (pour l'instant).

1

La solution affichée fonctionne, mais elle se casse dès que nous arrivons à Emacs v24 et versions ultérieures. Je recommande plutôt lacer vos define-key appels à la présence des nouvelles cartes, comme si:

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

Cela devrait fonctionner correctement pour toutes les versions Emacs.