检查主要模式是否等于几个emacs中的一个

时间:2013-04-26 17:51:49

标签: emacs elisp

我找到了一个代码片段来关闭所有直接缓冲区,我想在日出指挥官中使用它:

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

不得不承认它不太直观。

3 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:2)

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

for (Item* i : foo.items) {
    // either positive
    if (i) {
       // ...
    }

    // or negative
    if (!i) continue;
    // ...
}

答案 2 :(得分:1)

也许正确的检查功能是:

(derived-mode-p &rest MODES)

参见'subr.el'。