2012-04-04 1 views
1

クリックイベントを登録し、positionwindowなどに基づいてアクションを実行したいと思います。emacs lispのクリックイベントを登録しています

このサイトhttp://www.gnu.org/software/emacs/manual/html_node/elisp/Click-Events.htmlにはイベント変数のレイアウトが表示されていますが、クリックイベントに実際にハンドラを付加するにはどうすればいいですか。

したがって、基本的に私はattach-handlerのようなふうに動作する関数を以下のシナリオで探しています。

(attach-handler [mouse-1] 
     `(lambda (e) (foo e)) 

答えて

4

interactive宣言のコード文字「e」を使用してイベントにアクセスすることができます。たとえば、次のようにクリックすると、左クリックでイベントデータが挿入されます。

(define-key global-map (kbd "<down-mouse-1>") 
    (lambda (event) 
    (interactive "e") 
    (message "%s" event) 
    (let ((posn (elt event 1))) 
     (with-selected-window (posn-window posn) 
     (goto-char (posn-point posn)) 
     (insert (format "%s" event)))))) 
1

これらはすべてキーです。 C-h c(またはC-h k)を試して、マウスボタンをクリックして現在バインドされているものを確認してください。次に、M-x global-set-keyを使用して、希望するものに設定します。キーにバインドするには、関数をinteractiveにする必要があります。

+0

次のステートメントでは、どのように 'event'情報を取得できますか? (printイベント)) – Doboy

+0

あなたは 'print'から何かを取り去っていますか?名前付き関数の代わりに名前付き関数を作成したいかもしれません。 'last-input-event'と' last-command-event'を見てください。また、 'mouse-event-p'と' mouse-event-p'もあります。その他 –

+0

ありがとう 'last-command-event'は私が探していたものでした – Doboy

関連する問題