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调用绑定到菜单项的任何功能时,它们都会以某种方式看到未通过“真实”鼠标事件调用它们,因此抛出并退出。:(
编辑2
我实际上认为这是由于的原因,x-popup-menu当您使用鼠标或键盘选择菜单项时会调度不同的事件… arrrrrgh。