emacs lisp, как получить основной режим буфера?
-
19-09-2019 - |
Вопрос
Я попытался выполнить поиск в Google и просмотреть руководство, но до сих пор не могу найти, как получить основной режим объекта буфера.Можете ли вы помочь мне с примером или ссылкой.Спасибо
Единственное решение, которое я смог найти, - это запросить основной режим после изменения буфера, а затем вернуться к исходному буферу.Есть ли лучший способ сделать это?
Решение
Есть ли в этом проблема?
(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))))
Например.в *чистом* буфере:
(buffer-mode) => 'lisp-interaction-mode
(buffer-mode "tasks.org") => 'org-mode
Ну, режим описания принимает необязательный аргумент буфера, но он отображает справку...и я не совсем уверен, что он возвращает...
Но это лучшее, что я смог найти при кратком поиске...извини...
Просто оцените это:
(print major-mode)