| www.delorie.com/gnu/docs/emacs-lisp-intro/emacs-lisp-intro_100.html | search |
![]() Buy the book! | |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
In beginning-of-buffer, the inner if expression tests
whether the size of the buffer is greater than 10,000 characters. To do
this, it uses the > function and the buffer-size function.
The line looks like this:
(if (> (buffer-size) 10000) |
When the buffer is large, the then-part of the if expression is
evaluated. It reads like this (after formatting for easy reading):
(* (prefix-numeric-value arg) (/ (buffer-size) 10)) |
This expression is a multiplication, with two arguments to the function
*.
The first argument is (prefix-numeric-value arg). When
"P" is used as the argument for interactive, the value
passed to the function as its argument is passed a "raw prefix
argument", and not a number. (It is a number in a list.) To perform
the arithmetic, a conversion is necessary, and
prefix-numeric-value does the job.
The second argument is (/ (buffer-size) 10). This expression
divides the numeric value of the buffer by ten. This produces a number
that tells how many characters make up one tenth of the buffer size.
(In Lisp, / is used for division, just as * is
used for multiplication.)
In the multiplication expression as a whole, this amount is multiplied by the value of the prefix argument--the multiplication looks like this:
(* numeric-value-of-prefix-arg number-of-characters-in-one-tenth-of-the-buffer) |
If, for example, the prefix argument is `7', the one-tenth value will be multiplied by 7 to give a position 70% of the way through the buffer.
The result of all this is that if the buffer is large, the
goto-char expression reads like this:
(goto-char (* (prefix-numeric-value arg)
(/ (buffer-size) 10)))
|
This puts the cursor where we want it.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
| webmaster donations bookstore | delorie software privacy |
| Copyright © 2003 by The Free Software Foundation | Updated Jun 2003 |