X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/ae940284fa77a6928f5162b7de859e67bdc7506c..62f1ca498cf11a3fa9b707c115673ea7b298e957:/lisp/xt-mouse.el diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el index f59ef8f7b6..eca5f813ca 100644 --- a/lisp/xt-mouse.el +++ b/lisp/xt-mouse.el @@ -1,7 +1,6 @@ ;;; xt-mouse.el --- support the mouse when emacs run in an xterm -;; Copyright (C) 1994, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +;; Copyright (C) 1994, 2000-2011 Free Software Foundation, Inc. ;; Author: Per Abrahamsen ;; Keywords: mouse, terminals @@ -51,7 +50,7 @@ M-down-mouse-1 M-down-mouse-2 M-down-mouse-3)) (put event-type 'event-kind 'mouse-click)) -(defun xterm-mouse-translate (event) +(defun xterm-mouse-translate (_event) "Read a click and release event from XTerm." (save-excursion (save-window-excursion @@ -121,10 +120,17 @@ ;; read xterm sequences above ascii 127 (#x7f) (defun xterm-mouse-event-read () + ;; We get the characters decoded by the keyboard coding system. Try + ;; to recover the raw character. (let ((c (read-char))) - (if (< c 0) - (+ c #x8000000 128) - c))) + (cond ;; If meta-flag is t we get a meta character + ((>= c ?\M-\^@) + (- c (- ?\M-\^@ 128))) + ;; Reencode the character in the keyboard coding system, if + ;; this is a non-ASCII character. + ((>= c #x80) + (aref (encode-coding-string (string c) (keyboard-coding-system)) 0)) + (t c)))) (defun xterm-mouse-truncate-wrap (f) "Truncate with wrap-around." @@ -229,14 +235,17 @@ down the SHIFT key while pressing the mouse button." (dolist (terminal (terminal-list)) (turn-on-xterm-mouse-tracking-on-terminal terminal))) -(defun turn-off-xterm-mouse-tracking (&optional force) +(defun turn-off-xterm-mouse-tracking (&optional _force) "Disable Emacs mouse tracking in xterm." (dolist (terminal (terminal-list)) (turn-off-xterm-mouse-tracking-on-terminal terminal))) (defun turn-on-xterm-mouse-tracking-on-terminal (&optional terminal) "Enable xterm mouse tracking on TERMINAL." - (when (and xterm-mouse-mode (eq t (terminal-live-p terminal))) + (when (and xterm-mouse-mode (eq t (terminal-live-p terminal)) + ;; Avoid the initial terminal which is not a termcap device. + ;; FIXME: is there more elegant way to detect the initial terminal? + (not (string= (terminal-name terminal) "initial_terminal"))) (unless (terminal-parameter terminal 'xterm-mouse-mode) ;; Simulate selecting a terminal by selecting one of its frames ;-( (with-selected-frame (car (frames-on-display-list terminal)) @@ -249,7 +258,10 @@ down the SHIFT key while pressing the mouse button." ;; Only send the disable command to those terminals to which we've already ;; sent the enable command. (when (and (terminal-parameter terminal 'xterm-mouse-mode) - (eq t (terminal-live-p terminal))) + (eq t (terminal-live-p terminal)) + ;; Avoid the initial terminal which is not a termcap device. + ;; FIXME: is there more elegant way to detect the initial terminal? + (not (string= (terminal-name terminal) "initial_terminal"))) ;; We could remove the key-binding and unset the `xterm-mouse-mode' ;; terminal parameter, but it seems less harmful to send this escape ;; command too many times (or to catch an unintended key sequence), than @@ -259,5 +271,4 @@ down the SHIFT key while pressing the mouse button." (provide 'xt-mouse) -;; arch-tag: 84962d4e-fae9-4c13-a9d7-ef4925a4ac03 ;;; xt-mouse.el ends here