Làm thế nào để luôn luôn giết bộ đệm dired khi xóa một thư mục?


7

Nếu tôi đang chuyển hướng và có thư mục con với bộ đệm được điều hướng khác (một tình huống phổ biến khi điều hướng thư mục lên / xuống) và muốn xóa một thư mục, tôi nhấn Dxđể đánh dấu để xóa, sau đó thực thi.

Emacs sau đó hỏi tôi có muốn dọn rác thư mục không. Tôi xác nhận, sau đó nó hỏi tôi có muốn giết bộ đệm dired của thư mục không.

Tôi không thể nghĩ đến một tình huống mà tôi muốn dọn rác thư mục nhưng vẫn giữ bộ đệm. Có cách nào để luôn dọn rác bộ đệm khi dọn rác thư mục không?


Một bộ đệm Dired không phải lúc nào cũng tương ứng với một thư mục cụ thể. Bộ đệm có hướng có thể chứa bất kỳ số lượng thư mục và tệp nào, từ bất kỳ (các) phần nào của hệ thống tệp. Có lẽ câu hỏi của bạn chỉ áp dụng khi bộ đệm Dired ánh xạ một đến một vào một thư mục.
vẽ

Câu trả lời:


2

Tôi nghĩ rằng nó là an toàn. vì nó có thể gây ngạc nhiên nếu Emacs xóa một bộ đệm thông thường mà không hỏi người dùng. Bạn có thể nộp báo cáo lỗi nếu bạn muốn. Trong khi đó bạn luôn có thể tư vấn y-or-n-pđể làm những gì bạn muốn.

(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

Bạn có thể thêm đoạn mã sau vào tệp init của mình:

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

Phép lịch sự của pmielke

Bạn cũng có thể muốn duyệt trang wiki Emacs này về việc sử dụng lại bộ đệm trong Dired

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.