9

我找到了一个片段来关闭我想在日出指挥官中使用的所有 dired 缓冲区:

(defun er/kill-all-dired-buffers()
      "Kill all dired buffers."
      (interactive)
      (save-excursion
        (let((count 0))
          (dolist(buffer (buffer-list))
            (set-buffer buffer)
            (when (equal major-mode 'sr-mode) 
              (or (equal major-mode 'dired-mode))
              (setq count (1+ count))
              (kill-buffer buffer)))
          (message "Killed %i dired buffer(s)." count ))))
(setq sr-quit-hook 'er/kill-all-dired-buffers)

问题是,我不能让它同时适用于 sr-mode 和 dired-mode 。如何检查“如果主要模式是 sr-mode 或 dired-mode”?


编辑:只是一个语法错误。应该

(when (or (equal major-mode 'dired-mode) (equal major-mode 'sr-mode))

不得不承认这不是太直观。

4

3 回答 3

16

规范的方式是(when (derived-mode-p 'sr-mode 'dired-mode) ...).

于 2013-04-26T21:35:59.873 回答
2

我尝试了一些东西,发现它可以在我的 emacs-ielm 上工作 - 也许它也可能有帮助:

(if (member major-mode '(fsharp-mode c-mode java-mode inferior-emacs-lisp-mode))
(message "yeah right"))
于 2016-09-09T16:39:47.663 回答
0

也许正确的检查功能是:

(derived-mode-p &rest MODES)

参见“subr.el”。

于 2018-04-02T15:56:19.517 回答