Function: xterm-mouse--read-event-sequence
xterm-mouse--read-event-sequence is a byte-compiled function defined
in xt-mouse.el.gz.
Signature
(xterm-mouse--read-event-sequence &optional EXTENSION)
Source Code
;; Defined in /usr/src/emacs/lisp/xt-mouse.el.gz
;; XTerm reports mouse events as
;; <EVENT-CODE> <X> <Y> in default mode, and
;; <EVENT-CODE> ";" <X> ";" <Y> <"M" or "m"> in extended mode.
;; The macro read-number-from-terminal takes care of reading
;; the response parameters appropriately. The EVENT-CODE differs
;; slightly between default and extended mode.
;; Return a list (EVENT-TYPE-SYMBOL X Y).
(defun xterm-mouse--read-event-sequence (&optional extension)
(pcase-let*
((`(,code . ,_) (xterm-mouse--read-number-from-terminal extension))
(`(,x . ,_) (xterm-mouse--read-number-from-terminal extension))
(`(,y . ,c) (xterm-mouse--read-number-from-terminal extension))
(wheel (/= (logand code 64) 0))
(move (/= (logand code 32) 0))
(ctrl (/= (logand code 16) 0))
(meta (/= (logand code 8) 0))
(shift (/= (logand code 4) 0))
(down (and (not wheel)
(not move)
(if extension
(eq c ?M)
(/= (logand code 3) 3))))
(btn (cond
((or extension down wheel)
(+ (logand code 3) (if wheel 4 1)))
;; The default mouse protocol does not report the button
;; number in release events: extract the button number
;; from last button-down event.
((terminal-parameter nil 'xterm-mouse-last-down)
(string-to-number
(substring
(symbol-name
(car (terminal-parameter nil 'xterm-mouse-last-down)))
-1)))
;; Spurious release event without previous button-down
;; event: assume, that the last button was button 1.
(t 1)))
(sym (if move 'mouse-movement
(intern (concat (if ctrl "C-" "")
(if meta "M-" "")
(if shift "S-" "")
(if down "down-" "")
"mouse-"
(number-to-string btn))))))
(list sym (1- x) (1- y))))