On Mon, Jun 28, 2010 at 5:14 AM, Larry Denenberg <la...@denenberg.com>wrote:

>
> >The issue is whether we can safely force the echo area messages to
> >_always_ be rendered with left-to-right paragraph direction.  This is
> >what you are suggesting, right?
>
> Well, I made several suggestions, of which this was one.  Let me flesh
> it out a little bit.
>
> I think the best solution is this:  Echo buffers and the minibuffer
> should permit but not enforce bidirectionality, and anyone who writes to
> them must be sensitive to this fact and appropriately careful.  If you
> want to echo "X is not defined" as an LTR sentence with X variable, it's
> your job to be sure that X doesn't set the direction to something you
> didn't intend.
>
> The trouble is that zillions of messages were written without bidi in
> mind, and (as we've seen) at least one doesn't do the right thing.  So
> what should we do?  Check every message and fix all the offenders?
> You first, Indy.  In the meantime, what is a reasonable alternative?
>
> And here I will stand by my suggestion for forcing LTR.  The reasoning
> is something like this:  Emacs messages are written in English, which is
> LTR.  They may contain arbitrary text, but that text---even if displayed
> RTL---is essentially in quotes and can't change the directionality.
>
>
My own suggestion was to set the direction according to the language in
LC_MESSAGES ("system-messages-locale" in emacs) if the proper translation is
installed, LTR otherwise. However, a quick search seems to indicate that at
the moment there is no i18n for emacs at all (there is a new i18n project,
but I did not find any code there:
http://savannah.nongnu.org/projects/emacs-i18n ).
Given the above, my suggestion becomes identical to yours: set
directionality to LTR in system messages, possibly leaving an option for the
user to force to RTL in specific messages.

[snipped some arguments, to which I fully agree]


> >Btw, there's something I overlooked before: why exactly is ^ב
> >considered a strong R2L character?  Could you please go to it in the "
> >*Echo Area 0/1*" buffer, type "C-u C-x =", and show what Emacs tells
> >about that character?
>
> First of all, I don't think your procedure works.  You can make the
> message appear, and with care you can get a cursor on top of it, but
> typing C-u (or most anything else) changes the buffer contents---it's
> not called the Echo Area for nothing!  To get your hands on the
> character you'd have to write a function that grabs the contents of the
> buffer and bind it to a key, or in some other way avoid echoing.
>
>
How exactly did you get the ^x?
The echo messages that I see here look like C-x.
Also, I was able to get it in the minibuffer by using the interactive
global-set-key command. Seems like what was inserted in the buffer was
actually "C","-","א".

But there's no point in trying.  The buffer can't possibly contain an
> actual ^ב.  No buffer can.  Buffers and strings can contain only those
> characters encodable in 22 bits.  If your input facilities permit, you
> can prove this by typing ^Q ^ב; Emacs refuses to insert such a character
> (Wrong type argument: char-or-string-p, 67110353).  From the manual:
>
>     In strings and buffers, the only control characters allowed are
>     those that exist in ASCII; but for keyboard input purposes, you can
>     turn any character into a control character with `C-'.  The
>     character codes for these non-ASCII control characters include the
>     2**26 bit as well as the code for the corresponding non-control
>     character.  Ordinary terminals have no way of generating non-ASCII
>     control characters, but you can generate them straightforwardly
>     using X and other window systems.
>
> Here's what I think is happening:  The code that complains about
> undefined characters handles uninsertable characters (things like ^ב and
> meta-control-mouse-down) by translating them to visible representation.
> So the message contains a real caret followed by ב.  That is, the first
> character has no strong directionality, and the directionality is set by
> the second character, a non-control ב.
>

But then the reordering algorithm would have rendered it ב^ and not ^ב as
you saw. Probably the truth is in between - maybe the handling of
uninsertables is done AFTER reordering, so from the POV of the reordering
algorithm it is considered a single character as Eli said.

   AA
_______________________________________________
emacs-bidi mailing list
emacs-bidi@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-bidi

Reply via email to