annotate lisp/emacs-lisp/levents.el @ 42829:07bd6e693cb6

(easy-mmode-defmap): Enable "Up Stack", "Down Stack", and "Finish Function" menu map entries for jdb mode. (gud-jdb-use-classpath): New customization variable. (gud-jdb-command-name): Add customization. (gud-jdb-classpath, gud-marker-acc-max-length): New variables. (gud-jdb-classpath-string): New variable. (gud-jdb-source-files, gud-jdb-class-source-alist): Add doc strings. (gud-jdb-build-source-files-list): Likewise. (gud-jdb-massage-args): Record any command argument classpath string in `gud-jdb-classpath-string'. (gud-jdb-lowest-stack-level): New function, finds bottom of current java call stack in jdb output. (gud-jdb-find-source-using-classpath, gud-jdb-find-source) (gud-jdb-parse-classpath-string): New functions. (gud-jdb-marker-filter): Search/detect classpath information in jdb's output. marker regexp updated to match oldjdb and jdb output formats. Expand search for source files to include new/old methods using new functions above. Do not allow `gud-marker-acc' to grow without bound. (jdb): Set classpath information (if available) as jdb is started. Change `gud-break' and `gud-remove' to use new %c ("class") escape in format strings. Add `gud-finish', `gud-up', `gud-down' command string functions, and add them to the local menu map. Update `comint-prompt-regexp' for jdb and oldjdb. If attaching to an already running java VM and configured to use classpath, send command to query for classpath, else use previous method for finding and parsing java sources. Set `gud-jdb-find-source' function accordingly. (gud-mode): Doc fix. (gud-format-command): Add support for new %c ("class") escape. (gud-find-class): New function in support of %c escape.
author Richard M. Stallman <rms@gnu.org>
date Fri, 18 Jan 2002 18:57:20 +0000
parents abd085bfec0c
children 0d8b17d428b5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38414
67b464da13ec Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 18383
diff changeset
1 ;;; levents.el --- emulate the Lucid event data type and associated functions
2232
4f9d60f7de9d Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2066
diff changeset
2
39117
abd085bfec0c Add Keywords header.
Gerd Moellmann <gerd@gnu.org>
parents: 38961
diff changeset
3 ;; Copyright (C) 1993, 2001 Free Software Foundation, Inc.
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
38961
5b23575286e6 Add the Maintainer keyword. From Pavel Janik.
Eli Zaretskii <eliz@gnu.org>
parents: 38414
diff changeset
5 ;; Maintainer: FSF
39117
abd085bfec0c Add Keywords header.
Gerd Moellmann <gerd@gnu.org>
parents: 38961
diff changeset
6 ;; Keywords: emulations
38961
5b23575286e6 Add the Maintainer keyword. From Pavel Janik.
Eli Zaretskii <eliz@gnu.org>
parents: 38414
diff changeset
7
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
8f940ad51dd0 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
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; any later version.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19
8f940ad51dd0 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: 12951
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: 12951
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12951
diff changeset
23 ;; Boston, MA 02111-1307, USA.
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
2232
4f9d60f7de9d Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2066
diff changeset
25 ;;; Commentary:
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;; Things we cannot emulate in Lisp:
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;; It is not possible to emulate current-mouse-event as a variable,
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; though it is not hard to obtain the data from (this-command-keys).
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; We do not have a variable unread-command-event;
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; instead, we have the more general unread-command-events.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33
2039
e062b4567dc6 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2034
diff changeset
34 ;; Our read-key-sequence and read-char are not precisely
e062b4567dc6 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2034
diff changeset
35 ;; compatible with those in Lucid Emacs, but they should work ok.
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;;; Code:
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38
2057
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
39 (defun next-command-event (event)
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
40 (error "You must rewrite to use `read-command-event' instead of `next-command-event'"))
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
41
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
42 (defun next-event (event)
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
43 (error "You must rewrite to use `read-event' instead of `next-event'"))
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
44
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
45 (defun dispatch-event (event)
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
46 (error "`dispatch-event' not supported"))
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
47
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;; Make events of type eval, menu and timeout
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ;; execute properly.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 (define-key global-map [menu] 'execute-eval-event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 (define-key global-map [timeout] 'execute-eval-event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 (define-key global-map [eval] 'execute-eval-event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 (defun execute-eval-event (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 (interactive "e")
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 (funcall (nth 1 event) (nth 2 event)))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 (put 'eval 'event-symbol-elements '(eval))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 (put 'menu 'event-symbol-elements '(eval))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 (put 'timeout 'event-symbol-elements '(eval))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 (defun allocate-event ()
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 "Returns an empty event structure.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 In this emulation, it returns nil."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 nil)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 (defun button-press-event-p (obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 "True if the argument is a mouse-button-press event object."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 (and (consp obj) (symbolp (car obj))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 (memq 'down (get (car obj) 'event-symbol-elements))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 (defun button-release-event-p (obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 "True if the argument is a mouse-button-release event object."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 (and (consp obj) (symbolp (car obj))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 (or (memq 'click (get (car obj) 'event-symbol-elements))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 (memq 'drag (get (car obj) 'event-symbol-elements)))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78
17858
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
79 (defun button-event-p (obj)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
80 "True if the argument is a mouse-button press or release event object."
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
81 (and (consp obj) (symbolp (car obj))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
82 (or (memq 'click (get (car obj) 'event-symbol-elements))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
83 (memq 'down (get (car obj) 'event-symbol-elements))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
84 (memq 'drag (get (car obj) 'event-symbol-elements)))))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
85
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
86 (defun mouse-event-p (obj)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
87 "True if the argument is a mouse-button press or release event object."
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
88 (and (consp obj) (symbolp (car obj))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
89 (or (eq (car obj) 'mouse-movement)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
90 (memq 'click (get (car obj) 'event-symbol-elements))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
91 (memq 'down (get (car obj) 'event-symbol-elements))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
92 (memq 'drag (get (car obj) 'event-symbol-elements)))))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
93
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 (defun character-to-event (ch &optional event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 "Converts a numeric ASCII value to an event structure, replete with
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 bucky bits. The character is the first argument, and the event to fill
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 in is the second. This function contains knowledge about what the codes
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 mean -- for example, the number 9 is converted to the character Tab,
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 not the distinct character Control-I.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 Beware that character-to-event and event-to-character are not strictly
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 inverse functions, since events contain much more information than the
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 ASCII character set can encode."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 ch)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 (defun copy-event (event1 &optional event2)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 "Make a copy of the given event object.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 In this emulation, `copy-event' just returns its argument."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 event1)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 (defun deallocate-event (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 "Allow the given event structure to be reused.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 In actual Lucid Emacs, you MUST NOT use this event object after
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 calling this function with it. You will lose. It is not necessary to
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 call this function, as event objects are garbage- collected like all
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 other objects; however, it may be more efficient to explicitly
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 deallocate events when you are sure that that is safe.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 This emulation does not actually deallocate or reuse events
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 except via garbage collection and `cons'."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 nil)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 (defun enqueue-eval-event: (function object)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 "Add an eval event to the back of the queue.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 It will be the next event read after all pending events."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 (setq unread-command-events
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 (nconc unread-command-events
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 (list (list 'eval function object)))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 (defun eval-event-p (obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 "True if the argument is an eval or menu event object."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 (eq (car-safe obj) 'eval))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 (defun event-button (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 "Return the button-number of the given mouse-button-press event."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 (let ((sym (car (get (car event) 'event-symbol-elements))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 (cdr (assq sym '((mouse-1 . 1) (mouse-2 . 2) (mouse-3 . 3)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 (mouse-4 . 4) (mouse-5 . 5))))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 (defun event-function (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 "Return the callback function of the given timeout, menu, or eval event."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 (nth 1 event))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 (defun event-key (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 "Returns the KeySym of the given key-press event.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 The value is an ASCII printing character (not upper case) or a symbol."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 (if (symbolp event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 (car (get event 'event-symbol-elements))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 (let ((base (logand event (1- (lsh 1 18)))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 (downcase (if (< base 32) (logior base 64) base)))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 (defun event-object (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 "Returns the function argument of the given timeout, menu, or eval event."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 (nth 2 event))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 (defun event-point (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 "Returns the character position of the given mouse-related event.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 If the event did not occur over a window, or did
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 not occur over text, then this returns nil. Otherwise, it returns an index
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 into the buffer visible in the event's window."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 (posn-point (event-end event)))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162
17858
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
163 ;; Return position of start of line LINE in WINDOW.
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
164 ;; If LINE is nil, return the last position
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
165 ;; visible in WINDOW.
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
166 (defun event-closest-point-1 (window &optional line)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
167 (let* ((total (- (window-height window)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
168 (if (window-minibuffer-p window)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
169 0 1)))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
170 (distance (or line total)))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
171 (save-excursion
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
172 (goto-char (window-start window))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
173 (if (= (vertical-motion distance) distance)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
174 (if (not line)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
175 (forward-char -1)))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
176 (point))))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
177
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
178 (defun event-closest-point (event &optional start-window)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
179 "Return the nearest position to where EVENT ended its motion.
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
180 This is computed for the window where EVENT's motion started,
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
181 or for window WINDOW if that is specified."
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
182 (or start-window (setq start-window (posn-window (event-start event))))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
183 (if (eq start-window (posn-window (event-end event)))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
184 (if (eq (event-point event) 'vertical-line)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
185 (event-closest-point-1 start-window
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
186 (cdr (posn-col-row (event-end event))))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
187 (if (eq (event-point event) 'mode-line)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
188 (event-closest-point-1 start-window)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
189 (event-point event)))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
190 ;; EVENT ended in some other window.
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
191 (let* ((end-w (posn-window (event-end event)))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
192 (end-w-top)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
193 (w-top (nth 1 (window-edges start-window))))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
194 (setq end-w-top
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
195 (if (windowp end-w)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
196 (nth 1 (window-edges end-w))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
197 (/ (cdr (posn-x-y (event-end event)))
17897
02b656fa8243 (event-closest-point): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents: 17858
diff changeset
198 (frame-char-height end-w))))
17858
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
199 (if (>= end-w-top w-top)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
200 (event-closest-point-1 start-window)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
201 (window-start start-window)))))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
202
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 (defun event-process (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 "Returns the process of the given process-output event."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 (nth 1 event))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 (defun event-timestamp (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 "Returns the timestamp of the given event object.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 In Lucid Emacs, this works for any kind of event.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 In this emulation, it returns nil for non-mouse-related events."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (and (listp event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 (posn-timestamp (event-end event))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 (defun event-to-character (event &optional lenient)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 "Returns the closest ASCII approximation to the given event object.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 If the event isn't a keypress, this returns nil.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 If the second argument is non-nil, then this is lenient in its
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 translation; it will ignore modifier keys other than control and meta,
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 and will ignore the shift modifier on those characters which have no
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 shifted ASCII equivalent (Control-Shift-A for example, will be mapped to
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 the same ASCII code as Control-A.) If the second arg is nil, then nil
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 will be returned for events which have no direct ASCII equivalent."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 (if (symbolp event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 (and lenient
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 (cdr (assq event '((backspace . 8) (delete . 127) (tab . 9)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 (return . 10) (enter . 10)))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 ;; Our interpretation is, ASCII means anything a number can represent.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 (if (integerp event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 event nil)))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 (defun event-window (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 "Returns the window of the given mouse-related event object."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 (posn-window (event-end event)))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 (defun event-x (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 "Returns the X position in characters of the given mouse-related event."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 (/ (car (posn-col-row (event-end event)))
2066
9b4cb6b6d474 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2057
diff changeset
238 (frame-char-width (window-frame (event-window event)))))
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 (defun event-x-pixel (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 "Returns the X position in pixels of the given mouse-related event."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 (car (posn-col-row (event-end event))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 (defun event-y (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 "Returns the Y position in characters of the given mouse-related event."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 (/ (cdr (posn-col-row (event-end event)))
2066
9b4cb6b6d474 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2057
diff changeset
247 (frame-char-height (window-frame (event-window event)))))
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 (defun event-y-pixel (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 "Returns the Y position in pixels of the given mouse-related event."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 (cdr (posn-col-row (event-end event))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 (defun key-press-event-p (obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 "True if the argument is a keyboard event object."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 (or (integerp obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 (and (symbolp obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 (get obj 'event-symbol-elements))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 (defun menu-event-p (obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 "True if the argument is a menu event object."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 (eq (car-safe obj) 'menu))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 (defun motion-event-p (obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 "True if the argument is a mouse-motion event object."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 (eq (car-safe obj) 'mouse-movement))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266
2057
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
267 (defun read-command-event ()
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
268 "Return the next keyboard or mouse event; execute other events.
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
269 This is similar to the function `next-command-event' of Lucid Emacs,
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
270 but different in that it returns the event rather than filling in
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
271 an existing event object."
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
272 (let (event)
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
273 (while (progn
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
274 (setq event (read-event))
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
275 (not (or (key-press-event-p event)
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
276 (button-press-event-p event)
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
277 (button-release-event-p event)
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
278 (menu-event-p event))))
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
279 (let ((type (car-safe event)))
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
280 (cond ((eq type 'eval)
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
281 (funcall (nth 1 event) (nth 2 event)))
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
282 ((eq type 'switch-frame)
2957
ec432bd5d5b9 (event-modifiers): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 2232
diff changeset
283 (select-frame (nth 1 event))))))
2057
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
284 event))
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 (defun process-event-p (obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 "True if the argument is a process-output event object.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 GNU Emacs 19 does not currently generate process-output events."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 (eq (car-safe obj) 'process))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290
18383
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 17897
diff changeset
291 (provide 'levents)
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 17897
diff changeset
292
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 ;;; levents.el ends here