2013-04-26 2 views
6

के बराबर एक है मैं सभी dired बफर, जो मैं सूर्योदय कमांडर में उपयोग करना चाहते हैं बंद करने के लिए एक टुकड़ा मिला:जांच करें कि प्रमुख मोड कई 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) 

जारी किया जा रहा है, मैं इसे दोनों काम नहीं कर सकता एसआर-मोड और डायर मोड के लिए एक साथ। मैं कैसे जांचूं "अगर प्रमुख मोड एसआर-मोड या डायर-मोड है"?


संपादित करें: बस एक वाक्यविन्यास त्रुटि। होना चाहिए

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

यह बहुत सहज नहीं है स्वीकार करने के लिए है।

+0

हां हां, कि मैं क्या याद आ रही थी है। – CrimsonKing

+1

यह पूरी तरह से सहज है। आपका मूल कोड 'if (foo) {|| लिखना है बार; baz(); } 'सी – Sean

+0

में यह सहज नहीं है। आश्वस्त नहीं। अंतर्ज्ञानी होगा अगर (foo || बार) {baz(); }। – CrimsonKing

उत्तर

11

कैननिकल तरीका (when (derived-mode-p 'sr-mode 'dired-mode) ...) होगा।

2

मैं कुछ बातें की कोशिश की और मेरी Emacs-ielm पर काम करने के लिए इस पाया - शायद यह भी मदद कर सकता है:

(if (member major-mode '(fsharp-mode c-mode java-mode inferior-emacs-lisp-mode)) 
(message "yeah right")) 
संबंधित मुद्दे