Возможно ли одновременно использовать комбинацию "\C-w" для удаления-слова-назад (backward-kill-word) при простом редактировании и для удаления-региона (kill-region) при выделенном регионе?
Честно говоря, пока такую задачку удалось решить, если только
transient-mark-mode включен (M-x transient-mark-mode)
(global-set-key [(control w)] (lambda () (interactive)
(if mark-active
(kill-region (mark) (point))
(backward-kill-word 1))))
Проблема в том, что маркер mark существует всегда в буфере. Но только
в режиме transient можно отсеивать ситуации, когда mark-active, а
когда нет. Эта переменная имеет смысл только для этого режима, к
сожалению. Поэтому получается, что регион выбран всегда, а сами
команды знают, над чем им работать.
Может, кто-то еще предложит решение, если таковое имеется.
Лучше так (использовать не (point) и (mark)):
(global-set-key [(control w)] (lambda () (interactive)
(if mark-active
(kill-region (region-beginning)
(region-end))
(backward-kill-word 1))))
(defun region-active-p ()
"Return t if Transient Mark mode is enabled and the mark is active.
Most commands that act on the region if it is active and
Transient Mark mode is enabled, and on the text near point
otherwise, should use `use-region-p' instead. That function
checks the value of `use-empty-active-region' as well."
(and transient-mark-mode mark-active))
Ага, понятно. Тогда можно проверить fboundp на эту функцию, и если она не определена, то присвоить ей (and transient-mark-mode mark-active)). Тогда переносимый вариант получится.