diff options
| author | Stefan Monnier <monnier@iro.umontreal.ca> | 2014-07-08 14:47:47 -0400 | 
|---|---|---|
| committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2014-07-08 14:47:47 -0400 | 
| commit | dee89b6708a2f369ea1ba4ff0366f6506ccaeaef (patch) | |
| tree | 96d00587032f61fca4e09dd47e921d47c4ffa4e5 | |
| parent | ef0cc37f8552b30fd48cd4437f8307182533d3db (diff) | |
| download | emacs-dee89b6708a2f369ea1ba4ff0366f6506ccaeaef.tar.gz | |
* lisp/xt-mouse.el (xterm-mouse-translate-1): Intern drag event.
Remove also pointless window&mark manipulation.
Fixes: debbugs:17894
| -rw-r--r-- | lisp/ChangeLog | 3 | ||||
| -rw-r--r-- | lisp/xt-mouse.el | 79 | 
2 files changed, 40 insertions, 42 deletions
| diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 29e55de249d..b2982c56754 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@  2014-07-08  Stefan Monnier  <monnier@iro.umontreal.ca> +	* xt-mouse.el (xterm-mouse-translate-1): Intern drag event (bug#17894). +	Remove also pointless window&mark manipulation. +  	* progmodes/perl-mode.el: Use syntax-ppss; fix one indentation case.  	(perl-indent-line): Use syntax-ppss to detect we're in a doc-section.  	(perl-continuation-line-p): Don't skip over anything else than labels. diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el index e5e77405b02..59f1eb8c887 100644 --- a/lisp/xt-mouse.el +++ b/lisp/xt-mouse.el @@ -62,49 +62,44 @@ http://invisible-island.net/xterm/ctlseqs/ctlseqs.html)."  (defun xterm-mouse-translate-1 (&optional extension)    (save-excursion -    (save-window-excursion              ;FIXME: Why? -      (deactivate-mark)                 ;FIXME: Why? -      (let* ((event (xterm-mouse-event extension)) -	     (ev-command (nth 0 event)) -	     (ev-data    (nth 1 event)) -	     (ev-where   (nth 1 ev-data)) -             (vec (if (and (symbolp ev-where) (consp ev-where)) -                      ;; FIXME: This condition can *never* be non-nil!?! -                      (vector (list ev-where ev-data) event) -                    (vector event))) -	     (is-down (string-match "down-" (symbol-name ev-command)))) - -          (cond -         ((null event) nil)           ;Unknown/bogus byte sequence! -         (is-down -          (setf (terminal-parameter nil 'xterm-mouse-last-down) event) -          vec) -         (t -          (let* ((down (terminal-parameter nil 'xterm-mouse-last-down)) -                 (down-data (nth 1 down)) -                 (down-where (nth 1 down-data))) -            (setf (terminal-parameter nil 'xterm-mouse-last-down) nil) -            (cond -             ((null down) -              ;; This is an "up-only" event.  Pretend there was an up-event -              ;; right before and keep the up-event for later. -              (push event unread-command-events) -              (vector (cons (intern (replace-regexp-in-string -                                     "\\`\\([ACMHSs]-\\)*" "\\&down-" -                                     (symbol-name ev-command) t)) -                            (cdr event)))) -             ((equal ev-where down-where) vec) +    (let* ((event (xterm-mouse-event extension)) +	   (ev-command (nth 0 event)) +	   (ev-data    (nth 1 event)) +	   (ev-where   (nth 1 ev-data)) +	   (vec (vector event)) +	   (is-down (string-match "down-" (symbol-name ev-command)))) + +      (cond +       ((null event) nil)		;Unknown/bogus byte sequence! +       (is-down +	(setf (terminal-parameter nil 'xterm-mouse-last-down) event) +	vec) +       (t +	(let* ((down (terminal-parameter nil 'xterm-mouse-last-down)) +	       (down-data (nth 1 down)) +	       (down-where (nth 1 down-data))) +	  (setf (terminal-parameter nil 'xterm-mouse-last-down) nil) +	  (cond +	   ((null down) +	    ;; This is an "up-only" event.  Pretend there was an up-event +	    ;; right before and keep the up-event for later. +	    (push event unread-command-events) +	    (vector (cons (intern (replace-regexp-in-string +				   "\\`\\([ACMHSs]-\\)*" "\\&down-" +				   (symbol-name ev-command) t)) +			  (cdr event)))) +	   ((equal ev-where down-where) vec)             (t -              (let ((drag (if (symbolp ev-where) -                                 0      ;FIXME: Why?!? -                               (list (replace-regexp-in-string -                                      "\\`\\([ACMHSs]-\\)*" "\\&drag-" -                                      (symbol-name ev-command) t) -                                     down-data ev-data)))) -                (if (null track-mouse) -                    (vector drag) -                  (push drag unread-command-events) -                  (vector (list 'mouse-movement ev-data))))))))))))) +	    (let ((drag (if (symbolp ev-where) +			    0		;FIXME: Why?!? +			  (list (intern (replace-regexp-in-string +					 "\\`\\([ACMHSs]-\\)*" "\\&drag-" +					 (symbol-name ev-command) t)) +				down-data ev-data)))) +	      (if (null track-mouse) +		  (vector drag) +		(push drag unread-command-events) +		(vector (list 'mouse-movement ev-data))))))))))))  ;; These two variables have been converted to terminal parameters.  ;; | 
