GNU Info

Info Node: (emacs-lisp-intro.info)Small buffer case

(emacs-lisp-intro.info)Small buffer case


Prev: Large buffer case Up: beginning-of-buffer opt arg
Enter node , (file) or (file)node

What happens in a small buffer
..............................

   If the buffer contains fewer than 10,000 characters, a slightly
different computation is performed.  You might think this is not
necessary, since the first computation could do the job.  However, in a
small buffer, the first method may not put the cursor on exactly the
desired line; the second method does a better job.

   The code looks like this:

     (/ (+ 10 (* (buffer-size) (prefix-numeric-value arg))) 10))

This is code in which you figure out what happens by discovering how the
functions are embedded in parentheses.  It is easier to read if you
reformat it with each expression indented more deeply than its
enclosing expression:

       (/
        (+ 10
           (*
            (buffer-size)
            (prefix-numeric-value arg)))
        10))

Looking at parentheses, we see that the innermost operation is
`(prefix-numeric-value arg)', which converts the raw argument to a
number.  This number is multiplied by the buffer size in the following
expression:

     (* (buffer-size) (prefix-numeric-value arg)

This multiplication creates a number that may be larger than the size of
the buffer--seven times larger if the argument is 7, for example.  Ten
is then added to this number and finally the large number is divided by
ten to provide a value that is one character larger than the percentage
position in the buffer.

   The number that results from all this is passed to `goto-char' and
the cursor is moved to that point.


automatically generated by info2www version 1.2.2.9