Subject: bug#76734: closed (Re: bug#76734: 31.0.50; The line numbers take more space than they need)

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 04 Mar 2025 21:37:02 +0000

Your bug report

#76734: 31.0.50; The line numbers take more space than they need

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
76734: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=76734
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#76734: 31.0.50; The line numbers take more space than they need
From: Stefan Kangas <[email-masked]>
To: the_wurfkreuz <[email-masked]>, Eli Zaretskii <[email-masked]>
Cc: [email-masked]
Date: Tue, 4 Mar 2025 21:36:21 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

the_wurfkreuz via "Bug reports for GNU Emacs, the Swiss army knife of
text editors" <[email-masked]> writes:

> Sent with Proton Mail secure email.
>
> On Tuesday, March 4th, 2025 at 2:55 PM, Eli Zaretskii <[email-masked]> wrote:
>
>> tags 76734 notabug
>> thanks
>>
>> > Date: Tue, 04 Mar 2025 06:31:00 +0000
>> > From: the_wurfkreuz via "Bug reports for GNU Emacs,
>> > the Swiss army knife of text editors" [email-masked]
>> >
>> > When using the line-numbers mode, the line numbers start to take an
>> > additional space from a buffer way before the line count reaches 3
>> > digit numbers.
>> >
>> > Steps to reproduce:
>> >
>> > 1. Evaluate:
>> >
>> > (global-display-line-numbers-mode 1)
>> > (setq display-line-numbers 'visual
>> > display-line-numbers-type 'relative)
>> >
>> > (fringe-mode '(1 . 1))
>> >
>> > 2. Then create new lines in the same buffer using the newline
>> > command. In my case i get an additional space on a 38th line already.
>>
>>
>> This is by design. Emacs cannot know how many lines will actually be
>> shown in the window before it actually shows them all. By contrast,
>> it needs to decide how many columns to allocate for line numbers
>> before it displays even a single line, to avoid the annoying
>> horizontal movement of text as much as possible. So it sometimes errs
>> on the safe side (recall that some lines could be smaller than others
>> due to different fonts), to avoid the need to display the window
>> twice, which would significantly punish performance in this mode.
>>
>> Why is that a problem?
>
> If it's done so intentionally, then there is no inherent problem.

Yes, I think it's intentional here, sorry.  Thanks for the bug report,
nevertheless.

I guess the only thing left to do here is to close the bug; I'm doing
that with this message.

Subject: 31.0.50; The line numbers take more space than they need
From: the_wurfkreuz <[email-masked]>
To: "[email-masked]" <[email-masked]>
Date: Tue, 04 Mar 2025 06:31:00 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

When using the line-numbers mode, the line numbers start to take an
additional space from a buffer way before the line count reaches 3
digit numbers.

Steps to reproduce:

1. Evaluate:

(global-display-line-numbers-mode 1)
(setq display-line-numbers 'visual
display-line-numbers-type 'relative)

(fringe-mode '(1 . 1))

2. Then create new lines in the same buffer using the newline
command. In my case i get an additional space on a 38th line already.

In GNU Emacs 31.0.50 (build 3, x86_64-pc-linux-gnu, GTK+ Version
3.24.43, cairo version 1.18.0) of 2025-02-19 built on ub-void
Repository revision: b568ff418ce7147c27d7f82fe4a8eef325b9de2c
Repository branch: HEAD
System Description: Void Linux

Configured using:
'configure --with-native-compilation=aot --with-tree-sitter --with-gif
--with-png --with-jpeg --with-rsvg --with-tiff --with-imagemagick
--with-pgtk --with-mailutils CC=/usr/bin/gcc CXX=/usr/bin/gcc'

Configured features:
CAIRO DBUS FREETYPE GLIB GMP GNUTLS GSETTINGS HARFBUZZ IMAGEMAGICK JPEG
LCMS2 LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PGTK PNG RSVG
SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP
XIM GTK3 ZLIB

Important settings:
value of $LC_COLLATE: C
value of $LANG: en_US.UTF-8
locale-coding-system: utf-8-unix

Major mode: ELisp/l

Minor modes in effect:
windmove-mode: t
savehist-mode: t
meow-global-mode: t
meow-mode: t
meow-normal-mode: t
meow-esc-mode: t
envrc-global-mode: t
envrc-mode: t
buffer-terminator-mode: t
global-git-commit-mode: t
magit-auto-revert-mode: t
marginalia-mode: t
vertico-mode: t
corfu-popupinfo-mode: t
corfu-history-mode: t
corfu-echo-mode: t
global-corfu-mode: t
corfu-mode: t
which-key-mode: t
undo-fu-session-global-mode: t
undo-fu-session-mode: t
global-treesit-auto-mode: t
global-auto-revert-mode: t
save-place-mode: t
electric-pair-mode: t
recentf-mode: t
global-display-line-numbers-mode: t
display-line-numbers-mode: t
override-global-mode: t
tooltip-mode: t
show-paren-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tab-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
minibuffer-regexp-mode: t
line-number-mode: t
indent-tabs-mode: t
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t

Load-path shadows:
/home/wurfkreuz/.emacs.d/elpa/transient-20250108.1351/transient hides /usr/local/share/emacs/31.0.50/lisp/transient

Features:
(shadow sort mail-extr emacsbug face-remap ido shortdoc misearch
multi-isearch pulse windmove cus-start help-fns radix-tree tramp-cmds
em-unix em-term term disp-table ehelp em-script em-prompt em-pred em-ls
em-hist em-glob em-extpipe em-cmpl em-dirs em-basic em-banner em-alias
em-elecslash esh-mode esh-var dired-aux org-appear image-file
image-converter oc-basic ol-eww eww vtable mule-util url-queue mm-url
ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect gnus-art mm-uu mml2015
mm-view mml-smime smime gnutls dig gnus-sum shr pixel-fill kinsoku
url-file svg dom gnus-group gnus-undo gnus-start gnus-dbus dbus xml
gnus-cloud nnimap nnmail mail-source utf7 nnoo gnus-spec gnus-int
gnus-range gnus-win gnus nnheader range ol-docview doc-view image-mode
exif ol-bibtex bibtex ol-bbdb ol-w3m ol-doi org-link-doi python vc-git
vc-dispatcher jka-compr raku-detect savehist f eshell em-tramp esh-cmd
esh-ext esh-proc esh-opt esh-io esh-arg esh-module esh-module-loaddefs
esh-util meow meow-tutor meow-cheatsheet meow-cheatsheet-layout
meow-core meow-shims meow-esc meow-command array meow-thing meow-visual
meow-keypad meow-beacon meow-helpers meow-util meow-keymap meow-face
meow-var delsel org-tempo tempo org-drill persist org-agenda embark-org
org-element org-persist org-id org-refile org-element-ast inline
avl-tree org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro
org-src ob-comint org-pcomplete org-list org-footnote org-faces
org-entities ob-emacs-lisp ob-core ob-eval org-cycle org-table ol
org-fold org-fold-core org-keys oc org-version org-loaddefs cal-menu
calendar cal-loaddefs org-compat org-macs eglot external-completion
jsonrpc xref ert ewoc debug backtrace kdl-mode generic markdown-mode
color nix-mode nix-repl nix-shell nix-store nix-log nix-instantiate
nix-shebang nix-format nix yaml-mode dockerfile-mode terraform-mode
noutline outline hcl-mode lua-mode perl-mode flymake envrc inheritenv
buffer-terminator transpose-frame magit-bookmark magit-submodule
magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull
magit-fetch magit-clone magit-remote magit-commit magit-sequence
magit-notes magit-worktree magit-tag magit-merge magit-branch
magit-reset magit-files magit-refs magit-status magit magit-repos
magit-apply magit-wip magit-log which-func imenu magit-diff git-commit
log-edit message sendmail yank-media puny rfc822 mml mml-sec epa derived
epg rfc6068 epg-config gnus-util mm-decode mm-bodies mm-encode
mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr
mailabbrev mail-utils gmm-utils mailheader pcvs-util add-log magit-core
magit-autorevert magit-margin magit-transient magit-process magit-mode
benchmark magit-git magit-base magit-section cursor-sensor crm
smerge-mode diff-mode track-changes diff hydra lv with-editor server
embark-consult embark ffap thingatpt consult bookmark marginalia vertico
project cape corfu-popupinfo corfu-history corfu-echo corfu orderless
tempel-collection tempel wgrep grep compile text-property-search
which-key docker docker-context docker-volume docker-network
docker-image docker-container docker-faces docker-core docker-compose
docker-process docker-utils tablist advice tablist-filter
semantic/wisent/comp semantic/wisent semantic/wisent/wisent
semantic/util-modes semantic/util semantic semantic/tag semantic/lex
semantic/fw mode-local find-func cedet dired dired-loaddefs docker-group
transient edmacro kmacro compat dash aio generator s goto-chg
undo-fu-session undo-fu zig-ts-mode clojure-ts-mode treesit-auto
crontab-mode sh-script smie treesit executable rose-pine-theme cus-edit
pp cus-load midnight autorevert filenotify saveplace tramp-cache
time-stamp tramp-sh tramp trampver tramp-integration files-x
tramp-message tramp-compat shell pcomplete comint ansi-osc ring
parse-time iso8601 time-date format-spec ansi-color tramp-loaddefs
desktop frameset elec-pair recentf tree-widget wid-edit comp comp-cstr
warnings comp-run comp-common display-line-numbers cl-extra help-mode
use-package use-package-ensure use-package-delight use-package-diminish
use-package-bind-key bind-key easy-mmode use-package-core finder-inf
annalist-autoloads buffer-terminator-autoloads cape-autoloads
clojure-ts-mode-autoloads corfu-autoloads crontab-mode-autoloads
cursor-undo-autoloads docker-autoloads aio-autoloads
dockerfile-mode-autoloads embark-consult-autoloads consult-autoloads
embark-autoloads envrc-autoloads f-autoloads go-mode-autoloads
goto-chg-autoloads haskell-mode-autoloads hydra-autoloads
inheritenv-autoloads lua-mode-autoloads lv-autoloads magit-autoloads
pcase marginalia-autoloads markdown-mode-autoloads meow-autoloads
nix-mode-autoloads magit-section-autoloads orderless-autoloads
org-appear-autoloads org-drill-autoloads persist-autoloads
queue-autoloads raku-mode-autoloads rx s-autoloads tablist-autoloads
tempel-collection-autoloads tempel-autoloads terraform-mode-autoloads
dash-autoloads hcl-mode-autoloads transient-autoloads
transpose-frame-autoloads treesit-auto-autoloads undo-fu-autoloads
undo-fu-session-autoloads vertico-autoloads wgrep-autoloads info
with-editor-autoloads yaml-mode-autoloads zig-ts-mode-autoloads package
browse-url xdg url url-proxy url-privacy url-expand url-methods
url-history url-cookie generate-lisp-file url-domsuf url-util mailcap
url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs icons
password-cache json subr-x map byte-opt gv bytecomp byte-compile
url-vars cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc paren
electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/pgtk-win pgtk-win term/common-win touch-screen pgtk-dnd tool-bar
dnd fontset image regexp-opt fringe tabulated-list replace newcomment
text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow
isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax
font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads dbusbind inotify
dynamic-setting system-font-setting font-render-setting cairo gtk pgtk
lcms2 multi-tty move-toolbar make-network-process tty-child-frames
native-compile emacs)

Memory information:
((conses 16 1020202 193596) (symbols 48 53352 11) (strings 32 257404 62454)
(string-bytes 1 8166769) (vectors 16 99053) (vector-slots 8 1933532 133075)
(floats 8 827 2083) (intervals 56 12099 2590) (buffers 992 28))