마지막 Emacs 메시지를 현재 버퍼에 복사합니다.

마지막 Emacs 메시지를 현재 버퍼에 복사합니다.

에코 영역(있는 경우)의 메시지를 작업 버퍼에 빠르게 복사하는 데 사용할 수 있는 기능이 있습니까? define-key또는 global-set-key다른 방법을 사용하여 이 함수에 대한 바로 가기를 정의해야 합니까 ?

답변1

기능current-message현재 표시된 메시지를 반환합니다.에코존,그렇다면. 를 사용하여 삽입할 수 있습니다 (insert (current-message)). 그러나 다른 것이 에코 영역을 차지하게 만드는 모든 요소는 current-messagereturn 을 유발합니다 nil.

*Messages*Emacs의 메시지는 버퍼 에 보관됩니다 . 거기에서 마지막 줄을 얻는 것이 더 유용할 것입니다. 여러 줄의 메시지가 있을 수 있으므로 이는 완전히 신뢰할 수는 없지만 드문 경우입니다. 이 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)

파일 이름을 삽입하기 위해 두 개의 사용자 정의 명령을 호출하는 것보다 더 쉬운 방법이 있을 수 있습니다.이맥스 위키.

Compute Lisp를 사용하여 스니펫의 출력을 삽입하려면 C-x C-e접두사 인수를 전달합니다 C-u C-x C-e.

관련 정보