GNU bug report logs -
#58122
28.2; overlay before/after-string does not render more than one fringe display spec
Previous Next
Reported by: "Josh Caswell" <emacs <at> woolsweater.net>
Date: Tue, 27 Sep 2022 19:17:02 UTC
Severity: normal
Tags: wontfix
Found in version 28.2
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 58122 in the body.
You can then email your comments to 58122 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#58122
; Package
emacs
.
(Tue, 27 Sep 2022 19:17:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
"Josh Caswell" <emacs <at> woolsweater.net>
:
New bug report received and forwarded. Copy sent to
bug-gnu-emacs <at> gnu.org
.
(Tue, 27 Sep 2022 19:17:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
An overlay `before-string' or `after-string' property with both left and right fringe display specs only seems to render the first spec.
*Demonstration*:
- Launch GUI Emacs with the -q flag
- In an Elisp buffer, define these two commands
(defun insert-two-squares ()
(interactive)
(insert (propertize " " 'display [(left-fringe hollow-square)
(right-fringe hollow-square)])))
(defun overlay-two-squares (right-first)
(interactive "P")
(remove-overlays)
(let ((ov (make-overlay (point) (point)))
(specs [(left-fringe hollow-square)
(right-fringe hollow-square)]))
(overlay-put ov 'before-string
(propertize " "
'display
(if right-first
(reverse specs)
specs)))))
- Switch to a new test buffer
- Invoke `insert-two-squares'; observe that both left and right fringes display a hollow square
- Delete the inserted character (fringe bitmaps disappear)
- Invoke `overlay-two-squares'; observe that only the left fringe displays a hollow square
- Invoke `overlay-two-squares' prefixed with `C-u'; observe that only the _right_ fringe displays the hollow square
The same behavior is seen if the overlay property is `after-string' rather than `before-string'.
*Expectation*:
Based on the display spec documentation I would expect the overlay to render fringes the same way as an inserted propertized string.
In GNU Emacs 28.2 (build 1, aarch64-apple-darwin21.1.0, NS appkit-2113.00 Version 12.0.1 (Build 21A559))
of 2022-09-12 built on armbob.lan
Windowing system distributor 'Apple', version 10.3.2113
System Description: macOS 12.0.1
Configured using:
'configure --with-ns '--enable-locallisppath=/Library/Application
Support/Emacs/${version}/site-lisp:/Library/Application
Support/Emacs/site-lisp' --with-modules'
Configured features:
ACL GMP GNUTLS JSON LIBXML2 MODULES NOTIFY KQUEUE NS PDUMPER THREADS
TOOLKIT_SCROLL_BARS 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
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
line-number-mode: t
indent-tabs-mode: t
transient-mark-mode: t
Load-path shadows:
None found.
Features:
(shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs
rfc822 mml mml-sec epa derived epg rfc6068 epg-config gnus-util rmail
rmail-loaddefs auth-source cl-seq eieio eieio-core cl-macs
eieio-loaddefs password-cache json map text-property-search seq byte-opt
gv bytecomp byte-compile cconv 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 edmacro kmacro
cl-loaddefs cl-lib iso-transl tooltip eldoc paren electric uniquify
ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/ns-win ns-win
ucs-normalize mule-util term/common-win 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 cl-generic 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 simple abbrev obarray cl-preloaded nadvice
button loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote threads kqueue cocoa ns multi-tty
make-network-process emacs)
Memory information:
((conses 16 52550 8825)
(symbols 48 6664 1)
(strings 32 18735 1663)
(string-bytes 1 623539)
(vectors 16 14125)
(vector-slots 8 194959 12178)
(floats 8 23 44)
(intervals 56 313 0)
(buffers 992 12))
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#58122
; Package
emacs
.
(Wed, 28 Sep 2022 13:41:02 GMT)
Full text and
rfc822 format available.
Message #8 received at 58122 <at> debbugs.gnu.org (full text, mbox):
tags 58122 wontfix
thanks
> Date: Tue, 27 Sep 2022 11:05:10 -0700
> From: "Josh Caswell" <emacs <at> woolsweater.net>
>
> An overlay `before-string' or `after-string' property with both left and right fringe display specs only seems to render the first spec.
>
> *Demonstration*:
> - Launch GUI Emacs with the -q flag
> - In an Elisp buffer, define these two commands
>
> (defun insert-two-squares ()
> (interactive)
> (insert (propertize " " 'display [(left-fringe hollow-square)
> (right-fringe hollow-square)])))
>
> (defun overlay-two-squares (right-first)
> (interactive "P")
> (remove-overlays)
> (let ((ov (make-overlay (point) (point)))
> (specs [(left-fringe hollow-square)
> (right-fringe hollow-square)]))
> (overlay-put ov 'before-string
> (propertize " "
> 'display
> (if right-first
> (reverse specs)
> specs)))))
>
> - Switch to a new test buffer
> - Invoke `insert-two-squares'; observe that both left and right fringes display a hollow square
> - Delete the inserted character (fringe bitmaps disappear)
> - Invoke `overlay-two-squares'; observe that only the left fringe displays a hollow square
> - Invoke `overlay-two-squares' prefixed with `C-u'; observe that only the _right_ fringe displays the hollow square
>
> The same behavior is seen if the overlay property is `after-string' rather than `before-string'.
>
> *Expectation*:
> Based on the display spec documentation I would expect the overlay to render fringes the same way as an inserted propertized string.
Thank you for your report.
This was never supported in Emacs. The reasons are subtle and very
technical, and I will not go into them here. Making this work as
expected might be possible, but it would require changes on a very low
level in the code that handles nested display properties and overlay
strings, which is already extremely complicated. I find changes of
such nature unjustified for such a fringe (pun intended) use case.
As an easy work-around, you can have 2 different overlay strings at
the same position, like this:
(defun insert-two-overlays ()
(interactive)
(remove-overlays)
(let ((ov1 (make-overlay (point) (point)))
(ov2 (make-overlay (point) (point))))
(overlay-put ov1 'before-string
(propertize " " 'display '(left-fringe hollow-square)))
(overlay-put ov2 'before-string
(propertize " " 'display '(right-fringe hollow-square)))))
Added tag(s) wontfix.
Request was from
Eli Zaretskii <eliz <at> gnu.org>
to
control <at> debbugs.gnu.org
.
(Wed, 28 Sep 2022 13:41:02 GMT)
Full text and
rfc822 format available.
Reply sent
to
Eli Zaretskii <eliz <at> gnu.org>
:
You have taken responsibility.
(Thu, 29 Sep 2022 06:14:01 GMT)
Full text and
rfc822 format available.
Notification sent
to
"Josh Caswell" <emacs <at> woolsweater.net>
:
bug acknowledged by developer.
(Thu, 29 Sep 2022 06:14:02 GMT)
Full text and
rfc822 format available.
Message #15 received at 58122-done <at> debbugs.gnu.org (full text, mbox):
> Date: Wed, 28 Sep 2022 18:18:57 -0700
> From: Josh <emacs <at> woolsweater.net>
> Cc: 58122 <at> debbugs.gnu.org
>
> > This was never supported in Emacs. The reasons are subtle and very
> > technical, and I will not go into them here. Making this work as
> > expected might be possible, but it would require changes on a very low
> > level in the code that handles nested display properties and overlay
> > strings, which is already extremely complicated. I find changes of
> > such nature unjustified for such a fringe (pun intended) use case.
> >
> > As an easy work-around, you can have 2 different overlay strings at
> > the same position, like this:
>
> Got it. I think this workaround should be sufficient. Thank you for the quick response!
Thanks, so I'm closing this bug report.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#58122
; Package
emacs
.
(Thu, 29 Sep 2022 14:58:03 GMT)
Full text and
rfc822 format available.
Message #18 received at 58122 <at> debbugs.gnu.org (full text, mbox):
On Wed, Sep 28, 2022, at 6:40 AM, Eli Zaretskii wrote:
> tags 58122 wontfix
> thanks
>
>> Date: Tue, 27 Sep 2022 11:05:10 -0700
>> From: "Josh Caswell" <emacs <at> woolsweater.net>
>>
>> An overlay `before-string' or `after-string' property with both left and right fringe display specs only seems to render the first spec.
>>
>> *Demonstration*:
>> - Launch GUI Emacs with the -q flag
>> - In an Elisp buffer, define these two commands
>>
>> (defun insert-two-squares ()
>> (interactive)
>> (insert (propertize " " 'display [(left-fringe hollow-square)
>> (right-fringe hollow-square)])))
>>
>> (defun overlay-two-squares (right-first)
>> (interactive "P")
>> (remove-overlays)
>> (let ((ov (make-overlay (point) (point)))
>> (specs [(left-fringe hollow-square)
>> (right-fringe hollow-square)]))
>> (overlay-put ov 'before-string
>> (propertize " "
>> 'display
>> (if right-first
>> (reverse specs)
>> specs)))))
>>
>> - Switch to a new test buffer
>> - Invoke `insert-two-squares'; observe that both left and right fringes display a hollow square
>> - Delete the inserted character (fringe bitmaps disappear)
>> - Invoke `overlay-two-squares'; observe that only the left fringe displays a hollow square
>> - Invoke `overlay-two-squares' prefixed with `C-u'; observe that only the _right_ fringe displays the hollow square
>>
>> The same behavior is seen if the overlay property is `after-string' rather than `before-string'.
>>
>> *Expectation*:
>> Based on the display spec documentation I would expect the overlay to render fringes the same way as an inserted propertized string.
>
> Thank you for your report.
>
> This was never supported in Emacs. The reasons are subtle and very
> technical, and I will not go into them here. Making this work as
> expected might be possible, but it would require changes on a very low
> level in the code that handles nested display properties and overlay
> strings, which is already extremely complicated. I find changes of
> such nature unjustified for such a fringe (pun intended) use case.
>
> As an easy work-around, you can have 2 different overlay strings at
> the same position, like this:
Got it. I think this workaround should be sufficient. Thank you for the quick response!
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Fri, 28 Oct 2022 11:24:05 GMT)
Full text and
rfc822 format available.
This bug report was last modified 1 year and 180 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.