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))))))
Run Code Online (Sandbox Code Playgroud)
这实际上可以让我到显示菜单的位置,但是当slime-presentation-menu调用绑定到菜单项的任何函数时,它们会以某种方式看到它们没有被"真实"鼠标事件调用,抛出并退出.:(
EDIT2
我实际上认为这是因为,x-popup-menu当您使用鼠标或键盘选择菜单项时调度不同的事件... arrrrrgh.
期望绑定到鼠标单击的命令采用事件参数。这是一个充满了诸如单击的按钮、位置、窗口等内容的列表。请参阅Elisp 手册中的 21.7.4 单击事件。
这是一个伪造滚轮事件的简单示例:
(mwheel-scroll `(mouse-5 ;; 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)))) ;; object size
Run Code Online (Sandbox Code Playgroud)
这是一个真实事件的例子:
'(mouse-4
(#<window 374 on *scratch*>
120
(6 . 10)
1301935153
nil
120
(0 . 0)
nil
(6 . 10)
(7 . 15)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
548 次 |
| 最近记录: |