SLIME には と の 2 つの非常に便利な機能がslime-copy-or-inspect-presentation-at-mouse
ありslime-presentation-menu
ます。ただし、イベント引数を指定して呼び出す必要があります。偶数を生成するには、多くのロジスティクスを行う必要があります (「マウス」が現在指しているオブジェクトの印刷された表現、行と列が占める領域を計算する - 私が本当にやりたくないこと)なぜなら、確かに Emacs にはすでにそれらすべてを計算する何かがあるからです。
それで、「偽の」マウスイベントを生成する簡単な方法はありますか? エディターでマウスを使用するのは、他の方法ではマウスの感覚を必要としない 2 つのことだけだからです...まあ、あまりスマートではありません。:)
編集
これが私が試したことです:
(define-key lisp-mode-map (kbd "C-x ?")
#'(lambda ()
(interactive)
(message "called")
(slime-copy-or-inspect-presentation-at-mouse
`(mouse-2 ;; button
(,(selected-window) ;; window
,(point) ;; position
(0 . 0) ;; window-relative pixel
0 ;; timestamp
nil ;; object
,(point) ;; text position
(,(current-column) . ;; column
,(line-number-at-pos (point))) ;; line
nil ;; image
(0 . 0) ;; object-relative pixel
(1 . 1))))))
(define-key lisp-mode-map (kbd "C-x SPC")
#'(lambda ()
(interactive)
(message "called")
(slime-presentation-menu
`(mouse-3 ;; button
(,(selected-window) ;; window
,(point) ;; position
(0 . 0) ;; window-relative pixel
0 ;; timestamp
nil ;; object
,(point) ;; text position
(,(current-column) . ;; column
,(line-number-at-pos (point))) ;; line
nil ;; image
(0 . 0) ;; object-relative pixel
(1 . 1))))))
そして、これは実際にメニューを表示するポイントに私を連れて行くことができますが、slime-presentation-menu
メニュー項目にバインドされた関数のいずれかを呼び出すと、それらが「実際の」マウスイベントで呼び出されなかったことがどういうわけかわかり、スローして終了します。:(
EDIT2
x-popup-menu
これは、マウスまたはキーボードでメニュー項目を選択したときに異なるイベントをディスパッチする が原因だと思います... arrrrgh。