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-faplicou também se aplicariam a todos os outros comandos de navegação usados.
C-fafter M-lnão estende a região porque não existe uma região ativa no final de M-l(que é vinculada downcase-wordpor padrão).
M-lreferido 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-fa uma função de wrapper que primeiro desativa uma região, se ativa, e depois faz o queC-fdoes (forward-char); e vincularC-S-fdiretamente aforward-char. Note que se você nunca usar emacs no modo terminal,C-feC-S-fserão ambos se comportam comoC-fcomo o terminal não pode distinguir entre os dois.