Como sempre matar o buffer direcionado ao excluir uma pasta?

7

Se eu estiver no direcionado e tiver uma subpasta com outro buffer direcionado (uma situação comum ao navegar para cima / para baixo no diretório) e quiser excluir uma pasta, pressione Dxpara marcar a exclusão e execute.

O Emacs pergunta se eu quero lixeira na pasta. Eu confirmo, então ele pergunta se eu quero matar o buffer direcionado da pasta também.

Não consigo pensar em uma situação em que gostaria de lixeira da pasta, mas mantenha o buffer. Existe uma maneira de sempre lixeira do buffer ao lixeira da pasta?

Alex
fonte
Um buffer direcionado nem sempre corresponde a uma pasta específica. Um buffer direcionado pode conter qualquer número de pastas e arquivos, de qualquer parte do sistema de arquivos. Presumivelmente, sua pergunta se aplica somente quando um buffer Dired mapeia um para um para uma única pasta.
Desenhou

Respostas:

2

Eu acho que é por segurança. pois pode ser surpreendente se o Emacs excluir um buffer comum sem perguntar ao usuário. Você pode registrar um relatório de erro, se desejar. Enquanto isso, você sempre pode aconselhar y-or-n-pa fazer o que quiser.

(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)))
xuchunyang
fonte
3

Você pode adicionar o seguinte snippet no seu arquivo init:

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

Cortesia de pmielke

Você também pode procurar nesta página wiki do Emacs sobre a reutilização de buffer no Dired

Nsukami _
fonte