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-sexp
defun
For example, in Emacs the function definition of
dired-unmark-all-marks
is as follows.
(defun dired-unmark-all-marks () "Remove all marks from all files in the Dired buffer." (interactive) (dired-unmark-all-files ?\r))
interactive
Common code characters are:
b
f
p
p
is lower case.)
r
See Code Characters for ‘interactive’, for a complete list of
code characters.
let
let
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-excursion
For example,
(message "We are %d characters into this buffer." (- (point) (save-excursion (goto-char (point-min)) (point))))
if
The 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.
equal
eq
equal
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-lessp
string=
string-equal
string-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 <=
.
message
setq
set
setq
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-name
buffer-file-name
current-buffer
other-buffer
other-buffer
as an argument and other than the current
buffer).
switch-to-buffer
set-buffer
buffer-size
point
point-min
point-max