2009-06-24 3 views

Antwort

4

Für Emacs 23.1 funktioniert diese Lösung (mit Standard-Emacs-Einstellungen):

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

Ich habe keinen Zugriff auf Emacs 22 *, so dass Sie beide versuchen müssen werde, aber ich vermute, dass die Lösung unten funktioniert.

Für Emacs 21.3, die frühere Antwort funktioniert:

Dies scheint den Trick zu tun (Hit TAB es in Aktion zu sehen):

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

Diese Sie erfordert TAB geben Sie den bekommen Übersetzung zu passieren.

Edited hinzufügen:

Um den Effekt zu erhalten, ohne TAB zu schlagen, verwenden Sie diesen 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

guten Tipp. Die Doppel-Slash-Means-Dateisystem-Wurzel passiert mir selten, aber wenn es anschlägt, ist es störend. Das ist praktisch. – Cheeso

0

Emacs verwendet Ersatz-in-Datei-Namen mehrere Substitution in der Datei zu tun Namen. Einer ist (aus der Funktion doc string):

Wenn //' appears, everything up to and including the first of those/'verworfen wird.

Leider ist diese Funktion nicht anpassbar. Aber Sie können einen Rat schaffen, um mehrere Schrägstriche vor dem eigentlichen Ausführung Ersatz-in-Datei-Name zu entfernen:

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