Package: emacs;
Reported by: Roshan Shariff <roshan.shariff <at> gmail.com>
Date: Tue, 11 Feb 2025 05:05:01 UTC
Severity: normal
Found in version 30.0.93
To reply to this bug, email your comments to 76193 AT debbugs.gnu.org.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-gnu-emacs <at> gnu.org
:bug#76193
; Package emacs
.
(Tue, 11 Feb 2025 05:05:01 GMT) Full text and rfc822 format available.Roshan Shariff <roshan.shariff <at> gmail.com>
:bug-gnu-emacs <at> gnu.org
.
(Tue, 11 Feb 2025 05:05:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Roshan Shariff <roshan.shariff <at> gmail.com> To: bug-gnu-emacs <at> gnu.org Subject: 30.0.93; Wrong type argument in outline-minor-mode Date: Mon, 10 Feb 2025 15:10:14 -0700
1. Open scratch buffer 2. M-: (setq outline-minor-mode-use-buttons 'in-margins) RET 3. M-: (setq left-margin-width 2) RET 4. M-x outline-minor-mode [Outline minor mode enabled in current buffer] 5. M-x outline-minor-mode [Wrong type argument: number-or-mark-p, nil] The error happens on line 616 of outline.el, because outline--margin-width is nil when outline-minor-mode is disabled. It turns out that it was never set when outline-minor-mode was enabled, because the condition on line 552 fails when left-margin-width is greater than zero. In GNU Emacs 30.0.93 (build 1, x86_64-redhat-linux-gnu, GTK+ Version 3.24.43, cairo version 1.18.2) of 2025-02-09 built on 3232d44b99d846d18b5ee0bbc269a171 Windowing system distributor 'The X.Org Foundation', version 11.0.12401005 System Description: Fedora Linux 41 (Workstation Edition) Configured using: 'configure --build=x86_64-redhat-linux --host=x86_64-redhat-linux --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --runstatedir=/run --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --program-suffix=-gtk+x11 --with-cairo --with-dbus --with-gif --with-gpm=no --with-harfbuzz --with-jpeg --with-modules --with-native-compilation=aot --with-png --with-rsvg --with-sqlite3 --with-tiff --with-tree-sitter --with-webp --with-x-toolkit=gtk3 --with-xinput2 --with-xpm build_alias=x86_64-redhat-linux host_alias=x86_64-redhat-linux CC=gcc 'CFLAGS=-DMAIL_USE_LOCKF -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' 'LDFLAGS=-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' CXX=g++ 'CXXFLAGS=-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB Important settings: value of $LANG: en_CA.UTF-8 value of $XMODIFIERS: @im=ibus locale-coding-system: utf-8-unix Major mode: Lisp Interaction Minor modes in effect: tooltip-mode: t global-eldoc-mode: t eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-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: None found. Features: (shadow sort mail-extr emacsbug message mailcap yank-media puny dired dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068 epg-config gnus-util text-property-search mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils time-date subr-x cl-extra pp cl-print byte-opt gv bytecomp byte-compile org-compat org-macs format-spec noutline outline icons thingatpt help-fns radix-tree help-mode cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd touch-screen 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 x-toolkit xinput2 x multi-tty move-toolbar make-network-process native-compile emacs) Memory information: ((conses 16 77563 11261) (symbols 48 7193 0) (strings 32 22050 2967) (string-bytes 1 666318) (vectors 16 12369) (vector-slots 8 164396 8470) (floats 8 43 133) (intervals 56 426 0) (buffers 992 13))
bug-gnu-emacs <at> gnu.org
:bug#76193
; Package emacs
.
(Tue, 11 Feb 2025 08:00:02 GMT) Full text and rfc822 format available.Message #8 received at 76193 <at> debbugs.gnu.org (full text, mbox):
From: Juri Linkov <juri <at> linkov.net> To: Roshan Shariff <roshan.shariff <at> gmail.com> Cc: 76193 <at> debbugs.gnu.org Subject: Re: bug#76193: 30.0.93; Wrong type argument in outline-minor-mode Date: Tue, 11 Feb 2025 09:53:25 +0200
> 1. Open scratch buffer > 2. M-: (setq outline-minor-mode-use-buttons 'in-margins) RET > 3. M-: (setq left-margin-width 2) RET > 4. M-x outline-minor-mode [Outline minor mode enabled in current buffer] > 5. M-x outline-minor-mode [Wrong type argument: number-or-mark-p, nil] > > The error happens on line 616 of outline.el, because > outline--margin-width is nil when outline-minor-mode is disabled. It > turns out that it was never set when outline-minor-mode was enabled, > because the condition on line 552 fails when left-margin-width is greater than > zero. Thanks for the bug report. outline-minor-mode was not intended to work for left-margin-width set to a non-zero value from outside. I wonder do you know a case where the same margin is successfully shared between outline-minor-mode and some other package? In any case this information is not required for fixing outline-minor-mode that should support any value of left-margin-width. Do you agree that the right fix would be just do nothing when outline--margin-width is nil?
bug-gnu-emacs <at> gnu.org
:bug#76193
; Package emacs
.
(Tue, 11 Feb 2025 18:40:01 GMT) Full text and rfc822 format available.Message #11 received at 76193 <at> debbugs.gnu.org (full text, mbox):
From: Roshan Shariff <roshan.shariff <at> gmail.com> To: Juri Linkov <juri <at> linkov.net> Cc: 76193 <at> debbugs.gnu.org Subject: Re: bug#76193: 30.0.93; Wrong type argument in outline-minor-mode Date: Tue, 11 Feb 2025 11:39:22 -0700
On Tue, 11 Feb 2025 at 00:58, Juri Linkov <juri <at> linkov.net> wrote: > Thanks for the bug report. outline-minor-mode was not intended > to work for left-margin-width set to a non-zero value from outside. Thanks, I wasn't sure what the intent of the code was, but that makes sense. However, the condition on line 552, which only holds if the margin width is zero, seems to make some of the following code redundant. Lines 566-569 add the current margin width to outline--margin-width, which is unnecessary if the current margin width has to be zero to get to that point. The reverse happens when the mode is disabled, in lines 616-619. > I wonder do you know a case where the same margin is successfully shared > between outline-minor-mode and some other package? It seems to work reasonably well as long as the margins are wide enough to show all the margin indicators. However, the other packages I use (flymake-mode and git-gutter-mode) unilaterally set the margin size to whatever they need without accounting for other packages' use of the margin. The final margin ends up depending on the order that modes are activated. In my case, flymake-mode (which defaults to margin indicators on graphical displays) was setting the margin width to 2, and by pure coincidence that is wide enough to show the outline-minor-mode and git-gutter symbols if there isn't a flymake indicator on that line. > In any case this information is not required for fixing outline-minor-mode > that should support any value of left-margin-width. > Do you agree that the right fix would be just do nothing > when outline--margin-width is nil? That is one approach, but the other one would be to just remove the (> 1 *-margin-width) condition on line 552. If I understand correctly, the effect would be to increase the existing margin to accommodate the outline-minor-mode buttons, and then decrease the margins by the same amount when the mode is disabled. I feel this change would play better with other packages that use the margin, and ideally those packages (e.g. flymake-mode) would be patched to do the same thing. What do you think?
bug-gnu-emacs <at> gnu.org
:bug#76193
; Package emacs
.
(Thu, 13 Feb 2025 07:48:02 GMT) Full text and rfc822 format available.Message #14 received at 76193 <at> debbugs.gnu.org (full text, mbox):
From: Juri Linkov <juri <at> linkov.net> To: Roshan Shariff <roshan.shariff <at> gmail.com> Cc: 76193 <at> debbugs.gnu.org Subject: Re: bug#76193: 30.0.93; Wrong type argument in outline-minor-mode Date: Thu, 13 Feb 2025 09:38:31 +0200
>> Thanks for the bug report. outline-minor-mode was not intended >> to work for left-margin-width set to a non-zero value from outside. > > Thanks, I wasn't sure what the intent of the code was, but that makes > sense. However, the condition on line 552, which only holds if the > margin width is zero, seems to make some of the following code > redundant. The intention was to avoid conflicts with other modes that use the same margin. But the problem is that other modes such as flymake-mode can be enabled AFTER outline-minor-mode is already enabled. So outline-minor-mode has no control over such situation. Therefore this condition is not needed in outline-minor-mode. > Lines 566-569 add the current margin width to > outline--margin-width, which is unnecessary if the current margin > width has to be zero to get to that point. The reverse happens when > the mode is disabled, in lines 616-619. These lines were intended for the perfect case possibly achievable in the future when different packages don't have to compete for the space in the margins, but each of them will update just own column. I still believe we need to try to make this possible. >> I wonder do you know a case where the same margin is successfully shared >> between outline-minor-mode and some other package? > > It seems to work reasonably well as long as the margins are wide > enough to show all the margin indicators. However, the other packages > I use (flymake-mode and git-gutter-mode) unilaterally set the margin > size to whatever they need without accounting for other packages' use > of the margin. The final margin ends up depending on the order that modes > are activated. > > In my case, flymake-mode (which defaults to margin indicators on > graphical displays) was setting the margin width to 2, and by pure > coincidence that is wide enough to show the outline-minor-mode and > git-gutter symbols if there isn't a flymake indicator on that line. Ideally, each package should increase the width of the margin as much as it needs, and then update only own columns. >> In any case this information is not required for fixing outline-minor-mode >> that should support any value of left-margin-width. > >> Do you agree that the right fix would be just do nothing >> when outline--margin-width is nil? > > That is one approach, but the other one would be to just remove the (> > 1 *-margin-width) condition on line 552. If I understand correctly, > the effect would be to increase the existing margin to accommodate the > outline-minor-mode buttons, and then decrease the margins by the same > amount when the mode is disabled. I agree, so this condition will be removed from outline-minor-mode. > I feel this change would play better with other packages that use the > margin, and ideally those packages (e.g. flymake-mode) would be > patched to do the same thing. What do you think? Ok, I will try to modify both outline-minor-mode and flymake-mode to respect each other in regard to the shared margin.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.