emacs lisp, как получить основной режим буфера?

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

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

6 ответов

Решение

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

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

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

(print major-mode)

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

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

Другой способ, помимо прямого чтения major-mode переменную можно было бы напрямую прочитать mode-name переменная.

Другие вопросы по тегам