A menudo, navegar a una ubicación y presionar alguna tecla tendrá el mismo efecto que hacer clic en esa ubicación. No hay un mecanismo incorporado que garantice esto, es solo que los modos generalmente se escriben de esa manera.
Puede generar eventos del mouse ( clic , doble / triple / ... clic , botón abajo / arriba , arrastrar , movimiento ). Todos los eventos del mouse tienen la forma (TYPE POSITION . EXTRA-DATA)
en que TYPE es un símbolo que codifica el botón del mouse, la naturaleza de la acción (hacer clic, arrastrar, etc.) y los modificadores. TYPE es mouse-movement
para un evento de movimiento. Llame posn-at-point
para generar la POSICIÓN para la ubicación del punto en el búfer actual.
Aquí hay un código de prueba de concepto que simula un clic del mouse en la posición del cursor cuando presiona f11
seguido de un dígito. Los modificadores se tienen en cuenta.
(defun make-mouse-event-at-point (base-event)
(let ((posn (posn-at-point))
(prefix "")
(basic-type (event-basic-type base-event))
(modifiers (event-modifiers base-event)))
(cond
((and (integerp basic-type) (>= basic-type ?0) (<= basic-type ?9))
;; click
(let* ((mouse-type (intern (format "%smouse-%d" prefix (- basic-type ?0))))
(click-count 1)
(type (event-convert-list (append modifiers (list mouse-type)))))
(list type posn click-count)))
(t
(error "Unsupported key for mouse event: %s" (event-basic-type base-event))))))
(defun simulate-mouse-event-at-point ()
(interactive)
(let ((event (make-mouse-event-at-point last-input-event)))
(setq unread-command-events (cons event unread-command-events))))
(defvar simulate-mouse-event-map (make-sparse-keymap))
(global-set-key [f11] simulate-mouse-event-map)
(define-key simulate-mouse-event-map [t] 'simulate-mouse-event-at-point)
Simular hover parece más difícil.