Se si elimina un file foo
in , viene richiesto Kill buffer of foo, too?
. Come posso saltare questa domanda e rispondere sempre con yes
?dired-x: Come impostare "Elimina buffer di ..., anche?" a sì senza conferma?
risposta
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?
))
È 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.
Perfetto, grazie, Michael. –
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. –
Molto buono, funziona perfettamente! –