emacs-pretest-bug
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: invisible


From: Miles Bader
Subject: Re: invisible
Date: 03 Mar 2004 13:16:35 +0900

On Tue, Mar 02, 2004 at 06:39:25PM +0200, Eli Zaretskii wrote:
> > Can you describe a situation where it occurs?
> > 
> >  X Y Z 1 2 3 A B C
> > 1 2 3 4 5 6 7 8 9 0
> > 
> >  Z Y X 1 2 3 C B A
> > 3 2 1 4 5 6 9 8 7 0
> 
> You've just described it: suppose the cursor is on X, what is the
> current value of point?

Ah, that was just my thinking out loud I forgot to delete from my mail
buffer...

Anyway the first two lines were supposed to be the buffer contents, and the
second two lines the corresponding bidi'd display contents; the digit row
represents the buffer positions.

> For that matter, why did you choose to put the point positions as
> 
> >  Z Y X 1 2 3 C B A
> > 3 2 1 4 5 6 9 8 7 0
> 
> and not as
> 
> >  Z Y X 1 2 3 C B A
> > 4 3 2 1 5 6 0 9 8 7

The display cursor conventionally sits on top of the character following
the point position the cursor's located at, so in my picture I tried to
preserve that property.  So for instance, if the cursor is displayed on
top of Z, that should represent the buffer position before Z, IOW, 3.

> Or say we start marking text from Z by
> dragging a mouse to the right--what should happen when we get to 1?

Yeah, regions (e.g. dragging) are a problem; presumably it's necessary
to map into a contiguous region to make the generic emacs buffer
operations happy.
                                                                               
E.g., one possible way of mapping bidi selections into buffer regions,
and then into display (here [ and ] are what the user drags, and * is
what the display engine highlights):

  SELECTION (min,max = 2,3) =>      BUFFER        =>          DISPLAY
 Z [Y] X  1  2  3  C  B  A     X[Y]Z 1 2 3 A B C     Z  Y  X  1  2  3  C  B  A
3 42 31 24 55 66 79 08 97 8   1 2*3 4 5 6 7 8 9 0       *                      
                                                                               
  SELECTION (min,max = 1,3) =>      BUFFER        =>          DISPLAY
 Z [Y  X] 1  2  3  C  B  A    [X Y]Z 1 2 3 A B C     Z  Y  X  1  2  3  C  B  A
3 42 31 24 55 66 79 08 97 8   1*2*3 4 5 6 7 8 9 0       *  *                   
                                                                               
  SELECTION (min,max = 1,5) =>      BUFFER        =>          DISPLAY
 Z [Y  X  1] 2  3  C  B  A    [X Y Z 1]2 3 A B C     Z  Y  X  1  2  3  C  B  A
3 42 31 24 55 66 79 08 97 8   1*2*3*4*5 6 7 8 9 0    *  *  *  *                
                                                                               
  SELECTION (min,max = 1,6) =>      BUFFER        =>          DISPLAY
 Z [Y  X  1  2] 3  C  B  A    [X Y Z 1 2]3 A B C     Z  Y  X  1  2  3  C  B  A
3 42 31 24 55 66 79 08 97 8   1*2*3*4*5*6 7 8 9 0    *  *  *  *  *             

Dragging to select Y - 2 selects Z even though the user probably didn't
want it.

Gack...

-Miles
-- 
A zen-buddhist walked into a pizza shop and
said, "Make me one with everything."




reply via email to

[Prev in Thread] Current Thread [Next in Thread]