2010-02-10 108 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)))) 
相关问题