dired-x: Как также установить буфер уничтожения ? да без подтверждения?

Если вы удалите файл foo в dired-x, вас спросят Kill buffer of foo, too?. Как я могу пропустить этот вопрос и всегда отвечать на него yes?


person Marius Hofert    schedule 18.07.2012    source источник


Ответы (2)


Просто переопределите dired-clean-up-after-delete в 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?
  ))
person pmielke    schedule 19.07.2012

Можно посоветовать функцию dired-delete-entry, чтобы перед удалением закрывались любые файловые буфера:

(defadvice dired-delete-entry (before force-clean-up-buffers (file) activate)
  (kill-buffer (get-file-buffer file)))

Руководство Elisp описывает совет как «чище, чем переопределение всей функции», и с меньшей вероятностью он сломается, если определение функции изменится в будущем.

person Michael Hoffman    schedule 18.07.2012
comment
Я только что понял, что, к сожалению, это не так, как ожидалось. Когда меня также просят убить буфер, и я выбираю «да», я все еще нахожусь в буфере dired(-x), показывая мне оставшиеся файлы. Однако с вашим кодом происходит следующее: когда я удаляю файл (без запроса), он бросает меня в другой буфер вместо того, чтобы просто удалить файл без изменения буфера. - person Marius Hofert; 19.07.2012