emacs lisp, как получить основной режим буфера? - PullRequest
53 голосов
/ 10 февраля 2010

Я попытался найти в Google и посмотреть в руководстве, но все еще не могу найти способ получить основной режим объекта буфера. Можете ли вы помочь мне с примером или ссылкой. Спасибо

Единственное решение, которое я смог найти, - это запрос основного режима после изменения буфера, а затем возврата обратно в исходный буфер. Есть ли лучший способ сделать это?

Ответы [ 6 ]

39 голосов
/ 16 февраля 2013

Для текущего буфера:

(message "%s" major-mode)
39 голосов
/ 10 февраля 2010

Есть ли проблема с этим?

(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 восстановит ваш буфер, когда он вернется.

29 голосов
/ 15 июля 2012

Простой способ сделать это - использовать функцию buffer-local-value, поскольку major-mode является локальной буферной переменной:

(buffer-local-value 'major-mode (get-buffer "*scratch*"))
7 голосов
/ 17 марта 2014

Просто продолжая предыдущие ответы - вызов без аргументов для получения текущего режима буфера:

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

например. в * нуля * буфера:

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

(buffer-mode "tasks.org") => 'org-mode
0 голосов
/ 09 сентября 2018

Просто оцените это:

(print major-mode)
0 голосов
/ 10 февраля 2010

Ну, метод description принимает необязательный аргумент буфера, но при этом отображается справка ... и я не совсем уверен, что он возвращает ...

Но это лучшее, что я смог найти в кратком поиске ... извините ...

...