2010-02-10 17 views
48

He intentado buscar en Google y buscar en el manual, pero todavía no encuentro cómo obtener el modo principal de un objeto de memoria intermedia. ¿Me pueden ayudar con un ejemplo o una referencia? Graciasemacs lisp, ¿cómo obtener el modo principal de búfer?

única solución que pude encontrar fue consultar el modo principal después de cambiar el búfer y luego volver al buffer original. Hay una mejor manera de hacerlo?

Respuesta

35

¿Hay algún problema con eso?

(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 y restaura la memoria intermedia cuando se devuelve.

+12

También podría hacer esto con '(with-current-buffer buffer-or-string major-mode)' en lugar de 'save-excursion'. – haxney

+2

@haxney: El uso de '(save-excursion (set-buffer ..) ...)' está de hecho en desuso en favor de '(with-current-buffer ...)'. El compilador de bytes de Emacs-24 advierte sobre tales usos. – Stefan

0

Bueno, describir en modo toma un argumento búfer opcional, pero que muestra la ayuda ... y no estoy exactamente seguro de lo que devuelve ...

Pero eso es lo mejor que pude encontrar en un breve buscar ... perdón ...

27

Una forma sencilla de hacerlo es utilizar la función buffer-local-value desde major-mode es una variable local al búfer:

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

Para búfer en:

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

gracias Adobe y ahora por favor puerto PS a Linux :) –

6

Sólo se extiende desde las respuestas anteriores, llamada sin argumentos para el modo del búfer en uso.

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