Нормальна поведінка Emacs, коли активний режим перехідних знаків, полягає в тому, що коли ви здійснюєте вибір зсуву, тоді, якщо наступна команда є рухом без змін, позначка деактивується. Наприклад, після команд M-l(для позначення поточного рядка функцією нижче) та C-fпозначка деактивується. Як наслідувати цю поведінку від Elisp після (set-mark-command nil)?
Наприклад:
(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)
Тепер зробимо Ml Cf і регіон буде рости, але замість цього я хочу, щоб поведінка за замовчуванням, тобто область деактивувалась, коли Cf, та зростала разом із CSf.
EDIT : чи слід використовувати іншу функцію для встановлення-mark-command, яка дозволяє це? Я не міг знайти жодного.
C-fцього, застосовуватимуться до всіх інших команд навігації, які ви також використовуєте.
C-fпісля M-lцього не розширює область, оскільки в кінці не існує активної області M-l(яка downcase-wordза замовчуванням пов'язана).
M-lпосилання на ОП - це не обов'язкове прив'язування ( downcase-word), а my-mark-current-line
C-S-fаналогічнийC-SPC(активація області) +C-f(навігація). Ви, ймовірно, можете отримати те, що хочете, прив’язавшисьC-fдо функції обгортки, яка спочатку деактивує область, якщо вона активна, а потім продовжує робити те, щоC-fробить (forward-char); і прив’язуватиC-S-fбезпосередньо доforward-char. Зауважте, що якщо ви коли-небудь використовувати emacs в термінальному режимі,C-fіC-S-fобидва будуть вести себе так,C-fяк термінал не може розрізняти два.