Go to the previous, next section.

The forward motion  while loop

The second part of the body of the  let* deals with forward motion. It is a  while loop that repeats itself so long as the value of  arg is greater than zero. In the most common use of the function, the value of the argument is 1, so the body of the  while loop is evaluated exactly once, and the cursor moves forward one paragraph.

This part handles three situations: when point is between paragraphs, when point is within a paragraph and there is a fill prefix, and when point is within a paragraph and there is no fill prefix.

The  while loop looks like this:

(while (> arg 0)
  (beginning-of-line)

  ;; between paragraphs 
  (while (prog1 (and (not (eobp))
                     (looking-at paragraph-separate))
           (forward-line 1)))

  ;; within paragraphs, with a fill prefix
  (if fill-prefix-regexp
      ;; There is a fill prefix; it overrides paragraph-start.
      (while (and (not (eobp))
                  (not (looking-at paragraph-separate))
                  (looking-at fill-prefix-regexp))
        (forward-line 1))

    ;; within paragraphs, no fill prefix
    (if (re-search-forward paragraph-start nil t)
        (goto-char (match-beginning 0))
      (goto-char (point-max))))

  (setq arg (1- arg)))

We can see immediately that this is a decrementing counter  while loop, using the expression  (setq (1- arg)) as the decrementer. The body of the loop consists of three expressions:

;; between paragraphs 
(beginning-of-line)       
(while 
    body-of-while)

;; within paragraphs, with fill prefix
(if true-or-false-test    
    then-part             

;; within paragraphs, no fill prefix
  else-part               

When the Emacs Lisp interpreter evaluates the body of the  while loop, the first thing it does is evaluate the  (beginning-of-line) expression and move point to the beginning of the line. Then there is an inner  while loop. This  while loop is designed to move the cursor out of the blank space between paragraphs, if it should happen to be there. Finally there is an  if expression that actually moves point to the end of the paragraph.

Go to the previous, next section.