Subject: bug#4426: [PATCH] posn-at-point returns an incorrect value

From: Lars Magne Ingebrigtsen <[email-masked]>
Date: Sun, 18 Sep 2011 10:21:43 +0200

IRIE Shinsuke <[email-masked]> writes:

>    If header line is displayed, `posn-object-width-height' incorrectly
>    returns the size of object in position different from specified one.
>
>    For example, an expression
>
>      (posn-object-width-height (posn-at-point (window-start)))
>
>    must return the width and height of character on the top left corner
>    of text area, but actually returns the ones on the beginning of
>    header line.
>
> It turned out that this problem occurs as a result of confusion between
> it.vpos and MATRIX_ROW_VPOS in a function buffer_posn_from_coords
> (included in dispnew.c).
>
> So I wrote the small patch to fix this bug. Please check it.

[...]

> !   if (it.vpos < w->current_matrix->nrows
> !       && (row = MATRIX_ROW (w->current_matrix, it.vpos),
>   	  row->enabled_p))
>       {
>         if (it.hpos < row->used[TEXT_AREA])
> --- 5975,5984 ----
>       }
>   #endif
>   
> !   /* it.vpos isn't the same as MATRIX_ROW_VPOS if header line is displayed */
> !   matrix_vpos = (w->current_matrix->rows->mode_line_p ? 1 : 0) + it.vpos;
> !   if (matrix_vpos < w->current_matrix->nrows
> !       && (row = MATRIX_ROW (w->current_matrix, matrix_vpos),
>   	  row->enabled_p))
>       {
>         if (it.hpos < row->used[TEXT_AREA])

As far as I can tell, this patch hasn't been applied yet.  I'm not
familiar enough with this code to say whether this looks correct or
not.  Could someone take a look?

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/