과도 마크 모드가 활성화되어있을 때 Emacs의 일반적인 동작은 시프트 선택을 한 다음 다음 명령이 비 시프트 이동 인 경우 마크가 비활성화되는 것입니다. 예를 들어, 명령 M-l
(아래의 기능으로 현재 행을 표시) 및 C-f
표시 후에 마크가 비활성화됩니다. 어떻게 elisp에서 그 행동을 흉내 내는가 (set-mark-command nil)
?
예를 들면 다음과 같습니다.
(defun my-mark-current-line ()
(interactive)
(beginning-of-line)
(set-mark-command nil)
(end-of-line)
(forward-char))
(global-set-key (kbd "M-l") 'my-mark-current-line)
이제 Ml Cf를 수행하면 영역이 커지지 만 대신 기본 동작, 즉 Cf 일 때 영역이 비활성화되고 CSf를 사용하여 영역이 커지기를 원합니다.
편집 : 이것을 허용하는 set-mark-command와 다른 기능을 사용해야합니까? 나는 찾을 수 없었다.
C-f
사용하는 다른 모든 탐색 명령에도 적용됩니다.
C-f
after M-l
는 끝 부분에 활성 영역이 없기 때문에 영역을 확장하지 않습니다 M-l
( downcase-word
기본적으로 바인딩 됨 ).
M-l
OP에 의해 참조되는 것은 기본 바인딩 ( downcase-word
)이 아니라my-mark-current-line
C-S-f
은C-SPC
(지역 활성화) +C-f
(탐색) 과 유사합니다 .C-f
먼저 영역이 비활성화 된 경우 비활성화 한 다음 래퍼 함수 에 바인딩 하여 원하는 것을 얻을 수 있습니다C-f
(forward-char
). 에C-S-f
직접 바인딩 합니다forward-char
. 참고 적 터미널 모드에서 이맥스를 사용하는 경우 그C-f
와C-S-f
같은 모두 동작합니다C-f
터미널로이 둘 사이에 구별 할 수 없습니다.