Нормальна поведінка 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
як термінал не може розрізняти два.