Le comportement normal d'Emacs lorsque le mode de marque transitoire est actif est que lorsque vous effectuez une sélection de décalage, alors si la commande suivante est un mouvement sans décalage, la marque est désactivée. Par exemple, après les commandes M-l
(pour marquer la ligne actuelle avec la fonction ci-dessous) et C-f
, la marque est désactivée. Comment émuler ce comportement d'Elisp après (set-mark-command nil)
?
Par exemple:
(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)
Maintenant, faites Ml Cf et la région augmentera, mais à la place, je veux que le comportement par défaut, c'est-à-dire que la région se désactive lorsque Cf, et grandisse avec CSf.
EDIT : devrait utiliser une fonction différente de set-mark-command qui permet cela? Je n'en ai pas trouvé.
C-f
appliqués s'appliqueraient également à toutes les autres commandes de navigation que vous utilisez également.
C-f
after M-l
n'étend pas la région car il n'y a pas de région active à la fin de M-l
(qui est liée à downcase-word
par défaut).
M-l
référence à l'OP n'est pas la liaison par défaut ( downcase-word
), mais la liaison personnalisée demy-mark-current-line
C-S-f
est analogue àC-SPC
(activation d'une région) +C-f
(navigation). Vous pouvez probablement obtenir ce que vous voulez en vous liantC-f
à une fonction wrapper qui désactive d'abord une région si elle est active, puis continue de faire ceC-f
qui (forward-char
); et lierC-S-f
directement àforward-char
. Notez que si jamais vous utilisez emacs en mode terminal,C-f
etC-S-f
que vous vous comporterez tous les deuxC-f
car le terminal ne pourra pas distinguer les deux.