Emacs

將最後一條 Emacs 消息複製到目前緩衝區

  • September 6, 2014

有沒有可以用來將回顯區域(如果有)中的消息快速復製到我的工作緩衝區的功能?define-key我應該用或global-set-key其他方式定義該功能的快捷方式嗎?

該函式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 wiki

要插入使用 評估 Lisp 片段的輸出C-x C-e,請傳遞前綴參數:C-u C-x C-e

引用自:https://unix.stackexchange.com/questions/154098