unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Stefan Kangas <stefan@marxist.se>
To: Drew Adams <drew.adams@oracle.com>
Cc: "Tak Kunihiro" <homeros.misasa@gmail.com>,
	"Richard Stallman" <rms@gnu.org>,
	28182@debbugs.gnu.org, "積丹尼 Dan Jacobson" <jidanni@jidanni.org>
Subject: bug#28182: maybe implement CTRL++ to zoom text
Date: Wed, 21 Aug 2019 15:19:08 +0200	[thread overview]
Message-ID: <CADwFkmnjC_bvRFTJYFh4ELp7LfsKrbQzhCmJzpW-OHSBpj9nZQ@mail.gmail.com> (raw)
In-Reply-To: <ff61608e-1f1d-49f3-b12d-2d278a12e164@default>

[-- Attachment #1: Type: text/plain, Size: 1521 bytes --]

Drew Adams <drew.adams@oracle.com> writes:

> > I think this is a good idea, which has the usability benefit to mirror
> > what happens in many common browsers, and other common text editors.
> > I remember myself that I was struggling to find the binding to change
> > the font size when I was an Emacs beginner.
> >
> > I have implemented this suggestion in the attached patch.
> >
> > However, this will be an incompatible change, since this was
> > previously bound to scrolling up and down by close to a full screen.
> > I therefore moved that binding to the meta modifier and wrote a NEWS
> > item that explains how to get the old functionality back.
> >
> > How does it look?
>
> I'm not sure that mouse-4 and mouse-5 have that meaning
> for all mice and platforms.  Some mice have separate
> mouse-4 and mouse-5 buttons.

Thanks.  Your comment made me realize that my entire approach had been
a bit naive.  I've now reworked the patch to only enable these key
bindings when mouse-wheel-mode is enabled, and added a defcustom to
change which modifier the font size functionality will use (or to
optionally disable it completely).

One small comment regarding the patch.  We could perhaps get away with
not adding the defvar mwheel-installed-text-scale-bindings, but I
added that to make sure that we don't accidentally remove any key
bindings we didn't mean to.  I might be too defensive here, though, so
please let me know if simpler code is preferred here over this level
of cautiousness.

Thanks,
Stefan Kangas

[-- Attachment #2: 0001-Bind-changing-font-size-to-mouse-wheel-up-and-down.patch --]
[-- Type: text/x-patch, Size: 5521 bytes --]

From c87f900d71d3fdbd7fe3703bd22c3e738e973dd9 Mon Sep 17 00:00:00 2001
From: Stefan Kangas <stefankangas@gmail.com>
Date: Wed, 21 Aug 2019 03:38:49 +0200
Subject: [PATCH] Bind changing font size to mouse wheel up and down

* lisp/mouse.el (mouse-wheel-down-event, mouse-wheel-up-event): Bind
to text-scale-increase and text-scale-decrease.  (Bug#28182)
* lisp/mwheel.el (mouse-wheel-scroll-amount): Use the meta modifier
for scrolling by near full screen instead of control.
* etc/NEWS: Announce it.
---
 etc/NEWS       | 14 ++++++++++++++
 lisp/mwheel.el | 49 ++++++++++++++++++++++++++++++++++++++++++-------
 2 files changed, 56 insertions(+), 7 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 3fdc185af4..3cdf7b2866 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -2026,6 +2026,20 @@ valid event type.
 ---
 ** The obsolete package xesam.el (since Emacs 24) has been removed.
 
+---
+** Mouse scroll up and down with control key modifier changes font size.
+Previously, the control key modifier was used to scroll up or down by
+an amount which was close to near a full screen.  This functionality
+is now instead available by scrolling with the meta modifier key.
+
+You can get the old functionality back by customizing the variables
+'mouse-wheel-font-size-modifier-key' and 'mouse-wheel-scroll-amount',
+or adding the following to your Emacs init file:
+
+(customize-set-variable 'mouse-wheel-font-size-modifier-key nil)
+(customize-set-variable 'mouse-wheel-scroll-amount
+                        '(5 ((shift) . 1) ((control) . nil)))
+
 \f
 * Lisp Changes in Emacs 27.1
 
diff --git a/lisp/mwheel.el b/lisp/mwheel.el
index dfea55374b..2eb67be916 100644
--- a/lisp/mwheel.el
+++ b/lisp/mwheel.el
@@ -84,7 +84,7 @@ mouse-wheel-inhibit-click-time
   :group 'mouse
   :type 'number)
 
-(defcustom mouse-wheel-scroll-amount '(5 ((shift) . 1) ((control) . nil))
+(defcustom mouse-wheel-scroll-amount '(5 ((shift) . 1) ((meta) . nil))
   "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.
@@ -120,6 +120,17 @@ mouse-wheel-scroll-amount
                     (float :tag "Fraction of window")))))
   :set 'mouse-wheel-change-button)
 
+(defcustom mouse-wheel-font-size-modifier-key 'control
+  "Modifier key to use for changing font size using mouse wheel.
+If nil, do not set up bindings for changing the font size."
+  :group 'mouse
+  :type '(choice :tag "modifier"
+                 (const alt) (const control) (const hyper)
+                 (const meta) (const shift) (const super)
+                 (const nil))
+  :set 'mouse-wheel-change-button
+  :version "27.1")
+
 (defcustom mouse-wheel-progressive-speed t
   "If non-nil, the faster the user moves the wheel, the faster the scrolling.
 Note that this has no effect when `mouse-wheel-scroll-amount' specifies
@@ -306,6 +317,15 @@ mwheel-scroll
 (put 'mwheel-scroll 'scroll-command t)
 
 (defvar mwheel-installed-bindings nil)
+(defvar mwheel-installed-text-scale-bindings nil)
+
+(defun mouse-wheel--remove-bindings (bindings funs)
+  "Remove key BINDINGS if they're bound to any function in FUNS.
+BINDINGS is a list of key bindings, FUNS is a list of functions.
+This is a helper function for `mouse-wheel-mode'."
+  (dolist (key bindings)
+    (when (memq (lookup-key (current-global-map) key) funs)
+      (global-unset-key key))))
 
 (define-minor-mode mouse-wheel-mode
   "Toggle mouse wheel support (Mouse Wheel mode)."
@@ -318,17 +338,32 @@ mouse-wheel-mode
   :global t
   :group 'mouse
   ;; Remove previous bindings, if any.
-  (while mwheel-installed-bindings
-    (let ((key (pop mwheel-installed-bindings)))
-      (when (eq (lookup-key (current-global-map) key) 'mwheel-scroll)
-        (global-unset-key key))))
+  (mouse-wheel--remove-bindings mwheel-installed-bindings
+                               '(mwheel-scroll))
+  (mouse-wheel--remove-bindings mwheel-installed-text-scale-bindings
+                               '(text-scale-increase
+                                 text-scale-decrease))
+  (setq mwheel-installed-bindings nil)
+  (setq mwheel-installed-text-scale-bindings nil)
   ;; Setup bindings as needed.
   (when mouse-wheel-mode
-    (dolist (event (list mouse-wheel-down-event mouse-wheel-up-event mouse-wheel-right-event mouse-wheel-left-event))
+    ;; Bindings for scrolling.
+    (dolist (event (list mouse-wheel-down-event mouse-wheel-up-event
+                         mouse-wheel-right-event mouse-wheel-left-event))
       (dolist (key (mapcar (lambda (amt) `[(,@(if (consp amt) (car amt)) ,event)])
                            mouse-wheel-scroll-amount))
         (global-set-key key 'mwheel-scroll)
-        (push key mwheel-installed-bindings)))))
+        (push key mwheel-installed-bindings)))
+    ;; Bindings for changing font size.
+    (when mouse-wheel-font-size-modifier-key
+      (let ((increase-key `[,(list mouse-wheel-font-size-modifier-key
+                                   mouse-wheel-down-event)])
+            (decrease-key `[,(list mouse-wheel-font-size-modifier-key
+                                   mouse-wheel-up-event)]))
+        (global-set-key increase-key 'text-scale-increase)
+        (global-set-key decrease-key 'text-scale-decrease)
+        (push increase-key mwheel-installed-text-scale-bindings)
+        (push decrease-key mwheel-installed-text-scale-bindings)))))
 
 ;;; Compatibility entry point
 ;; preloaded ;;;###autoload
-- 
2.20.1


  reply	other threads:[~2019-08-21 13:19 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-29 23:06 bug#39847: Document how users can make text-zoom keys same as browser 積丹尼 Dan Jacobson
2020-03-01  3:39 ` Eli Zaretskii
2020-03-01  5:23   ` 積丹尼 Dan Jacobson
2020-03-01 15:45     ` Eli Zaretskii
2020-03-02  0:23       ` 積丹尼 Dan Jacobson
2020-03-03  3:37   ` Richard Stallman
2020-03-03 15:32     ` Drew Adams
2020-03-03 16:31       ` 積丹尼 Dan Jacobson
2020-03-03 19:55       ` Stefan Kangas
2017-08-22  3:05         ` bug#28182: maybe implement CTRL++ to zoom text 積丹尼 Dan Jacobson
2017-08-22 12:30           ` Nathan Moreau
2017-08-22 14:30           ` Eli Zaretskii
2017-08-23 14:16             ` Richard Stallman
2017-08-23 17:55               ` Eli Zaretskii
2017-08-23 23:05               ` Tak Kunihiro
2017-08-23 23:23                 ` Drew Adams
2017-08-23 14:57           ` 積丹尼 Dan Jacobson
2017-08-23 15:55             ` Drew Adams
2017-08-23 16:05           ` 積丹尼 Dan Jacobson
2017-08-23 16:19             ` Drew Adams
2017-08-23 23:11           ` 積丹尼 Dan Jacobson
2017-08-23 23:28             ` Drew Adams
2019-08-21  1:51           ` Stefan Kangas
2019-08-21  2:12             ` Drew Adams
2019-08-21 13:19               ` Stefan Kangas [this message]
2019-08-24 22:06                 ` Juri Linkov
2019-08-27  0:40                   ` Stefan Kangas
2019-08-27 21:13                     ` Juri Linkov
2019-09-28 13:09                       ` Stefan Kangas
2019-09-28 13:48                         ` Eli Zaretskii
2019-09-28 14:15                           ` Stefan Kangas
2019-09-29  1:09                             ` Richard Stallman
2019-09-29  1:40                               ` Stefan Kangas
2019-09-29  7:36                                 ` Eli Zaretskii
2019-09-29 15:33                                   ` Richard Stallman
2019-09-29 15:40                                     ` Eli Zaretskii
2019-09-29 15:37                                 ` Richard Stallman
2019-09-29 15:44                                   ` Eli Zaretskii
2019-09-29 23:36                                     ` Richard Stallman
2019-09-30  3:52                                       ` Lars Ingebrigtsen
2019-09-30  6:16                                       ` Eli Zaretskii
2019-09-30  9:02                                         ` Robert Pluim
2019-09-30  9:16                                           ` Eli Zaretskii
2019-10-02 20:17                                             ` Alan Third
2019-09-30 14:57                                         ` Richard Stallman
2019-10-15  6:42                                           ` Stefan Kangas
2019-10-15 14:15                                             ` Drew Adams
2019-10-16  3:29                                               ` Richard Stallman
2019-10-15 17:51                                             ` Juri Linkov
2019-10-16  3:27                                             ` Richard Stallman
2019-10-05 23:56                             ` Stefan Kangas
2019-10-06 17:28                               ` Eli Zaretskii
2019-10-06 19:59                                 ` Stefan Kangas
2019-10-07 18:22                                   ` Juri Linkov
2019-10-08 14:56                                     ` Stefan Kangas
2019-10-08 21:58                                       ` Stefan Kangas
2019-10-09  6:08                                         ` Eli Zaretskii
2019-10-09 21:56                                           ` Stefan Kangas
2019-10-10  7:26                                             ` Eli Zaretskii
2019-10-11  0:18                                               ` Stefan Kangas
2019-10-10  8:00                                             ` Robert Pluim
2019-10-11  0:24                                               ` Stefan Kangas
2019-10-11  5:53                                                 ` Robert Pluim
2019-10-13 22:05                                                   ` Stefan Kangas
2019-10-09 20:54                                         ` Juri Linkov
2020-03-03 20:03           ` bug#28182: bug#39847: Document how users can make text-zoom keys same as browser 積丹尼 Dan Jacobson
2020-03-03 20:24         ` Drew Adams
2020-03-03 20:51           ` Stefan Kangas
2020-03-03 21:04             ` 積丹尼 Dan Jacobson
2020-03-03 21:13             ` Drew Adams
2020-08-05 12:08         ` bug#28182: " Lars Ingebrigtsen
     [not found] <<87y3qcs3nf.fsf@jidanni.org>
     [not found] ` <<831so3bror.fsf@gnu.org>
     [not found]   ` <<E1dkWS3-0005Wd-6g@fencepost.gnu.org>
2017-08-23 14:29     ` bug#28182: maybe implement CTRL++ to zoom text Drew Adams

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CADwFkmnjC_bvRFTJYFh4ELp7LfsKrbQzhCmJzpW-OHSBpj9nZQ@mail.gmail.com \
    --to=stefan@marxist.se \
    --cc=28182@debbugs.gnu.org \
    --cc=drew.adams@oracle.com \
    --cc=homeros.misasa@gmail.com \
    --cc=jidanni@jidanni.org \
    --cc=rms@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).