2013-04-26 17 views
6

Tôi tìm thấy một đoạn mã để đóng tất cả các bộ đệm dired, mà tôi muốn sử dụng trong chỉ huy mặt trời mọc:Kiểm tra xem chế độ chính là một bằng nhiều emacs

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

Issue là, tôi không thể làm cho nó hoạt cả cho sr-mode và dired-mode cùng nhau. Làm cách nào để kiểm tra "nếu chế độ chính là chế độ sr OR OR-mode"?


CHỈNH SỬA: Chỉ lỗi cú pháp. Phải là

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

Phải thừa nhận nó không quá trực quan.

+0

vâng vâng, đó là những gì tôi đã mất tích. – CrimsonKing

+1

Nó hoàn toàn trực quan. Mã ban đầu của bạn giống như viết 'if (foo) {|| quán ba; baz(); } 'trong C. – Sean

+0

Điều đó cũng không trực quan. Không thuyết phục. Trực quan sẽ là nếu (foo || bar) {baz(); }. – CrimsonKing

Trả lời

11

Cách kinh điển sẽ là (when (derived-mode-p 'sr-mode 'dired-mode) ...).

2

tôi đã cố gắng một số điều và thấy điều này để làm việc trên tôi emacs-ielm - có lẽ nó có thể giúp thêm:

(if (member major-mode '(fsharp-mode c-mode java-mode inferior-emacs-lisp-mode)) 
(message "yeah right"))