Wie kann man beim Löschen eines Ordners immer den dired buffer beenden?

7

Wenn ich in dired bin und einen Unterordner mit einem anderen dired-Puffer habe (eine häufige Situation beim Navigieren im Auf- / Ab-Verzeichnis) und einen Ordner löschen möchte, drücke ich Dx, um ihn zum Löschen zu markieren, und führe ihn dann aus.

Emacs fragt dann, ob ich den Ordner in den Papierkorb werfen möchte. Ich bestätige, dann wird gefragt, ob ich auch den dired-Puffer des Ordners löschen möchte.

Ich kann mir keine Situation vorstellen, in der ich den Ordner in den Papierkorb werfen möchte, aber den Puffer behalten möchte. Gibt es eine Möglichkeit, den Puffer beim Papierkorb immer in den Papierkorb zu werfen?

Alex
quelle
Ein Dired-Puffer entspricht nicht immer einem bestimmten Ordner. Ein Dired-Puffer kann eine beliebige Anzahl von Ordnern und Dateien aus beliebigen Teilen des Dateisystems enthalten. Vermutlich gilt Ihre Frage nur, wenn ein Dired-Puffer einem einzelnen Ordner eins zu eins zugeordnet ist.
Drew

Antworten:

2

Ich denke, es ist für die Sicherheit. da es überraschend sein kann, wenn Emacs einen normalen Puffer löscht, ohne den Benutzer zu fragen. Sie können einen Fehlerbericht einreichen, wenn Sie möchten. In der Zwischenzeit können Sie immer raten, das y-or-n-pzu tun, was Sie wollen.

(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
quelle
3

Sie können das folgende Snippet zu Ihrer Init-Datei hinzufügen:

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

Mit freundlicher Genehmigung von pmielke

Möglicherweise möchten Sie auch diese Emacs-Wiki-Seite über die Wiederverwendung von Puffern in Dired durchsuchen

Nsukami _
quelle