2012-07-18 4 views

Antwort

5

Konfigurieren Sie einfach Dired-Clean-up-nach-Löschung in dired-x.el.

;; redefine the definition in dired-x.el, so that we are not prompted 
;; to remove buffers that were associated with deleted 
;; files/directories 

(eval-after-load "dired-x" '(defun dired-clean-up-after-deletion (fn) 
    "My. Clean up after a deleted file or directory FN. 
Remove expanded subdir of deleted dir, if any." 
    (save-excursion (and (cdr dired-subdir-alist) 
         (dired-goto-subdir fn) 
         (dired-kill-subdir))) 

    ;; Offer to kill buffer of deleted file FN. 
    (if dired-clean-up-buffers-too 
     (progn 
     (let ((buf (get-file-buffer fn))) 
      (and buf 
       (save-excursion ; you never know where kill-buffer leaves you 
       (kill-buffer buf)))) 
     (let ((buf-list (dired-buffers-for-dir (expand-file-name fn))) 
       (buf nil)) 
      (and buf-list 
       (while buf-list 
       (save-excursion (kill-buffer (car buf-list))) 
       (setq buf-list (cdr buf-list))))))) 
    ;; Anything else? 
)) 
+0

Sehr gut, funktioniert perfekt! –

8

können Sie beraten die dired-delete-entry Funktion, so dass alle Dateipuffer vor dem Löschen geschlossen werden:

(defadvice dired-delete-entry (before force-clean-up-buffers (file) activate) 
    (kill-buffer (get-file-buffer file))) 

Das Elisp Handbuch beschreibt die Beratung als „sauberer als die gesamte Funktion neu zu definieren“, und es ist weniger wahrscheinlich, wenn zu brechen Die Definition der Funktion ändert sich in der Zukunft.

+0

Perfekt, danke, Michael. –

+0

Ich habe gerade gemerkt, dass sich das leider nicht wie erwartet verhält. Wenn ich aufgefordert werde, auch den Puffer zu löschen, und ich ja wähle, bin ich immer noch im dired (-x) -Puffer, der mir die verbleibenden Dateien zeigt. Mit Ihrem Code passiert jedoch folgendes: Wenn ich eine Datei lösche (ohne gefragt zu werden), wirft sie mich in einen anderen Puffer, anstatt nur die Datei zu löschen, ohne den Puffer zu ändern. –