2013-04-26 12 views
6

ho trovato un frammento di chiudere tutti i buffer dired, che voglio usare in comandante alba:Controllare se la modalità principale è uguale uno dei diversi 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) 

Problema di essere, non riesco a farlo funzionare sia per sr-mode e dired-mode insieme. Come si verifica "se la modalità principale è sr-mode OR modalità dired"?


EDIT: Basta un errore di sintassi. Dovrebbe essere

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

devo ammettere che non è troppo intuitivo.

+0

sì sì, questo è quello che mi mancava. – CrimsonKing

+1

È perfettamente intuitivo. Il tuo codice originale è come scrivere 'if (foo) {|| bar; baz(); } 'in C. – Sean

+0

Anche questo non è intuitivo. Non convinto. Intuitivo sarebbe se (foo || bar) {baz(); }. – CrimsonKing

risposta

11

Il modo canonico sarebbe (when (derived-mode-p 'sr-mode 'dired-mode) ...).

2

ho provato alcune cose e abbiamo trovato questo per lavorare sul mio emacs-IeLM - forse potrebbe aiutare anche:

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