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))
bon conseil. Le double-slash-means-filesystem-root m'arrive rarement mais quand il frappe, c'est discordant. C'est pratique. – Cheeso