¿Cómo matar siempre el búfer dired al eliminar una carpeta?


7

Si estoy en dired y tengo una subcarpeta con otro búfer dired (una situación común cuando navego por el directorio arriba / abajo) y quiero eliminar una carpeta, presiono Dxpara marcar para su eliminación, luego ejecutar.

Emacs luego me pregunta si quiero eliminar la carpeta. Confirmo, luego me pregunta si también quiero eliminar el búfer dired de la carpeta.

No puedo pensar en una situación en la que me gustaría tirar la carpeta a la basura, pero mantener el búfer. ¿Hay alguna forma de eliminar siempre el búfer cuando se desecha la carpeta?


Un búfer Dired no siempre corresponde a una carpeta en particular. Un búfer Dired puede contener cualquier cantidad de carpetas y archivos, desde cualquier parte del sistema de archivos. Presumiblemente, su pregunta se aplica solo cuando un búfer Dired se asigna uno a uno a una sola carpeta.
Drew

Respuestas:


2

Creo que es por seguridad. ya que puede ser sorprendente si Emacs elimina un búfer ordinario sin preguntar al usuario. Puede presentar un informe de error si lo desea. Mientras tanto, siempre puedes aconsejar y-or-n-phacer lo que quieras.

(define-advice dired-clean-up-after-deletion
    (:around (old-fun &rest r) kill-dired-buffer-quietly)
  (define-advice y-or-n-p (:around (old-fun prompt) just-yes)
    (if (string-prefix-p "Kill Dired buffer" prompt)
        t
      (funcall old-fun prompt)))
  (unwind-protect (apply old-fun r)
    (advice-remove 'y-or-n-p #'y-or-n-p@just-yes)))

3

Puede agregar el siguiente fragmento en su archivo de inicio:

(eval-after-load  'dired                                                                                                               
  '(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?                                                                                                                 
     ))

Cortesía de pmielke.

También puede explorar esta página wiki de Emacs sobre la reutilización del búfer en Dired

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.