我试图搜索谷歌,并期待在手册中,但仍无法找到如何获取一个缓冲区对象的主要方式。你能帮我用一个例子或引用。感谢

唯一的解决办法我能找到的是改变了缓冲区,然后变回原来的缓冲区之后查询的主要模式。有没有更好的办法做到这一点?

有帮助吗?

解决方案

是否有问题与该?

(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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top