unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* UI glitch with text-scale-increase / text-scale-decrease with linum / nlinum
@ 2015-02-08 19:42 Gauthier Segay
  2015-02-09 14:57 ` Stefan Monnier
  0 siblings, 1 reply; 5+ messages in thread
From: Gauthier Segay @ 2015-02-08 19:42 UTC (permalink / raw)
  To: help-gnu-emacs; +Cc: monnier, markus.triska

I've setup this
http://ergoemacs.org/emacs/emacs_mouse_wheel_config.html

;; on Linux, make Control+wheel do increase/decrease font size
(global-set-key (kbd "<C-mouse-4>") 'text-scale-increase)
(global-set-key (kbd "<C-mouse-5>") 'text-scale-decrease)

The issue is that linum or nlinum doesn't notice the change, the line
number gutter doesn'adjust it's width.

The work around is to disable and enable again those modes.

How can this be done in the above script?

Can this somehow be handled by linum/nlinum modes whenever the
text-scale or font is changed?

Thanks for your help.



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: UI glitch with text-scale-increase / text-scale-decrease with linum / nlinum
  2015-02-08 19:42 UI glitch with text-scale-increase / text-scale-decrease with linum / nlinum Gauthier Segay
@ 2015-02-09 14:57 ` Stefan Monnier
  2015-02-09 15:58   ` Gauthier Segay
  0 siblings, 1 reply; 5+ messages in thread
From: Stefan Monnier @ 2015-02-09 14:57 UTC (permalink / raw)
  To: Gauthier Segay; +Cc: help-gnu-emacs, markus.triska

> (global-set-key (kbd "<C-mouse-4>") 'text-scale-increase)
> (global-set-key (kbd "<C-mouse-5>") 'text-scale-decrease)
> The issue is that linum or nlinum doesn't notice the change, the line
> number gutter doesn'adjust it's width.

Can you test the patch below (for nlinum.el) to see if it solves
your problem?


        Stefan


diff --git a/packages/nlinum/nlinum.el b/packages/nlinum/nlinum.el
index 82e274c..ca15800 100644
--- a/packages/nlinum/nlinum.el
+++ b/packages/nlinum/nlinum.el
@@ -1,6 +1,6 @@
 ;;; nlinum.el --- Show line numbers in the margin  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2012, 2014  Free Software Foundation, Inc.
+;; Copyright (C) 2012, 2014, 2015  Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: convenience
@@ -54,6 +54,7 @@ Linum mode is a buffer-local minor mode."
   :lighter nil ;; (" NLinum" nlinum--desc)
   (jit-lock-unregister #'nlinum--region)
   (remove-hook 'window-configuration-change-hook #'nlinum--setup-window t)
+  (remove-hook 'text-scale-mode #'nlinum--setup-window t)
   (remove-hook 'after-change-functions #'nlinum--after-change t)
   (kill-local-variable 'nlinum--line-number-cache)
   (remove-overlays (point-min) (point-max) 'nlinum t)
@@ -63,6 +64,7 @@ Linum mode is a buffer-local minor mode."
     ;; FIXME: Another approach would be to make the mode permanent-local,
     ;; which might indeed be preferable.
     (add-hook 'change-major-mode-hook (lambda () (nlinum-mode -1)))
+    (add-hook 'text-scale-mode #'nlinum--setup-window nil t)
     (add-hook 'window-configuration-change-hook #'nlinum--setup-window nil t)
     (add-hook 'after-change-functions #'nlinum--after-change nil t)
     (jit-lock-register #'nlinum--region t))
@@ -71,14 +73,24 @@ Linum mode is a buffer-local minor mode."
 (defun nlinum--face-height (face)
   (aref (font-info (face-font face)) 2))
 
+(defun nlinum--face-width (face)        ;New info only in Emacs>=25.
+  (let ((fi (font-info (face-font face))))
+    (when (> (length fi) 11)
+      (let ((width (aref info 11)))
+        (if (<= width 0)
+            (aref info 10)
+          width)))))
+
 (defun nlinum--setup-window ()
   (let ((width (if (display-graphic-p)
                    (ceiling
-                    ;; We'd really want to check the widths rather than the
-                    ;; heights, but it's a start.
-                    (/ (* nlinum--width 1.0
-                          (nlinum--face-height 'linum))
-                       (frame-char-height)))
+                    (let ((width (nlinum--face-width 'linum)))
+                      (if width
+                          (/ (* nlinum--width 1.0 width)
+                             (frame-char-width))
+                        (/ (* nlinum--width 1.0
+                              (nlinum--face-height 'linum))
+                           (frame-char-height)))))
                  nlinum--width)))
     (set-window-margins nil (if nlinum-mode width)
                         (cdr (window-margins)))))



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: UI glitch with text-scale-increase / text-scale-decrease with linum / nlinum
  2015-02-09 14:57 ` Stefan Monnier
