]> git.eshelyaron.com Git - emacs.git/commitdiff
xt-mouse.el: Obey `mouse-wheel-*-event` variables (bug#68698)
authorStefan Monnier <monnier@iro.umontreal.ca>
Sun, 28 Jan 2024 23:51:11 +0000 (18:51 -0500)
committerEshel Yaron <me@eshelyaron.com>
Wed, 31 Jan 2024 20:15:20 +0000 (21:15 +0100)
* lisp/xt-mouse.el (xterm-mouse--same-button-p): New function.
(xterm-mouse--read-event-sequence): Use it to obey
`mouse-wheel-*-event` variables.
* lisp/mwheel.el (mouse-wheel-obey-old-style-wheel-buttons):
Update docstring.

(cherry picked from commit e734f8e502e315441214936e89ecd1e11e981fca)

etc/NEWS
lisp/mwheel.el
lisp/xt-mouse.el

index abcd3bc3c3cb5964378fcdabf337312b31854516..4cd906b986c14d1121b88cddd29ae8962cda7dd5 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -428,6 +428,12 @@ only to specify the 'mouse-4/5/6/7' events generated by older
 configurations such as X11 when the X server does not support at least
 version 2.1 of the X Input Extension, and 'xterm-mouse-mode'.
 
+** 'xterm-mouse-mode'
+This mode now emits `wheel-up/down/right/left' events instead of
+'mouse-4/5/6/7' events for the mouse wheel.
+It uses the 'mouse-wheel-up/down/left/right-event'
+variables to decide which button maps to which wheel event (if any).
+
 ** Info
 
 ---
index 53042085bf666a244a3574a51421cafb782bda4b..66a1fa1a706cfc8c000d874d12551f6485a285bf 100644 (file)
@@ -59,7 +59,7 @@
 (defvar mouse-wheel-obey-old-style-wheel-buttons t
   "If non-nil, treat mouse-4/5/6/7 events as mouse wheel events.
 These are the event names used historically in X11 before XInput2.
-They are sometimes generated by things like `xterm-mouse-mode' as well.")
+They are sometimes generated by things like text-terminals as well.")
 
 (defcustom mouse-wheel-down-event
   (if mouse-wheel-obey-old-style-wheel-buttons 'mouse-4)
index cd00467f14fcce4b6cd623bc6d1d43ba0381ed7c..081b8f32456604d06f6704039cd3fd5431da7372 100644 (file)
@@ -40,6 +40,8 @@
 
 ;;; Code:
 
+(require 'mwheel)
+
 (defvar xterm-mouse-debug-buffer nil)
 
 (defun xterm-mouse-translate (_event)
@@ -193,6 +195,12 @@ single byte."
           (cons n c))
       (cons (- (setq c (xterm-mouse--read-coordinate)) 32) c))))
 
+(defun xterm-mouse--button-p (event btn)
+  (and (symbolp event)
+       (string-prefix-p "mouse-" (symbol-name event))
+       (eq btn (car (read-from-string (symbol-name event)
+                                      (length "mouse-"))))))
+
 ;; XTerm reports mouse events as
 ;; <EVENT-CODE> <X> <Y> in default mode, and
 ;; <EVENT-CODE> ";" <X> ";" <Y> <"M" or "m"> in extended mode.
@@ -230,13 +238,22 @@ single byte."
              ;; Spurious release event without previous button-down
              ;; event: assume, that the last button was button 1.
              (t 1)))
-       (sym (if move 'mouse-movement
-              (intern (concat (if ctrl "C-" "")
-                              (if meta "M-" "")
-                              (if shift "S-" "")
-                              (if down "down-" "")
-                              "mouse-"
-                              (number-to-string btn))))))
+       (sym
+        (if move 'mouse-movement
+          (intern
+           (concat
+            (if ctrl "C-" "")
+            (if meta "M-" "")
+            (if shift "S-" "")
+            (if down "down-" "")
+            (cond
+             ;; BEWARE: `mouse-wheel-UP-event' corresponds to
+             ;; `wheel-DOWN' events and vice versa!!
+             ((xterm-mouse--button-p mouse-wheel-down-event btn)  "wheel-up")
+             ((xterm-mouse--button-p mouse-wheel-up-event btn)    "wheel-down")
+             ((xterm-mouse--button-p mouse-wheel-left-event btn)  "wheel-left")
+             ((xterm-mouse--button-p mouse-wheel-right-event btn) "wheel-right")
+             (t (format "mouse-%d" btn))))))))
     (list sym (1- x) (1- y))))
 
 (defun xterm-mouse--set-click-count (event click-count)