emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 1e7f636: Horizontal scrolling for mouse wheel with Shift modifier


From: Juri Linkov
Subject: master 1e7f636: Horizontal scrolling for mouse wheel with Shift modifier (bug#43568)
Date: Thu, 24 Sep 2020 15:25:24 -0400 (EDT)

branch: master
commit 1e7f6365766db188e8cbcee5a9cdad8e2b4f5849
Author: Juri Linkov <juri@linkov.net>
Commit: Juri Linkov <juri@linkov.net>

    Horizontal scrolling for mouse wheel with Shift modifier (bug#43568)
    
    * lisp/mwheel.el (mouse-wheel-scroll-amount): Change 'shift' default value
    from 5 to 'hscroll'.  Add new option "Scroll horizontally" for 'hscroll'.
    (mwheel-scroll): Handle value 'hscroll' and call mwheel-scroll-left-function
    or mwheel-scroll-right-function.
    
    * doc/emacs/frames.texi (Mouse Commands): Update for horizontal scrolling
    with Shift modifier.
---
 doc/emacs/frames.texi | 24 +++++++++++++-----------
 etc/NEWS              |  5 ++++-
 etc/TODO              |  2 +-
 lisp/mwheel.el        | 18 +++++++++++++++---
 4 files changed, 33 insertions(+), 16 deletions(-)

diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi
index b748876..1a44d8d 100644
--- a/doc/emacs/frames.texi
+++ b/doc/emacs/frames.texi
@@ -214,22 +214,24 @@ speed is linked to how fast you move the wheel.  This 
mode also
 supports increasing or decreasing the height of the default face, by
 default bound to scrolling with the @key{Ctrl} modifier.
 
+Emacs also supports horizontal scrolling with the @key{Shift} modifier.
+
 @vindex mouse-wheel-tilt-scroll
 @vindex mouse-wheel-flip-direction
-Emacs can also support horizontal scrolling if your mouse's wheel can
-be tilted, or if your touchpad supports it.  This feature is off by
-default; the variable @code{mouse-wheel-tilt-scroll} turns it on, if
-you customize it to a non-@code{nil} value.  By default, tilting the
-mouse wheel scrolls the window's view horizontally in the direction of
-the tilt: e.g., tilting to the right scrolls the window to the right,
-so that the text displayed in the window moves horizontally to the
-left.  If you'd like to reverse the direction of horizontal scrolling,
-customize the variable @code{mouse-wheel-flip-direction} to a
-non-@code{nil} value.
+If your mouse's wheel can be tilted, or if your touchpad supports it,
+then you can also enable horizontal scrolling by customizing the
+variable @code{mouse-wheel-tilt-scroll} to a non-@code{nil} value.
+By default, tilting the mouse wheel scrolls the window's view
+horizontally in the direction of the tilt: e.g., tilting to the right
+scrolls the window to the right, so that the text displayed in the
+window moves horizontally to the left.  If you'd like to reverse the
+direction of horizontal scrolling, customize the variable
+@code{mouse-wheel-flip-direction} to a non-@code{nil} value.
 
 When the mouse pointer is over an image in Image mode, @pxref{Image Mode},
 scrolling the mouse wheel with the @key{Ctrl} modifier scales the image
-under the mouse pointer.
+under the mouse pointer, and scrolling the mouse wheel with the
+@key{Shift} modifier scrolls the image horizontally.
 
 
 @node Word and Line Mouse
diff --git a/etc/NEWS b/etc/NEWS
index 6a7c99f..13a022d 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -136,7 +136,10 @@ displays.)
 
 ---
 ** Mouse wheel scrolling now defaults to one line at a time.
-Old default of five lines at a time is now bound to Shift modifier.
+
++++
+** Mouse wheel scrolling with Shift modifier now scrolls horizontally.
+This works in text buffers and over images.
 
 ---
 ** The default value of 'frame-title-format' and 'icon-title-format' has 
changed.
diff --git a/etc/TODO b/etc/TODO
index b445b67..467b08e 100644
--- a/etc/TODO
+++ b/etc/TODO
@@ -924,7 +924,7 @@ features of that interface could be implemented NS.
 
 **** Smooth scrolling -- maybe not a good idea
 Today, by default, scrolling with a trackpad makes the text move in
-steps of one line.  (Scrolling with SHIFT scrolls five lines at a time.)
+steps of one line.  (Scrolling with SHIFT scrolls horizontally.)
 
 The "mac" port provides smooth, pixel-based, scrolling.  This is a very
 popular feature.  However, there are drawbacks to this method: what
diff --git a/lisp/mwheel.el b/lisp/mwheel.el
index 0100b8d..c6a7391 100644
--- a/lisp/mwheel.el
+++ b/lisp/mwheel.el
@@ -85,7 +85,7 @@ set to the event sent when clicking on the mouse wheel 
button."
   :type 'number)
 
 (defcustom mouse-wheel-scroll-amount
-  '(1 ((shift) . 5) ((meta) . nil) ((control) . text-scale))
+  '(1 ((shift) . hscroll) ((meta) . nil) ((control) . text-scale))
   "Amount to scroll windows by when spinning the mouse wheel.
 This is an alist mapping the modifier key to the amount to scroll when
 the wheel is moved with the modifier key depressed.
@@ -97,6 +97,9 @@ screen.  It can also be a floating point number, specifying 
the fraction of
 a full screen to scroll.  A near full screen is `next-screen-context-lines'
 less than a full screen.
 
+If AMOUNT is the symbol 'hscroll', this means that with MODIFIER,
+the mouse wheel will scroll horizontally instead of vertically.
+
 If AMOUNT is the symbol text-scale, this means that with
 MODIFIER, the mouse wheel will change the face height instead of
 scrolling."
@@ -123,6 +126,7 @@ scrolling."
                     (const :tag "Scroll full screen" :value nil)
                     (integer :tag "Scroll specific # of lines")
                     (float :tag "Scroll fraction of window")
+                    (const :tag "Scroll horizontally" :value hscroll)
                     (const :tag "Change face size" :value text-scale)))))
   :set 'mouse-wheel-change-button
   :version "28.1")
@@ -270,7 +274,11 @@ non-Windows systems."
     (condition-case nil
         (unwind-protect
            (let ((button (mwheel-event-button event)))
-             (cond ((eq button mouse-wheel-down-event)
+              (cond ((and (eq amt 'hscroll) (eq button mouse-wheel-down-event))
+                     (funcall (if mouse-wheel-flip-direction
+                                  mwheel-scroll-left-function
+                                mwheel-scroll-right-function) 1))
+                    ((eq button mouse-wheel-down-event)
                      (condition-case nil (funcall mwheel-scroll-down-function 
amt)
                        ;; Make sure we do indeed scroll to the beginning of
                        ;; the buffer.
@@ -285,7 +293,11 @@ non-Windows systems."
                           ;; for a reason that escapes me.  This problem seems
                           ;; to only affect scroll-down.  --Stef
                           (set-window-start (selected-window) (point-min))))))
-                   ((eq button mouse-wheel-up-event)
+                    ((and (eq amt 'hscroll) (eq button mouse-wheel-up-event))
+                     (funcall (if mouse-wheel-flip-direction
+                                  mwheel-scroll-right-function
+                                mwheel-scroll-left-function) 1))
+                    ((eq button mouse-wheel-up-event)
                      (condition-case nil (funcall mwheel-scroll-up-function 
amt)
                        ;; Make sure we do indeed scroll to the end of the 
buffer.
                        (end-of-buffer (while t (funcall 
mwheel-scroll-up-function)))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]