Next: defun Exercises, Previous: save-excursion, Up: Writing Defuns
In the last few chapters we have introduced a macro and a fair number of functions and special forms. Here they are described in brief, along with a few similar functions that have not been mentioned yet.
eval-last-sexpdefunFor example, in an early version of Emacs, the function definition was as follows. (It is slightly more complex now that it seeks the first non-whitespace character rather than the first visible character.)
(defun back-to-indentation ()
"Move point to first visible character on line."
(interactive)
(beginning-of-line 1)
(skip-chars-forward " \t"))
interactiveCommon code characters are:
bfprSee Code Characters for ‘interactive’, for a complete list of
code characters.
letlet and give them an initial value, either nil or a
specified value; then evaluate the rest of the expressions in the body
of the let and return the value of the last one. Inside the
body of the let, the Lisp interpreter does not see the values of
the variables of the same names that are bound outside of the
let.
For example,
(let ((foo (buffer-name))
(bar (buffer-size)))
(message
"This buffer is %s and has %d characters."
foo bar))
save-excursionFor example,
(message "We are %d characters into this buffer."
(- (point)
(save-excursion
(goto-char (point-min)) (point))))
ifThe if special form is called a conditional. There are
other conditionals in Emacs Lisp, but if is perhaps the most
commonly used.
For example,
(if (= 22 emacs-major-version)
(message "This is version 22 Emacs")
(message "This is not version 22 Emacs"))
<><=>=< function tests whether its first argument is smaller than
its second argument. A corresponding function, >, tests whether
the first argument is greater than the second. Likewise, <=
tests whether the first argument is less than or equal to the second and
>= tests whether the first argument is greater than or equal to
the second. In all cases, both arguments must be numbers or markers
(markers indicate positions in buffers).
== function tests whether two arguments, both numbers or
markers, are equal.
equaleqequal uses one meaning
of the word `same' and eq uses another: equal returns
true if the two objects have a similar structure and contents, such as
two copies of the same book. On the other hand, eq, returns
true if both arguments are actually the same object.
string<string-lesspstring=string-equalstring-lessp function tests whether its first argument is
smaller than the second argument. A shorter, alternative name for the
same function (a defalias) is string<.
The arguments to string-lessp must be strings or symbols; the
ordering is lexicographic, so case is significant. The print names of
symbols are used instead of the symbols themselves.
An empty string, ‘""’, a string with no characters in it, is smaller than any string of characters.
string-equal provides the corresponding test for equality. Its
shorter, alternative name is string=. There are no string test
functions that correspond to >, >=, or <=.
messagesetqsetsetq function sets the value of its first argument to the
value of the second argument. The first argument is automatically
quoted by setq. It does the same for succeeding pairs of
arguments. Another function, set, takes only two arguments and
evaluates both of them before setting the value returned by its first
argument to the value returned by its second argument.
buffer-namebuffer-file-namecurrent-bufferother-bufferother-buffer as an argument and other than the current
buffer).
switch-to-bufferset-bufferbuffer-sizepointpoint-minpoint-max