Il comportamento normale di Emacs quando è attiva la modalità contrassegno transitorio è che quando si effettua una selezione a turni, quindi se il comando successivo è un movimento non a turni, il contrassegno viene disattivato. Ad esempio, dopo i comandi M-l
(per contrassegnare la riga corrente con la funzione seguente) e C-f
, il segno è disattivato. Come emulare quel comportamento da elisp after (set-mark-command nil)
?
Per esempio:
(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)
Ora ml Cf e la regione crescerà, ma invece voglio il comportamento predefinito, ovvero la regione che si disattiva quando Cf, e cresce con CSf.
EDIT : dovrebbe usare una funzione diversa da set-mark-command che lo consente? Non ne ho trovato nessuno.
C-f
si applicheranno anche a tutti gli altri comandi di navigazione che usi.
C-f
after M-l
non estende la regione perché non esiste una regione attiva alla fine di M-l
(che è vincolata per downcase-word
impostazione predefinita).
M-l
citato dall'OP non sia l'associazione predefinita ( downcase-word
), ma l'associazione personalizzata dimy-mark-current-line
C-S-f
è analoga aC-SPC
(attivazione di una regione) +C-f
(navigazione). Probabilmente puoi ottenere quello che vuoi legandoC-f
a una funzione wrapper che disattiva prima una regione se attiva e quindi procede a fare ciò cheC-f
fa (forward-char
); e si leganoC-S-f
direttamente aforward-char
. Nota che se mai usi emacs in modalità terminale,C-f
eC-S-f
ti comporterai entrambi comeC-f
se il terminale non fosse in grado di distinguere tra i due.