GNU bug report logs - #42521
28.0.50; Can't include an image in a display string

Previous Next

Package: emacs;

Reported by: Dmitry Gutov <dgutov <at> yandex.ru>

Date: Fri, 24 Jul 2020 19:41:02 UTC

Severity: wishlist

Found in version 28.0.50

To reply to this bug, email your comments to 42521 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#42521; Package emacs. (Fri, 24 Jul 2020 19:41:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Dmitry Gutov <dgutov <at> yandex.ru>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Fri, 24 Jul 2020 19:41:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: bug-gnu-emacs <at> gnu.org
Subject: 28.0.50; Can't include an image in a display string
Date: Fri, 24 Jul 2020 22:40:02 +0300
(progn
  (erase-buffer)
  (insert " ")
  (setq o (make-overlay (point-min) (point)))
  (overlay-put o 'display
               (concat (propertize " " 'display
                                   (create-image "splash.svg" nil nil 
:max-height
                                                 (default-font-height)))
                       " text after image")))

The script above will end with a blank space instead of an image being 
displayed.

To compare: replace the first 'display symbol with 'after-string, and
the image is displayed.

Why do we need this: if this worked, we would implement icons display in
the default completion popup in company-mode. It's a feature that has 
been requested for a while. See the discussion here:

https://github.com/company-mode/company-mode/pull/996#issuecomment-662743347

Unfortunately, as we seem to have concluded in

  https://debbugs.gnu.org/cgi/bugreport.cgi?bug=18285
  and
  https://debbugs.gnu.org/cgi/bugreport.cgi?bug=20847,

I have to use the `display' overlay property in most of the cases.

P.S. This is not a regression, Emacs 26.3 is the same.

In GNU Emacs 28.0.50 (build 25, x86_64-pc-linux-gnu, GTK+ Version 
3.24.20, cairo version 1.16.0)
 of 2020-07-20 built on potemkin
Repository revision: 4c08c2f45b9bb0265f6d7c3529011dee1b18e843
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12008000
System Description: Ubuntu 20.04 LTS




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#42521; Package emacs. (Sat, 25 Jul 2020 05:56:01 GMT) Full text and rfc822 format available.

Message #8 received at 42521 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: 42521 <at> debbugs.gnu.org
Subject: Re: bug#42521: 28.0.50; Can't include an image in a display string
Date: Sat, 25 Jul 2020 08:54:48 +0300
severity 42521 wishlist
thanks

> From: Dmitry Gutov <dgutov <at> yandex.ru>
> Date: Fri, 24 Jul 2020 22:40:02 +0300
> 
> (progn
>    (erase-buffer)
>    (insert " ")
>    (setq o (make-overlay (point-min) (point)))
>    (overlay-put o 'display
>                 (concat (propertize " " 'display
>                                     (create-image "splash.svg" nil nil 
> :max-height
>                                                   (default-font-height)))
>                         " text after image")))
> 
> The script above will end with a blank space instead of an image being 
> displayed.

This is a documented limitation of the current design and
implementation of the 'display' property.  The ELisp manual says:

  ‘STRING’
       Display STRING instead of the text that has this property.

       Recursive display specifications are not supported—STRING’s
       ‘display’ properties, if any, are not used.

I never looked into lifting this restriction, so I don't know what
would that entail.  There are probably some complications with faces,
at least.  If someone wants to study the issue, that'd be welcome, I
think.




Severity set to 'wishlist' from 'normal' Request was from Eli Zaretskii <eliz <at> gnu.org> to control <at> debbugs.gnu.org. (Sat, 25 Jul 2020 05:56:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#42521; Package emacs. (Sat, 25 Jul 2020 10:27:02 GMT) Full text and rfc822 format available.

Message #13 received at 42521 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 42521 <at> debbugs.gnu.org
Subject: Re: bug#42521: 28.0.50; Can't include an image in a display string
Date: Sat, 25 Jul 2020 13:26:19 +0300
On 25.07.2020 08:54, Eli Zaretskii wrote:
>         Recursive display specifications are not supported—STRING’s
>         ‘display’ properties, if any, are not used.

I see, thank you.

But what about other ways to reach the same goal?

Like supporting image spec placed on 'before-string' instead of 'display':

(progn
  (erase-buffer)
  (insert " ")
  (setq o (make-overlay (point-min) (point)))
  (overlay-put o 'display
               (propertize " text after image"
                           'before-string
                           (create-image "splash.svg" nil nil
                                         :max-height
                                         (default-font-height)))))

If this worked, I would actually prefer it.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#42521; Package emacs. (Sat, 25 Jul 2020 10:57:01 GMT) Full text and rfc822 format available.

Message #16 received at 42521 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: 42521 <at> debbugs.gnu.org
Subject: Re: bug#42521: 28.0.50; Can't include an image in a display string
Date: Sat, 25 Jul 2020 13:56:12 +0300
> Cc: 42521 <at> debbugs.gnu.org
> From: Dmitry Gutov <dgutov <at> yandex.ru>
> Date: Sat, 25 Jul 2020 13:26:19 +0300
> 
> Like supporting image spec placed on 'before-string' instead of 'display':
> 
> (progn
>    (erase-buffer)
>    (insert " ")
>    (setq o (make-overlay (point-min) (point)))
>    (overlay-put o 'display
>                 (propertize " text after image"
>                             'before-string
>                             (create-image "splash.svg" nil nil
>                                           :max-height
>                                           (default-font-height)))))
> 
> If this worked, I would actually prefer it.

This puts a 'before-string' property on a display string.  But
'before-string' is an overlay property, not a text property, so it
cannot be put on a string, only on buffer text.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#42521; Package emacs. (Sat, 25 Jul 2020 11:35:01 GMT) Full text and rfc822 format available.

Message #19 received at 42521 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 42521 <at> debbugs.gnu.org
Subject: Re: bug#42521: 28.0.50; Can't include an image in a display string
Date: Sat, 25 Jul 2020 14:34:37 +0300
On 25.07.2020 13:56, Eli Zaretskii wrote:
> This puts a 'before-string' property on a display string.  But
> 'before-string' is an overlay property, not a text property, so it
> cannot be put on a string, only on buffer text.

Ah, yes. Thank you for the reminder.




This bug report was last modified 3 years and 288 days ago.

Previous Next


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