В SLIME есть две очень полезные функции: slime-copy-or-inspect-presentation-at-mouse
и slime-presentation-menu
. Но они должны быть вызваны с аргументом события. Для того, чтобы генерировать даже мне нужно было бы много логистики (вычисление области, занятой печатным представлением объекта, на который указывает «мышь», строки и столбцы - то, что я действительно не хочу делать потому что, конечно, в Emacs есть что-то, что уже вычисляет все это.Как сгенерировать событие мыши программно?
Итак, есть ли простой способ генерировать «фальшивое» событие мыши? Потому что использование мыши только для двух вещей в редакторе, который в противном случае не требует мыши . чувствует себя ... ну, не очень умный :)
EDIT
Вот что я пробовал:
(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.
Я вообще не знакомы со слизью, но, взглянув на источник, он выглядит как функции, которые вы упомяните вызов slime-presentation-around-click, который, в свою очередь, вызывает slime-presentation-around-point. Кажется, что он переводит щелчок в точку, поэтому вы должны иметь возможность писать аналогичные функции, которые напрямую используют slime-presentation-around-point. Я смотрю на слизь-20100722 от Ubuntu. – jpkotta
'posn-at-point'. Почти все это, думаю. Интересно, доступно ли это только в недавних emacs? –