annotate lisp/xt-mouse.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents a6e068e858a4
children 376148b31b5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 38178
diff changeset
1 ;;; xt-mouse.el --- support the mouse when emacs run in an xterm
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13920
diff changeset
2
64762
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64091
diff changeset
3 ;; Copyright (C) 1994, 2000, 2001, 2002, 2003,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 101816
diff changeset
4 ;; 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
17982
24b81a90c347 Updated address.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 15331
diff changeset
6 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Keywords: mouse, terminals
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13920
diff changeset
9 ;; This file is part of GNU Emacs.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13920
diff changeset
10
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93371
diff changeset
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93371
diff changeset
13 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93371
diff changeset
14 ;; (at your option) any later version.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13920
diff changeset
15
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13920
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13920
diff changeset
20
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93371
diff changeset
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23
27803
5b4cb85d9312 Doc fixes.
Dave Love <fx@gnu.org>
parents: 23823
diff changeset
24 ;;; Commentary:
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
59594
7ce4342aac7f (xterm-mouse-event): Set new optional fourth arg in
Nick Roberts <nickrob@snap.net.nz>
parents: 59531
diff changeset
26 ;; Enable mouse support when running inside an xterm.
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;; This is actually useful when you are running X11 locally, but is
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; working on remote machine over a modem line or through a gateway.
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; It works by translating xterm escape codes into generic emacs mouse
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; events so it should work with any package that uses the mouse.
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33
14750
01ca1fbb38bc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
34 ;; You don't have to turn off xterm mode to use the normal xterm mouse
01ca1fbb38bc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
35 ;; functionality, it is still available by holding down the SHIFT key
01ca1fbb38bc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
36 ;; when you press the mouse button.
01ca1fbb38bc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
37
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;;; Todo:
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;; Support multi-click -- somehow.
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41
27803
5b4cb85d9312 Doc fixes.
Dave Love <fx@gnu.org>
parents: 23823
diff changeset
42 ;;; Code:
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43
80899
955868b1755c (xterm-mouse-debug-buffer): New variable.
Nick Roberts <nickrob@snap.net.nz>
parents: 76924
diff changeset
44 (defvar xterm-mouse-debug-buffer nil)
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45
13920
3a5b5eeba5b5 (xterm-mouse-translate, xterm-mouse-event):
Richard M. Stallman <rms@gnu.org>
parents: 13500
diff changeset
46 (defvar xterm-mouse-last)
3a5b5eeba5b5 (xterm-mouse-translate, xterm-mouse-event):
Richard M. Stallman <rms@gnu.org>
parents: 13500
diff changeset
47
59497
255a31569c3f (xterm-mouse-translate, xterm-mouse-event): Enable
Nick Roberts <nickrob@snap.net.nz>
parents: 58875
diff changeset
48 ;; Mouse events symbols must have an 'event-kind property with
255a31569c3f (xterm-mouse-translate, xterm-mouse-event): Enable
Nick Roberts <nickrob@snap.net.nz>
parents: 58875
diff changeset
49 ;; the value 'mouse-click.
76924
44b6d7a1ef55 (xterm-mouse-event): Don't use the left edge of the
Nick Roberts <nickrob@snap.net.nz>
parents: 76660
diff changeset
50 (dolist (event-type '(mouse-1 mouse-2 mouse-3
44b6d7a1ef55 (xterm-mouse-event): Don't use the left edge of the
Nick Roberts <nickrob@snap.net.nz>
parents: 76660
diff changeset
51 M-down-mouse-1 M-down-mouse-2 M-down-mouse-3))
59497
255a31569c3f (xterm-mouse-translate, xterm-mouse-event): Enable
Nick Roberts <nickrob@snap.net.nz>
parents: 58875
diff changeset
52 (put event-type 'event-kind 'mouse-click))
255a31569c3f (xterm-mouse-translate, xterm-mouse-event): Enable
Nick Roberts <nickrob@snap.net.nz>
parents: 58875
diff changeset
53
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 (defun xterm-mouse-translate (event)
27803
5b4cb85d9312 Doc fixes.
Dave Love <fx@gnu.org>
parents: 23823
diff changeset
55 "Read a click and release event from XTerm."
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 (save-excursion
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 (save-window-excursion
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 (deactivate-mark)
13920
3a5b5eeba5b5 (xterm-mouse-translate, xterm-mouse-event):
Richard M. Stallman <rms@gnu.org>
parents: 13500
diff changeset
59 (let* ((xterm-mouse-last)
13500
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
60 (down (xterm-mouse-event))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
61 (down-command (nth 0 down))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
62 (down-data (nth 1 down))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
63 (down-where (nth 1 down-data))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
64 (down-binding (key-binding (if (symbolp down-where)
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
65 (vector down-where down-command)
38563
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
66 (vector down-command))))
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
67 (is-click (string-match "^mouse" (symbol-name (car down)))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46836
diff changeset
68
38563
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
69 (unless is-click
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
70 (unless (and (eq (read-char) ?\e)
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
71 (eq (read-char) ?\[)
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
72 (eq (read-char) ?M))
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
73 (error "Unexpected escape sequence from XTerm")))
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
74
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
75 (let* ((click (if is-click down (xterm-mouse-event)))
85416
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
76 ;; (click-command (nth 0 click))
13500
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
77 (click-data (nth 1 click))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
78 (click-where (nth 1 click-data)))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
79 (if (memq down-binding '(nil ignore))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
80 (if (and (symbolp click-where)
59497
255a31569c3f (xterm-mouse-translate, xterm-mouse-event): Enable
Nick Roberts <nickrob@snap.net.nz>
parents: 58875
diff changeset
81 (consp click-where))
13500
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
82 (vector (list click-where click-data) click)
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
83 (vector click))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
84 (setq unread-command-events
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
85 (if (eq down-where click-where)
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
86 (list click)
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
87 (list
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
88 ;; Cheat `mouse-drag-region' with move event.
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
89 (list 'mouse-movement click-data)
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
90 ;; Generate a drag event.
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
91 (if (symbolp down-where)
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
92 0
27803
5b4cb85d9312 Doc fixes.
Dave Love <fx@gnu.org>
parents: 23823
diff changeset
93 (list (intern (format "drag-mouse-%d"
5b4cb85d9312 Doc fixes.
Dave Love <fx@gnu.org>
parents: 23823
diff changeset
94 (+ 1 xterm-mouse-last)))
59497
255a31569c3f (xterm-mouse-translate, xterm-mouse-event): Enable
Nick Roberts <nickrob@snap.net.nz>
parents: 58875
diff changeset
95 down-data click-data)))))
80899
955868b1755c (xterm-mouse-debug-buffer): New variable.
Nick Roberts <nickrob@snap.net.nz>
parents: 76924
diff changeset
96 (if xterm-mouse-debug-buffer
955868b1755c (xterm-mouse-debug-buffer): New variable.
Nick Roberts <nickrob@snap.net.nz>
parents: 76924
diff changeset
97 (print unread-command-events xterm-mouse-debug-buffer))
13500
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
98 (if (and (symbolp down-where)
59497
255a31569c3f (xterm-mouse-translate, xterm-mouse-event): Enable
Nick Roberts <nickrob@snap.net.nz>
parents: 58875
diff changeset
99 (consp down-where))
13500
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
100 (vector (list down-where down-data) down)
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
101 (vector down))))))))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
102
83369
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
103 ;; These two variables have been converted to terminal parameters.
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
104 ;;
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
105 ;;(defvar xterm-mouse-x 0
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
106 ;; "Position of last xterm mouse event relative to the frame.")
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
107 ;;
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
108 ;;(defvar xterm-mouse-y 0
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
109 ;; "Position of last xterm mouse event relative to the frame.")
13500
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
110
76658
384739d4e5e7 (xt-mouse-epoch): New variable.
Nick Roberts <nickrob@snap.net.nz>
parents: 76657
diff changeset
111 (defvar xt-mouse-epoch nil)
384739d4e5e7 (xt-mouse-epoch): New variable.
Nick Roberts <nickrob@snap.net.nz>
parents: 76657
diff changeset
112
23823
d60ff4432412 (xterm-mouse-mode): Pacify the byte compiler.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 21270
diff changeset
113 ;; Indicator for the xterm-mouse mode.
d60ff4432412 (xterm-mouse-mode): Pacify the byte compiler.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 21270
diff changeset
114
27803
5b4cb85d9312 Doc fixes.
Dave Love <fx@gnu.org>
parents: 23823
diff changeset
115 (defun xterm-mouse-position-function (pos)
5b4cb85d9312 Doc fixes.
Dave Love <fx@gnu.org>
parents: 23823
diff changeset
116 "Bound to `mouse-position-function' in XTerm mouse mode."
83369
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
117 (when (terminal-parameter nil 'xterm-mouse-x)
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
118 (setcdr pos (cons (terminal-parameter nil 'xterm-mouse-x)
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
119 (terminal-parameter nil 'xterm-mouse-y))))
27803
5b4cb85d9312 Doc fixes.
Dave Love <fx@gnu.org>
parents: 23823
diff changeset
120 pos)
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121
50478
4c84e707a287 (xterm-mouse-event-read): New function.
Francesco Potortì <pot@gnu.org>
parents: 49597
diff changeset
122 ;; read xterm sequences above ascii 127 (#x7f)
4c84e707a287 (xterm-mouse-event-read): New function.
Francesco Potortì <pot@gnu.org>
parents: 49597
diff changeset
123 (defun xterm-mouse-event-read ()
4c84e707a287 (xterm-mouse-event-read): New function.
Francesco Potortì <pot@gnu.org>
parents: 49597
diff changeset
124 (let ((c (read-char)))
109329
a6e068e858a4 * xt-mouse.el (xterm-mouse-event-read): Fix for characters > 127
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
125 (if (> c #x3FFF80)
a6e068e858a4 * xt-mouse.el (xterm-mouse-event-read): Fix for characters > 127
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
126 (+ 128 (- c #x3FFF80))
50478
4c84e707a287 (xterm-mouse-event-read): New function.
Francesco Potortì <pot@gnu.org>
parents: 49597
diff changeset
127 c)))
4c84e707a287 (xterm-mouse-event-read): New function.
Francesco Potortì <pot@gnu.org>
parents: 49597
diff changeset
128
77809
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
129 (defun xterm-mouse-truncate-wrap (f)
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
130 "Truncate with wrap-around."
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
131 (condition-case nil
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
132 ;; First try the built-in truncate, in case there's no overflow.
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
133 (truncate f)
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
134 ;; In case of overflow, do wraparound by hand.
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
135 (range-error
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
136 ;; In our case, we wrap around every 3 days or so, so if we assume
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
137 ;; a maximum of 65536 wraparounds, we're safe for a couple years.
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
138 ;; Using a power of 2 makes rounding errors less likely.
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
139 (let* ((maxwrap (* 65536 2048))
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
140 (dbig (truncate (/ f maxwrap)))
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
141 (fdiff (- f (* 1.0 maxwrap dbig))))
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
142 (+ (truncate fdiff) (* maxwrap dbig))))))
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
143
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 (defun xterm-mouse-event ()
27803
5b4cb85d9312 Doc fixes.
Dave Love <fx@gnu.org>
parents: 23823
diff changeset
145 "Convert XTerm mouse event to Emacs mouse event."
50478
4c84e707a287 (xterm-mouse-event-read): New function.
Francesco Potortì <pot@gnu.org>
parents: 49597
diff changeset
146 (let* ((type (- (xterm-mouse-event-read) #o40))
4c84e707a287 (xterm-mouse-event-read): New function.
Francesco Potortì <pot@gnu.org>
parents: 49597
diff changeset
147 (x (- (xterm-mouse-event-read) #o40 1))
4c84e707a287 (xterm-mouse-event-read): New function.
Francesco Potortì <pot@gnu.org>
parents: 49597
diff changeset
148 (y (- (xterm-mouse-event-read) #o40 1))
76659
750eeee3d77a *** empty log message ***
Nick Roberts <nickrob@snap.net.nz>
parents: 76658
diff changeset
149 ;; Emulate timestamp information. This is accurate enough
750eeee3d77a *** empty log message ***
Nick Roberts <nickrob@snap.net.nz>
parents: 76658
diff changeset
150 ;; for default value of mouse-1-click-follows-link (450msec).
77809
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
151 (timestamp (xterm-mouse-truncate-wrap
81072
ecb305fe2f17 (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80899
diff changeset
152 (* 1000
ecb305fe2f17 (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80899
diff changeset
153 (- (float-time)
ecb305fe2f17 (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80899
diff changeset
154 (or xt-mouse-epoch
ecb305fe2f17 (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80899
diff changeset
155 (setq xt-mouse-epoch (float-time)))))))
ecb305fe2f17 (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80899
diff changeset
156 (mouse (intern
38563
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
157 ;; For buttons > 3, the release-event looks
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
158 ;; differently (see xc/programs/xterm/button.c,
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
159 ;; function EditorButton), and there seems to come in
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
160 ;; a release-event only, no down-event.
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
161 (cond ((>= type 64)
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
162 (format "mouse-%d" (- type 60)))
76924
44b6d7a1ef55 (xterm-mouse-event): Don't use the left edge of the
Nick Roberts <nickrob@snap.net.nz>
parents: 76660
diff changeset
163 ((memq type '(8 9 10))
44b6d7a1ef55 (xterm-mouse-event): Don't use the left edge of the
Nick Roberts <nickrob@snap.net.nz>
parents: 76660
diff changeset
164 (setq xterm-mouse-last type)
44b6d7a1ef55 (xterm-mouse-event): Don't use the left edge of the
Nick Roberts <nickrob@snap.net.nz>
parents: 76660
diff changeset
165 (format "M-down-mouse-%d" (- type 7)))
44b6d7a1ef55 (xterm-mouse-event): Don't use the left edge of the
Nick Roberts <nickrob@snap.net.nz>
parents: 76660
diff changeset
166 ((= type 11)
44b6d7a1ef55 (xterm-mouse-event): Don't use the left edge of the
Nick Roberts <nickrob@snap.net.nz>
parents: 76660
diff changeset
167 (format "mouse-%d" (- xterm-mouse-last 7)))
38563
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
168 ((= type 3)
93177
470ea273abbf (xterm-mouse-event): Avoid error with buttons > 5.
Andreas Schwab <schwab@suse.de>
parents: 87649
diff changeset
169 ;; For buttons > 5 xterm only reports a
470ea273abbf (xterm-mouse-event): Avoid error with buttons > 5.
Andreas Schwab <schwab@suse.de>
parents: 87649
diff changeset
170 ;; button-release event. Avoid error by mapping
470ea273abbf (xterm-mouse-event): Avoid error with buttons > 5.
Andreas Schwab <schwab@suse.de>
parents: 87649
diff changeset
171 ;; them all to mouse-1.
470ea273abbf (xterm-mouse-event): Avoid error with buttons > 5.
Andreas Schwab <schwab@suse.de>
parents: 87649
diff changeset
172 (format "mouse-%d" (+ 1 (or xterm-mouse-last 0))))
38563
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
173 (t
75f49513b989 (xterm-mouse-event): Recognize control sequences
Gerd Moellmann <gerd@gnu.org>
parents: 38436
diff changeset
174 (setq xterm-mouse-last type)
59497
255a31569c3f (xterm-mouse-translate, xterm-mouse-event): Enable
Nick Roberts <nickrob@snap.net.nz>
parents: 58875
diff changeset
175 (format "down-mouse-%d" (+ 1 type))))))
59531
0b4694a3c513 (xterm-mouse-event): Compute window co-ordinates
Nick Roberts <nickrob@snap.net.nz>
parents: 59497
diff changeset
176 (w (window-at x y))
0b4694a3c513 (xterm-mouse-event): Compute window co-ordinates
Nick Roberts <nickrob@snap.net.nz>
parents: 59497
diff changeset
177 (ltrb (window-edges w))
0b4694a3c513 (xterm-mouse-event): Compute window co-ordinates
Nick Roberts <nickrob@snap.net.nz>
parents: 59497
diff changeset
178 (left (nth 0 ltrb))
0b4694a3c513 (xterm-mouse-event): Compute window co-ordinates
Nick Roberts <nickrob@snap.net.nz>
parents: 59497
diff changeset
179 (top (nth 1 ltrb)))
0b4694a3c513 (xterm-mouse-event): Compute window co-ordinates
Nick Roberts <nickrob@snap.net.nz>
parents: 59497
diff changeset
180
83369
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
181 (set-terminal-parameter nil 'xterm-mouse-x x)
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
182 (set-terminal-parameter nil 'xterm-mouse-y y)
67176
c1b362058986 (xterm-mouse-event): Set last-input-event so
Nick Roberts <nickrob@snap.net.nz>
parents: 64762
diff changeset
183 (setq
c1b362058986 (xterm-mouse-event): Set last-input-event so
Nick Roberts <nickrob@snap.net.nz>
parents: 64762
diff changeset
184 last-input-event
76660
b521c6db4e10 (xterm-mouse-event): Remove unused var `time'.
Kim F. Storm <storm@cua.dk>
parents: 76659
diff changeset
185 (list mouse
76657
ee5fbf83e732 (xterm-mouse-event): Compute a timestamp using
Nick Roberts <nickrob@snap.net.nz>
parents: 75347
diff changeset
186 (let ((event (if w
ee5fbf83e732 (xterm-mouse-event): Compute a timestamp using
Nick Roberts <nickrob@snap.net.nz>
parents: 75347
diff changeset
187 (posn-at-x-y (- x left) (- y top) w t)
ee5fbf83e732 (xterm-mouse-event): Compute a timestamp using
Nick Roberts <nickrob@snap.net.nz>
parents: 75347
diff changeset
188 (append (list nil 'menu-bar)
76924
44b6d7a1ef55 (xterm-mouse-event): Don't use the left edge of the
Nick Roberts <nickrob@snap.net.nz>
parents: 76660
diff changeset
189 (nthcdr 2 (posn-at-x-y x y))))))
76657
ee5fbf83e732 (xterm-mouse-event): Compute a timestamp using
Nick Roberts <nickrob@snap.net.nz>
parents: 75347
diff changeset
190 (setcar (nthcdr 3 event) timestamp)
ee5fbf83e732 (xterm-mouse-event): Compute a timestamp using
Nick Roberts <nickrob@snap.net.nz>
parents: 75347
diff changeset
191 event)))))
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 ;;;###autoload
44520
53a8da1bdd13 (xterm-mouse-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41814
diff changeset
194 (define-minor-mode xterm-mouse-mode
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 "Toggle XTerm mouse mode.
78492
7c8949dbfa0d Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents: 78236
diff changeset
196 With prefix arg, turn XTerm mouse mode on if arg is positive, otherwise turn
7c8949dbfa0d Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents: 78236
diff changeset
197 it off.
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198
61255
321e7372c394 (xterm-mouse-mode): Add explicit Custom group (mouse). Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 59594
diff changeset
199 Turn it on to use Emacs mouse commands, and off to use xterm mouse commands.
61513
a53097b105b0 (xterm-mouse-mode): Provide correct standard value for Custom. No
Luc Teirlinck <teirllm@auburn.edu>
parents: 61255
diff changeset
200 This works in terminal emulators compatible with xterm. It only
a53097b105b0 (xterm-mouse-mode): Provide correct standard value for Custom. No
Luc Teirlinck <teirllm@auburn.edu>
parents: 61255
diff changeset
201 works for simple uses of the mouse. Basically, only non-modified
a53097b105b0 (xterm-mouse-mode): Provide correct standard value for Custom. No
Luc Teirlinck <teirllm@auburn.edu>
parents: 61255
diff changeset
202 single clicks are supported. When turned on, the normal xterm
a53097b105b0 (xterm-mouse-mode): Provide correct standard value for Custom. No
Luc Teirlinck <teirllm@auburn.edu>
parents: 61255
diff changeset
203 mouse functionality for such clicks is still available by holding
a53097b105b0 (xterm-mouse-mode): Provide correct standard value for Custom. No
Luc Teirlinck <teirllm@auburn.edu>
parents: 61255
diff changeset
204 down the SHIFT key while pressing the mouse button."
a53097b105b0 (xterm-mouse-mode): Provide correct standard value for Custom. No
Luc Teirlinck <teirllm@auburn.edu>
parents: 61255
diff changeset
205 :global t :group 'mouse
93371
b6fc476e0627 (xterm-mouse-mode): Use delete-terminal-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93177
diff changeset
206 (let ((do-hook (if xterm-mouse-mode 'add-hook 'remove-hook)))
b6fc476e0627 (xterm-mouse-mode): Use delete-terminal-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93177
diff changeset
207 (funcall do-hook 'terminal-init-xterm-hook
b6fc476e0627 (xterm-mouse-mode): Use delete-terminal-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93177
diff changeset
208 'turn-on-xterm-mouse-tracking-on-terminal)
b6fc476e0627 (xterm-mouse-mode): Use delete-terminal-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93177
diff changeset
209 (funcall do-hook 'delete-terminal-functions
b6fc476e0627 (xterm-mouse-mode): Use delete-terminal-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93177
diff changeset
210 'turn-off-xterm-mouse-tracking-on-terminal)
b6fc476e0627 (xterm-mouse-mode): Use delete-terminal-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93177
diff changeset
211 (funcall do-hook 'suspend-tty-functions
b6fc476e0627 (xterm-mouse-mode): Use delete-terminal-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93177
diff changeset
212 'turn-off-xterm-mouse-tracking-on-terminal)
b6fc476e0627 (xterm-mouse-mode): Use delete-terminal-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93177
diff changeset
213 (funcall do-hook 'resume-tty-functions
b6fc476e0627 (xterm-mouse-mode): Use delete-terminal-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93177
diff changeset
214 'turn-on-xterm-mouse-tracking-on-terminal)
b6fc476e0627 (xterm-mouse-mode): Use delete-terminal-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93177
diff changeset
215 (funcall do-hook 'suspend-hook 'turn-off-xterm-mouse-tracking)
b6fc476e0627 (xterm-mouse-mode): Use delete-terminal-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93177
diff changeset
216 (funcall do-hook 'suspend-resume-hook 'turn-on-xterm-mouse-tracking)
b6fc476e0627 (xterm-mouse-mode): Use delete-terminal-functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93177
diff changeset
217 (funcall do-hook 'kill-emacs-hook 'turn-off-xterm-mouse-tracking))
44520
53a8da1bdd13 (xterm-mouse-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41814
diff changeset
218 (if xterm-mouse-mode
53a8da1bdd13 (xterm-mouse-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41814
diff changeset
219 ;; Turn it on
83369
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
220 (progn
44520
53a8da1bdd13 (xterm-mouse-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41814
diff changeset
221 (setq mouse-position-function #'xterm-mouse-position-function)
53a8da1bdd13 (xterm-mouse-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41814
diff changeset
222 (turn-on-xterm-mouse-tracking))
53a8da1bdd13 (xterm-mouse-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41814
diff changeset
223 ;; Turn it off
53a8da1bdd13 (xterm-mouse-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41814
diff changeset
224 (turn-off-xterm-mouse-tracking 'force)
53a8da1bdd13 (xterm-mouse-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41814
diff changeset
225 (setq mouse-position-function nil)))
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 (defun turn-on-xterm-mouse-tracking ()
27803
5b4cb85d9312 Doc fixes.
Dave Love <fx@gnu.org>
parents: 23823
diff changeset
228 "Enable Emacs mouse tracking in xterm."
95798
813561cb0d2c (turn-on-xterm-mouse-tracking, turn-off-xterm-mouse-tracking):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
229 (dolist (terminal (terminal-list))
85416
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
230 (turn-on-xterm-mouse-tracking-on-terminal terminal)))
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231
44520
53a8da1bdd13 (xterm-mouse-mode): Use define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41814
diff changeset
232 (defun turn-off-xterm-mouse-tracking (&optional force)
41814
42c496dc0b7d (turn-off-xterm-mouse-tracking): Doc fix.
Andreas Schwab <schwab@suse.de>
parents: 38563
diff changeset
233 "Disable Emacs mouse tracking in xterm."
95798
813561cb0d2c (turn-on-xterm-mouse-tracking, turn-off-xterm-mouse-tracking):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
234 (dolist (terminal (terminal-list))
85416
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
235 (turn-off-xterm-mouse-tracking-on-terminal terminal)))
83369
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
236
85416
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
237 (defun turn-on-xterm-mouse-tracking-on-terminal (&optional terminal)
83369
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
238 "Enable xterm mouse tracking on TERMINAL."
101816
5e57e0473132 (turn-on-xterm-mouse-tracking-on-terminal)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100908
diff changeset
239 (when (and xterm-mouse-mode (eq t (terminal-live-p terminal))
5e57e0473132 (turn-on-xterm-mouse-tracking-on-terminal)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100908
diff changeset
240 ;; Avoid the initial terminal which is not a termcap device.
5e57e0473132 (turn-on-xterm-mouse-tracking-on-terminal)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100908
diff changeset
241 ;; FIXME: is there more elegant way to detect the initial terminal?
5e57e0473132 (turn-on-xterm-mouse-tracking-on-terminal)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100908
diff changeset
242 (not (string= (terminal-name terminal) "initial_terminal")))
85416
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
243 (unless (terminal-parameter terminal 'xterm-mouse-mode)
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
244 ;; Simulate selecting a terminal by selecting one of its frames ;-(
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
245 (with-selected-frame (car (frames-on-display-list terminal))
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
246 (define-key input-decode-map "\e[M" 'xterm-mouse-translate))
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
247 (set-terminal-parameter terminal 'xterm-mouse-mode t))
83369
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
248 (send-string-to-terminal "\e[?1000h" terminal)))
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249
83369
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
250 (defun turn-off-xterm-mouse-tracking-on-terminal (terminal)
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
251 "Disable xterm mouse tracking on TERMINAL."
85416
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
252 ;; Only send the disable command to those terminals to which we've already
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
253 ;; sent the enable command.
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
254 (when (and (terminal-parameter terminal 'xterm-mouse-mode)
101816
5e57e0473132 (turn-on-xterm-mouse-tracking-on-terminal)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100908
diff changeset
255 (eq t (terminal-live-p terminal))
5e57e0473132 (turn-on-xterm-mouse-tracking-on-terminal)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100908
diff changeset
256 ;; Avoid the initial terminal which is not a termcap device.
5e57e0473132 (turn-on-xterm-mouse-tracking-on-terminal)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100908
diff changeset
257 ;; FIXME: is there more elegant way to detect the initial terminal?
5e57e0473132 (turn-on-xterm-mouse-tracking-on-terminal)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100908
diff changeset
258 (not (string= (terminal-name terminal) "initial_terminal")))
85416
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
259 ;; We could remove the key-binding and unset the `xterm-mouse-mode'
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
260 ;; terminal parameter, but it seems less harmful to send this escape
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
261 ;; command too many times (or to catch an unintended key sequence), than
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
262 ;; to send it too few times (or to fail to let xterm-mouse events
58c70d072b21 Don't change the global function-key-map anny more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84769
diff changeset
263 ;; pass by untranslated).
83369
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
264 (send-string-to-terminal "\e[?1000l" terminal)))
d2e0850b17f2 Make xt-mouse.el multi-tty-compatible.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
265
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 (provide 'xt-mouse)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267
77809
20f40276359e (xterm-mouse-truncate-wrap): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76924
diff changeset
268 ;; arch-tag: 84962d4e-fae9-4c13-a9d7-ef4925a4ac03
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 ;;; xt-mouse.el ends here