well I find myself at another gcc summit, hacking on some lisp code. The issue
I reported a couple of years back is still there. Namely that glyphs just
inside invisible extents are rendered (rather than being invisible).
This comment in create_string_text_block(redisplay.c) is telling :)
#### The behavior of begin and end-glyphs at the edge of an
invisible extent should be investigated further. This is
fairly low priority though. */
The attached gl.el file shows the problems I've encountered. The attached patch
against 21.5.28 fixes them. At extent boundaries we create a list of the end
glyphs there (in reverse display order) paying attention to outer invisible
glyphs. Similarly we process begin glyphs in display order. Zero length
extents are tricky, and we handle them with a separate list that we insert in
the boundary between end and begin glyphs. The issue with zero-length extents
is that we see their end glyphs as inside any ending extent and their begin
glyphs as inside any staring extents. Besides being confusing if the
zero-length extent has both set, it would break smilies, where annotations
adjacent after invisible extents are used. smilies is kind-of relying on the
buggy glyph rendering to see the annotation's glyph even though it is 'inside'
an invisible extent. Notice that the current rendering of such annotation's
glyphs is not symmetric -- it only works just after an invisible extent. Just
before an invisible extent doesn't work, and as can be seen in gl.el, glyph
rendering with that is somewhat borked.
The patch got into sxemacs, and doesn't seem to have caused problems there. I'd
like to get it into xemacs so sometime it'll just end up in my distro without me
having to rebuild stuff. Built and tested on an i686 ubuntu system. Do you
need anything more?
Nathan Sidwell :: http://www.codesourcery.com
XEmacs-Patches mailing list