2010-02-10 10 views
48

Próbowałem przeszukać Google i zajrzeć do instrukcji, ale nadal nie mogę znaleźć sposobu na uzyskanie trybu głównego obiektu buforowego. Czy możesz mi pomóc z przykładem lub referencją? Dziękiemacs seplenienie, jak uzyskać tryb główny bufora?

jedynym rozwiązaniem, jakie mogłem znaleźć, było zapytanie o tryb główny po zmianie bufora, a następnie zmianie z powrotem na oryginalny bufor. Czy istnieje lepszy sposób na zrobienie tego?

Odpowiedz

35

Czy jest z tym jakiś problem?

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

przywróci bufor po jego powrocie.

+12

Można to również zrobić za pomocą '(z opcją-bufora-bufora-w-głównym-ciągiem)' zamiast 'save-excursion'. – haxney

+2

@haxney: Użycie '(save-excursion (set-buffer ..) ...)' jest rzeczywiście przestarzałe na rzecz '(with-current-buffer ...)'. Kompilator bajtów Emacs-24 ostrzega o takich zastosowaniach. – Stefan

0

No opisać tryb pobiera opcjonalny argument bufora, ale który wyświetla pomoc ... i nie jestem do końca pewien, co to zwraca ...

Ale to najlepsze co mogłem znaleźć w skrócie szukaj ... przepraszam ...

27

Prostym sposobem, aby to zrobić jest użycie funkcji buffer-local-value od major-mode jest zmienna bufor lokalny:

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

Dla bieżącego bufora:

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

dzięki Adobe, a teraz proszę port PS na Linux :) –

6

Wystarczy rozciągającej się od poprzednich odpowiedzi, zadzwoń bez argumentów dla bieżącego trybu bufora.

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