Emacs Lisp, como obter o modo principal de buffer?
-
19-09-2019 - |
Pergunta
Eu tentei pesquisar no Google e procurar no manual, mas ainda não consigo encontrar como obter o modo principal de um objeto buffer. Você pode me ajudar com um exemplo ou uma referência. Obrigado
A única solução que pude encontrar foi consultar o modo principal depois de alterar o buffer e depois voltar ao buffer original. Existe uma maneira melhor de fazer isso?
Solução
Existe um problema com isso?
(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
Restaurará seu buffer quando ele retornar.
Outras dicas
Para buffer atual:
(message "%s" major-mode)
Uma maneira simples de fazer isso é usar o buffer-local-value
função desde então major-mode
é uma variável buffer-local:
(buffer-local-value 'major-mode (get-buffer "*scratch*"))
Basta se estender de respostas anteriores - ligue sem argumentos para obter o modo do buffer atual:
(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))))
Por exemplo, em * scratch * buffer:
(buffer-mode) => 'lisp-interaction-mode
(buffer-mode "tasks.org") => 'org-mode
Bem, o Mode Descrevante leva um argumento de buffer opcional, mas isso mostra a ajuda ... e não tenho exatamente certeza do que ele retorna ...
Mas esse é o melhor que pude encontrar em uma breve pesquisa ... desculpe ...
Basta avaliar isso:
(print major-mode)