エコー領域(存在する場合)のメッセージを作業バッファにすばやくコピーするために使用できる機能はありますか?define-key
または、global-set-key
他の方法を使用してこの関数のショートカットを定義する必要がありますか?
答え1
機能current-message
現在表示されているメッセージを返します。エコゾーンもしそうなら。を使って挿入できます(insert (current-message))
。しかし、他のものがエコー領域を占めるようにするすべての要素はcurrent-message
returnを引き起こしますnil
。
*Messages*
Emacsのメッセージはバッファに保存されます。そこから最後の行を取得する方が便利です。複数行のメッセージがある可能性があるため、これは完全に信頼できませんが、まれです。このmessage
機能は、1行に収まる短いメッセージでうまく機能します。
次の関数は最後のメッセージ(より正確にはバッファの最後の行)を挿入します*Messages*
。プレフィックスパラメータを使用すると、前のメッセージ(1は最新のメッセージ、2は最後から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)
ファイル名を挿入するために2つのカスタムコマンドを呼び出すよりも簡単な方法があります。Emacs Wiki。
Compute Lispを使用してスニペットの出力を挿入するには、C-x C-e
プレフィックス引数を渡しますC-u C-x C-e
。