Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

(message "%s" major-mode)

Ответ 3

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

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

Ответ 4

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

(defun buffer-mode (&optional buffer-or-name)
  "Returns the major mode associated with a buffer.
If buffer-or-name is nil return current buffer 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

Ответ 5

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

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

Ответ 6

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

(print major-mode)