2013-07-25 46 views
2

我想改變一個次要模式行爲取決於主要模式。 現在我寫的如下。如何比較Emacs中的多個功能

(defun foo (input) 
    (if (or 
    (eql major-mode 'foo-mode) 
    (eql major-mode 'foo1-mode) 
    (eql major-mode 'foo2-mode)) 
    (myfunc-one input) 
    (myfunc-two input))) 

我工作,但我不想寫類似的條件陳述3次。 我怎樣才能更有效地編寫它?

回答

5
(defun foo (input) 
    (if (memql major-mode '(foo-mode foo1-mode foo2-mode)) 
     (myfunc-one input) 
     (myfunc-two input))) 
+3

象'foo-mode'這樣的符號會被禁用,這意味着'eq'應該足夠了。 'memq'可能是比'memql'更好的選擇。 – ataylor

+0

感謝您的回答! – Tetsu

2

你一般不想直接測試major-mode。相反,您想使用(derived-mode-p 'foo1-mode 'foo2-mode 'foo3-mode)