Emacs lisp, как получить основной режим буфера?
Я попытался найти Google и посмотреть в руководстве, но не могу найти, как получить основной режим объекта-буфера. Можете ли вы помочь мне с примером или ссылкой. Благодаря
Единственное решение, которое я смог найти, - это запросить основной режим после смены буфера и затем вернуться к исходному буферу. Есть ли лучший способ сделать это?
Ответы
Ответ 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)