Any*_*orn 54 emacs elisp major-mode
我试图搜索谷歌并查看手册,但仍然无法找到如何获得缓冲对象的主要模式.你能帮我一个例子或参考吗?谢谢
我能找到的唯一解决方案是在更改缓冲区然后更改回原始缓冲区后查询主模式.有没有更好的方法呢?
Aid*_*lly 40
这有问题吗?
(defun buffer-mode (buffer-or-string)
"Returns the major mode associated with a buffer."
(with-current-buffer buffer-or-string
major-mode))
Run Code Online (Sandbox Code Playgroud)
with-current-buffer
将在返回时恢复缓冲区.
Ado*_*obe 40
对于当前缓冲区:
(message "%s" major-mode)
Run Code Online (Sandbox Code Playgroud)
Jer*_*ier 30
一个简单的方法是使用该buffer-local-value
函数,因为它major-mode
是一个缓冲局部变量:
(buffer-local-value 'major-mode (get-buffer "*scratch*"))
Run Code Online (Sandbox Code Playgroud)
只是从以前的答案扩展 - 调用没有参数来获取当前缓冲区的模式:
(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))))
Run Code Online (Sandbox Code Playgroud)
例如*scratch*buffer:
(buffer-mode) => 'lisp-interaction-mode
(buffer-mode "tasks.org") => 'org-mode
Run Code Online (Sandbox Code Playgroud)