나는 (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
답변
Running 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)
답변
마크가 “활성화”되어 있기 때문에 영역이 강조 표시되므로 마크를 명시 적으로 활성화하면 트릭이 수행됩니다. 참고 : 왜 포인트 / 마크 교환이 작동하지 않는지 잘 모르겠습니다. 업데이트 된 함수가 있습니다. 또한 대화식을 사용하여 인수를 채우도록 업데이트했습니다.
(defun kill-ring-save-keep-highlight (beg end)
"Keep the region active after the kill"
(interactive "r")
(kill-ring-save beg end)
(activate-mark))