Subject: bug#28339: 25.2; Emacs shows ZWNJ character (Zero Width non-Joiner) as Space

From: Benjamin Riefenstahl <[email-masked]>
Date: Sat, 16 Sep 2017 19:30:05 +0200

Hi all,

A few thoughts from an occasional user of this feature.

Eli Zaretskii writes:
> [...] I thought the shaping engine gives us back glyphs that don't
> include ZWNJ itself.  Evidently, that's not true, which I find
> strange.

I thought that with OpenType at least that depends on the font?  Not
that I trust that fonts do the right thing.  I think the right thing for
the font would be to just implement the behaviour (break up ligatgures,
prevent shaping), but not show a glyph.  Emacs could of course work
around fonts that *do* show a glyph by rendering the characters before
and after the ZWNJ separately.

For read-only text (Info, Gnus) that is the behaviour that I would like.

For editing, I would like a hair-line type glyph to delete.  But I
personally can live with not showing a glyph, and deleting ZWNJ with the
character after it, so that X ZWNJ Y BACKSPACE results in "X".  I think
in this scenario multiple ZWNJs should be deleted as one.  This is
similar to composed characters, I think.

We should also consider what to do about ZWJ and the bidi directional
control characters.  ZWJ handling must come from the font, I think, so
this really can only work when the font works right, but than ZWJ is
probably more rarely used, so it's ok not to try to work around bad
fonts.

Other issues (excuse the verbosity, most of you know all this already,
of course):

* Hightlighting ZWNJ in read-only text while searching for it with
  incremental search.

* Read-only parts of buffers that are not completely read-only
  (Customize, minibuffer prompts).

* User-specified replacement via display tables. 

benny