I think this is the kind of mixin that belongs in the framework and, if you don&#39;t want it, you don&#39;t mix it in.<div><br></div><div>The preferences dialog additions could be DrRacket-specific, tho.</div><div><br></div>
<div>Also, option 2 should probably have a button in the dialog that adjusts the preference to one of the two &quot;silent&quot; modes.</div><div><br></div><div>Robby<br><br>On Thursday, April 19, 2012, Eli Barzilay  wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">An hour ago, Danny Yoo wrote:<br>
&gt; On Thu, Apr 12, 2012 at 5:26 PM, Robby Findler<br>
&gt; &lt;<a href="javascript:;" onclick="_e(event, &#39;cvml&#39;, &#39;robby@eecs.northwestern.edu&#39;)">robby@eecs.northwestern.edu</a>&gt; wrote:<br>
&gt; &gt; Yes, normalization doesn&#39;t deal with those spaces. It does change<br>
&gt; &gt; the text in ways that are unfriendly and I often tell DrRacket<br>
&gt; &gt; &quot;no&quot; when it asks about normalization. I just wanted to put that<br>
&gt; &gt; into the mix for this conversation, since it is a place that has<br>
&gt; &gt; to deal with similar issues.<br>
&gt;<br>
&gt; I propose a backtrack my current patch, and instead to do the<br>
&gt; following:<br>
&gt;<br>
&gt; ---<br>
&gt;<br>
&gt; * Add a set of choices in the editor Preferences pane, with the<br>
&gt;   following options:<br>
&gt;<br>
&gt;     Treatment of Unicode zero-width characters (such as zero-width spaces):<br>
&gt;<br>
&gt;     1. Preserve them.<br>
&gt;     2. When introduced, prompt a dialog choice to delete them.<br>
&gt;     3. Automatically delete them.<br>
&gt;<br>
&gt; with the default preference to be option 2.<br>
<br>
I see some problems here that need to be addressed.<br>
<br>
The first problem is the definition of &quot;zero-width characters&quot;: some<br>
of these are not problematic -- for example, #\u05B0 is something that<br>
gets added to a letter so it doesn&#39;t have its own width.  OTOH, there<br>
are many other sources of confusion that are not at all related to<br>
width, like #\u0392 which is usually even displayed using the same &quot;B&quot;<br>
character so there&#39;s no visual difference.<br>
<br>
The second problem is the thir option offering to just delete them.<br>
Since I view a &quot;proper&quot; solution as something that can deal with all<br>
of these problems, plain deletion is obviously not always the right<br>
solution.<br>
<br>
The third problem is something that I already mentioned: even if both<br>
of the above points are addressed, what if I choose #3 because it<br>
seems like an easy way to avoid such problems, and later I get bitten<br>
when I paste some text with an intention of keeping these things in?<br>
There&#39;s no way to avoid it by saying that it&#39;s only a few people who<br>
would run into these things -- since these people are exactly the kind<br>
of people who are likely to suffer these results.  (IOW, if I deal<br>
with weird texts, I&#39;m likely to get nagged a lot and choose #3, and<br>
I&#39;m also likely to want these things in strings.)<br>
<br>
So I think that this should be revised as follows:<br>
<br>
1. Drop the whole &quot;zero-width&quot;, and instead just use something that<br>
   indicates &quot;potentially confusing&quot;.  (I&#39;m surprised that this thread<br>
   keeps focusing on just zero-width spaces.)<br>
<br>
2. Change #2 to some form of &quot;normalization&quot;.  (That&#39;s a bad term<br>
   since it has a specific sense, but I&#39;m sure that there&#39;s some term<br>
   somewhere for these kind of changes.)<br>
<br>
3. Remove option #3.<br>
<br>
Alternatively: add a display mode that &quot;spells out&quot; all of the fishy<br>
characters, as done in Emacs when you open a file in literal mode.<br>
<br>
<br>
&gt; * Collect the set of zero-width characters.  Zero-width spaces, of<br>
&gt; course, but also see what other Unicode characters exhibit similar<br>
&gt; weird behavior.<br>
<br>
(I completely agree with this -- the list of these things will grow;<br>
only not restricted to zero-width-ness.)<br>
<br>
--<br>
          ((lambda (x) (x x)) (lambda (x) (x x)))          Eli Barzilay:<br>
                    <a href="http://barzilay.org/" target="_blank">http://barzilay.org/</a>                   Maze is Life!<br>
</blockquote></div>