annotate lisp/emacs-lisp/levents.el @ 18092:8428d56cd207

(smtpmail-via-smtp): Recognize XVRB as a synonym for VERB and XONE as a synonym for ONEX. (smtpmail-read-response): Add "%s" to `message' calls to avoid problems with percent signs in strings. (smtpmail-read-response): Return all lines of the response text as a list of strings. Formerly only the first line was returned. This is insufficient when one wants to parse e.g. an EHLO response. Ignore responses starting with "0". This is necessary to support the VERB SMTP extension. (smtpmail-via-smtp): Try EHLO and find out which SMTP service extensions the receiving mailer supports. Issue the ONEX and XUSR commands if the corresponding extensions are supported. Issue VERB if supported and `smtpmail-debug-info' is non-nil. Add SIZE attribute to MAIL FROM: command if SIZE extension is supported. Add code that could set the BODY= attribute to MAIL FROM: if the receiving mailer supports 8BITMIME. This is currently disabled, since doing it right might involve adding MIME headers to, and in some cases reencoding, the message.
author Richard M. Stallman <rms@gnu.org>
date Sun, 01 Jun 1997 22:24:22 +0000
parents 02b656fa8243
children 11218164bc54
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2232
4f9d60f7de9d Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2066
diff changeset
1 ;;; levents.el --- emulate the Lucid event data type and associated functions.
4f9d60f7de9d Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2066
diff changeset
2
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 1993 Free Software Foundation, Inc.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;; This file is part of GNU Emacs.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; GNU Emacs is free software; you can redistribute it and/or modify
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; 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
9 ;; the Free Software Foundation; either version 2, or (at your option)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; any later version.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is distributed in the hope that it will be useful,
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; GNU General Public License for more details.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; 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
18 ;; 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
19 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12951
diff changeset
20 ;; Boston, MA 02111-1307, USA.
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
2232
4f9d60f7de9d Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2066
diff changeset
22 ;;; Commentary:
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; Things we cannot emulate in Lisp:
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;; It is not possible to emulate current-mouse-event as a variable,
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;; 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
27
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;; We do not have a variable unread-command-event;
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; instead, we have the more general unread-command-events.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30
2039
e062b4567dc6 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2034
diff changeset
31 ;; Our read-key-sequence and read-char are not precisely
e062b4567dc6 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2034
diff changeset
32 ;; compatible with those in Lucid Emacs, but they should work ok.
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;;; Code:
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35
2057
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
36 (defun next-command-event (event)
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
37 (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
38
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
39 (defun next-event (event)
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
40 (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
41
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
42 (defun dispatch-event (event)
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
43 (error "`dispatch-event' not supported"))
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
44
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;; Make events of type eval, menu and timeout
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;; execute properly.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 (define-key global-map [menu] 'execute-eval-event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 (define-key global-map [timeout] 'execute-eval-event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 (define-key global-map [eval] 'execute-eval-event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 (defun execute-eval-event (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 (interactive "e")
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 (funcall (nth 1 event) (nth 2 event)))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 (put 'eval 'event-symbol-elements '(eval))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 (put 'menu 'event-symbol-elements '(eval))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 (put 'timeout 'event-symbol-elements '(eval))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 (defun allocate-event ()
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 "Returns an empty event structure.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 In this emulation, it returns nil."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 nil)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 (defun button-press-event-p (obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 "True if the argument is a mouse-button-press event object."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 (and (consp obj) (symbolp (car obj))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 (memq 'down (get (car obj) 'event-symbol-elements))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 (defun button-release-event-p (obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 "True if the argument is a mouse-button-release event object."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 (and (consp obj) (symbolp (car obj))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 (or (memq 'click (get (car obj) 'event-symbol-elements))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 (memq 'drag (get (car obj) 'event-symbol-elements)))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75
17858
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
76 (defun button-event-p (obj)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
77 "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
78 (and (consp obj) (symbolp (car obj))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
79 (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
80 (memq 'down (get (car obj) 'event-symbol-elements))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
81 (memq 'drag (get (car obj) 'event-symbol-elements)))))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
82
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
83 (defun mouse-event-p (obj)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
84 "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
85 (and (consp obj) (symbolp (car obj))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
86 (or (eq (car obj) 'mouse-movement)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
87 (memq 'click (get (car obj) 'event-symbol-elements))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
88 (memq 'down (get (car obj) 'event-symbol-elements))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
89 (memq 'drag (get (car obj) 'event-symbol-elements)))))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
90
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 (defun character-to-event (ch &optional event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 "Converts a numeric ASCII value to an event structure, replete with
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 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
94 in is the second. This function contains knowledge about what the codes
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 mean -- for example, the number 9 is converted to the character Tab,
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 not the distinct character Control-I.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 Beware that character-to-event and event-to-character are not strictly
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 inverse functions, since events contain much more information than the
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 ASCII character set can encode."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 ch)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 (defun copy-event (event1 &optional event2)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 "Make a copy of the given event object.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 In this emulation, `copy-event' just returns its argument."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 event1)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 (defun deallocate-event (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 "Allow the given event structure to be reused.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 In actual Lucid Emacs, you MUST NOT use this event object after
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 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
112 call this function, as event objects are garbage- collected like all
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 other objects; however, it may be more efficient to explicitly
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 deallocate events when you are sure that that is safe.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 This emulation does not actually deallocate or reuse events
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 except via garbage collection and `cons'."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 nil)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 (defun enqueue-eval-event: (function object)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 "Add an eval event to the back of the queue.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 It will be the next event read after all pending events."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 (setq unread-command-events
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 (nconc unread-command-events
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 (list (list 'eval function object)))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 (defun eval-event-p (obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 "True if the argument is an eval or menu event object."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 (eq (car-safe obj) 'eval))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 (defun event-button (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 "Return the button-number of the given mouse-button-press event."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 (let ((sym (car (get (car event) 'event-symbol-elements))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 (cdr (assq sym '((mouse-1 . 1) (mouse-2 . 2) (mouse-3 . 3)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 (mouse-4 . 4) (mouse-5 . 5))))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 (defun event-function (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 "Return the callback function of the given timeout, menu, or eval event."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 (nth 1 event))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 (defun event-key (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 "Returns the KeySym of the given key-press event.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 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
144 (if (symbolp event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 (car (get event 'event-symbol-elements))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 (let ((base (logand event (1- (lsh 1 18)))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 (downcase (if (< base 32) (logior base 64) base)))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 (defun event-object (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 "Returns the function argument of the given timeout, menu, or eval event."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 (nth 2 event))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 (defun event-point (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 "Returns the character position of the given mouse-related event.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 If the event did not occur over a window, or did
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 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
157 into the buffer visible in the event's window."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 (posn-point (event-end event)))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159
17858
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
160 ;; 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
161 ;; If LINE is nil, return the last position
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
162 ;; visible in WINDOW.
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
163 (defun event-closest-point-1 (window &optional line)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
164 (let* ((total (- (window-height window)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
165 (if (window-minibuffer-p window)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
166 0 1)))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
167 (distance (or line total)))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
168 (save-excursion
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
169 (goto-char (window-start window))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
170 (if (= (vertical-motion distance) distance)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
171 (if (not line)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
172 (forward-char -1)))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
173 (point))))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
174
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
175 (defun event-closest-point (event &optional start-window)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
176 "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
177 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
178 or for window WINDOW if that is specified."
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
179 (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
180 (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
181 (if (eq (event-point event) 'vertical-line)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
182 (event-closest-point-1 start-window
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
183 (cdr (posn-col-row (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) 'mode-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 (event-point event)))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
187 ;; EVENT ended in some other window.
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
188 (let* ((end-w (posn-window (event-end event)))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
189 (end-w-top)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
190 (w-top (nth 1 (window-edges start-window))))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
191 (setq end-w-top
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
192 (if (windowp end-w)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
193 (nth 1 (window-edges end-w))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
194 (/ (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
195 (frame-char-height end-w))))
17858
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
196 (if (>= end-w-top w-top)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
197 (event-closest-point-1 start-window)
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
198 (window-start start-window)))))
72e538330a11 (event-closest-point): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14704
diff changeset
199
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 (defun event-process (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 "Returns the process of the given process-output event."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 (nth 1 event))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 (defun event-timestamp (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 "Returns the timestamp of the given event object.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 In Lucid Emacs, this works for any kind of event.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 In this emulation, it returns nil for non-mouse-related events."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 (and (listp event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 (posn-timestamp (event-end event))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (defun event-to-character (event &optional lenient)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 "Returns the closest ASCII approximation to the given event object.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 If the event isn't a keypress, this returns nil.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 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
215 translation; it will ignore modifier keys other than control and meta,
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 and will ignore the shift modifier on those characters which have no
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 shifted ASCII equivalent (Control-Shift-A for example, will be mapped to
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 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
219 will be returned for events which have no direct ASCII equivalent."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 (if (symbolp event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 (and lenient
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 (cdr (assq event '((backspace . 8) (delete . 127) (tab . 9)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 (return . 10) (enter . 10)))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 ;; Our interpretation is, ASCII means anything a number can represent.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 (if (integerp event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 event nil)))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 (defun event-window (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 "Returns the window of the given mouse-related event object."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 (posn-window (event-end event)))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 (defun event-x (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 "Returns the X position in characters of the given mouse-related event."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 (/ (car (posn-col-row (event-end event)))
2066
9b4cb6b6d474 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2057
diff changeset
235 (frame-char-width (window-frame (event-window event)))))
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 (defun event-x-pixel (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 "Returns the X position in pixels of the given mouse-related event."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 (car (posn-col-row (event-end event))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 (defun event-y (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 "Returns the Y position in characters of the given mouse-related event."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 (/ (cdr (posn-col-row (event-end event)))
2066
9b4cb6b6d474 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2057
diff changeset
244 (frame-char-height (window-frame (event-window event)))))
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 (defun event-y-pixel (event)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 "Returns the Y position in pixels of the given mouse-related event."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 (cdr (posn-col-row (event-end event))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 (defun key-press-event-p (obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 "True if the argument is a keyboard event object."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 (or (integerp obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 (and (symbolp obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 (get obj 'event-symbol-elements))))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 (defun menu-event-p (obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 "True if the argument is a menu event object."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 (eq (car-safe obj) 'menu))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 (defun motion-event-p (obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 "True if the argument is a mouse-motion event object."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 (eq (car-safe obj) 'mouse-movement))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263
2057
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
264 (defun read-command-event ()
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
265 "Return the next keyboard or mouse event; execute other events.
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
266 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
267 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
268 an existing event object."
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
269 (let (event)
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
270 (while (progn
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
271 (setq event (read-event))
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
272 (not (or (key-press-event-p event)
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
273 (button-press-event-p event)
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
274 (button-release-event-p event)
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
275 (menu-event-p event))))
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
276 (let ((type (car-safe event)))
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
277 (cond ((eq type 'eval)
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
278 (funcall (nth 1 event) (nth 2 event)))
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
279 ((eq type 'switch-frame)
2957
ec432bd5d5b9 (event-modifiers): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents: 2232
diff changeset
280 (select-frame (nth 1 event))))))
2057
265b81ff7eee *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2039
diff changeset
281 event))
2034
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 (defun process-event-p (obj)
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 "True if the argument is a process-output event object.
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 GNU Emacs 19 does not currently generate process-output events."
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 (eq (car-safe obj) 'process))
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287
8f940ad51dd0 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 ;;; levents.el ends here