@ 2015-02-09 15:58   ` Gauthier Segay
  2015-02-09 17:01     ` Stefan Monnier
  0 siblings, 1 reply; 5+ messages in thread
From: Gauthier Segay @ 2015-02-09 15:58 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: help-gnu-emacs, markus.triska

Hello Stefan, thanks for the update.

I tried on this setup:

GNU Emacs 24.4.1 (i686-pc-mingw32) of 2014-10-24 on LEG570

I disabled my theme/font settings (to ensure it doesn't interfere),
patched the file, recompiled the extensions, but I still notice the
same issue happening.

That being said, when I issue M-x text-scale-increase (or decrease)
instead of using ctrl+wheel , it seems to work properly and adjust the
gutter, so I guess this is not necessarily an issue with the
extension.

I'll appreciate if someone can show me how to define my own function
which disables nlinum, calls the text-scale functions and enables
nlinum back; and how to attach that function to the hook.

Thanks.

On Mon, Feb 9, 2015 at 3:57 PM, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>> (global-set-key (kbd "<C-mouse-4>") 'text-scale-increase)
>> (global-set-key (kbd "<C-mouse-5>") 'text-scale-decrease)
>> The issue is that linum or nlinum doesn't notice the change, the line
>> number gutter doesn'adjust it's width.
>
> Can you test the patch below (for nlinum.el) to see if it solves
> your problem?
>
>
>         Stefan
>
>
> diff --git a/packages/nlinum/nlinum.el b/packages/nlinum/nlinum.el
> index 82e274c..ca15800 100644
> --- a/packages/nlinum/nlinum.el
> +++ b/packages/nlinum/nlinum.el
> @@ -1,6 +1,6 @@
>  ;;; nlinum.el --- Show line numbers in the margin  -*- lexical-binding: t -*-
>
> -;; Copyright (C) 2012, 2014  Free Software Foundation, Inc.
> +;; Copyright (C) 2012, 2014, 2015  Free Software Foundation, Inc.
>
>  ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
>  ;; Keywords: convenience
> @@ -54,6 +54,7 @@ Linum mode is a buffer-local minor mode."
>    :lighter nil ;; (" NLinum" nlinum--desc)
>    (jit-lock-unregister #'nlinum--region)
>    (remove-hook 'window-configuration-change-hook #'nlinum--setup-window t)
> +  (remove-hook 'text-scale-mode #'nlinum--setup-window t)
>    (remove-hook 'after-change-functions #'nlinum--after-change t)
>    (kill-local-variable 'nlinum--line-number-cache)
>    (remove-overlays (point-min) (point-max) 'nlinum t)
> @@ -63,6 +64,7 @@ Linum mode is a buffer-local minor mode."
>      ;; FIXME: Another approach would be to make the mode permanent-local,
>      ;; which might indeed be preferable.
>      (add-hook 'change-major-mode-hook (lambda () (nlinum-mode -1)))
> +    (add-hook 'text-scale-mode #'nlinum--setup-window nil t)
>      (add-hook 'window-configuration-change-hook #'nlinum--setup-window nil t)
>      (add-hook 'after-change-functions #'nlinum--after-change nil t)
>      (jit-lock-register #'nlinum--region t))
> @@ -71,14 +73,24 @@ Linum mode is a buffer-local minor mode."
>  (defun nlinum--face-height (face)
>    (aref (font-info (face-font face)) 2))
>
> +(defun nlinum--face-width (face)        ;New info only in Emacs>=25.
> +  (let ((fi (font-info (face-font face))))
> +    (when (> (length fi) 11)
> +      (let ((width (aref info 11)))
> +        (if (<= width 0)
> +            (aref info 10)
> +          width)))))
> +
>  (defun nlinum--setup-window ()
>    (let ((width (if (display-graphic-p)
>                     (ceiling
> -                    ;; We'd really want to check the widths rather than the
> -                    ;; heights, but it's a start.
> -                    (/ (* nlinum--width 1.0
> -                          (nlinum--face-height 'linum))
> -                       (frame-char-height)))
> +                    (let ((width (nlinum--face-width 'linum)))
> +                      (if width
> +                          (/ (* nlinum--width 1.0 width)
> +                             (frame-char-width))
> +                        (/ (* nlinum--width 1.0
> +                              (nlinum--face-height 'linum))
> +                           (frame-char-height)))))
>                   nlinum--width)))
>      (set-window-margins nil (if nlinum-mode width)
>                          (cdr (window-margins)))))



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: UI glitch with text-scale-increase / text-scale-decrease with linum / nlinum
  2015-02-09 15:58   ` Gauthier Segay
@ 2015-02-09 17:01     ` Stefan Monnier
  2015-02-09 17:22       ` Gauthier Segay
  0 siblings, 1 reply; 5+ messages in thread
From: Stefan Monnier @ 2015-02-09 17:01 UTC (permalink / raw)
  To: help-gnu-emacs

> I disabled my theme/font settings (to ensure it doesn't interfere),
> patched the file, recompiled the extensions, but I still notice the
> same issue happening.

Duh!  I diff'd the wrong file.  Here's the patch I had tested.


        Stefan


diff --git a/packages/nlinum/nlinum.el b/packages/nlinum/nlinum.el
index 82e274c..67b3717 100644
--- a/packages/nlinum/nlinum.el
+++ b/packages/nlinum/nlinum.el
@@ -1,6 +1,6 @@
 ;;; nlinum.el --- Show line numbers in the margin  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2012, 2014  Free Software Foundation, Inc.
+;; Copyright (C) 2012, 2014, 2015  Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: convenience
@@ -54,6 +54,7 @@ Linum mode is a buffer-local minor mode."
   :lighter nil ;; (" NLinum" nlinum--desc)
   (jit-lock-unregister #'nlinum--region)
   (remove-hook 'window-configuration-change-hook #'nlinum--setup-window t)
+  (remove-hook 'text-scale-mode-hook #'nlinum--setup-window t)
   (remove-hook 'after-change-functions #'nlinum--after-change t)
   (kill-local-variable 'nlinum--line-number-cache)
   (remove-overlays (point-min) (point-max) 'nlinum t)
@@ -63,6 +64,7 @@ Linum mode is a buffer-local minor mode."
     ;; FIXME: Another approach would be to make the mode permanent-local,
     ;; which might indeed be preferable.
     (add-hook 'change-major-mode-hook (lambda () (nlinum-mode -1)))
+    (add-hook 'text-scale-mode-hook #'nlinum--setup-window nil t)
     (add-hook 'window-configuration-change-hook #'nlinum--setup-window nil t)
     (add-hook 'after-change-functions #'nlinum--after-change nil t)
     (jit-lock-register #'nlinum--region t))
@@ -71,14 +73,24 @@ Linum mode is a buffer-local minor mode."
 (defun nlinum--face-height (face)
   (aref (font-info (face-font face)) 2))
 
+(defun nlinum--face-width (face)        ;New info only in Emacs>=25.
+  (let ((fi (font-info (face-font face))))
+    (when (> (length fi) 11)
+      (let ((width (aref fi 11)))
+        (if (<= width 0)
+            (aref fi 10)
+          width)))))
+
 (defun nlinum--setup-window ()
   (let ((width (if (display-graphic-p)
                    (ceiling
-                    ;; We'd really want to check the widths rather than the
-                    ;; heights, but it's a start.
-                    (/ (* nlinum--width 1.0
-                          (nlinum--face-height 'linum))
-                       (frame-char-height)))
+                    (let ((width (nlinum--face-width 'linum)))
+                      (if width
+                          (/ (* nlinum--width 1.0 width)
+                             (frame-char-width))
+                        (/ (* nlinum--width 1.0
+                              (nlinum--face-height 'linum))
+                           (frame-char-height)))))
                  nlinum--width)))
     (set-window-margins nil (if nlinum-mode width)
                         (cdr (window-margins)))))




^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: UI glitch with text-scale-increase / text-scale-decrease with linum / nlinum
  2015-02-09 17:01     ` Stefan Monnier
@ 2015-02-09 17:22       ` Gauthier Segay
  0 siblings, 0 replies; 5+ messages in thread
From: Gauthier Segay @ 2015-02-09 17:22 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: help-gnu-emacs

Hey, that works!

Thanks

On Mon, Feb 9, 2015 at 6:01 PM, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>> I disabled my theme/font settings (to ensure it doesn't interfere),
>> patched the file, recompiled the extensions, but I still notice the
>> same issue happening.
>
> Duh!  I diff'd the wrong file.  Here's the patch I had tested.
>
>
>         Stefan
>
>
> diff --git a/packages/nlinum/nlinum.el b/packages/nlinum/nlinum.el
> index 82e274c..67b3717 100644
> --- a/packages/nlinum/nlinum.el
> +++ b/packages/nlinum/nlinum.el
> @@ -1,6 +1,6 @@
>  ;;; nlinum.el --- Show line numbers in the margin  -*- lexical-binding: t -*-
>
> -;; Copyright (C) 2012, 2014  Free Software Foundation, Inc.
> +;; Copyright (C) 2012, 2014, 2015  Free Software Foundation, Inc.
>
>  ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
>  ;; Keywords: convenience
> @@ -54,6 +54,7 @@ Linum mode is a buffer-local minor mode."
>    :lighter nil ;; (" NLinum" nlinum--desc)
>    (jit-lock-unregister #'nlinum--region)
>    (remove-hook 'window-configuration-change-hook #'nlinum--setup-window t)
> +  (remove-hook 'text-scale-mode-hook #'nlinum--setup-window t)
>    (remove-hook 'after-change-functions #'nlinum--after-change t)
>    (kill-local-variable 'nlinum--line-number-cache)
>    (remove-overlays (point-min) (point-max) 'nlinum t)
> @@ -63,6 +64,7 @@ Linum mode is a buffer-local minor mode."
>      ;; FIXME: Another approach would be to make the mode permanent-local,
>      ;; which might indeed be preferable.
>      (add-hook 'change-major-mode-hook (lambda () (nlinum-mode -1)))
> +    (add-hook 'text-scale-mode-hook #'nlinum--setup-window nil t)
>      (add-hook 'window-configuration-change-hook #'nlinum--setup-window nil t)
>      (add-hook 'after-change-functions #'nlinum--after-change nil t)
>      (jit-lock-register #'nlinum--region t))
> @@ -71,14 +73,24 @@ Linum mode is a buffer-local minor mode."
>  (defun nlinum--face-height (face)
>    (aref (font-info (face-font face)) 2))
>
> +(defun nlinum--face-width (face)        ;New info only in Emacs>=25.
> +  (let ((fi (font-info (face-font face))))
> +    (when (> (length fi) 11)
> +      (let ((width (aref fi 11)))
> +        (if (<= width 0)
> +            (aref fi 10)
> +          width)))))
> +
>  (defun nlinum--setup-window ()
>    (let ((width (if (display-graphic-p)
>                     (ceiling
> -                    ;; We'd really want to check the widths rather than the
> -                    ;; heights, but it's a start.
> -                    (/ (* nlinum--width 1.0
> -                          (nlinum--face-height 'linum))
> -                       (frame-char-height)))
> +                    (let ((width (nlinum--face-width 'linum)))
> +                      (if width
> +                          (/ (* nlinum--width 1.0 width)
> +                             (frame-char-width))
> +                        (/ (* nlinum--width 1.0
> +                              (nlinum--face-height 'linum))
> +                           (frame-char-height)))))
>                   nlinum--width)))
>      (set-window-margins nil (if nlinum-mode width)
>                          (cdr (window-margins)))))
>
>



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-02-09 17:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-08 19:42 UI glitch with text-scale-increase / text-scale-decrease with linum / nlinum Gauthier Segay
2015-02-09 14:57 ` Stefan Monnier
2015-02-09 15:58   ` Gauthier Segay
2015-02-09 17:01     ` Stefan Monnier
2015-02-09 17:22       ` Gauthier Segay

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).