El comportamiento normal de Emacs cuando el modo de marca transitoria está activo es que cuando realiza una selección de desplazamiento, si el siguiente comando es un movimiento sin desplazamiento, la marca se desactiva. Por ejemplo, después de los comandos M-l(para marcar la línea actual con la función a continuación) y C-f, la marca se desactiva. ¿Cómo emular ese comportamiento de elisp después (set-mark-command nil)?
Por ejemplo:
(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)
Ahora haga Ml Cf y la región crecerá, pero en cambio, quiero el comportamiento predeterminado, es decir, la región se desactivará cuando Cf y crecerá con CSf.
EDITAR : ¿debería usar una función diferente a set-mark-command que permita esto? No pude encontrar ninguno.
C-fse aplicarán a todos los demás comandos de navegación que use también.
C-fdespués M-lno extiende la región porque no hay una región activa al final de M-l(que está vinculada downcase-wordde forma predeterminada).
M-lreferido por el OP no es el enlace predeterminado ( downcase-word), sino el enlace personalizado demy-mark-current-line
C-S-fes análoga aC-SPC(activar una región) +C-f(navegación). Probablemente pueda obtener lo que desea vinculandoC-fa una función de contenedor que primero desactiva una región si está activa y luego procede a hacer lo queC-fhace (forward-char); y se unenC-S-fdirectamente aforward-char. Tenga en cuenta que si alguna vez usa emacs en modo terminal,C-fyC-S-fambos se comportarán yaC-fque el terminal no puede distinguir entre los dos.