2010-02-10 13 views
48

Ho provato a cercare su Google e cercare nel manuale, ma ancora non riesco a trovare come ottenere la modalità principale di un oggetto buffer. Puoi aiutarmi con un esempio o un riferimento. Grazieemacs lisp, come ottenere la modalità buffer buffer?

l'unica soluzione che ho trovato era di interrogare la modalità principale dopo aver cambiato il buffer e poi tornare al buffer originale. C'è un modo migliore per farlo?

risposta

35

C'è un problema con quello?

(defun buffer-mode (buffer-or-string) 
    "Returns the major mode associated with a buffer." 
    (with-current-buffer buffer-or-string 
    major-mode)) 

with-current-buffer sarà ripristinare il buffer quando ritorna.

+12

Si potrebbe anche fare ciò con '(con buffer-or-buffer-or-string-main-mode)' invece di 'save-excursion'. – haxney

+2

@haxney: L'uso di '(save-excursion (set-buffer ..) ...)' è effettivamente deprecato a favore di '(with-current-buffer ...)'. Il compilatore di byte di Emacs-24 mette in guardia su tali usi. – Stefan

0

Beh, descrivere modalità prende un argomento buffer di facoltativo, ma che consente di visualizzare l'aiuto ... e io non sono esattamente sicuro di cosa si ritorna ...

Ma questo è il migliore che ho trovato in un breve ricerca ... mi dispiace ...

27

Un modo semplice per farlo è utilizzare la funzione buffer-local-value dal major-mode è una variabile buffer locale:

(buffer-local-value 'major-mode (get-buffer "*scratch*")) 
37

Per buffer corrente:

(message "%s" major-mode) 
+2

grazie Adobe e ora si prega di portare PS a Linux :) –

6

soli estendentesi dalle risposte precedenti, chiamata senza argomenti per la modalità corrente del buffer.

(defun buffer-mode (&optional buffer-or-name) 
    "Returns the major mode associated with a buffer. 
If buffer-or-name is nil return current buffer's mode." 
    (buffer-local-value 'major-mode 
    (if buffer-or-name (get-buffer buffer-or-name) (current-buffer)))) 
Problemi correlati