GNU bug report logs -
#75168
31.0.50; text-scale confuses ruler-mode when display-line-number-mode is active
Previous Next
Reported by: Arsen Arsenović <arsen <at> aarsen.me>
Date: Sat, 28 Dec 2024 21:16:01 UTC
Severity: normal
Found in version 31.0.50
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #14 received at 75168 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Hi,
Arsen Arsenović <arsen <at> aarsen.me> writes:
> I've just dug through the Elisp manual a little and I think (elisp)
> Specified Space is precisely what's needed here. I've tried the
> following:
>
> modified lisp/ruler-mode.el
> @@ -632,12 +632,7 @@ ruler-mode-ruler
> (let* ((w (ruler-mode-text-scaled-window-width))
> (m (window-margins))
> (f (window-fringes))
> - (i (if display-line-numbers
> - ;; FIXME: ruler-mode relies on I being an integer, so
> - ;; the column numbers might be slightly off if the
> - ;; line-number face is customized.
> - (round (line-number-display-width 'columns))
> - 0))
> + (i 0)
> (j (ruler-mode-text-scaled-window-hscroll))
> ;; Setup the scrollbar, fringes, and margins areas.
> (lf (ruler-mode-space
> @@ -739,7 +734,13 @@ ruler-mode-ruler
> (setq i (1+ i)
> j (1+ j)))
>
> - (let ((ruler-str (concat ruler))
> + (let ((ruler-indent
> + (if (not display-line-numbers)
> + ""
> + (propertize " " 'display
> + `(space :width
> + (,(- (line-number-display-width t) 1))))))
> + (ruler-str (concat ruler))
> (len (length ruler)))
> (add-text-properties 0 len ruler-wide-props ruler-str)
> (dolist (p (nreverse props))
> @@ -747,13 +748,14 @@ ruler-mode-ruler
>
> ;; Return the ruler propertized string. Using list here,
> ;; instead of concat visually separate the different areas.
> - (if (nth 2 (window-fringes))
> - ;; fringes outside margins.
> - (list "" (and (eq 'left sbvt) sb) lf lm
> - ruler-str rm rf (and (eq 'right sbvt) sb))
> - ;; fringes inside margins.
> - (list "" (and (eq 'left sbvt) sb) lm lf
> - ruler-str rf rm (and (eq 'right sbvt) sb))))))
> + (let ((ruler-str-ind (concat ruler-indent ruler-str)))
> + (if (nth 2 (window-fringes))
> + ;; fringes outside margins.
> + (list "" (and (eq 'left sbvt) sb) lf lm
> + ruler-str-ind rm rf (and (eq 'right sbvt) sb))
> + ;; fringes inside margins.
> + (list "" (and (eq 'left sbvt) sb) lm lf
> + ruler-str-ind rf rm (and (eq 'right sbvt) sb)))))))
>
> (provide 'ruler-mode)
>
> This is almost perfect. The (- ... 1) in the :width pixel spec is
> obviously a hack (and breaks this patch in emacs -nw). I have no idea
> why an extra pixel is inserted in GUI mode. If you apply the above but
> remove (- ... 1), you'll see the following: [...]
I've refined the patch:
diff --git a/lisp/ruler-mode.el b/lisp/ruler-mode.el
index 003dcae560f..64568e06cc9 100644
--- a/lisp/ruler-mode.el
+++ b/lisp/ruler-mode.el
@@ -632,12 +632,7 @@ ruler-mode-ruler
(let* ((w (ruler-mode-text-scaled-window-width))
(m (window-margins))
(f (window-fringes))
- (i (if display-line-numbers
- ;; FIXME: ruler-mode relies on I being an integer, so
- ;; the column numbers might be slightly off if the
- ;; line-number face is customized.
- (round (line-number-display-width 'columns))
- 0))
+ (i 0)
(j (ruler-mode-text-scaled-window-hscroll))
;; Setup the scrollbar, fringes, and margins areas.
(lf (ruler-mode-space
@@ -745,6 +740,12 @@ ruler-mode-ruler
(dolist (p (nreverse props))
(add-text-properties (nth 0 p) (nth 1 p) (nthcdr 2 p) ruler-str))
+ ;; Attach an alignment indent.
+ (if display-line-numbers
+ (setq ruler-str
+ (concat (ruler-mode-space `(,(line-number-display-width t)))
+ ruler-str)))
+
;; Return the ruler propertized string. Using list here,
;; instead of concat visually separate the different areas.
(if (nth 2 (window-fringes))
This works perfectly on PGTK (and with -nw) - that extra pixel I
mentioned seems to be an artifact, or perhaps a bug, of the Lucid
toolkit.
What do you think of the above?
Have a lovely day.
--
Arsen Arsenović
[signature.asc (application/pgp-signature, inline)]
This bug report was last modified 174 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.