aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Kangas2019-10-11 02:15:24 +0200
committerStefan Kangas2019-10-11 02:16:11 +0200
commitffb7100750c211f55dd95811675d12a783f15d66 (patch)
tree1a813097e29c8fe1eaf3b952e7f0a71303fd2d6f
parentbb392a9c8dab154cb9c80decf2ce4cf2da80e635 (diff)
downloademacs-ffb7100750c211f55dd95811675d12a783f15d66.tar.gz
emacs-ffb7100750c211f55dd95811675d12a783f15d66.zip
Change font size in correct window using mouse wheel
* lisp/mwheel.el (mouse-wheel-follow-mouse): Doc fix. (mouse-wheel--get-scroll-window): New function extracted from... (mwheel-scroll): ...here. (mouse-wheel-text-scale): New function to change face height in the correct window, depending on the value of 'mouse-wheel-follows-mouse'. (Bug#28182) (mouse-wheel-mode): Bind 'mouse-wheel-text-scale' instead of 'text-scale-increase' and 'text-scale-decrease'.
-rw-r--r--etc/NEWS5
-rw-r--r--lisp/mwheel.el80
2 files changed, 54 insertions, 31 deletions
diff --git a/etc/NEWS b/etc/NEWS
index 3b98ef7d2f5..b680e180043 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -2343,6 +2343,11 @@ To get the old behaviour back, customize the variable
2343(customize-set-variable 'mouse-wheel-scroll-amount 2343(customize-set-variable 'mouse-wheel-scroll-amount
2344 '(5 ((shift) . 1) ((control) . nil))) 2344 '(5 ((shift) . 1) ((control) . nil)))
2345 2345
2346By default, the font size will be changed in the window that the mouse
2347pointer is over. To change this behaviour, you can customize the
2348option 'mouse-wheel-follow-mouse'. Note that this will also affect
2349scrolling.
2350
2346 2351
2347* Lisp Changes in Emacs 27.1 2352* Lisp Changes in Emacs 27.1
2348 2353
diff --git a/lisp/mwheel.el b/lisp/mwheel.el
index 9b67e71886f..e3648d98826 100644
--- a/lisp/mwheel.el
+++ b/lisp/mwheel.el
@@ -137,7 +137,8 @@ of button events."
137 137
138(defcustom mouse-wheel-follow-mouse t 138(defcustom mouse-wheel-follow-mouse t
139 "Whether the mouse wheel should scroll the window that the mouse is over. 139 "Whether the mouse wheel should scroll the window that the mouse is over.
140This can be slightly disconcerting, but some people prefer it." 140This affects both the commands for scrolling and changing the
141face height."
141 :group 'mouse 142 :group 'mouse
142 :type 'boolean) 143 :type 'boolean)
143 144
@@ -210,34 +211,40 @@ This can be slightly disconcerting, but some people prefer it."
210 (intern "mouse-7")) 211 (intern "mouse-7"))
211 "Event used for scrolling right.") 212 "Event used for scrolling right.")
212 213
214(defun mouse-wheel--get-scroll-window (event)
215 "Return window for mouse wheel event EVENT.
216If `mouse-wheel-follow-mouse' is non-nil, return the window that
217the mouse pointer is over. Otherwise, return the currently
218active window."
219 (or (catch 'found
220 (let* ((window (if mouse-wheel-follow-mouse
221 (mwheel-event-window event)
222 (selected-window)))
223 (frame (when (window-live-p window)
224 (frame-parameter
225 (window-frame window) 'mouse-wheel-frame))))
226 (when (frame-live-p frame)
227 (let* ((pos (mouse-absolute-pixel-position))
228 (pos-x (car pos))
229 (pos-y (cdr pos)))
230 (walk-window-tree
231 (lambda (window-1)
232 (let ((edges (window-edges window-1 nil t t)))
233 (when (and (<= (nth 0 edges) pos-x)
234 (<= pos-x (nth 2 edges))
235 (<= (nth 1 edges) pos-y)
236 (<= pos-y (nth 3 edges)))
237 (throw 'found window-1))))
238 frame nil t)))))
239 (mwheel-event-window event)))
240
213(defun mwheel-scroll (event) 241(defun mwheel-scroll (event)
214 "Scroll up or down according to the EVENT. 242 "Scroll up or down according to the EVENT.
215This should be bound only to mouse buttons 4, 5, 6, and 7 on 243This should be bound only to mouse buttons 4, 5, 6, and 7 on
216non-Windows systems." 244non-Windows systems."
217 (interactive (list last-input-event)) 245 (interactive (list last-input-event))
218 (let* ((selected-window (selected-window)) 246 (let* ((selected-window (selected-window))
219 (scroll-window 247 (scroll-window (mouse-wheel--get-scroll-window event))
220 (or (catch 'found
221 (let* ((window (if mouse-wheel-follow-mouse
222 (mwheel-event-window event)
223 (selected-window)))
224 (frame (when (window-live-p window)
225 (frame-parameter
226 (window-frame window) 'mouse-wheel-frame))))
227 (when (frame-live-p frame)
228 (let* ((pos (mouse-absolute-pixel-position))
229 (pos-x (car pos))
230 (pos-y (cdr pos)))
231 (walk-window-tree
232 (lambda (window-1)
233 (let ((edges (window-edges window-1 nil t t)))
234 (when (and (<= (nth 0 edges) pos-x)
235 (<= pos-x (nth 2 edges))
236 (<= (nth 1 edges) pos-y)
237 (<= pos-y (nth 3 edges)))
238 (throw 'found window-1))))
239 frame nil t)))))
240 (mwheel-event-window event)))
241 (old-point 248 (old-point
242 (and (eq scroll-window selected-window) 249 (and (eq scroll-window selected-window)
243 (eq (car-safe transient-mark-mode) 'only) 250 (eq (car-safe transient-mark-mode) 'only)
@@ -322,6 +329,20 @@ non-Windows systems."
322 329
323(put 'mwheel-scroll 'scroll-command t) 330(put 'mwheel-scroll 'scroll-command t)
324 331
332(defun mouse-wheel-text-scale (event)
333 "Increase or decrease the height of the default face according to the EVENT."
334 (interactive (list last-input-event))
335 (let ((selected-window (selected-window))
336 (scroll-window (mouse-wheel--get-scroll-window event))
337 (button (mwheel-event-button event)))
338 (select-window scroll-window 'mark-for-redisplay)
339 (unwind-protect
340 (cond ((eq button mouse-wheel-down-event)
341 (text-scale-increase 1))
342 ((eq button mouse-wheel-up-event)
343 (text-scale-decrease 1)))
344 (select-window selected-window))))
345
325(defvar mwheel-installed-bindings nil) 346(defvar mwheel-installed-bindings nil)
326(defvar mwheel-installed-text-scale-bindings nil) 347(defvar mwheel-installed-text-scale-bindings nil)
327 348
@@ -347,8 +368,7 @@ This is a helper function for `mouse-wheel-mode'."
347 (mouse-wheel--remove-bindings mwheel-installed-bindings 368 (mouse-wheel--remove-bindings mwheel-installed-bindings
348 '(mwheel-scroll)) 369 '(mwheel-scroll))
349 (mouse-wheel--remove-bindings mwheel-installed-text-scale-bindings 370 (mouse-wheel--remove-bindings mwheel-installed-text-scale-bindings
350 '(text-scale-increase 371 '(mouse-wheel-text-scale))
351 text-scale-decrease))
352 (setq mwheel-installed-bindings nil) 372 (setq mwheel-installed-bindings nil)
353 (setq mwheel-installed-text-scale-bindings nil) 373 (setq mwheel-installed-text-scale-bindings nil)
354 ;; Setup bindings as needed. 374 ;; Setup bindings as needed.
@@ -357,12 +377,10 @@ This is a helper function for `mouse-wheel-mode'."
357 (cond 377 (cond
358 ;; Bindings for changing font size. 378 ;; Bindings for changing font size.
359 ((and (consp binding) (eq (cdr binding) 'text-scale)) 379 ((and (consp binding) (eq (cdr binding) 'text-scale))
360 (let ((increase-key `[,(list (caar binding) mouse-wheel-down-event)]) 380 (dolist (event (list mouse-wheel-down-event mouse-wheel-up-event))
361 (decrease-key `[,(list (caar binding) mouse-wheel-up-event)])) 381 (let ((key `[,(list (caar binding) event)]))
362 (global-set-key increase-key 'text-scale-increase) 382 (global-set-key key 'mouse-wheel-text-scale)
363 (global-set-key decrease-key 'text-scale-decrease) 383 (push key mwheel-installed-text-scale-bindings))))
364 (push increase-key mwheel-installed-text-scale-bindings)
365 (push decrease-key mwheel-installed-text-scale-bindings)))
366 ;; Bindings for scrolling. 384 ;; Bindings for scrolling.
367 (t 385 (t
368 (dolist (event (list mouse-wheel-down-event mouse-wheel-up-event 386 (dolist (event (list mouse-wheel-down-event mouse-wheel-up-event