Thông thường, điều hướng đến một vị trí và nhấn một số phím sẽ có tác dụng tương tự như nhấp vào vị trí đó. Không có cơ chế tích hợp nào đảm bảo điều này, chỉ có các chế độ thường được viết theo cách đó.
Bạn có thể tạo các sự kiện chuột ( nhấp chuột , gấp đôi / gấp ba / lần nhấp , nút xuống / lên , kéo , chuyển động ). Tất cả các sự kiện chuột có dạng (TYPE POSITION . EXTRA-DATA)
TYPE là biểu tượng mã hóa nút chuột, tính chất của hành động (nhấp, kéo, v.v.) và các công cụ sửa đổi. TYPE là mouse-movement
cho một sự kiện chuyển động. Gọi posn-at-point
để tạo VỊ TRÍ cho vị trí của điểm trong bộ đệm hiện tại.
Dưới đây là một số mã bằng chứng mô phỏng mô phỏng nhấp chuột tại vị trí con trỏ khi bạn nhấn f11
theo sau là một chữ số. Công cụ sửa đổi được đưa vào tài khoản.
(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)
Mô phỏng di chuột có vẻ khó khăn hơn.