的Emacs Lisp,如何获得缓冲区的主要模式?
-
19-09-2019 - |
题
我试图搜索谷歌,并期待在手册中,但仍无法找到如何获取一个缓冲区对象的主要方式。你能帮我用一个例子或引用。感谢
唯一的解决办法我能找到的是改变了缓冲区,然后变回原来的缓冲区之后查询的主要模式。有没有更好的办法做到这一点?
解决方案
是否有问题与该?
(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
会恢复你的缓冲区。
其他提示
有关当前缓冲区:
(message "%s" major-mode)
一个简单的方法来做到这一点是使用buffer-local-value
函数,因为major-mode
是一个缓冲区局部变量:
(buffer-local-value 'major-mode (get-buffer "*scratch*"))
刚刚从以前的答案扩展 - 不带参数调用来得到当前缓冲区的方式:
(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))))
E.g。在*划痕*缓冲液:
(buffer-mode) => 'lisp-interaction-mode
(buffer-mode "tasks.org") => 'org-mode
好了,介绍模式有一个可选的缓冲说法,但显示的帮助...我不完全相信它返回......
但是,这是我能找到一个简单的搜索最好的...对不起...
简单地评价这样的:
(print major-mode)
不隶属于 StackOverflow