繁体   English   中英

emacs lisp,如何获得缓冲区主要模式?

[英]emacs lisp, how to get buffer major mode?

我试图搜索谷歌并查看手册,但仍然找不到如何获取缓冲区对象的主要模式。 你能帮我举个例子或参考吗? 谢谢

我能找到的唯一解决方案是在更改缓冲区然后更改回原始缓冲区后查询主要模式。 有没有更好的方法来做到这一点?

有什么问题吗?

(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))))

例如在 *scratch* 缓冲区中:

(buffer-mode) => 'lisp-interaction-mode

(buffer-mode "tasks.org") => 'org-mode

好吧,describe-mode 需要一个可选的缓冲区参数,但是它显示了帮助......我不确定它返回什么......

但这是我在简短搜索中能找到的最好的……对不起……

简单评价一下:

(print major-mode)

另一种方法,除了直接读取major-mode变量之外,还可以直接读取mode-name变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM