O comportamento normal do Emacs quando o modo de marca transitória está ativo é que, quando você faz uma seleção de turno, se o próximo comando for um movimento sem turno, a marca será desativada. Por exemplo, após os comandos M-l
(para marcar a linha atual com a função abaixo) e C-f
, a marca é desativada. Como emular esse comportamento do elisp depois (set-mark-command nil)
?
Por exemplo:
(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)
Agora Ml Cf e a região crescerão, mas, em vez disso, quero que o comportamento padrão, ou seja, a região desative quando Cf e cresça com CSf.
EDIT : deve usar uma função diferente para set-mark-command que permite isso? Não consegui encontrar nenhum.
C-f
aplicou também se aplicariam a todos os outros comandos de navegação usados.
C-f
after M-l
não estende a região porque não existe uma região ativa no final de M-l
(que é vinculada downcase-word
por padrão).
M-l
referido pelo OP não é a ligação (default downcase-word
), mas a ligação do costumemy-mark-current-line
C-S-f
é análogo aC-SPC
(ativar uma região) +C-f
(navegação). Provavelmente, você pode obter o que deseja vinculando-seC-f
a uma função de wrapper que primeiro desativa uma região, se ativa, e depois faz o queC-f
does (forward-char
); e vincularC-S-f
diretamente aforward-char
. Note que se você nunca usar emacs no modo terminal,C-f
eC-S-f
serão ambos se comportam comoC-f
como o terminal não pode distinguir entre os dois.