GNU bug report logs -
#76761
31.0.50; Image icons from 'icons.el' could be accidentally dropped
Previous Next
Reported by: Pengji Zhang <me <at> pengjiz.com>
Date: Wed, 5 Mar 2025 10:11: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.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 76761 in the body.
You can then email your comments to 76761 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#76761
; Package
emacs
.
(Wed, 05 Mar 2025 10:11:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Pengji Zhang <me <at> pengjiz.com>
:
New bug report received and forwarded. Copy sent to
bug-gnu-emacs <at> gnu.org
.
(Wed, 05 Mar 2025 10:11:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
Greetings!
Currently in 'icons.el' image icons returned by 'icon-string' is a space
with a display property (see 'icons--create'). However, IMO it is common
to stripped spaces, and that means the icon could be accidentally
removed. For example,
- Run 'emacs -Q'
- Evaluate the following snippet:
--8<---------------cut here---------------start------------->8---
(require 'outline) ; for the icon
(setopt mode-line-compact t)
(setf global-mode-string
'("" (:eval (icon-string 'outline-open)) " "))
(force-mode-line-update t)
--8<---------------cut here---------------end--------------->8---
Notice that the down arrow icon does not show at all in the mode line
due to 'mode-line-compact'.
I suppose an easy fix is to use a non-space character. WDYT?
Thanks!
In GNU Emacs 31.0.50 (build 71, x86_64-pc-linux-gnu, GTK+ Version
3.24.48, cairo version 1.18.2)
Repository revision: fe7a8c92be6269f8fc7933eb6c190178839d0f8a
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101016
System Description: Arch Linux
Configured using:
'configure --disable-build-details'
Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
LCMS2 LIBOTF 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 XINERAMA XINPUT2 XPM
XRANDR GTK3 ZLIB
Important settings:
value of $LANG: en_US.UTF-8
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
tab-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 lisp-mnt message mailcap yank-media puny
dired dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068
epg-config gnus-util text-property-search time-date mm-decode mm-bodies
mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail
rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils auth-source
cl-seq eieio eieio-core cl-macs password-cache json map byte-opt gv
subr-x comp-run bytecomp byte-compile comp-common rx icons 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 lcms2 dynamic-setting system-font-setting
font-render-setting cairo gtk x-toolkit xinput2 x multi-tty move-toolbar
make-network-process tty-child-frames native-compile emacs)
Memory information:
((conses 16 73089 11379) (symbols 48 7060 0) (strings 32 18927 2897)
(string-bytes 1 596210) (vectors 16 12730)
(vector-slots 8 167990 9957) (floats 8 28 18) (intervals 56 392 87)
(buffers 992 12))
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#76761
; Package
emacs
.
(Wed, 05 Mar 2025 13:49:02 GMT)
Full text and
rfc822 format available.
Message #8 received at 76761 <at> debbugs.gnu.org (full text, mbox):
> From: Pengji Zhang <me <at> pengjiz.com>
> Date: Wed, 05 Mar 2025 18:10:38 +0800
>
> Currently in 'icons.el' image icons returned by 'icon-string' is a space
> with a display property (see 'icons--create'). However, IMO it is common
> to stripped spaces, and that means the icon could be accidentally
> removed. For example,
>
> - Run 'emacs -Q'
> - Evaluate the following snippet:
>
> --8<---------------cut here---------------start------------->8---
> (require 'outline) ; for the icon
> (setopt mode-line-compact t)
> (setf global-mode-string
> '("" (:eval (icon-string 'outline-open)) " "))
> (force-mode-line-update t)
> --8<---------------cut here---------------end--------------->8---
>
> Notice that the down arrow icon does not show at all in the mode line
> due to 'mode-line-compact'.
>
> I suppose an easy fix is to use a non-space character. WDYT?
Isn't that rather a bug in mode-line-compact? It shouldn't remove
spaces which have 'display' properties on them, since they are not
"empty space" on the mode line.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#76761
; Package
emacs
.
(Thu, 06 Mar 2025 09:49:02 GMT)
Full text and
rfc822 format available.
Message #11 received at 76761 <at> debbugs.gnu.org (full text, mbox):
> Cc: 76761 <at> debbugs.gnu.org
> Date: Wed, 05 Mar 2025 15:47:56 +0200
> From: Eli Zaretskii <eliz <at> gnu.org>
>
> > From: Pengji Zhang <me <at> pengjiz.com>
> > Date: Wed, 05 Mar 2025 18:10:38 +0800
> >
> > Currently in 'icons.el' image icons returned by 'icon-string' is a space
> > with a display property (see 'icons--create'). However, IMO it is common
> > to stripped spaces, and that means the icon could be accidentally
> > removed. For example,
> >
> > - Run 'emacs -Q'
> > - Evaluate the following snippet:
> >
> > --8<---------------cut here---------------start------------->8---
> > (require 'outline) ; for the icon
> > (setopt mode-line-compact t)
> > (setf global-mode-string
> > '("" (:eval (icon-string 'outline-open)) " "))
> > (force-mode-line-update t)
> > --8<---------------cut here---------------end--------------->8---
> >
> > Notice that the down arrow icon does not show at all in the mode line
> > due to 'mode-line-compact'.
> >
> > I suppose an easy fix is to use a non-space character. WDYT?
>
> Isn't that rather a bug in mode-line-compact? It shouldn't remove
> spaces which have 'display' properties on them, since they are not
> "empty space" on the mode line.
Could you try the patch below and see if gives good results?
diff --git a/src/xdisp.c b/src/xdisp.c
index 6c623ab..5f82ea8 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -27612,15 +27612,28 @@ display_mode_line (struct window *w, enum face_id face_id, Lisp_Object format)
int c = fetch_string_char_advance (mode_string, &i, &i_byte);
if (c == ' ' && prev == ' ')
{
- display_string (NULL,
- Fsubstring (mode_string, make_fixnum (start),
- make_fixnum (i - 1)),
- Qnil, 0, 0, &it, 0, 0, 0,
- STRING_MULTIBYTE (mode_string));
- /* Skip past the rest of the space characters. */
- while (c == ' ' && i < SCHARS (mode_string))
- c = fetch_string_char_advance (mode_string, &i, &i_byte);
- start = i - 1;
+ Lisp_Object prev_pos = make_fixnum (i - 1);
+
+ if (NILP (Fget_text_property (prev_pos, Qdisplay,
+ mode_string)))
+ {
+ display_string (NULL,
+ Fsubstring (mode_string,
+ make_fixnum (start),
+ prev_pos),
+ Qnil, 0, 0, &it, 0, 0, 0,
+ STRING_MULTIBYTE (mode_string));
+ /* Skip past the rest of the space characters. */
+ while (c == ' ' && i < SCHARS (mode_string)
+ && NILP (Fget_text_property (make_fixnum (i),
+ Qdisplay,
+ mode_string)))
+ {
+ c = fetch_string_char_advance (mode_string,
+ &i, &i_byte);
+ }
+ start = i - 1;
+ }
}
prev = c;
}
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#76761
; Package
emacs
.
(Thu, 06 Mar 2025 10:00:02 GMT)
Full text and
rfc822 format available.
Message #14 received at 76761 <at> debbugs.gnu.org (full text, mbox):
Eli Zaretskii <eliz <at> gnu.org> writes:
> Isn't that rather a bug in mode-line-compact? It shouldn't remove
> spaces which have 'display' properties on them, since they are not
> "empty space" on the mode line.
Yes, I agree that we probably need to fix 'mode-line-compact' as well.
However, other than 'mode-line-compact', 'string-split', 'string-trim',
and some other commonly used string functions could also remove such
"non-empty spaces" unexpectedly. Image icons are the only thing that
brings me trouble. So I am reporting it as an 'icons.el' bug. Besides,
IMO it is less intrusive to change 'icons.el'.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#76761
; Package
emacs
.
(Thu, 06 Mar 2025 12:22:01 GMT)
Full text and
rfc822 format available.
Message #17 received at 76761 <at> debbugs.gnu.org (full text, mbox):
Eli Zaretskii <eliz <at> gnu.org> writes:
> Could you try the patch below and see if gives good results?
>
> [...]
Thanks! It fixes the issue with 'mode-line-compact'.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#76761
; Package
emacs
.
(Thu, 06 Mar 2025 14:22:02 GMT)
Full text and
rfc822 format available.
Message #20 received at 76761 <at> debbugs.gnu.org (full text, mbox):
> From: Pengji Zhang <me <at> pengjiz.com>
> Cc: 76761 <at> debbugs.gnu.org
> Date: Thu, 06 Mar 2025 17:59:06 +0800
>
> Eli Zaretskii <eliz <at> gnu.org> writes:
>
> > Isn't that rather a bug in mode-line-compact? It shouldn't remove
> > spaces which have 'display' properties on them, since they are not
> > "empty space" on the mode line.
>
> Yes, I agree that we probably need to fix 'mode-line-compact' as well.
> However, other than 'mode-line-compact', 'string-split', 'string-trim',
> and some other commonly used string functions could also remove such
> "non-empty spaces" unexpectedly. Image icons are the only thing that
> brings me trouble. So I am reporting it as an 'icons.el' bug. Besides,
> IMO it is less intrusive to change 'icons.el'.
Any character can be removed, so replacing the space will not solve
the problem, not in general. It could make it less frequent, but
that's all.
As for other functions, Lisp programs which call them should be aware
of the issue and code their implementations accordingly.
Using space characters for showing images and other stuff is
ubiquitous in Emacs, so replacing all of them doesn't sound attractive
to me.
Reply sent
to
Eli Zaretskii <eliz <at> gnu.org>
:
You have taken responsibility.
(Thu, 06 Mar 2025 14:30:03 GMT)
Full text and
rfc822 format available.
Notification sent
to
Pengji Zhang <me <at> pengjiz.com>
:
bug acknowledged by developer.
(Thu, 06 Mar 2025 14:30:03 GMT)
Full text and
rfc822 format available.
Message #25 received at 76761-done <at> debbugs.gnu.org (full text, mbox):
> From: Pengji Zhang <me <at> pengjiz.com>
> Cc: 76761 <at> debbugs.gnu.org
> Date: Thu, 06 Mar 2025 20:20:56 +0800
>
> Eli Zaretskii <eliz <at> gnu.org> writes:
>
> > Could you try the patch below and see if gives good results?
> >
> > [...]
>
> Thanks! It fixes the issue with 'mode-line-compact'.
Thanks, installed on the master branch, and closing the bug.
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Fri, 04 Apr 2025 11:24:11 GMT)
Full text and
rfc822 format available.
This bug report was last modified 77 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.