Понимание режима 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))

Я думаю, что отсюда вы можете понять, для чего используется эта собственность. Надеюсь это поможет.

Другие вопросы по тегам