emacs lisp, how to get buffer major mode?

后端 未结 7 2174
执笔经年
执笔经年 2020-12-07 23:04

I have tried to search Google and look in the manual, but still cannot find how to get major mode of a buffer object. Can you help me with an example or a reference. Thank

相关标签:
7条回答
  • 2020-12-07 23:07

    For current buffer:

    (message "%s" major-mode)
    
    0 讨论(0)
  • 2020-12-07 23:08

    Well, describe-mode takes an optional buffer argument, but that displays the help... and I'm not exactly sure what it returns...

    But that's the best I could find in a brief search... sorry...

    0 讨论(0)
  • 2020-12-07 23:10

    A simple way to do this is to use the buffer-local-value function since major-mode is a buffer-local variable:

    (buffer-local-value 'major-mode (get-buffer "*scratch*"))
    
    0 讨论(0)
  • 2020-12-07 23:16

    Is there a problem with that?

    (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 will restore your buffer when it returns.

    0 讨论(0)
  • 2020-12-07 23:22

    Simply evaluate this:

    (print major-mode)
    
    0 讨论(0)
  • 2020-12-07 23:29

    Just extending from previous answers - call with no arguments to get the current buffer's mode:

    (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. in *scratch* buffer:

    (buffer-mode) => 'lisp-interaction-mode
    
    (buffer-mode "tasks.org") => 'org-mode
    
    0 讨论(0)
提交回复
热议问题