是否有一个函数可以用来快速将回显区域(如果有)中的消息复制到我的工作缓冲区中?我应该用define-key
或global-set-key
或其他方式定义该函数的快捷方式吗?
答案1
功能current-message
返回当前显示的消息回声区,如果有的话。您可以使用 插入它(insert (current-message))
。然而,任何导致其他东西占据回波区域的事情都会导致current-message
返回nil
。
来自 Emacs 的消息存档在*Messages*
缓冲区中。从那里获取最后一行会更有用。这并不完全可靠,因为可能有多行消息,但这种情况很少见:该message
函数适用于适合一行的短消息。
以下函数插入最后一条消息(更准确地说,是缓冲区中的最后一行*Messages*
。使用前缀参数,它返回较旧的消息:1 表示最新消息,2 表示倒数第二条消息,依此类推。参数 0 插入(current-message)
如果有的话。
(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)))
以正常方式将其绑定到密钥。例如,如果您希望该命令C-c m
始终可用:
(global-set-key "\C-cm" 'insert-last-message)
可能有比调用两个自定义命令来插入文件名更简单的方法,请参阅Emacs 维基。
要插入使用 计算 Lisp 代码片段的输出C-x C-e
,请传递前缀参数:C-u C-x C-e
。