2010-02-10 107 views
48

我試圖搜索谷歌並查看手冊,但仍然無法找到如何獲取緩衝區對象的主要模式。你能幫我用一個例子或引用。由於的Emacs Lisp,如何獲得緩衝區的主要模式?

唯一的解決辦法我能找到的是改變了緩衝區,然後變回原來的緩衝區之後查詢的主要模式。有沒有更好的方法來做到這一點?

回答

35

有沒有用的問題?

(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將在它返回時恢復您的緩衝區。

+12

你也可以用做'(與電流緩衝緩衝或字符串主要模式)的''而不是保存,excursion'。 – haxney 2010-02-11 09:53:28

+2

@haxney:使用'(save-excursion(set-buffer ..)...)'確實已被棄用,以支持'(with-current-buffer ...)'。 Emacs的-24的字節,編譯器發出警告等用途。 – Stefan 2012-09-19 20:12:35

0

好,說明模式有一個可選的緩衝說法,但顯示的幫助...我不完全相信它返回......

但是,這是我能找到一個簡短的最好搜索...對不起...

27

一個簡單的方法來做到這一點是使用buffer-local-value功能,因爲major-mode是一個緩衝區局部變量:

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

對於當前緩衝區:

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

感謝Adobe和現在請端口PS到Linux :) – 2016-08-10 12:33:13

6

從以前的答案就在延伸通話沒有當前緩衝區模式的參數。

(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)))) 
相關問題