Понимание режима Emacs CUA для выбора щелчка
Я новичок в Emacs и выясняю, как включить выбор по нажатию клавиши Shift. На странице EmacsWiki для режима CUA в следующем фрагменте кода показано, как это сделать:
;; shift + click select region
(define-key global-map (kbd "<S-down-mouse-1>") 'ignore) ; turn off font dialog
(define-key global-map (kbd "<S-mouse-1>") 'mouse-set-point)
(put 'mouse-set-point 'CUA 'move)
Я не понимаю, как последняя строка позволяет выбор. Я посмотрел в определение положить:
put is a built-in function in `C source code'.
(put SYMBOL PROPNAME VALUE)
Store SYMBOL's PROPNAME property with value VALUE.
It can be retrieved with `(get SYMBOL PROPNAME)'.
и определение мышки-уставки:
mouse-set-point is an interactive compiled Lisp function in
`mouse.el'.
It is bound to <S-mouse-1>, <triple-mouse-1>, <double-mouse-1>,
<mouse-1>.
(mouse-set-point EVENT)
Move point to the position clicked on with the mouse.
This should be bound to a mouse click event type.
но никто из них не дает никаких подсказок. Я не могу найти ни переменную, ни функцию с именем move, и я также изучил исходный код mouse.el, cua-base.el, cua-gmrk.el и cua-rect.el.
Кто-нибудь объяснит, как работает последняя строка, и как я могу найти больше информации самостоятельно? Благодарю.
1 ответ
Я не слишком глубоко копался в режиме CUA, но я понимаю, что вы ищете. 'put' - это функция для списков свойств символов. В этом случае символ является заданным значением мыши, и вы устанавливаете для свойства 'CUA' этого символа значение 'move'. Чтобы прочитать значение свойства символа, вы можете использовать функцию 'get'. Вы можете найти больше документации с примерами в справочном руководстве Elisp на веб-странице GNU.
Я искал ссылки на свойство CUA в cua-*. El и, конечно же, нашел его в cua-base.el: (я использую Emacs 23.3.1)
(defun cua--pre-command-handler-1 ()
;; Cancel prefix key timeout if user enters another key.
(when cua--prefix-override-timer
(if (timerp cua--prefix-override-timer)
(cancel-timer cua--prefix-override-timer))
(setq cua--prefix-override-timer nil))
(cond
;; Only symbol commands can have necessary properties
((not (symbolp this-command))
nil)
;; Handle delete-selection property on non-movement commands
((not (eq (get this-command 'CUA) 'move))
Я думаю, что отсюда вы можете понять, для чего используется эта собственность. Надеюсь это поможет.