diff --git a/src/move.c b/src/move.c index 381dcb02..319d9c57 100644 --- a/src/move.c +++ b/src/move.c @@ -180,10 +180,8 @@ void do_para_begin(filestruct **line) *line = (*line)->prev; } -/* Move down to the last line of the current paragraph; then move down - * one line farther if there is such a line. Return FALSE when we could - * step one line further, and TRUE otherwise. */ -bool do_para_end(filestruct **line) +/* Move down to the last line of the first found paragraph. */ +void do_para_end(filestruct **line) { while ((*line)->next != NULL && !inpar(*line)) *line = (*line)->next; @@ -191,13 +189,6 @@ bool do_para_end(filestruct **line) while ((*line)->next != NULL && inpar((*line)->next) && !begpar((*line)->next, 0)) *line = (*line)->next; - - if ((*line)->next != NULL) { - *line = (*line)->next; - return FALSE; - } - - return TRUE; } /* Move up to first start of a paragraph before the current line. */ @@ -211,15 +202,20 @@ void do_para_begin_void(void) edit_redraw(was_current, CENTERING); } -/* Move down to just after the first end of a paragraph. */ +/* Move down to just after the first found end of a paragraph. */ void do_para_end_void(void) { filestruct *was_current = openfile->current; - if (do_para_end(&openfile->current)) - openfile->current_x = strlen(openfile->current->data); - else + do_para_end(&openfile->current); + + /* Step beyond the last line of the paragraph, if possible; + * otherwise, move to the end of the line. */ + if (openfile->current->next != NULL) { + openfile->current = openfile->current->next; openfile->current_x = 0; + } else + openfile->current_x = strlen(openfile->current->data); edit_redraw(was_current, CENTERING); } diff --git a/src/proto.h b/src/proto.h index 789da84c..5923670f 100644 --- a/src/proto.h +++ b/src/proto.h @@ -361,7 +361,7 @@ void do_page_up(void); void do_page_down(void); #ifdef ENABLE_JUSTIFY void do_para_begin(filestruct **line); -bool do_para_end(filestruct **line); +void do_para_end(filestruct **line); void do_para_begin_void(void); void do_para_end_void(void); #endif diff --git a/src/text.c b/src/text.c index 690797d5..4d11bd97 100644 --- a/src/text.c +++ b/src/text.c @@ -2051,23 +2051,17 @@ bool find_paragraph(filestruct **firstline, bool *touched_eof, *firstline = line; - /* Now move down to just beyond the end of the paragraph, if possible. */ - *touched_eof = do_para_end(&line); + /* Move down to the last line of the paragraph. */ + do_para_end(&line); - /* If the search for end-of-paragraph stopped at end-of-file, and we're - * not in a paragraph, it means that there aren't any paragraphs left. */ - if (*touched_eof && !inpar(line)) + /* When not in a paragraph now, there aren't any paragraphs left. */ + if (!inpar(line)) return FALSE; - /* Determine the length of the quoting part, and the number of lines - * in the found paragraph. */ + /* We found a paragraph; determine length of quoting and number of lines. */ *quotelen = quote_length((*firstline)->data); - *parlen = line->lineno - (*firstline)->lineno; - - /* When the last line of the buffer is part of the found paragraph, - * it means the paragraph is one line longer than computed. */ - if (*touched_eof) - (*parlen)++; + *parlen = line->lineno - (*firstline)->lineno + 1; + *touched_eof = (line->next == NULL); return TRUE; }