A função current-message
retorna a mensagem exibida atualmente na área de eco , se houver. Você pode inseri-lo com (insert (current-message))
. No entanto, qualquer coisa que faça com que outra coisa ocupe a área de eco fará com que current-message
retorne nil
.
Mensagens do Emacs são arquivadas no buffer *Messages*
. Seria mais útil pegar a última linha de lá. Isso não é perfeitamente confiável, já que é possível ter uma mensagem de várias linhas, mas isso é raro: a função message
serve para mensagens curtas que cabem em uma linha.
A função a seguir insere a última mensagem (mais precisamente, a última linha do buffer *Messages*
. Com um argumento de prefixo, ela retorna mensagens mais antigas: 1 para a última mensagem, 2 para a penúltima, etc. O argumento 0 insere (current-message)
, se houver.
(defun last-message (&optional num)
(or num (setq num 1))
(if (= num 0)
(current-message)
(save-excursion
(set-buffer "*Messages*")
(save-excursion
(forward-line (- 1 num))
(backward-char)
(let ((end (point)))
(forward-line 0)
(buffer-substring-no-properties (point) end))))))
(defun insert-last-message (&optional num)
(interactive "*p")
(insert (last-message num)))
Vincule-o a uma chave da maneira normal. Por exemplo, se você quiser o comando disponível em C-c m
em todos os momentos:
(global-set-key "\C-cm" 'insert-last-message)
Pode haver maneiras mais fáceis de invocar dois comandos personalizados para inserir o nome do arquivo, consulte o wiki do Emacs .
Para inserir a saída da avaliação de um snippet Lisp com C-x C-e
, passe um argumento de prefixo: C-u C-x C-e
.