的Emacs Lisp,如何获得缓冲区的主要模式?
问题描述:
我试图搜索谷歌并查看手册,但仍然无法找到如何获取缓冲区对象的主要模式。你能帮我用一个例子或引用。由于的Emacs Lisp,如何获得缓冲区的主要模式?
唯一的解决办法我能找到的是改变了缓冲区,然后变回原来的缓冲区之后查询的主要模式。有没有更好的方法来做到这一点?
答
有没有用的问题?
(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
将在它返回时恢复您的缓冲区。
答
好,说明模式有一个可选的缓冲说法,但显示的帮助...我不完全相信它返回......
但是,这是我能找到一个简短的最好搜索...对不起...
答
一个简单的方法来做到这一点是使用buffer-local-value
功能,因为major-mode
是一个缓冲区局部变量:
(buffer-local-value 'major-mode (get-buffer "*scratch*"))
答
对于当前缓冲区:
(message "%s" major-mode)
+2
感谢Adobe和现在请端口PS到Linux :) – 2016-08-10 12:33:13
答
从以前的答案就在延伸通话没有当前缓冲区模式的参数。
(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))))
你也可以用做'(与电流缓冲缓冲或字符串主要模式)的''而不是保存,excursion'。 – haxney 2010-02-11 09:53:28
@haxney:使用'(save-excursion(set-buffer ..)...)'确实已被弃用,以支持'(with-current-buffer ...)'。 Emacs的-24的字节,编译器发出警告等用途。 – Stefan 2012-09-19 20:12:35