annotate lisp/xt-mouse.el @ 20279:69a6030e443a

(kill-region): Detect read-only text by getting an error trying to delete it. Handle the cases where we can, and can't, get the killed text from the undo list with much the same code.
author Karl Heuer <kwzh@gnu.org>
date Wed, 19 Nov 1997 21:36:56 +0000
parents 24b81a90c347
children 3f500b8d6964
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
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
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 1994 Free Software Foundation
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
17982
24b81a90c347 Updated address.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 15331
diff changeset
5 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Keywords: mouse, terminals
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13920
diff changeset
8 ;; This file is part of GNU Emacs.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13920
diff changeset
9
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13920
diff changeset
10 ;; 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
11 ;; it under the terms of the GNU General Public License as published by
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; any later version.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13920
diff changeset
14
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13920
diff changeset
15 ;; 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
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13920
diff changeset
19
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13920
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13920
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13920
diff changeset
23 ;; Boston, MA 02111-1307, USA.
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;;; Comments:
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
14750
01ca1fbb38bc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
27 ;; Enable mouse support when running inside an xterm or Linux console.
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; This is actually useful when you are running X11 locally, but is
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; working on remote machine over a modem line or through a gateway.
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; It works by translating xterm escape codes into generic emacs mouse
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; events so it should work with any package that uses the mouse.
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34
14750
01ca1fbb38bc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
35 ;; The xterm mouse escape codes are supposedly also supported by the
01ca1fbb38bc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
36 ;; Linux console, but I have not been able to verify this.
01ca1fbb38bc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
37
01ca1fbb38bc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
38 ;; 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
39 ;; functionality, it is still available by holding down the SHIFT key
01ca1fbb38bc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
40 ;; when you press the mouse button.
01ca1fbb38bc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
41
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;;; Todo:
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;; Support multi-click -- somehow.
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;; Clicking on the mode-line does not work, although it should.
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;;; Code:
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 (define-key function-key-map "\e[M" 'xterm-mouse-translate)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51
13920
3a5b5eeba5b5 (xterm-mouse-translate, xterm-mouse-event):
Richard M. Stallman <rms@gnu.org>
parents: 13500
diff changeset
52 (defvar xterm-mouse-last)
3a5b5eeba5b5 (xterm-mouse-translate, xterm-mouse-event):
Richard M. Stallman <rms@gnu.org>
parents: 13500
diff changeset
53
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 (defun xterm-mouse-translate (event)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;; Read a click and release event from XTerm.
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)
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
66 (vector down-command)))))
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 (or (and (eq (read-char) ?\e)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 (eq (read-char) ?\[)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 (eq (read-char) ?M))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 (error "Unexpected escape sequence from XTerm"))
13500
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
71 (let* ((click (xterm-mouse-event))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
72 (click-command (nth 0 click))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
73 (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
74 (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
75 (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
76 (if (and (symbolp click-where)
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
77 (not (eq 'menu-bar click-where)))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
78 (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
79 (vector click))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
80 (setq unread-command-events
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
81 (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
82 (list click)
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
83 (list
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
84 ;; 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
85 (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
86 ;; Generate a drag event.
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
87 (if (symbolp down-where)
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
88 0
13920
3a5b5eeba5b5 (xterm-mouse-translate, xterm-mouse-event):
Richard M. Stallman <rms@gnu.org>
parents: 13500
diff changeset
89 (list (intern (concat "drag-mouse-" (+ 1 xterm-mouse-last)))
13500
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
90 down-data click-data))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
91 )))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
92 (if (and (symbolp down-where)
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
93 (not (eq 'menu-bar down-where)))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
94 (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
95 (vector down))))))))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
96
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
97 (defvar xterm-mouse-x 0
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
98 "Position of last xterm mouse event relative to the frame.")
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
99
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
100 (defvar xterm-mouse-y 0
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
101 "Position of last xterm mouse event relative to the frame.")
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
102
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
103 (defadvice mouse-position (around xterm-mouse activate)
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
104 "Use last key from xterm-mouse-mode if available."
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
105 (let ((answer ad-do-it))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
106 (setq ad-return-value
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
107 (if xterm-mouse-mode
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
108 (cons (car answer) (cons xterm-mouse-x xterm-mouse-y))
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
109 answer))))
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 (defun xterm-mouse-event ()
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 ;; Convert XTerm mouse event to Emacs mouse event.
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 (let* ((type (- (read-char) ? ))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 (x (- (read-char) ? 1))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 (y (- (read-char) ? 1))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 (point (cons x y))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 (window (window-at x y))
13500
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
118 (where (if window
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
119 (coordinates-in-window-p point window)
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
120 'menu-bar))
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 (pos (if (consp where)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 (progn
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 (select-window window)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 (goto-char (window-start window))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 (move-to-window-line (cdr where))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 (move-to-column (+ (car where) (current-column)
15331
8cf5ec9e5058 (xterm-mouse-event): Adjust for minibuffer prompt width.
Richard M. Stallman <rms@gnu.org>
parents: 14750
diff changeset
127 (if (string-match "\\` \\*Minibuf"
8cf5ec9e5058 (xterm-mouse-event): Adjust for minibuffer prompt width.
Richard M. Stallman <rms@gnu.org>
parents: 14750
diff changeset
128 (buffer-name))
8cf5ec9e5058 (xterm-mouse-event): Adjust for minibuffer prompt width.
Richard M. Stallman <rms@gnu.org>
parents: 14750
diff changeset
129 (- (minibuffer-prompt-width))
8cf5ec9e5058 (xterm-mouse-event): Adjust for minibuffer prompt width.
Richard M. Stallman <rms@gnu.org>
parents: 14750
diff changeset
130 0)
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 (max 0 (1- (window-hscroll)))))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 (point))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 where))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 (mouse (intern (if (eq type 3)
13920
3a5b5eeba5b5 (xterm-mouse-translate, xterm-mouse-event):
Richard M. Stallman <rms@gnu.org>
parents: 13500
diff changeset
135 (concat "mouse-" (+ 1 xterm-mouse-last))
3a5b5eeba5b5 (xterm-mouse-translate, xterm-mouse-event):
Richard M. Stallman <rms@gnu.org>
parents: 13500
diff changeset
136 (setq xterm-mouse-last type)
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 (concat "down-mouse-" (+ 1 type))))))
13500
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
138 (setq xterm-mouse-x x
5de4c8a3f702 (global-map): Removed bindings of down events to ignore.
Richard M. Stallman <rms@gnu.org>
parents: 13163
diff changeset
139 xterm-mouse-y y)
13163
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 (list mouse
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 (list window pos point
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 (/ (nth 2 (current-time)) 1000)))))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 ;; Indicator for the xterm-mouse mode.
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 (defvar xterm-mouse-mode nil)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 (or (assq 'xterm-mouse-mode minor-mode-alist)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 (setq minor-mode-alist
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 (cons '(xterm-mouse-mode (" Mouse")) minor-mode-alist)))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 ;;;###autoload
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 (defun xterm-mouse-mode (arg)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 "Toggle XTerm mouse mode.
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 With prefix arg, turn XTerm mouse mode on iff arg is positive.
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 Turn it on to use emacs mouse commands, and off to use xterm mouse commands."
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 (interactive "P")
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 (if (or (and (null arg) xterm-mouse-mode)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 (<= (prefix-numeric-value arg) 0))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 ;; Turn it off
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 (if xterm-mouse-mode
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 (progn
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 (turn-off-xterm-mouse-tracking)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 (setq xterm-mouse-mode nil)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 (set-buffer-modified-p (buffer-modified-p))))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 ;;Turn it on
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 (if xterm-mouse-mode
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 ()
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 (setq xterm-mouse-mode t)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 (turn-on-xterm-mouse-tracking)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 (set-buffer-modified-p (buffer-modified-p)))))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 (defun turn-on-xterm-mouse-tracking ()
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 ;; Enable emacs mouse tracking in xterm.
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 (if xterm-mouse-mode
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 (send-string-to-terminal "\e[?1000h")))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 (defun turn-off-xterm-mouse-tracking ()
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 ;; Disable disable emacs mouse tracking in xterm.
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 (if xterm-mouse-mode
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 (send-string-to-terminal "\e[?1000l")))
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 ;; Restore normal mouse behaviour outside Emacs.
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 (add-hook 'suspend-hook 'turn-off-xterm-mouse-tracking)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 (add-hook 'suspend-resume-hook 'turn-on-xterm-mouse-tracking)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 (add-hook 'kill-emacs-hook 'turn-off-xterm-mouse-tracking)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 (provide 'xt-mouse)
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189
01f90e21a1db Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 ;;; xt-mouse.el ends here