2009-06-24 5 views

Répondre

4

Pour Emacs 23.1, cette solution fonctionne (avec les paramètres par défaut Emacs):

(defadvice minibuffer-complete-and-exit (before minibuffer-complete-and-exit activate) 
    "translate all occurrences of multiple/into single /" 
    (let ((unread-command-events t)) 
(save-excursion (replace-regexp "/+" "/" nil (point-min) (point-max))) 
(message nil))) 

Je n'ai pas accès à Emacs 22. *, vous devrez essayer les deux, mais je soupçonne que la solution ci-dessous fonctionne.

Pour Emacs 21.3, les travaux réponse précédente:

Cela semble faire l'affaire (frapper TAB pour voir en action):

(defadvice read-file-name-internal (before read-file-name-internal-reduce-slash activate) 
    "translate all occurrences of multiple/into single /" 
    (ad-set-arg 0 (replace-regexp-in-string "/+" "/" (ad-get-arg 0)))) 

Cela ne vous oblige à taper TAB pour obtenir le traduction à se produire.

modifié pour ajouter:

Pour obtenir l'effet sans frapper TAB, utilisez ce code:

(define-key minibuffer-local-map (kbd "RET") 'exit-minibuffer-reduce-slash-if-in-find-file) 
(defun exit-minibuffer-reduce-slash-if-in-find-file() 
    "when finding a file translate all occurrences of multiple/into single /" 
    (interactive) 
    (when (or nil minibuffer-completing-file-name) 
    (goto-char (point-min)) 
    (while (re-search-forward "//+" nil t) 
     (replace-match "/"))) 
    (call-interactively 'exit-minibuffer)) 
+0

bon conseil. Le double-slash-means-filesystem-root m'arrive rarement mais quand il frappe, c'est discordant. C'est pratique. – Cheeso

0

Emacs utilise substitut en nom de fichier à faire plusieurs substitution dans le fichier des noms. L'un est (à partir de la chaîne doc de fonction):

Si //' appears, everything up to and including the first of those/'est ignoré.

Malheureusement, cette fonction n'est pas personnalisable. Mais vous pouvez créer un conseil pour supprimer plusieurs barres obliques avant l'exécution de de remplacement en nom de fichier:

(defadvice substitute-in-file-name (before fixup-double-slashes activate) 
    (ad-set-arg 0 (replace-regexp-in-string "//+" "/" (ad-get-arg 0)))) 
Questions connexes