【发布时间】:2012-06-20 16:32:47
【问题描述】:
SLIME 中有两个非常有用的函数:slime-copy-or-inspect-presentation-at-mouse 和 slime-presentation-menu。但必须使用事件参数调用它们。为了生成一个偶数,我需要做很多后勤工作(计算“鼠标”当前指向的对象的打印表示所占据的区域、行和列——这是我真的不想做的事情因为,Emacs 中肯定有一些东西已经可以计算所有这些东西了。
那么,有没有一种简单的方法可以生成“假”鼠标事件?因为在不需要鼠标的编辑器中只使用鼠标做两件事感觉……嗯,不是很聪明。 :)
编辑
这是我尝试过的:
(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,当您使用鼠标或键盘选择菜单项时,它会调度不同的事件...... arrrrrgh。
【问题讨论】: