comparison lisp/emacs-lisp/levents.el @ 17858:72e538330a11

(event-closest-point): New function. (event-closest-point-1): New subroutine. (mouse-event-p, button-event-p): New functions.
author Richard M. Stallman <rms@gnu.org>
date Sat, 17 May 1997 18:38:17 +0000
parents 6dbe9f47c0a1
children 02b656fa8243
comparison
equal deleted inserted replaced
17857:c39f34ef5d76 17858:72e538330a11
69 69
70 (defun button-release-event-p (obj) 70 (defun button-release-event-p (obj)
71 "True if the argument is a mouse-button-release event object." 71 "True if the argument is a mouse-button-release event object."
72 (and (consp obj) (symbolp (car obj)) 72 (and (consp obj) (symbolp (car obj))
73 (or (memq 'click (get (car obj) 'event-symbol-elements)) 73 (or (memq 'click (get (car obj) 'event-symbol-elements))
74 (memq 'drag (get (car obj) 'event-symbol-elements)))))
75
76 (defun button-event-p (obj)
77 "True if the argument is a mouse-button press or release event object."
78 (and (consp obj) (symbolp (car obj))
79 (or (memq 'click (get (car obj) 'event-symbol-elements))
80 (memq 'down (get (car obj) 'event-symbol-elements))
81 (memq 'drag (get (car obj) 'event-symbol-elements)))))
82
83 (defun mouse-event-p (obj)
84 "True if the argument is a mouse-button press or release event object."
85 (and (consp obj) (symbolp (car obj))
86 (or (eq (car obj) 'mouse-movement)
87 (memq 'click (get (car obj) 'event-symbol-elements))
88 (memq 'down (get (car obj) 'event-symbol-elements))
74 (memq 'drag (get (car obj) 'event-symbol-elements))))) 89 (memq 'drag (get (car obj) 'event-symbol-elements)))))
75 90
76 (defun character-to-event (ch &optional event) 91 (defun character-to-event (ch &optional event)
77 "Converts a numeric ASCII value to an event structure, replete with 92 "Converts a numeric ASCII value to an event structure, replete with
78 bucky bits. The character is the first argument, and the event to fill 93 bucky bits. The character is the first argument, and the event to fill
139 "Returns the character position of the given mouse-related event. 154 "Returns the character position of the given mouse-related event.
140 If the event did not occur over a window, or did 155 If the event did not occur over a window, or did
141 not occur over text, then this returns nil. Otherwise, it returns an index 156 not occur over text, then this returns nil. Otherwise, it returns an index
142 into the buffer visible in the event's window." 157 into the buffer visible in the event's window."
143 (posn-point (event-end event))) 158 (posn-point (event-end event)))
159
160 ;; Return position of start of line LINE in WINDOW.
161 ;; If LINE is nil, return the last position
162 ;; visible in WINDOW.
163 (defun event-closest-point-1 (window &optional line)
164 (let* ((total (- (window-height window)
165 (if (window-minibuffer-p window)
166 0 1)))
167 (distance (or line total)))
168 (save-excursion
169 (goto-char (window-start window))
170 (if (= (vertical-motion distance) distance)
171 (if (not line)
172 (forward-char -1)))
173 (point))))
174
175 (defun event-closest-point (event &optional start-window)
176 "Return the nearest position to where EVENT ended its motion.
177 This is computed for the window where EVENT's motion started,
178 or for window WINDOW if that is specified."
179 (or start-window (setq start-window (posn-window (event-start event))))
180 (if (eq start-window (posn-window (event-end event)))
181 (if (eq (event-point event) 'vertical-line)
182 (event-closest-point-1 start-window
183 (cdr (posn-col-row (event-end event))))
184 (if (eq (event-point event) 'mode-line)
185 (event-closest-point-1 start-window)
186 (event-point event)))
187 ;; EVENT ended in some other window.
188 (let* ((end-w (posn-window (event-end event)))
189 (end-w-top)
190 (w-top (nth 1 (window-edges start-window))))
191 (setq end-w-top
192 (if (windowp end-w)
193 (nth 1 (window-edges end-w))
194 (/ (cdr (posn-x-y (event-end event)))
195 ((frame-char-height end-w)))))
196 (if (>= end-w-top w-top)
197 (event-closest-point-1 start-window)
198 (window-start start-window)))))
144 199
145 (defun event-process (event) 200 (defun event-process (event)
146 "Returns the process of the given process-output event." 201 "Returns the process of the given process-output event."
147 (nth 1 event)) 202 (nth 1 event))
148 203