|
From: | Dmitry Gutov |
Subject: | bug#18285: 24.3.92; A combination of `display' on text and `invisible' and `before/after-string' leads to the before/after string being displayed twice |
Date: | Thu, 21 Aug 2014 19:40:58 +0400 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.0 |
On 08/21/2014 06:57 PM, Eli Zaretskii wrote:
Hmm. Maybe the fix could be to make the `invisible' property disable `display': as long as former is present, the latter won't work.That would undoubtedly cause complaints from heavy users of those, like Org, magit, etc.
Some change in code might be required, but the resulting code can be made backward-compatible, aside from the pathological examples, which might improve.
After all, that was the intention behind the code I encountered this bug in. And with the current logic, like you say, if `display' is set, `invisible' is redundant.Yes, but not the other way around.
If the `invisible' starts even one character earlier, it *is* the other way around. So one might say that in general case it already disables `display'. Try this small modification of the original example:
(let ((pt (point))) (insert (propertize "a" 'display "bbb")) (let ((o (make-overlay (1- pt) (point)))) (overlay-put o 'invisible t) (overlay-put o 'after-string "foo\nbar"))) The result looks like: foo bar
Thanks. That looks very much like a bug as well, though maybe again, too expensive to fix. FWIW, for that issue, if myov2 has higher priority than myov1 (if only by virtue of being inside and shorter), I'd display just "STRING2" ("STRING1" would not be visible at all). But that's just going by logic; maybe there's a use case that would break.I'm quite sure there's some use case somewhere that will break.
Maybe. But at least it's consistent with the overlay priority rules.
[Prev in Thread] | Current Thread | [Next in Thread] |