我是Emacs的新手,并想出如何启用shift-click选择。在CUA Mode的EmacsWiki页面上,以下代码段概述了如何执行此操作:
;; 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 :
的定义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。
有人会解释最后一行是如何工作的,以及我如何能够自己找到更多信息?感谢。
答案 0 :(得分:3)
我没有深入了解CUA模式,但我明白你在寻找什么。 'put'是符号属性列表的函数。在这种情况下,符号是鼠标设定点,您将该符号的属性“CUA”设置为值“move”。要回读符号的属性值,可以使用函数“get”。您可以在GNU网页上的Elisp参考手册中找到更多文档和示例。
我在cua - *。el中找到了对CUA属性的引用,果然,在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))
我认为您可以从这里了解该属性的用途。希望这会有所帮助。