Node:fwd-para no fill prefix, Next:, Previous:fwd-para within paragraph, Up:forward-paragraph



No fill prefix

It is simplest to look at the code for the case when there is no fill prefix first. This code consists of yet another inner if expression, and reads as follows:

(if (re-search-forward paragraph-start nil t)
    (goto-char (match-beginning 0))
  (goto-char (point-max)))

This expression actually does the work that most people think of as the primary purpose of the forward-paragraph command: it causes a regular expression search to occur that searches forward to the start of the next paragraph and if it is found, moves point there; but if the start of another paragraph if not found, it moves point to the end of the accessible region of the buffer.

The only unfamiliar part of this is the use of match-beginning. This is another function that is new to us. The match-beginning function returns a number specifying the location of the start of the text that was matched by the last regular expression search.

The match-beginning function is used here because of a characteristic of a forward search: a successful forward search, regardless of whether it is a plain search or a regular expression search, will move point to the end of the text that is found. In this case, a successful search will move point to the end of the pattern for paragraph-start, which will be the beginning of the next paragraph rather than the end of the current one.

However, we want to put point at the end of the current paragraph, not at the beginning of the next one. The two positions may be different, because there may be several blank lines between paragraphs.

When given an argument of 0, match-beginning returns the position that is the start of the text that the most recent regular expression search matched. In this case, the most recent regular expression search is the one looking for paragraph-start, so match-beginning returns the beginning position of the pattern, rather than the end of the pattern. The beginning position is the end of the paragraph.

(Incidentally, when passed a positive number as an argument, the match-beginning function will place point at that parenthesized expression in the last regular expression. It is a useful function.)