4

私はEmacsを初めて使用し、Shiftキーを押しながらクリックして選択できるようにする方法を考えています。CUAモードの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のソースコードも調べました。

最後の行がどのように機能するか、そして私が自分でより多くの情報を見つける方法を誰かが説明しますか?ありがとう。

4

1 に答える 1

3

私はCUAモードをあまり深く掘り下げませんでしたが、あなたが探しているものは理解しています。'put'は、シンボルのプロパティリストの関数です。この場合、シンボルはマウスセットポイントであり、そのシンボルのプロパティ「CUA」を値「move」に設定しています。シンボルのプロパティ値を読み戻すには、関数'get'を使用できます。GNUのWebページにあるElispリファレンスマニュアルで、例を含むその他のドキュメントを見つけることができます。

私はcua-*。elでCUAプロパティへの参照を探しましたが、確かに、cua-base.elで1つ見つかりました:(私は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))

何のために使われているのか、ここからわかると思います。お役に立てれば。

于 2012-06-24T18:18:19.360 に答える