2012-07-18 10 views

risposta

5

Semplicemente ridefinire la cancellazione diretta dopo eliminazione 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

Molto buono, funziona perfettamente! –

8

È in grado di consigliare la funzione dired-delete-entry in modo che eventuali buffer dei file siano chiuse prima della cancellazione:

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

Il manuale Elisp descrive consigliando come "più pulita rispetto ridefinendo l'intera funzione" ed è meno probabile che rompersi se la definizione della funzione cambia in futuro.

+0

Perfetto, grazie, Michael. –

+0

Mi sono appena reso conto che, sfortunatamente, questo non si comporta come previsto. Quando mi viene chiesto di uccidere anche il buffer, e scelgo di sì, sono ancora nel buffer dired (-x) mostrandomi i file rimanenti. Tuttavia, con il tuo codice, succede quanto segue: Quando elimino un file (senza essere richiesto), mi getta in un buffer diverso invece di eliminare il file senza modificare il buffer. –

Problemi correlati