GNU bug report logs - #76193
30.0.93; Wrong type argument in outline-minor-mode

Previous Next

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


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#76193; Package emacs. (Tue, 11 Feb 2025 05:05:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Roshan Shariff <roshan.shariff <at> gmail.com>:
New bug report received and forwarded. Copy sent to 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))




Information forwarded to 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?




Information forwarded to 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?




Information forwarded to 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.




This bug report was last modified 125 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.