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-f
se aplicarán a todos los demás comandos de navegación que use también.
C-f
después M-l
no extiende la región porque no hay una región activa al final de M-l
(que está vinculada downcase-word
de forma predeterminada).
M-l
referido por el OP no es el enlace predeterminado ( downcase-word
), sino el enlace personalizado demy-mark-current-line
C-S-f
es análoga aC-SPC
(activar una región) +C-f
(navegación). Probablemente pueda obtener lo que desea vinculandoC-f
a una función de contenedor que primero desactiva una región si está activa y luego procede a hacer lo queC-f
hace (forward-char
); y se unenC-S-f
directamente aforward-char
. Tenga en cuenta que si alguna vez usa emacs en modo terminal,C-f
yC-S-f
ambos se comportarán yaC-f
que el terminal no puede distinguir entre los dos.