Mercurial > emacs
changeset 109685:5cfe70ae40e5
Fix overlay arrow display, make doc strings bidi-friendly.
xdisp.c (display_line): Move the handling of overlay arrow after
the call to find_row_edges. (Bug#6699)
cmds.c (Fforward_line, Fbeginning_of_line, Fend_of_line):
editfns.c (Fline_beginning_position, Fline_end_position): State
in the doc strings that start and end of line are in the logical order.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Sun, 08 Aug 2010 19:51:56 +0300 |
parents | bc0b9af387a7 (current diff) dbc0119ac80e (diff) |
children | 111f90199914 |
files | |
diffstat | 4 files changed, 42 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Sat Aug 07 22:04:57 2010 -0500 +++ b/src/ChangeLog Sun Aug 08 19:51:56 2010 +0300 @@ -1,3 +1,13 @@ +2010-08-08 Eli Zaretskii <eliz@gnu.org> + + * cmds.c (Fforward_line, Fbeginning_of_line, Fend_of_line): + * editfns.c (Fline_beginning_position, Fline_end_position): State + in the doc strings that start and end of line are in the logical + order. + + * xdisp.c (display_line): Move the handling of overlay arrow after + the call to find_row_edges. (Bug#6699) + 2010-08-07 Chong Yidong <cyd@stupidchicken.com> * keyboard.c (command_loop_1):
--- a/src/cmds.c Sat Aug 07 22:04:57 2010 -0500 +++ b/src/cmds.c Sun Aug 08 19:51:56 2010 +0300 @@ -113,7 +113,8 @@ DEFUN ("forward-line", Fforward_line, Sforward_line, 0, 1, "^p", doc: /* Move N lines forward (backward if N is negative). -Precisely, if point is on line I, move to the start of line I + N. +Precisely, if point is on line I, move to the start of line I + N +\("start of line" in the logical order). If there isn't room, go as far as possible (no error). Returns the count of lines left to move. If moving forward, that is N - number of lines moved; if backward, N + number moved. @@ -157,7 +158,7 @@ } DEFUN ("beginning-of-line", Fbeginning_of_line, Sbeginning_of_line, 0, 1, "^p", - doc: /* Move point to beginning of current line. + doc: /* Move point to beginning of current line (in the logical order). With argument N not nil or 1, move forward N - 1 lines first. If point reaches the beginning or end of buffer, it stops there. @@ -181,7 +182,7 @@ } DEFUN ("end-of-line", Fend_of_line, Send_of_line, 0, 1, "^p", - doc: /* Move point to end of current line. + doc: /* Move point to end of current line (in the logical order). With argument N not nil or 1, move forward N - 1 lines first. If point reaches the beginning or end of buffer, it stops there. To ignore intangibility, bind `inhibit-point-motion-hooks' to t.
--- a/src/editfns.c Sat Aug 07 22:04:57 2010 -0500 +++ b/src/editfns.c Sun Aug 08 19:51:56 2010 +0300 @@ -805,6 +805,9 @@ With argument N not nil or 1, move forward N - 1 lines first. If scan reaches end of buffer, return that position. +The returned position is of the first character in the logical order, +i.e. the one that has the smallest character position. + This function constrains the returned position to the current field unless that would be on a different line than the original, unconstrained result. If N is nil or 1, and a front-sticky field @@ -843,6 +846,9 @@ With argument N not nil or 1, move forward N - 1 lines first. If scan reaches end of buffer, return that position. +The returned position is of the last character in the logical order, +i.e. the character whose buffer position is the largest one. + This function constrains the returned position to the current field unless that would be on a different line than the original, unconstrained result. If N is nil or 1, and a rear-sticky field ends
--- a/src/xdisp.c Sat Aug 07 22:04:57 2010 -0500 +++ b/src/xdisp.c Sun Aug 08 19:51:56 2010 +0300 @@ -11352,6 +11352,8 @@ && (MATRIX_ROW_START_CHARPOS (row) == marker_position (val))) { if (FRAME_WINDOW_P (it->f) + /* FIXME: if ROW->reversed_p is set, this should test + the right fringe, not the left one. */ && WINDOW_LEFT_FRINGE_WIDTH (it->w) > 0) { #ifdef HAVE_WINDOW_SYSTEM @@ -17798,6 +17800,26 @@ row->truncated_on_left_p = 1; } + /* Remember the position at which this line ends. + + BIDI Note: any code that needs MATRIX_ROW_START/END_CHARPOS + cannot be before the call to find_row_edges below, since that is + where these positions are determined. */ + row->end = it->current; + if (!it->bidi_p) + { + row->minpos = row->start.pos; + row->maxpos = row->end.pos; + } + else + { + /* ROW->minpos and ROW->maxpos must be the smallest and + `1 + the largest' buffer positions in ROW. But if ROW was + bidi-reordered, these two positions can be anywhere in the + row, so we must determine them now. */ + find_row_edges (it, row, min_pos, min_bpos, max_pos, max_bpos); + } + /* If the start of this line is the overlay arrow-position, then mark this glyph row as the one containing the overlay arrow. This is clearly a mess with variable size fonts. It would be @@ -17843,22 +17865,6 @@ /* Compute pixel dimensions of this line. */ compute_line_metrics (it); - /* Remember the position at which this line ends. */ - row->end = it->current; - if (!it->bidi_p) - { - row->minpos = row->start.pos; - row->maxpos = row->end.pos; - } - else - { - /* ROW->minpos and ROW->maxpos must be the smallest and - `1 + the largest' buffer positions in ROW. But if ROW was - bidi-reordered, these two positions can be anywhere in the - row, so we must determine them now. */ - find_row_edges (it, row, min_pos, min_bpos, max_pos, max_bpos); - } - /* Record whether this row ends inside an ellipsis. */ row->ends_in_ellipsis_p = (it->method == GET_FROM_DISPLAY_VECTOR