diff options
| author | Stefan Kangas | 2019-10-11 02:15:24 +0200 |
|---|---|---|
| committer | Stefan Kangas | 2019-10-11 02:16:11 +0200 |
| commit | ffb7100750c211f55dd95811675d12a783f15d66 (patch) | |
| tree | 1a813097e29c8fe1eaf3b952e7f0a71303fd2d6f | |
| parent | bb392a9c8dab154cb9c80decf2ce4cf2da80e635 (diff) | |
| download | emacs-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/NEWS | 5 | ||||
| -rw-r--r-- | lisp/mwheel.el | 80 |
2 files changed, 54 insertions, 31 deletions
| @@ -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 | ||
| 2346 | By default, the font size will be changed in the window that the mouse | ||
| 2347 | pointer is over. To change this behaviour, you can customize the | ||
| 2348 | option 'mouse-wheel-follow-mouse'. Note that this will also affect | ||
| 2349 | scrolling. | ||
| 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. |
| 140 | This can be slightly disconcerting, but some people prefer it." | 140 | This affects both the commands for scrolling and changing the |
| 141 | face 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. | ||
| 216 | If `mouse-wheel-follow-mouse' is non-nil, return the window that | ||
| 217 | the mouse pointer is over. Otherwise, return the currently | ||
| 218 | active 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. |
| 215 | This should be bound only to mouse buttons 4, 5, 6, and 7 on | 243 | This should be bound only to mouse buttons 4, 5, 6, and 7 on |
| 216 | non-Windows systems." | 244 | non-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 |