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

时间:2010-02-10 16:22:26

标签: emacs elisp major-mode

我曾尝试搜索Google并查看手册,但仍无法找到如何获取缓冲区对象的主要模式。你能帮我一个例子或参考吗?感谢

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

7 个答案:

答案 0 :(得分:39)

这有问题吗?

(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会在返回时恢复缓冲区。

答案 1 :(得分:39)

对于当前缓冲区:

(message "%s" major-mode)

答案 2 :(得分:29)

一种简单的方法是使用buffer-local-value函数,因为major-mode是缓冲区局部变量:

(buffer-local-value 'major-mode (get-buffer "*scratch*"))

答案 3 :(得分:7)

只是从之前的答案延伸 - 不带参数调用以获取当前缓冲区的模式:

(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。在* scratch * buffer:

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

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

答案 4 :(得分:0)

嗯,describe-mode接受一个可选的缓冲区参数,但是显示了帮助...而且我不确定它返回的是什么......

但这是我在短暂搜索中找到的最好的...抱歉......

答案 5 :(得分:0)

简单地评估一下:

(print major-mode)

答案 6 :(得分:0)

除了直接重新读取 major-mode 变量之外,另一种方法是直接重新读取 mode-name 变量。