annotate lisp/t-mouse.el @ 69185:ee54b3a792ff

This version does *not* work with Emacs 22. It is just the initial import from gpm-1.20.1.
author Nick Roberts <nickrob@snap.net.nz>
date Mon, 27 Feb 2006 22:10:43 +0000
parents
children ec62f416bd30
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
69185
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
1 ;;; t-mouse.el --- mouse support within the text terminal
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
2
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
3 ;;; Copyright (C) 1994,1995 Alessandro Rubini <rubini@linux.it>
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
4 ;;; parts are by Ian T Zimmermann <itz@rahul.net>, 1995,1998
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
5
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
6 ;; Maintainer: gpm mailing list: gpm@prosa.it
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
7 ;; Keywords: mouse gpm linux
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
8
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
9 ;;; This program is distributed in the hope that it will be useful,
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
10 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
11 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
12 ;;; GNU General Public License for more details.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
13
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
14 ;;; You should have received a copy of the GNU General Public License
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
15 ;;; along with GNU Emacs; see the file COPYING. If not, write to
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
16 ;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
17
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
18 ;;; Commentary:
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
19
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
20 ;; This package provides access to mouse event as reported by the
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
21 ;; gpm-Linux package. It uses the program "mev" to get mouse events.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
22 ;; It tries to reproduce the functionality offered by emacs under X.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
23 ;; The "gpm" server runs under Linux, so this package is rather
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
24 ;; Linux-dependent.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
25
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
26 ;; Developed for GNU Emacs 19.34, likely won't work with many others
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
27 ;; too much internals dependent cruft here.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
28
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
29
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
30 (require 'advice)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
31
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
32 (defvar t-mouse-process nil
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
33 "Embeds the process which passes mouse events to emacs.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
34 It is used by the program t-mouse.")
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
35
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
36 (defvar t-mouse-filter-accumulator ""
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
37 "Accumulates input from the mouse reporting process.")
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
38
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
39 (defvar t-mouse-debug-buffer nil
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
40 "Events normally posted to command queue are printed here in debug mode.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
41 See `t-mouse-start-debug'.")
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
42
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
43 (defvar t-mouse-current-xy '(0 . 0)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
44 "Stores the last mouse position t-mouse has been told about.")
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
45
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
46 (defvar t-mouse-drag-start nil
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
47 "Whenever a drag starts in a special part of a window
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
48 (not the text), the `translated' starting coordinates including the
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
49 window and part involved are saved here. This is necessary lest they
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
50 get re-translated when the button goes up, at which time window
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
51 configuration may have changed.")
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
52
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
53 (defvar t-mouse-prev-set-selection-function 'x-set-selection)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
54 (defvar t-mouse-prev-get-selection-function 'x-get-selection)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
55
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
56 (defvar t-mouse-swap-alt-keys nil
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
57 "When set, Emacs will handle mouse events with the right Alt
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
58 (a.k.a. Alt-Ger) modifier, not with the regular left Alt modifier.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
59 Useful for people who play strange games with their keyboard tables.")
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
60
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
61 (defvar t-mouse-fix-21 nil
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
62 "Enable brain-dead chords for 2 button mice.")
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
63
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
64
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
65 ;;; Code:
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
66
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
67 ;; get the number of the current virtual console
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
68
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
69 (defun t-mouse-tty ()
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
70 "Returns number of virtual terminal Emacs is running on, as a string.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
71 For example, \"2\" for /dev/tty2."
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
72 (let ((buffer (generate-new-buffer "*t-mouse*")))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
73 (call-process "ps" nil buffer nil "h" (format "%s" (emacs-pid)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
74 (prog1 (save-excursion
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
75 (set-buffer buffer)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
76 (goto-char (point-min))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
77 (if (or
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
78 ;; Many versions of "ps", all different....
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
79 (re-search-forward " +tty\\(.?[0-9a-f]\\)" nil t)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
80 (re-search-forward "p \\([0-9a-f]\\)" nil t)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
81 (re-search-forward "v0\\([0-9a-f]\\)" nil t)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
82 (re-search-forward "[0-9]+ +\\([0-9]+\\)" nil t)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
83 (re-search-forward "[\\t ]*[0-9]+[\\t ]+\\([0-9]+\\)" nil t))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
84 (buffer-substring (match-beginning 1) (match-end 1))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
85 (kill-buffer buffer))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
86
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
87
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
88 ;; due to a horrible kludge in Emacs' keymap handler
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
89 ;; (read_key_sequence) mouse clicks on funny parts of windows generate
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
90 ;; TWO events, the first being a dummy of the sort '(mode-line).
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
91 ;; That's why Per Abrahamsen's code in xt-mouse.el doesn't work for
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
92 ;; the modeline, for instance.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
93
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
94 ;; now get this: the Emacs C code that generates these fake events
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
95 ;; depends on certain things done by the very lowest level input
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
96 ;; handlers; namely the symbols for the events (for instance
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
97 ;; 'C-S-double-mouse-2) must have an 'event-kind property, set to
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
98 ;; 'mouse-click. Since events from unread-command-events do not pass
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
99 ;; through the low level handlers, they don't get this property unless
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
100 ;; I set it myself. I imagine this has caused innumerable attempts by
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
101 ;; hackers to do things similar to t-mouse to lose.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
102
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
103 ;; The next page of code is devoted to fixing this ugly problem.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
104
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
105 ;; WOW! a fully general powerset generator
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
106 ;; (C) Ian Zimmerman Mon Mar 23 12:00:16 PST 1998 :-)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
107 (defun t-mouse-powerset (l)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
108 (if (null l) '(nil)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
109 (let ((l1 (t-mouse-powerset (cdr l)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
110 (first (nth 0 l)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
111 (append
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
112 (mapcar (function (lambda (l) (cons first l))) l1) l1))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
113
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
114 ;; and a slightly less general cartesian product
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
115 (defun t-mouse-cartesian (l1 l2)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
116 (if (null l1) l2
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
117 (append (mapcar (function (lambda (x) (append (nth 0 l1) x))) l2)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
118 (t-mouse-cartesian (cdr l1) l2))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
119
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
120 (let* ((modifier-sets (t-mouse-powerset '(control meta shift)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
121 (typed-sets (t-mouse-cartesian '((down) (drag))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
122 '((mouse-1) (mouse-2) (mouse-3))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
123 (multipled-sets (t-mouse-cartesian '((double) (triple)) typed-sets))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
124 (all-sets (t-mouse-cartesian modifier-sets multipled-sets)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
125 (while all-sets
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
126 (let ((event-sym (event-convert-list (nth 0 all-sets))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
127 (if (not (get event-sym 'event-kind))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
128 (put event-sym 'event-kind 'mouse-click)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
129 (setq all-sets (cdr all-sets))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
130
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
131
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
132 ;;; This fun is partly Copyright (C) 1994 Per Abrahamsen <abraham@iesd.auc.dk>
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
133 ;; This is basically a feeble attempt to mimic what the c function
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
134 ;; buffer_posn_from_coords in dispnew.c does. I wish that function
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
135 ;; were exported to Lisp.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
136
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
137 (defun t-mouse-lispy-buffer-posn-from-coords (w col line)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
138 "Return buffer position of character at COL and LINE within window W.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
139 COL and LINE are glyph coordinates, relative to W topleft corner."
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
140 (save-window-excursion
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
141 (select-window w)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
142 (save-excursion
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
143 (move-to-window-line line)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
144 (move-to-column (+ col (current-column)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
145 (if (not (window-minibuffer-p w)) 0
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
146 (- (minibuffer-prompt-width)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
147 (max 0 (1- (window-hscroll)))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
148 (point))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
149
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
150 ;; compute one element of the form (WINDOW BUFFERPOS (COL . ROW) TIMESTAMP)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
151
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
152 (defun t-mouse-make-event-element (x-dot-y-avec-time)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
153 (let* ((x-dot-y (nth 0 x-dot-y-avec-time))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
154 (x (car x-dot-y))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
155 (y (cdr x-dot-y))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
156 (timestamp (nth 1 x-dot-y-avec-time))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
157 (w (window-at x y))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
158 (left-top-right-bottom (window-edges w))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
159 (left (nth 0 left-top-right-bottom))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
160 (top (nth 1 left-top-right-bottom))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
161 (right (nth 2 left-top-right-bottom))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
162 (bottom (nth 3 left-top-right-bottom))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
163 (coords-or-part (coordinates-in-window-p x-dot-y w)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
164 (cond
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
165 ((consp coords-or-part)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
166 (let ((wx (car coords-or-part)) (wy (cdr coords-or-part)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
167 (if (< wx (- right left 1))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
168 (list w
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
169 (t-mouse-lispy-buffer-posn-from-coords w wx wy)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
170 coords-or-part timestamp)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
171 (list w 'vertical-scroll-bar
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
172 (cons (1+ wy) (- bottom top)) timestamp))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
173 ((eq coords-or-part 'mode-line)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
174 (list w 'mode-line (cons (- x left) 0) timestamp))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
175 ((eq coords-or-part 'vertical-line)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
176 (list w 'vertical-line (cons 0 (- y top)) timestamp)))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
177
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
178 ;;; This fun is partly Copyright (C) 1994 Per Abrahamsen <abraham@iesd.auc.dk>
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
179
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
180 (defun t-mouse-make-event ()
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
181 "Makes a Lisp style event from the contents of mouse input accumulator.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
182 Also trims the accumulator by all the data used to build the event."
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
183 (let (ob (ob-pos (condition-case nil
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
184 (read-from-string t-mouse-filter-accumulator)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
185 (error nil))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
186 (if (not ob-pos) nil
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
187 (setq ob (car ob-pos))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
188 (setq t-mouse-filter-accumulator
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
189 (substring t-mouse-filter-accumulator (cdr ob-pos)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
190
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
191 ;;now the real work
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
192
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
193 (let ((event-type (nth 0 ob))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
194 (current-xy-avec-time (nth 1 ob))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
195 (type-switch (length ob)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
196
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
197 (if t-mouse-fix-21
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
198 (let
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
199 ;;Acquire the event's symbol's name.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
200 ((event-name-string (symbol-name event-type))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
201 end-of-root-event-name
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
202 new-event-name-string)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
203
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
204 (if (string-match "-\\(21\\|\\12\\)$" event-name-string)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
205
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
206 ;;Transform the name to what it should have been.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
207 (progn
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
208 (setq end-of-root-event-name (match-beginning 0))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
209 (setq new-event-name-string
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
210 (concat (substring
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
211 event-name-string 0
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
212 end-of-root-event-name) "-3"))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
213
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
214 ;;Change the event to the symbol that corresponds to the
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
215 ;;name we made. The proper symbol already exists.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
216 (setq event-type
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
217 (intern new-event-name-string))))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
218
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
219 ;;store current position for mouse-position
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
220
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
221 (setq t-mouse-current-xy (nth 0 current-xy-avec-time))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
222
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
223 ;;events have many types but fortunately they differ in length
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
224
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
225 (cond
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
226 ;;sink all events on the stupid text mode menubar.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
227 ((and menu-bar-mode (eq 0 (cdr t-mouse-current-xy))) nil)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
228 ((= type-switch 4) ;must be drag
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
229 (let ((count (nth 2 ob))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
230 (start-element
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
231 (or t-mouse-drag-start
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
232 (t-mouse-make-event-element (nth 3 ob))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
233 (end-element
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
234 (t-mouse-make-event-element current-xy-avec-time)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
235 (setq t-mouse-drag-start nil)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
236 (list event-type start-element end-element count)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
237 ((= type-switch 3) ;down or up
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
238 (let ((count (nth 2 ob))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
239 (element
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
240 (t-mouse-make-event-element current-xy-avec-time)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
241 (if (and (not t-mouse-drag-start)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
242 (symbolp (nth 1 element)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
243 ;; OUCH! GOTCHA! emacs uses setc[ad]r on these!
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
244 (setq t-mouse-drag-start (copy-sequence element))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
245 (setq t-mouse-drag-start nil))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
246 (list event-type element count)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
247 ((= type-switch 2) ;movement
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
248 (list (if (eq 'vertical-scroll-bar
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
249 (nth 1 t-mouse-drag-start)) 'scroll-bar-movement
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
250 'mouse-movement)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
251 (t-mouse-make-event-element current-xy-avec-time))))))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
252
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
253
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
254 (defun t-mouse-process-filter (proc string)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
255 (setq t-mouse-filter-accumulator
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
256 (concat t-mouse-filter-accumulator string))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
257 (let ((event (t-mouse-make-event)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
258 (while event
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
259 (if (or track-mouse
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
260 (not (eq 'mouse-movement (event-basic-type event))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
261 (setq unread-command-events
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
262 (nconc unread-command-events (list event))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
263 (if t-mouse-debug-buffer
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
264 (print unread-command-events t-mouse-debug-buffer))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
265 (setq event (t-mouse-make-event)))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
266
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
267
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
268 ;; this overrides a C function which stupidly assumes (no X => no mouse)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
269 (defadvice mouse-position (around t-mouse-mouse-position activate)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
270 "Return the t-mouse-position unless running with a window system.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
271 The (secret) scrollbar interface is not implemented yet."
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
272 (if (not window-system)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
273 (setq ad-return-value
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
274 (cons (selected-frame) t-mouse-current-xy))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
275 ad-do-it))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
276
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
277 (setq mouse-sel-set-selection-function
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
278 (function (lambda (type value)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
279 (if (not window-system)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
280 (if (eq 'PRIMARY type) (kill-new value))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
281 (funcall t-mouse-prev-set-selection-function
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
282 type value)))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
283
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
284 (setq mouse-sel-get-selection-function
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
285 (function (lambda (type)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
286 (if (not window-system)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
287 (if (eq 'PRIMARY type)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
288 (current-kill 0) "")
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
289 (funcall t-mouse-prev-get-selection-function type)))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
290
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
291 ;; It should be possible to just send SIGTSTP to the inferior with
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
292 ;; stop-process. That doesn't work; mev receives the signal fine but
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
293 ;; is not really stopped: instead it returns from
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
294 ;; kill(getpid(), SIGTSTP) immediately. I don't understand what's up
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
295 ;; itz Tue Mar 24 14:27:38 PST 1998.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
296
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
297 (add-hook 'suspend-hook
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
298 (function (lambda ()
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
299 (and t-mouse-process
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
300 ;(stop-process t-mouse-process)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
301 (process-send-string
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
302 t-mouse-process "push -enone -dall -Mnone\n")))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
303
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
304 (add-hook 'suspend-resume-hook
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
305 (function (lambda ()
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
306 (and t-mouse-process
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
307 ;(continue-process t-mouse-process)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
308 (process-send-string t-mouse-process "pop\n")))))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
309
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
310
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
311 ;;; User commands
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
312
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
313 (defun t-mouse-stop ()
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
314 "Stop getting mouse events from an asynchronous process."
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
315 (interactive)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
316 (delete-process t-mouse-process)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
317 (setq t-mouse-process nil))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
318
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
319 (defun t-mouse-run ()
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
320 "Starts getting a stream of mouse events from an asynchronous process.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
321 Only works if Emacs is running on a virtual terminal without a window system.
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
322 Returns the newly created asynchronous process."
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
323 (interactive)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
324 (let ((tty (t-mouse-tty))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
325 (process-connection-type t))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
326 (if (or window-system (not (stringp tty)))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
327 (error "Run t-mouse on a virtual terminal without a window system"))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
328 (setq t-mouse-process
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
329 (start-process "t-mouse" nil
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
330 "mev" "-i" "-E" "-C" tty
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
331 (if t-mouse-swap-alt-keys
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
332 "-M-leftAlt" "-M-rightAlt")
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
333 "-e-move" "-dall" "-d-hard"
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
334 "-f")))
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
335 (setq t-mouse-filter-accumulator "")
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
336 (set-process-filter t-mouse-process 't-mouse-process-filter)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
337 (process-kill-without-query t-mouse-process)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
338 t-mouse-process)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
339
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
340 (provide 't-mouse)
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
341
ee54b3a792ff This version does *not* work with Emacs 22.
Nick Roberts <nickrob@snap.net.nz>
parents:
diff changeset
342 ;;; t-mouse.el ends here