Normalne zachowanie Emacsa, gdy aktywny jest tryb znaku przejściowego, polega na tym, że po dokonaniu wyboru shift, znak jest nieaktywny, jeśli następne polecenie jest ruchem bez zmiany. Na przykład po poleceniach M-l(aby zaznaczyć bieżącą linię za pomocą funkcji poniżej) i C-fznak jest wyłączony. Jak naśladować to zachowanie z elisp po (set-mark-command nil)?
Na przykład:
(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)
Teraz wykonaj Ml Cf, a region będzie się rozwijał, ale zamiast tego chcę, aby zachowanie domyślne, tj. Region dezaktywował się, gdy Cf, i rozwijał się wraz z CSf.
EDYCJA : czy należy użyć funkcji innej niż set-mark-command, która na to pozwala? Nie mogłem znaleźć.
C-f, dotyczyłoby również wszystkich innych poleceń nawigacyjnych, których używasz.
C-fafter M-lnie rozszerza regionu, ponieważ na końcu nie ma aktywnego regionu M-l(który jest downcase-worddomyślnie związany).
M-lprzywołane przez OP nie jest domyślnym powiązaniem ( downcase-word), ale niestandardowym wiązaniemmy-mark-current-line
C-S-fjest analogiczne doC-SPC(aktywowanie regionu) +C-f(nawigacja). Prawdopodobnie możesz uzyskać to, co chcesz, łączącC-fsię z funkcją otoki, która najpierw dezaktywuje region, jeśli jest aktywny, a następnie przechodzi do robienia tego coC-frobi (forward-char); i wiążą sięC-S-fbezpośrednio zforward-char. Zauważ, że jeśli kiedykolwiek użyjesz emacsa w trybie terminalaC-fiC-S-foba będą się zachowywać, ponieważC-fterminal nie może ich rozróżnić.