에코 영역(있는 경우)의 메시지를 작업 버퍼에 빠르게 복사하는 데 사용할 수 있는 기능이 있습니까? define-key
또는 global-set-key
다른 방법을 사용하여 이 함수에 대한 바로 가기를 정의해야 합니까 ?
답변1
기능current-message
현재 표시된 메시지를 반환합니다.에코존,그렇다면. 를 사용하여 삽입할 수 있습니다 (insert (current-message))
. 그러나 다른 것이 에코 영역을 차지하게 만드는 모든 요소는 current-message
return 을 유발합니다 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
.