emacs, 지역을 복사하고 강조 표시하는 방법은 무엇입니까?

emacs, 지역을 복사하고 강조 표시하는 방법은 무엇입니까?

(kill-ring-save)명령을 실행할 때 해당 영역의 강조 표시가 사라지기 때문에 기본 Mw에 만족합니다 . 나는 그것의 동작을 바꾸고 싶지 않지만 <C-insert>비슷한 일을 하고 영역을 강조 표시하도록 다시 바인딩하고 싶습니다 .

transient-mark-mode함수를 통해 직접 설정(해제)을 시도했지만 해당 영역이 여전히 강조 표시되지 않습니다.

대화형 함수 내 에서만 (kill-ring-save (region-beginning) (region-end))실행하면 예상대로 작동합니다. 강조 표시가 사라집니다.

대화형 함수 내 에서만 (exchange-point-and-mark) (exchange-point-and-mark)실행하면 예상대로 작동합니다. 해당 영역을 다시 강조 표시하고 원래/올바른 위치에 점을 배치/유지합니다.

그러나 이 모든 것을 함수에 넣으면아니요해당 영역을 다시 강조 표시합니다. 작동하지 않는 함수와 바인딩은 다음과 같습니다.

(defun kill-ring-save-keep-highlight ()
  (interactive)
  (kill-ring-save (region-beginning) (region-end))
  (exchange-point-and-mark) (exchange-point-and-mark)
)
(global-unset-key (kbd "<C-insert>"))
(global-set-key   (kbd "<C-insert>") 'kill-ring-save-keep-highlight)

사용: Ubuntu 10.04.3의 GNU Emacs 23.1.1

답변1

실행하면 kill-ring-save태그가 직접 비활성화되지 않고 단순히 비활성화가 가능하도록 변수를 deactivate-mark로 설정하기만 하면 됩니다.t~ 후에. 이런 일이 발생하지 않도록 하려면 다음 deactivate-mark으로 재설정하세요.nil 앞으로비활성화합니다.

(defun kill-ring-save-keep-highlight (beg end)
  "Keep the region active after the kill"
  (interactive "r")
  (prog1 (kill-ring-save beg end)
    (setq deactivate-mark nil)))

(global-set-key (kbd "<C-insert>") 'kill-ring-save-keep-highlight)

답변2

태그가 "활성" 상태이므로 해당 영역이 강조 표시됩니다. 따라서 태그를 명시적으로 활성화해도 괜찮습니다. 참고: 포인트/마커 교체가 작동하지 않는 이유를 잘 모르겠습니다. 이것은 새로운 함수이며 대화형으로 사용하여 매개변수를 채우도록 업데이트했습니다.

(defun kill-ring-save-keep-highlight (beg end)
  "Keep the region active after the kill"
  (interactive "r")
  (kill-ring-save beg end)
  (activate-mark))

관련 정보