是否有一个函数可以用来将回显区域(如果有)中的消息快速复制到我的工作缓冲区中?我应该用define-key或global-set-key或其他方式定义该功能的快捷方式吗?
该函数current-message返回当前显示在echo area 中的消息(如果有)。你可以插入它(insert (current-message))。但是,任何导致其他东西占据回声区域的东西都会导致current-messagereturn 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)))
Run Code Online (Sandbox Code Playgroud)
以正常方式将其绑定到一个键。例如,如果您希望该命令C-c m始终可用:
(global-set-key "\C-cm" 'insert-last-message)
Run Code Online (Sandbox Code Playgroud)
可能有比调用两个自定义命令来插入文件名更简单的方法,请参阅Emacs wiki。
要插入评估 Lisp 片段的输出C-x C-e,请传递前缀参数:C-u C-x C-e。
| 归档时间: |
|
| 查看次数: |
867 次 |
| 最近记录: |