了解用于班次点击选择的Emacs CUA模式

时间:2012-06-24 10:56:40

标签: emacs cua-mode

我是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。

有人会解释最后一行是如何工作的,以及我如何能够自己找到更多信息?感谢。

1 个答案:

答案 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))

我认为您可以从这里了解该属性的用途。希望这会有所帮助。