[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs-24 r117081: * lisp/xt-mouse.el: Drop spurious/oddly
From: |
Stefan Monnier |
Subject: |
[Emacs-diffs] emacs-24 r117081: * lisp/xt-mouse.el: Drop spurious/oddly shaped events. |
Date: |
Thu, 08 May 2014 01:46:21 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 117081
revision-id: address@hidden
parent: address@hidden
fixes bug: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17378
committer: Stefan Monnier <address@hidden>
branch nick: emacs-24
timestamp: Wed 2014-05-07 21:46:15 -0400
message:
* lisp/xt-mouse.el: Drop spurious/oddly shaped events.
(xterm-mouse--read-event-sequence-1000): Return nil if something looks fishy.
(xterm-mouse-event): Propagate it.
(xterm-mouse-translate-1): Handle it.
modified:
lisp/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1432
lisp/xt-mouse.el xtmouse.el-20091113204419-o5vbwnq5f7feedwu-905
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2014-05-07 09:31:27 +0000
+++ b/lisp/ChangeLog 2014-05-08 01:46:15 +0000
@@ -1,3 +1,11 @@
+2014-05-08 Stefan Monnier <address@hidden>
+
+ * xt-mouse.el: Drop spurious/oddly shaped events (bug#17378).
+ (xterm-mouse--read-event-sequence-1000): Return nil if something
+ looks fishy.
+ (xterm-mouse-event): Propagate it.
+ (xterm-mouse-translate-1): Handle it.
+
2014-05-07 Stephen Berman <address@hidden>
* calendar/todo-mode.el (todo-insert-item--apply-args): When all
=== modified file 'lisp/xt-mouse.el'
--- a/lisp/xt-mouse.el 2014-05-05 23:50:20 +0000
+++ b/lisp/xt-mouse.el 2014-05-08 01:46:15 +0000
@@ -63,8 +63,8 @@
(defun xterm-mouse-translate-1 (&optional extension)
(save-excursion
- (save-window-excursion
- (deactivate-mark)
+ (save-window-excursion ;FIXME: Why?
+ (deactivate-mark) ;FIXME: Why?
(let* ((xterm-mouse-last nil)
(down (xterm-mouse-event extension))
(down-command (nth 0 down))
@@ -73,10 +73,10 @@
(down-binding (key-binding (if (symbolp down-where)
(vector down-where down-command)
(vector down-command))))
- (is-click (string-match "^mouse" (symbol-name (car down)))))
+ (is-down (string-match "down" (symbol-name (car down)))))
;; Retrieve the expected preface for the up-event.
- (unless is-click
+ (unless is-down
(unless (cond ((null extension)
(and (eq (read-event) ?\e)
(eq (read-event) ?\[)
@@ -88,14 +88,17 @@
(error "Unexpected escape sequence from XTerm")))
;; Process the up-event.
- (let* ((click (if is-click down (xterm-mouse-event extension)))
+ (let* ((click (if is-down (xterm-mouse-event extension) down))
(click-data (nth 1 click))
(click-where (nth 1 click-data)))
- (if (memq down-binding '(nil ignore))
- (if (and (symbolp click-where)
- (consp click-where))
- (vector (list click-where click-data) click)
- (vector click))
+ (cond
+ ((null down) nil)
+ ((memq down-binding '(nil ignore))
+ (if (and (symbolp click-where)
+ (consp click-where))
+ (vector (list click-where click-data) click)
+ (vector click)))
+ (t
(setq unread-command-events
(append (if (eq down-where click-where)
(list click)
@@ -114,7 +117,7 @@
(if (and (symbolp down-where)
(consp down-where))
(vector (list down-where down-data) down)
- (vector down))))))))
+ (vector down)))))))))
;; These two variables have been converted to terminal parameters.
;;
@@ -153,7 +156,8 @@
;; Normal terminal mouse click reporting: expect three bytes, of the
;; form <BUTTON+32> <X+32> <Y+32>. Return a list (EVENT-TYPE X Y).
(defun xterm-mouse--read-event-sequence-1000 ()
- (list (let ((code (- (read-event) 32)))
+ (let* ((code (- (read-event) 32))
+ (type
(intern
;; For buttons > 3, the release-event looks differently
;; (see xc/programs/xterm/button.c, function EditorButton),
@@ -163,19 +167,19 @@
((memq code '(8 9 10))
(setq xterm-mouse-last (- code 8))
(format "M-down-mouse-%d" (- code 7)))
- ((= code 11)
- (format "M-mouse-%d" (+ 1 (or xterm-mouse-last 0))))
- ((= code 3)
- ;; For buttons > 5 xterm only reports a
- ;; button-release event. Avoid error by mapping
- ;; them all to mouse-1.
- (format "mouse-%d" (+ 1 (or xterm-mouse-last 0))))
- (t
+ ((and (= code 11) xterm-mouse-last)
+ (format "M-mouse-%d" (1+ xterm-mouse-last)))
+ ((and (= code 3) xterm-mouse-last)
+ ;; For buttons > 5 xterm only reports a button-release event.
+ ;; Drop them since they're not usable and can be spurious.
+ (format "mouse-%d" (1+ xterm-mouse-last)))
+ ((memq code '(0 1 2))
(setq xterm-mouse-last code)
(format "down-mouse-%d" (+ 1 code))))))
- ;; x and y coordinates
- (max 0 (- (read-event) 33))
- (max 0 (- (read-event) 33))))
+ (x (- (read-event) 33))
+ (y (- (read-event) 33)))
+ (and type (wholenump x) (wholenump y)
+ (list type x y))))
;; XTerm's 1006-mode terminal mouse click reporting has the form
;; <BUTTON> ; <X> ; <Y> <M or m>, where the button and ordinates are
@@ -222,32 +226,33 @@
((eq extension 1006)
(xterm-mouse--read-event-sequence-1006))
(t
- (error "Unsupported XTerm mouse protocol"))))
- (type (nth 0 click))
- (x (nth 1 click))
- (y (nth 2 click))
- ;; Emulate timestamp information. This is accurate enough
- ;; for default value of mouse-1-click-follows-link (450msec).
- (timestamp (xterm-mouse-truncate-wrap
- (* 1000
- (- (float-time)
- (or xt-mouse-epoch
- (setq xt-mouse-epoch (float-time)))))))
- (w (window-at x y))
- (ltrb (window-edges w))
- (left (nth 0 ltrb))
- (top (nth 1 ltrb)))
- (set-terminal-parameter nil 'xterm-mouse-x x)
- (set-terminal-parameter nil 'xterm-mouse-y y)
- (setq
- last-input-event
- (list type
- (let ((event (if w
- (posn-at-x-y (- x left) (- y top) w t)
- (append (list nil 'menu-bar)
- (nthcdr 2 (posn-at-x-y x y))))))
- (setcar (nthcdr 3 event) timestamp)
- event)))))
+ (error "Unsupported XTerm mouse protocol")))))
+ (when click
+ (let* ((type (nth 0 click))
+ (x (nth 1 click))
+ (y (nth 2 click))
+ ;; Emulate timestamp information. This is accurate enough
+ ;; for default value of mouse-1-click-follows-link (450msec).
+ (timestamp (xterm-mouse-truncate-wrap
+ (* 1000
+ (- (float-time)
+ (or xt-mouse-epoch
+ (setq xt-mouse-epoch (float-time)))))))
+ (w (window-at x y))
+ (ltrb (window-edges w))
+ (left (nth 0 ltrb))
+ (top (nth 1 ltrb)))
+ (set-terminal-parameter nil 'xterm-mouse-x x)
+ (set-terminal-parameter nil 'xterm-mouse-y y)
+ (setq
+ last-input-event
+ (list type
+ (let ((event (if w
+ (posn-at-x-y (- x left) (- y top) w t)
+ (append (list nil 'menu-bar)
+ (nthcdr 2 (posn-at-x-y x y))))))
+ (setcar (nthcdr 3 event) timestamp)
+ event)))))))
;;;###autoload
(define-minor-mode xterm-mouse-mode
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] emacs-24 r117081: * lisp/xt-mouse.el: Drop spurious/oddly shaped events.,
Stefan Monnier <=