*** empty log message ***

This commit is contained in:
Richard M. Stallman 1998-04-20 17:43:57 +00:00
parent b933f645ac
commit 969fe9b569
45 changed files with 3563 additions and 2882 deletions

View file

@ -54,7 +54,7 @@ of abbrevs when their abbreviations are inserted into a buffer.
If the value is @code{nil}, abbrevs may be defined, but they are not
expanded automatically.
This variable automatically becomes local when set in any fashion.
This variable automatically becomes buffer-local when set in any fashion.
@end defvar
@defvar default-abbrev-mode
@ -337,10 +337,6 @@ it is the local abbrev table in all buffers in Fundamental mode.
This is the local abbrev table used in Text mode.
@end defvar
@defvar c-mode-abbrev-table
This is the local abbrev table used in C mode.
@end defvar
@defvar lisp-mode-abbrev-table
This is the local abbrev table used in Lisp mode and Emacs Lisp mode.
@end defvar

View file

@ -143,6 +143,9 @@ an argument. Also, they do not discard text properties from the result.
This means that if you insert text with text properties into the minibuffer,
the minibuffer value really will contain text properties.
@item
Only the simple menu item format is supported (@pxref{Simple Menu Items}).
@item
You can still bind @code{x-resource-class} around a call to
@code{x-get-resource}, but it won't do anything special.
@ -225,7 +228,7 @@ special events. If you want to hold a party in Emacs, please let us
know.
@item
You can't do date arithmentic with @code{encode-time} any more.
You can't do date arithmetic with @code{encode-time} any more.
@item
The functions @code{command-execute} and @code{call-interactively} no

View file

@ -294,8 +294,7 @@ The standard definition of this function is as follows:
@smallexample
@group
(defun make-backup-file-name (file)
"Create the non-numeric backup file name for FILE.
@dots{}"
"Create the non-numeric backup file name for FILE@enddots{}"
(concat file "~"))
@end group
@end smallexample
@ -442,8 +441,7 @@ The standard definition of this function is as follows:
@group
(defun make-auto-save-file-name ()
"Return file name to use for auto-saves \
of current buffer.
@dots{}"
of current buffer@enddots{}"
(if buffer-file-name
@end group
@group
@ -550,7 +548,7 @@ buffer as of the last time it was read in, saved, or auto-saved. This is
used to detect a substantial decrease in size, and turn off auto-saving
in response.
If it is -1, that means auto-saving is temporarily shut off in this
If it is @minus{}1, that means auto-saving is temporarily shut off in this
buffer due to a substantial deletion. Explicitly saving the buffer
stores a positive value in this variable, thus reenabling auto-saving.
Turning auto-save mode off or on also alters this variable.

View file

@ -130,11 +130,11 @@ string abridged):
@end example
@noindent
This function binds a local variable to the current buffer, and then
@code{save-current-buffer} records which buffer that was. Next,
@code{set-buffer} makes another buffer current. Finally,
This function binds a local variable to record the current buffer, and
then @code{save-current-buffer} arranges to make it current again.
Next, @code{set-buffer} makes the specified buffer current. Finally,
@code{insert-buffer-substring} copies the string from the original
current buffer to the new current buffer.
current buffer to the specified (and now current) buffer.
If the buffer appended to happens to be displayed in some window,
the next redisplay will show how its text has changed. Otherwise, you
@ -204,10 +204,10 @@ existing buffer.
@tindex save-current-buffer
@defmac save-current-buffer body...
The @code{save-current-buffer} macro saves the identity of the current
buffer, evaluates the @var{body} forms, and finally restores the buffer.
The return value is the value of the last form in @var{body}. The
current buffer is restored even in case of an abnormal exit via
@code{throw} or error (@pxref{Nonlocal Exits}).
buffer, evaluates the @var{body} forms, and finally restores that buffer
as current. The return value is the value of the last form in
@var{body}. The current buffer is restored even in case of an abnormal
exit via @code{throw} or error (@pxref{Nonlocal Exits}).
If the buffer that used to be current has been killed by the time of
exit from @code{save-current-buffer}, then it is not made current again,
@ -383,10 +383,10 @@ buffer-file-name
@end example
It is risky to change this variable's value without doing various other
things. See the definition of @code{set-visited-file-name} in
@file{files.el}; some of the things done there, such as changing the
buffer name, are not strictly necessary, but others are essential to
avoid confusing Emacs.
things. Normally it is better to use @code{set-visited-file-name} (see
below); some of the things done there, such as changing the buffer name,
are not strictly necessary, but others are essential to avoid confusing
Emacs.
@end defvar
@defvar buffer-file-truename
@ -399,7 +399,7 @@ local, unaffected by @code{kill-local-variables}. @xref{Truenames}.
This buffer-local variable holds the file number and directory device
number of the file visited in the current buffer, or @code{nil} if no
file or a nonexistent file is visited. It is a permanent local,
unaffected by @code{kill-local-variables}. @xref{Truenames}.
unaffected by @code{kill-local-variables}.
The value is normally a list of the form @code{(@var{filenum}
@var{devnum})}. This pair of numbers uniquely identifies the file among
@ -443,9 +443,6 @@ the buffer as having no visited file.
@c Wordy to avoid overfull hbox. --rjc 16mar92
When the function @code{set-visited-file-name} is called interactively, it
prompts for @var{filename} in the minibuffer.
See also @code{clear-visited-file-modtime} and
@code{verify-visited-file-modtime} in @ref{Buffer Modification}.
@end deffn
@defvar list-buffers-directory
@ -669,19 +666,23 @@ buried (see @code{bury-buffer}, below). Several functions, notably
@code{other-buffer}, use this ordering. A buffer list displayed for the
user also follows this order.
In addition to the fundamental Emacs buffer list, each frame has its
own version of the buffer list, in which the buffers that have been
selected in that frame come first, starting with the buffers most
recently selected @emph{in that frame}. (This order is recorded in
@var{frame}'s @code{buffer-list} frame parameter; see @ref{Window Frame
Parameters}.) The buffers that were never selected in @var{frame} come
afterward, ordered according to the fundamental Emacs buffer list.
@defun buffer-list &optional frame
This function returns a list of all buffers, including those whose names
begin with a space. The elements are actual buffers, not their names.
This function returns the buffer list, including all buffers, even those
whose names begin with a space. The elements are actual buffers, not
their names.
If @var{frame} is @code{nil}, all the buffers appear in order of most
recent selection, regardless of which frames they were selected in.
If @var{frame} is a frame, then the buffers that have been selected in
@var{frame} all come at the front of the list, ordered by most recent
selection in @var{frame}. (This order is recorded in @var{frame}'s
@code{buffer-list} frame parameter; see @ref{X Frame Parameters}.) The
buffers that were never selected in @var{frame} come afterward, ordered
according to most recent selection in other frames.
If @var{frame} is a frame, this returns @var{frame}'s buffer list. If
@var{frame} is @code{nil}, the fundamental Emacs buffer list is used:
all the buffers appear in order of most recent selection, regardless of
which frames they were selected in.
@example
@group
@ -735,7 +736,7 @@ buffer list that is not now visible in any window in a visible frame.
If the selected frame has a non-@code{nil} @code{buffer-predicate}
parameter, then @code{other-buffer} uses that predicate to decide which
buffers to consider. It calls the predicate once for each buffer, and
if the value is @code{nil}, that buffer is ignored. @xref{X Frame
if the value is @code{nil}, that buffer is ignored. @xref{Window Frame
Parameters}.
@c Emacs 19 feature
@ -946,7 +947,7 @@ themselves.
completely separate. They have different names, different values of
point, different narrowing, different markers and overlays (though
inserting or deleting text in either buffer relocates the markers and
overlays for both), different major modes, and different local
overlays for both), different major modes, and different buffer-local
variables.
An indirect buffer cannot visit a file, but its base buffer can. If

View file

@ -2,7 +2,7 @@
@c This is part of the GNU Emacs Lisp Reference Manual.
@c Copyright (C) 1990, 1991, 1992, 1993, 1995, 1998 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
@node Calendar, Tips, Display, Top
@node Calendar, System Interface, Display, Top
@chapter Customizing the Calendar and Diary
There are many customizations that you can use to make the calendar and

View file

@ -385,7 +385,7 @@ one. No I/O.
@item s
Arbitrary text, read in the minibuffer and returned as a string
(@pxref{Text from Minibuffer}). Terminate the input with either
@key{LFD} or @key{RET}. (@kbd{C-q} may be used to include either of
@kbd{C-j} or @key{RET}. (@kbd{C-q} may be used to include either of
these characters in the input.) Prompt.
@item S
@ -401,7 +401,7 @@ Completion, Prompt.
@item x
A Lisp object, specified with its read syntax, terminated with a
@key{LFD} or @key{RET}. The object is not evaluated. @xref{Object from
@kbd{C-j} or @key{RET}. The object is not evaluated. @xref{Object from
Minibuffer}. Prompt.
@item X
@ -482,7 +482,7 @@ expressions, autoload objects that are declared as interactive
(non-@code{nil} fourth argument to @code{autoload}), and some of the
primitive functions.
A symbol is @code{commandp} if its function definition is
A symbol satisfies @code{commandp} if its function definition satisfies
@code{commandp}.
Keys and keymaps are not commands. Rather, they are used to look up
@ -507,7 +507,7 @@ Otherwise, the command is added only if it uses the minibuffer to read
an argument. @xref{Command History}.
The argument @var{keys}, if given, specifies the sequence of events to
use if the command inquires which events were used to invoke it.
supply if the command inquires which events were used to invoke it.
@end defun
@defun command-execute command &optional record-flag keys
@ -527,7 +527,7 @@ definition is handled by loading the specified library and then
rechecking the definition of the symbol.
The argument @var{keys}, if given, specifies the sequence of events to
use if the command inquires which events were used to invoke it.
supply if the command inquires which events were used to invoke it.
@end defun
@deffn Command execute-extended-command prefix-argument
@ -571,21 +571,22 @@ no difference whether @code{call-interactively} was called from Lisp or
directly from the editor command loop.) If the containing function was
called by Lisp evaluation (or with @code{apply} or @code{funcall}), then
it was not called interactively.
@end defun
The most common use of @code{interactive-p} is for deciding whether to
The most common use of @code{interactive-p} is for deciding whether to
print an informative message. As a special exception,
@code{interactive-p} returns @code{nil} whenever a keyboard macro is
being run. This is to suppress the informative messages and speed
execution of the macro.
For example:
For example:
@example
@group
(defun foo ()
(interactive)
(and (interactive-p)
(message "foo")))
(when (interactive-p)
(message "foo")))
@result{} foo
@end group
@ -611,7 +612,20 @@ foobar
@result{} (nil t)
@end group
@end example
@end defun
The other way to do this sort of job is to make the command take an
argument @code{print-message} which should be non-@code{nil} in an
interactive call, and use the @code{interactive} spec to make sure it is
non-@code{nil}. Here's how:
@example
(defun foo (&optional print-message)
(interactive "p")
(when print-message
(message "foo")))
@end example
The numeric prefix argument, provided by @samp{p}, is never @code{nil}.
@node Command Loop Info
@comment node-name, next, previous, up
@ -687,12 +701,19 @@ if all those events were characters. @xref{Input Events}.
@end example
@end defun
@defun this-command-keys-vector
Like @code{this-command-keys}, except that it always returns
the events in a vector, so you do never need to deal with the complexities
of storing input events in a string (@pxref{Strings of Events}).
@end defun
@defvar last-nonmenu-event
This variable holds the last input event read as part of a key
sequence, not counting events resulting from mouse menus.
This variable holds the last input event read as part of a key sequence,
not counting events resulting from mouse menus.
One use of this variable is for telling @code{x-popup-menu} where to pop
up a menu.
up a menu. It is also used internally by @code{y-or-n-p}
(@pxref{Yes-or-No Queries}).
@end defvar
@defvar last-command-event
@ -765,10 +786,9 @@ A symbol
There are two kinds of input you can get from the keyboard: ordinary
keys, and function keys. Ordinary keys correspond to characters; the
events they generate are represented in Lisp as characters. In Emacs
versions 18 and earlier, characters were the only events. The event
type of a character event is the character itself (an integer);
see @ref{Classifying Events}.
events they generate are represented in Lisp as characters. The event
type of a character event is the character itself (an integer); see
@ref{Classifying Events}.
@cindex modifier bits (of input character)
@cindex basic code (of input character)
@ -778,9 +798,9 @@ An input character event consists of a @dfn{basic code} between 0 and
@table @asis
@item meta
The
@iftex
@tex
$2^{27}$
@end iftex
@end tex
@ifinfo
2**27
@end ifinfo
@ -789,9 +809,9 @@ typed with the meta key held down.
@item control
The
@iftex
@tex
$2^{26}$
@end iftex
@end tex
@ifinfo
2**26
@end ifinfo
@ -805,9 +825,9 @@ Thus, the code for @kbd{C-a} is just 1.
But if you type a control combination not in @sc{ASCII}, such as
@kbd{%} with the control key, the numeric value you get is the code
for @kbd{%} plus
@iftex
@tex
$2^{26}$
@end iftex
@end tex
@ifinfo
2**26
@end ifinfo
@ -816,9 +836,9 @@ control characters).
@item shift
The
@iftex
@tex
$2^{25}$
@end iftex
@end tex
@ifinfo
2**25
@end ifinfo
@ -829,9 +849,9 @@ For letters, the basic code itself indicates upper versus lower case;
for digits and punctuation, the shift key selects an entirely different
character with a different basic code. In order to keep within the
@sc{ASCII} character set whenever possible, Emacs avoids using the
@iftex
@tex
$2^{25}$
@end iftex
@end tex
@ifinfo
2**25
@end ifinfo
@ -839,9 +859,9 @@ bit for those characters.
However, @sc{ASCII} provides no way to distinguish @kbd{C-A} from
@kbd{C-a}, so Emacs uses the
@iftex
@tex
$2^{25}$
@end iftex
@end tex
@ifinfo
2**25
@end ifinfo
@ -850,9 +870,9 @@ bit in @kbd{C-A} and not in
@item hyper
The
@iftex
@tex
$2^{24}$
@end iftex
@end tex
@ifinfo
2**24
@end ifinfo
@ -861,9 +881,9 @@ typed with the hyper key held down.
@item super
The
@iftex
@tex
$2^{23}$
@end iftex
@end tex
@ifinfo
2**23
@end ifinfo
@ -872,9 +892,9 @@ typed with the super key held down.
@item alt
The
@iftex
@tex
$2^{22}$
@end iftex
@end tex
@ifinfo
2**22
@end ifinfo
@ -1119,12 +1139,13 @@ events (@pxref{Click Events}), except that the @var{event-type} symbol
name contains the prefix @samp{down-}. The @samp{down-} prefix follows
modifier key prefixes such as @samp{C-} and @samp{M-}.
The function @code{read-key-sequence}, and therefore the Emacs command
loop as well, ignore any button-down events that don't have command
bindings. This means that you need not worry about defining button-down
events unless you want them to do something. The usual reason to define
a button-down event is so that you can track mouse motion (by reading
motion events) until the button is released. @xref{Motion Events}.
The function @code{read-key-sequence} ignores any button-down events
that don't have command bindings; therefore, the Emacs command loop
ignores them too. This means that you need not worry about defining
button-down events unless you want them to do something. The usual
reason to define a button-down event is so that you can track mouse
motion (by reading motion events) until the button is released.
@xref{Motion Events}.
@node Repeat Events
@subsection Repeat Events
@ -1220,8 +1241,7 @@ of the mouse without any button activity. Mouse motion events are
represented by lists that look like this:
@example
(mouse-movement
(@var{window} @var{buffer-pos} (@var{x} . @var{y}) @var{timestamp}))
(mouse-movement (@var{window} @var{buffer-pos} (@var{x} . @var{y}) @var{timestamp}))
@end example
The second element of the list describes the current position of the
@ -1230,17 +1250,7 @@ mouse, just as in a click event (@pxref{Click Events}).
The special form @code{track-mouse} enables generation of motion events
within its body. Outside of @code{track-mouse} forms, Emacs does not
generate events for mere motion of the mouse, and these events do not
appear.
@defspec track-mouse body@dots{}
This special form executes @var{body}, with generation of mouse motion
events enabled. Typically @var{body} would use @code{read-event}
to read the motion events and modify the display accordingly.
When the user releases the button, that generates a click event.
Typically, @var{body} should return when it sees the click event, and
discard that event.
@end defspec
appear. @xref{Mouse Tracking}.
@node Focus Events
@subsection Focus Events
@ -1454,7 +1464,7 @@ to an event type which specifies all of them. For example,
a mouse button or motion event.
These two functions return the starting or ending position of a
mouse-button event. The position is a list of this form:
mouse-button event, as a list of this form:
@example
(@var{window} @var{buffer-position} (@var{x} . @var{y}) @var{timestamp})
@ -1477,8 +1487,8 @@ event, the value is actually the starting position, which is the only
position such events have.
@end defun
These five functions take a position as described above, and return
various parts of it.
These five functions take a position list as described above, and
return various parts of it.
@defun posn-window position
Return the window that @var{position} is in.
@ -1503,6 +1513,8 @@ a cons cell @code{(@var{col} . @var{row})}. These are computed from the
Return the timestamp in @var{position}.
@end defun
These functions are useful for decoding scroll bar events.
@defun scroll-bar-event-ratio event
This function returns the fractional vertical position of a scroll bar
event within the scroll bar. The value is a cons cell
@ -1537,28 +1549,59 @@ of a pair of x and y coordinates.
string as containing text characters---the same kind of characters found
in buffers or files. Occasionally Lisp programs use strings that
conceptually contain keyboard characters; for example, they may be key
sequences or keyboard macro definitions. There are special rules for
how to put keyboard characters into a string, because they are not
limited to the range of 0 to 255 as text characters are.
sequences or keyboard macro definitions. However, storing keyboard
characters in a string is a complex matter, for reasons of historical
compatibility, and it is not always possible.
A keyboard character typed using the @key{META} key is called a
@dfn{meta character}. The numeric code for such an event includes the
@iftex
We recommend that new programs avoid dealing with these complexities
by not storing keyboard events in strings. Here is how to do that:
@itemize @bullet
@item
Use vectors instead of strings for key sequences, when you plan to use
them for anything other than as arguments @code{lookup-key} and
@code{define-key}. For example, you can use
@code{read-key-sequence-vector} instead of @code{read-key-sequence}, and
@code{this-command-keys-vector} instead of @code{this-command-keys}.
@item
Use vectors to write key sequence constants containing meta characters,
even when passing them directly to @code{define-key}.
@item
When you have to look at the contents of a key sequence that might be a
string, use @code{listify-key-sequence} (@pxref{Event Input Misc})
first, to convert it to a list.
@end itemize
The complexities stem from the modifier bits that keyboard input
characters can include. Aside from the Meta modifier, none of these
modifier bits can be included in a string, and the Meta modifier is
allowed only in special cases.
The earliest GNU Emacs versions represented meta characters as codes
in the range of 128 to 255. At that time, the basic character codes
ranged from 0 to 127, so all keyboard character codes did fit in a
string. Many Lisp programs used @samp{\M-} in string constants to stand
for meta characters, especially in arguments to @code{define-key} and
similar functions, and key sequences and sequences of events were always
represented as strings.
When we added support for larger basic character codes beyond 127, and
additional modifier bits, we had to change the representation of meta
characters. Now the flag that represents the Meta modifier in a
character is
@tex
$2^{27}$
@end iftex
@end tex
@ifinfo
2**27
@end ifinfo
bit; it does not even come close to fitting in a string. However,
earlier Emacs versions used a different representation for these
characters, which gave them codes in the range of 128 to 255. That did
fit in a string, and many Lisp programs contain string constants that
use @samp{\M-} to express meta characters, especially as the argument to
@code{define-key} and similar functions.
and such numbers cannot be included in a string.
We provide backward compatibility to run those programs using special
rules for how to put a keyboard character event in a string. Here are
the rules:
To support programs with @samp{\M-} in string constants, there are
special rules for including certain meta characters in a string.
Here are the rules for interpreting keyboard
@itemize @bullet
@item
@ -1567,36 +1610,39 @@ in the string unchanged.
@item
The meta variants of those characters, with codes in the range of
@iftex
@tex
$2^{27}$
@end iftex
@end tex
@ifinfo
2**27
@end ifinfo
to
@iftex
@tex
$2^{27} + 127$,
@end iftex
@end tex
@ifinfo
2**27+127,
@end ifinfo
can also go in the string, but you must change their
numeric values. You must set the
@iftex
@tex
$2^{7}$
@end iftex
@end tex
@ifinfo
2**7
@end ifinfo
bit instead of the
@iftex
@tex
$2^{27}$
@end iftex
@end tex
@ifinfo
2**27
@end ifinfo
bit,
resulting in a value between 128 and 255.
bit, resulting in a value between 128 and 255. Only a unibyte string
can include these codes.
@item
Non-@sc{ASCII} characters above 256 can be included in a multibyte string.
@item
Other keyboard character events cannot fit in a string. This includes
@ -1613,31 +1659,18 @@ modify the corresponding keyboard event to put it in the string. Thus,
meta events in strings work consistently regardless of how they get into
the strings.
The reason we changed the representation of meta characters as
keyboard events is to make room for basic character codes beyond 127,
and support meta variants of such larger character codes.
New programs can avoid dealing with these special compatibility rules
by using vectors instead of strings for key sequences when there is any
possibility that they might contain meta characters, and by using
@code{listify-key-sequence} to access a string of events.
@defun listify-key-sequence key
This function converts the string or vector @var{key} to a list of
events, which you can put in @code{unread-command-events}. Converting a
vector is simple, but converting a string is tricky because of the
special representation used for meta characters in a string.
@end defun
However, most programs would do well to avoid these issues by
following the recommendations at the beginning of this section.
@node Reading Input
@section Reading Input
The editor command loop reads keyboard input using the function
The editor command loop reads key sequences using the function
@code{read-key-sequence}, which uses @code{read-event}. These and other
functions for keyboard input are also available for use in Lisp
programs. See also @code{momentary-string-display} in @ref{Temporary
Displays}, and @code{sit-for} in @ref{Waiting}. @xref{Terminal Input},
for functions and variables for controlling terminal input modes and
functions for event input are also available for use in Lisp programs.
See also @code{momentary-string-display} in @ref{Temporary Displays},
and @code{sit-for} in @ref{Waiting}. @xref{Terminal Input}, for
functions and variables for controlling terminal input modes and
debugging terminal input. @xref{Translating Input}, for features you
can use for translating or modifying input events while reading them.
@ -1671,10 +1704,6 @@ Otherwise, it returns a vector, since a vector can hold all kinds of
events---characters, symbols, and lists. The elements of the string or
vector are the events in the key sequence.
The function @code{read-key-sequence} suppresses quitting: @kbd{C-g}
typed while reading with this function works like any other character,
and does not set @code{quit-flag}. @xref{Quitting}.
The argument @var{prompt} is either a string to be displayed in the echo
area as a prompt, or @code{nil}, meaning not to display a prompt.
@ -1692,6 +1721,16 @@ and the user types @kbd{C-x C-f}.
@result{} "^X^F"
@end group
@end example
The function @code{read-key-sequence} suppresses quitting: @kbd{C-g}
typed while reading with this function works like any other character,
and does not set @code{quit-flag}. @xref{Quitting}.
@end defun
@defun read-key-sequence-vector prompt
This is like @code{read-key-sequence} except that it always
returns the key sequence as a vector, never as a string.
@xref{Strings of Events}.
@end defun
@cindex upper case key sequence
@ -1819,9 +1858,9 @@ The command @code{quoted-insert} uses this function.
@cindex control characters, reading
@cindex nonprinting characters, reading
This function is like @code{read-char}, except that if the first
character read is an octal digit (0-7), it reads up to two more octal digits
(but stopping if a non-octal digit is found) and returns the
character represented by those digits in octal.
character read is an octal digit (0-7), it reads any number of octal
digits (but stopping if a non-octal digit is found), and returns the
character represented by that numeric character code.
Quitting is suppressed when the first character is read, so that the
user can enter a @kbd{C-g}. @xref{Quitting}.
@ -1882,6 +1921,11 @@ Normally you add events to the front of this list, so that the events
most recently unread will be reread first.
@end defvar
@defun listify-key-sequence key
This function converts the string or vector @var{key} to a list of
individual events, which you can put in @code{unread-command-events}.
@end defun
@defvar unread-command-char
This variable holds a character to be read as command input.
A value of -1 means ``empty''.
@ -1900,6 +1944,7 @@ may return @code{t} when no input is available.
@end defun
@defvar last-input-event
@defvarx last-input-char
This variable records the last terminal input event read, whether
as part of a command or explicitly by a Lisp program.
@ -1919,7 +1964,6 @@ this expression) remains the value of @code{last-command-event}.
@end group
@end example
@vindex last-input-char
The alias @code{last-input-char} exists for compatibility with
Emacs version 18.
@end defvar
@ -2049,9 +2093,9 @@ innermost active command loop.
does not cause a quit; it acts as an ordinary input character. In the
simplest case, you cannot tell the difference, because @kbd{C-g}
normally runs the command @code{keyboard-quit}, whose effect is to quit.
However, when @kbd{C-g} follows a prefix key, the result is an undefined
key. The effect is to cancel the prefix key as well as any prefix
argument.
However, when @kbd{C-g} follows a prefix key, they combine to form an
undefined key. The effect is to cancel the prefix key as well as any
prefix argument.
In the minibuffer, @kbd{C-g} has a different definition: it aborts out
of the minibuffer. This means, in effect, that it exits the minibuffer
@ -2104,15 +2148,15 @@ normal quitting is permitted after the first character of input.
@example
(defun read-quoted-char (&optional prompt)
"@dots{}@var{documentation}@dots{}"
(let ((count 0) (code 0) char)
(while (< count 3)
(let ((inhibit-quit (zerop count))
(help-form nil))
(and prompt (message "%s-" prompt))
(setq char (read-char))
(if inhibit-quit (setq quit-flag nil)))
@dots{})
(logand 255 code)))
(let ((message-log-max nil) done (first t) (code 0) char)
(while (not done)
(let ((inhibit-quit first)
@dots{})
(and prompt (message "%s-" prompt))
(setq char (read-event))
(if inhibit-quit (setq quit-flag nil)))
@r{@dots{}set the variable @code{code}@dots{}})
code))
@end example
@defvar quit-flag

View file

@ -3,12 +3,12 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
@setfilename ../info/compile
@node Byte Compilation, Debugging, Loading, Top
@node Byte Compilation, Advising, Loading, Top
@chapter Byte Compilation
@cindex byte-code
@cindex compilation
GNU Emacs Lisp has a @dfn{compiler} that translates functions written
Emacs Lisp has a @dfn{compiler} that translates functions written
in Lisp into a special representation called @dfn{byte-code} that can be
executed more efficiently. The compiler replaces Lisp function
definitions with byte-code. When a byte-code function is called, its
@ -21,15 +21,17 @@ transportable from machine to machine without recompilation. It is not,
however, as fast as true compiled code.
In general, any version of Emacs can run byte-compiled code produced
by recent earlier versions of Emacs, but the reverse is not true. In
particular, if you compile a program with Emacs 19.29, the compiled
code does not run in earlier versions.
by recent earlier versions of Emacs, but the reverse is not true. A
major incompatible change was introduced in Emacs version 19.29, and
files compiled with versions since that one will definitely not run
in earlier versions unless you specify a special option.
@iftex
@xref{Docs and Compilation}.
@end iftex
Files compiled in versions before 19.29 may not work in 19.29 if they
contain character constants with modifier bits, because the bits were
renumbered in Emacs 19.29.
In addition, the modifier bits in keyboard characters were renumbered in
Emacs 19.29; as a result, files compiled in versions before 19.29 will
not work in subsequent versions if they contain character constants with
modifier bits.
@xref{Compilation Errors}, for how to investigate errors occurring in
byte compilation.
@ -99,9 +101,10 @@ in a buffer called @samp{*Compile-Log*}. These report things in your
program that suggest a problem but are not necessarily erroneous.
@cindex macro compilation
Be careful when byte-compiling code that uses macros. Macro calls are
expanded when they are compiled, so the macros must already be defined
for proper compilation. For more details, see @ref{Compiling Macros}.
Be careful when writing macro calls in files that you may someday
byte-compile. Macro calls are expanded when they are compiled, so the
macros must already be defined for proper compilation. For more
details, see @ref{Compiling Macros}.
Normally, compiling a file does not evaluate the file's contents or
load the file. But it does execute any @code{require} calls at top
@ -200,10 +203,9 @@ This function recompiles every @samp{.el} file in @var{directory} that
needs recompilation. A file needs recompilation if a @samp{.elc} file
exists but is older than the @samp{.el} file.
When a @samp{.el} file has no corresponding @samp{.elc} file, then
@var{flag} says what to do. If it is @code{nil}, these files are
ignored. If it is non-@code{nil}, the user is asked whether to compile
each such file.
When a @samp{.el} file has no corresponding @samp{.elc} file, @var{flag}
says what to do. If it is @code{nil}, these files are ignored. If it
is non-@code{nil}, the user is asked whether to compile each such file.
The returned value of this command is unpredictable.
@end deffn
@ -225,12 +227,13 @@ status code.
@cindex byte-code interpreter
This function actually interprets byte-code. A byte-compiled function
is actually defined with a body that calls @code{byte-code}. Don't call
this function yourself. Only the byte compiler knows how to generate
this function yourself---only the byte compiler knows how to generate
valid calls to this function.
In newer Emacs versions (19 and up), byte-code is usually executed as
part of a byte-code function object, and only rarely due to an explicit
call to @code{byte-code}.
In Emacs version 18, byte-code was always executed by way of a call to
the function @code{byte-code}. Nowadays, byte-code is usually executed
as part of a byte-code function object, and only rarely through an
explicit call to @code{byte-code}.
@end defun
@node Docs and Compilation
@ -269,13 +272,14 @@ directory where you built it, you will experience this problem
occasionally if you edit and recompile Lisp files. When it happens, you
can cure the problem by reloading the file after recompiling it.
Byte-compiled files made with Emacs 19.29 will not load into older
versions because the older versions don't support this feature. You can
turn off this feature by setting @code{byte-compile-dynamic-docstrings}
to @code{nil}. Once this is done, you can compile files that will load
into older Emacs versions. You can do this globally, or for one source
file by specifying a file-local binding for the variable. Here's one
way to do that:
Byte-compiled files made with recent versions of Emacs (since 19.29)
will not load into older versions because the older versions don't
support this feature. You can turn off this feature at compile time by
setting @code{byte-compile-dynamic-docstrings} to @code{nil}; then you
can compile files that will load into older Emacs versions. You can do
this globally, or for one source file by specifying a file-local binding
for the variable. One way to do that is by adding this string to the
file's first line:
@example
-*-byte-compile-dynamic-docstrings: nil;-*-
@ -292,7 +296,9 @@ that are set up for dynamic loading of documentation strings.
use a special Lisp reader construct, @samp{#@@@var{count}}. This
construct skips the next @var{count} characters. It also uses the
@samp{#$} construct, which stands for ``the name of this file, as a
string.'' It is best not to use these constructs in Lisp source files.
string.'' It is usually best not to use these constructs in Lisp source
files, since they are not designed to be clear to humans reading the
file.
@node Dynamic Loading
@section Dynamic Loading of Individual Functions
@ -309,10 +315,10 @@ replace the place-holder.
The advantage of dynamic function loading is that loading the file
becomes much faster. This is a good thing for a file which contains
many separate commands, provided that using one of them does not imply
you will soon (or ever) use the rest. A specialized mode which provides
many keyboard commands often has that usage pattern: a user may invoke
the mode, but use only a few of the commands it provides.
many separate user-callable functions, if using one of them does not
imply you will probably also use the rest. A specialized mode which
provides many keyboard commands often has that usage pattern: a user may
invoke the mode, but use only a few of the commands it provides.
The dynamic loading feature has certain disadvantages:
@ -323,19 +329,21 @@ longer load the remaining function definitions not already loaded.
@item
If you alter the compiled file (such as by compiling a new version),
then trying to load any function not already loaded will get nonsense
then trying to load any function not already loaded will yield nonsense
results.
@end itemize
If you compile a new version of the file, the best thing to do is
immediately load the new compiled file. That will prevent any future
problems.
These problems will never happen in normal circumstances with
installed Emacs files. But they are quite likely to happen with Lisp
files that you are changing. The easiest way to prevent these problems
is to reload the new compiled file immediately after each recompilation.
The byte compiler uses the dynamic function loading feature if the
variable @code{byte-compile-dynamic} is non-@code{nil} at compilation
time. Do not set this variable globally, since dynamic loading is
desirable only for certain files. Instead, enable the feature for
specific source files with file-local variable bindings, like this:
specific source files with file-local variable bindings. For example,
you could do it by writing this text in the source file's first line:
@example
-*-byte-compile-dynamic: t;-*-
@ -363,9 +371,8 @@ This form marks @var{body} to be evaluated both when you compile the
containing code and when you run it (whether compiled or not).
You can get a similar result by putting @var{body} in a separate file
and referring to that file with @code{require}. Using @code{require} is
preferable if there is a substantial amount of code to be executed in
this way.
and referring to that file with @code{require}. That method is
preferable when @var{body} is large.
@end defspec
@defspec eval-when-compile body
@ -375,10 +382,10 @@ compiler becomes a constant which appears in the compiled program. If
you load the source file, rather than compiling it, @var{body} is
evaluated normally.
At top level, this is analogous to the Common Lisp idiom
@code{(eval-when (compile eval) @dots{})}. Elsewhere, the Common Lisp
@samp{#.} reader macro (but not when interpreting) is closer to what
@code{eval-when-compile} does.
@strong{Common Lisp Note:} At top level, this is analogous to the Common
Lisp idiom @code{(eval-when (compile eval) @dots{})}. Elsewhere, the
Common Lisp @samp{#.} reader macro (but not when interpreting) is closer
to what @code{eval-when-compile} does.
@end defspec
@node Byte-Code Objects
@ -395,12 +402,8 @@ as a function to be called. The printed representation for a byte-code
function object is like that for a vector, with an additional @samp{#}
before the opening @samp{[}.
In Emacs version 18, there was no byte-code function object data type;
compiled functions used the function @code{byte-code} to run the byte
code.
A byte-code function object must have at least four elements; there is
no maximum number, but only the first six elements are actually used.
no maximum number, but only the first six elements have any normal use.
They are:
@table @var

View file

@ -460,8 +460,8 @@ first argument of @code{while}, as shown here:
@noindent
This moves forward one line and continues moving by lines until it
reaches an empty. It is unusual in that the @code{while} has no body,
just the end test (which also does the real work of moving point).
reaches an empty line. It is peculiar in that the @code{while} has no
body, just the end test (which also does the real work of moving point).
@end defspec
@node Nonlocal Exits
@ -718,15 +718,13 @@ These examples show typical uses of @code{error}:
@example
@group
(error "You have committed an error.
Try something else.")
@error{} You have committed an error.
Try something else.
(error "That is an error -- try something else")
@error{} That is an error -- try something else
@end group
@group
(error "You have committed %d errors." 10)
@error{} You have committed 10 errors.
(error "You have committed %d errors" 10)
@error{} You have committed 10 errors
@end group
@end example
@ -752,7 +750,7 @@ errors.
The number and significance of the objects in @var{data} depends on
@var{error-symbol}. For example, with a @code{wrong-type-arg} error,
there are two objects in the list: a predicate that describes the type
there should be two objects in the list: a predicate that describes the type
that was expected, and the object that failed to fit that type.
@xref{Error Symbols}, for a description of error symbols.
@ -772,8 +770,8 @@ it could sometimes return).
@end group
@group
(signal 'no-such-error '("My unknown error condition."))
@error{} peculiar error: "My unknown error condition."
(signal 'no-such-error '("My unknown error condition"))
@error{} peculiar error: "My unknown error condition"
@end group
@end smallexample
@end defun
@ -876,8 +874,8 @@ execution at the point of the error, nor can it examine variable
bindings that were made within the protected form. All it can do is
clean up and proceed.
@code{condition-case} is often used to trap errors that are
predictable, such as failure to open a file in a call to
The @code{condition-case} construct is often used to trap errors that
are predictable, such as failure to open a file in a call to
@code{insert-file-contents}. It is also used to trap errors that are
totally unpredictable, such as when the program evaluates an expression
read from the user.
@ -1159,7 +1157,12 @@ You might think that we could just as well write @code{(kill-buffer
However, the way shown above is safer, if @var{body} happens to get an
error after switching to a different buffer! (Alternatively, you could
write another @code{save-excursion} around the body, to ensure that the
temporary buffer becomes current in time to kill it.)
temporary buffer becomes current again in time to kill it.)
Emacs includes a standard macro called @code{with-temp-buffer} which
expands into more or less the code shown above (@pxref{Current Buffer}).
Several of the macros defined in this manual use @code{unwind-protect}
in this way.
@findex ftp-login
Here is an actual example taken from the file @file{ftp.el}. It
@ -1188,18 +1191,3 @@ quit, and the quit happens immediately after the function
@code{ftp-setup-buffer} returns but before the variable @code{process} is
set, the process will not be killed. There is no easy way to fix this bug,
but at least it is very unlikely.
Here is another example which uses @code{unwind-protect} to make sure
to kill a temporary buffer. In this example, the value returned by
@code{unwind-protect} is used.
@smallexample
(defun shell-command-string (cmd)
"Return the output of the shell command CMD, as a string."
(save-excursion
(set-buffer (generate-new-buffer " OS*cmd"))
(shell-command cmd t)
(unwind-protect
(buffer-string)
(kill-buffer (current-buffer)))))
@end smallexample

View file

@ -6,30 +6,29 @@
@node Customization, Loading, Macros, Top
@chapter Writing Customization Definitions
This chapter describes how to declare customization groups, variables,
and faces. We use the term @dfn{customization item} to include all
three of those. This has few examples, but please look at the file
@file{cus-edit.el}, which contains many declarations you can learn from.
This chapter describes how to declare user options for customization,
and also customization groups for classifying them. We use the term
@dfn{customization item} to include both kinds of customization
definitions---as well as face definitions (@pxref{Defining Faces}).
@menu
* Common Keywords::
* Group Definitions::
* Variable Definitions::
* Face Definitions::
* Customization Types::
@end menu
@node Common Keywords
@section Common Keywords for All Kinds of Items
All three kinds of customization declarations (for groups, variables,
and faces) accept keyword arguments for specifying various information.
This section describes some keywords that apply to all three.
All kinds of customization declarations (for variables and groups, and
for faces) accept keyword arguments for specifying various information.
This section describes some keywords that apply to all kinds.
All of these keywords, except @code{:tag}, can be used more than once in
a given item. Each use of the keyword has an independent effect. The
keyword @code{:tag} is an exception because any given item can only
display one name item.
All of these keywords, except @code{:tag}, can be used more than once
in a given item. Each use of the keyword has an independent effect.
The keyword @code{:tag} is an exception because any given item can only
display one name.
@table @code
@item :group @var{group}
@ -49,6 +48,10 @@ other documentation.
There are three alternatives you can use for @var{link-data}:
@table @code
@item :tag @var{name}
Use @var{name}, a string, instead of the item's name, to label the item
in customization menus and buffers.
@item (custom-manual @var{info-node})
Link to an Info node; @var{info-node} is a string which specifies the
node name, as in @code{"(emacs)Top"}. The link appears as
@ -59,8 +62,8 @@ Like @code{custom-manual} except that the link appears
in the customization buffer with the Info node name.
@item (url-link @var{url})
Link to a web page; @var{url} is a string which specifies the URL. The
link appears in the customization buffer as @var{url}.
Link to a web page; @var{url} is a string which specifies the @sc{url}.
The link appears in the customization buffer as @var{url}.
@end table
You can specify the text to use in the customization buffer by adding
@ -84,30 +87,27 @@ feature. This is done by calling @code{require}.
The most common reason to use @code{:require} is when a variable enables
a feature such as a minor mode, and just setting the variable won't have
any effect unless the code which implements the mode is loaded.
@item :tag @var{name}
Use @var{name}, a string, instead of the item's name, to label the item
in customization menus and buffers.
@end table
@node Group Definitions
@section Defining Custom Groups
Each Emacs Lisp package should have one main customization group which
Each Emacs Lisp package should have one main customization group which
contains all the options, faces and other groups in the package. If the
package has a small number of options and faces, use just one group and
put everything in it. When there are more than twelve or so options and
faces, then you should structure them into subgroups, and put the
subgroups under the package's main customization group. It is ok to
have some of the options and faces in the package's main group alongside
subgroups under the package's main customization group. It is OK to
put some of the options and faces in the package's main group alongside
the subgroups.
The package's main or only group should be a member of one or more of
the standard customization groups. Type press @kbd{C-h p} to display a
list of finder keywords; them choose some of them add your group to each
of them, using the @code{:group} keyword.
The package's main or only group should be a member of one or more of
the standard customization groups. (To display the full list of them,
use @kbd{M-x customize}.) Choose one or more of them (but not too
many), and add your group to each of them using the @code{:group}
keyword.
The way to declare new customization groups is with @code{defgroup}.
The way to declare new customization groups is with @code{defgroup}.
@tindex defgroup
@defmac defgroup group members doc [keyword value]...
@ -116,9 +116,9 @@ Do not quote the symbol @var{group}. The argument @var{doc} specifies
the documentation string for the group.
The arguments @var{members} can be an alist whose elements specify
members of the group; however, normally @var{members} is @code{nil}, and
you specify the group's members by using the @code{:group} keyword when
defining those members.
customization items to be members of the group; however, normally
@var{members} is @code{nil}, and you specify the group's members by
using the @code{:group} keyword when defining those members.
@ignore
@code{(@var{name} @var{widget})}. Here @var{name} is a symbol, and
@ -139,40 +139,40 @@ One group can have any number of prefixes.
@end table
@end defmac
The @code{:prefix} feature is currently turned off, which means that
@code{:prefix} currently has no effect. We did this because we found
that discarding the specified prefixes often led to confusing names for
options. This happened because the people who wrote the @code{defgroup}
definitions for various groups added @code{:prefix} keywords whenever
they make logical sense---that is, whenever they say that there was a
common prefix for the option names in a library.
The prefix-discarding feature is currently turned off, which means
that @code{:prefix} currently has no effect. We did this because we
found that discarding the specified prefixes often led to confusing
names for options. This happened because the people who wrote the
@code{defgroup} definitions for various groups added @code{:prefix}
keywords whenever they make logical sense---that is, whenever the
variables in the library have a common prefix.
In order to obtain good results with @code{:prefix}, it is necessary to
check the specific effects of discarding a particular prefix, given the
specific items in a group and their names and documentation. If the
resulting text is not clear, then @code{:prefix} should not be used in
that case.
In order to obtain good results with @code{:prefix}, it would be
necessary to check the specific effects of discarding a particular
prefix, given the specific items in a group and their names and
documentation. If the resulting text is not clear, then @code{:prefix}
should not be used in that case.
It should be possible to recheck all the customization groups, delete
It should be possible to recheck all the customization groups, delete
the @code{:prefix} specifications which give unclear results, and then
turn this feature back on, if someone would like to do the work.
@node Variable Definitions
@section Defining Customization Variables
Use @code{defcustom} to declare user editable variables.
Use @code{defcustom} to declare user-editable variables.
@tindex defcustom
@defmac defcustom option value doc [keyword value]...
Declare @var{option} as a customizable user option variable that
defaults to @var{value}. Do not quote @var{option}. @var{value} should
be an expression to compute the value; it will be be evaluated on more
@defmac defcustom option default doc [keyword value]...
Declare @var{option} as a customizable user option variable. Do not
quote @var{option}. The argument @var{doc} specifies the documentation
string for the variable.
If @var{option} is void, @code{defcustom} initializes it to
@var{default}. @var{default} should be an expression to compute the
value; be careful in writing it, because it can be be evaluated on more
than one occasion.
If @var{option} is void, @code{defcustom} initializes it to @var{value}.
The argument @var{doc} specifies the documentation string for the variable.
The following additional keywords are defined:
@table @code
@ -185,11 +185,10 @@ values are legitimate, and how to display the value.
Specify @var{list} as the list of reasonable values for use in this
option.
Currently this is meaningful only when type is @code{hook}. The
elements of @var{list} are functions that you might likely want to use
as elements of the hook value. The user is not actually restricted to
using only these functions, but they are offered as convenient
alternatives.
Currently this is meaningful only when the type is @code{hook}. In that
case, the elements of @var{list} should be functions that are useful as
elements of the hook value. The user is not restricted to using only
these functions, but they are offered as convenient alternatives.
@item :version @var{version}
This option specifies that the variable's default value was changed in
@ -226,36 +225,48 @@ this way:
@table @code
@item custom-initialize-set
Use the variable's @code{:set} function to initialize the variable. Do
not reinitialize it if it is already non-void. This is the default
Use the variable's @code{:set} function to initialize the variable, but
do not reinitialize it if it is already non-void. This is the default
@code{:initialize} function.
@item custom-initialize-default
Always use @code{set-default} to initialize the variable, even if some
other @code{:set} function has been specified.
Like @code{custom-initialize-set}, but use the function
@code{set-default} to set the variable, instead of the variable's
@code{:set} function. This is the usual choice for a variable whose
@code{:set} function enables or disables a minor mode; with this choice,
defining the variable will not call the minor mode function, but
customizing the variable will do so.
@item custom-initialize-reset
Even if the variable is already non-void, reset it by calling the
@code{:set} function using the current value (returned by the
@code{:get} method).
Always use the @code{:set} function to initialize the variable. If the
variable is already non-void, reset it by calling the @code{:set}
function using the current value (returned by the @code{:get} method).
@item custom-initialize-changed
Like @code{custom-initialize-reset}, except use @code{set-default}
(rather than the @code{:set} function) to initialize the variable if it
is not bound and has not been set already.
Use the @code{:set} function to initialize the variable, if it is
already set or has been customized; otherwise, just use
@code{set-default}.
@end table
@item :require @var{feature}
If the user saves a customized value for this item, them Emacs should do
@code{(require @var{feature})} after installing the saved value.
The place to use this feature is for an option that turns on the
operation of a certain feature. Assuming that the package is coded to
check the value of the option, you still need to arrange for the package
to be loaded. That is what @code{:require} is for.
@end table
@end defmac
The @code{:require} option is useful for an option that turns on the
operation of a certain feature. Assuming that the package is coded to
check the value of the option, you still need to arrange for the package
to be loaded. You can do that with @code{:require}. @xref{Common
Keywords}. Here is an example, from the library @file{paren.el}:
@example
(defcustom show-paren-mode nil
"Toggle Show Paren mode@enddots{}"
:set (lambda (symbol value)
(show-paren-mode (or value 0)))
:initialize 'custom-initialize-default
:type 'boolean
:group 'paren-showing
:require 'paren)
@end example
@ignore
Use @code{custom-add-option} to specify that a specific function is
useful as an member of a hook.
@ -274,103 +285,37 @@ and @code{saved-value} to record the value saved by the user with the
customization buffer. The @code{saved-value} property is actually a
list whose car is an expression which evaluates to the value.
@node Face Definitions
@section Defining Faces
Faces are declared with @code{defface}.
@tindex defface
@defmac defface face spec doc [keyword value]...
Declare @var{face} as a customizable face that defaults according to
@var{spec}. Do not quote the symbol @var{face}.
@var{doc} is the face documentation.
@var{spec} should be an alist whose elements have the form
@code{(@var{display} @var{atts})} (see below). When @code{defface}
executes, it defines the face according to @var{spec}, then uses any
customizations saved in the @file{.emacs} file to override that
specification.
In each element of @var{spec}, @var{atts} is a list of face attributes
and their values. The possible attributes are defined in the variable
@code{custom-face-attributes}.
The @var{display} part of an element of @var{spec} determines which
frames the element applies to. If more than one element of @var{spec}
matches a given frame, the first matching element is the only one used
for that frame.
If @var{display} is @code{t} in a @var{spec} element, that element
matches all frames. (This means that any subsequent elements of
@var{spec} are never used.)
Alternatively, @var{display} can be an alist whose elements have the
form @code{(@var{characteristic} @var{value}@dots{})}. Here
@var{characteristic} specifies a way of classifying frames, and the
@var{value}s are possible classifications which @var{display} should
apply to. Here are the possible values of @var{characteristic}:
@table @code
@item type
The kind of window system the frame uses---either @code{x}, @code{pc}
(for the MS-DOS console), @code{w32} (for MS Windows 9X/NT), or
@code{tty}.
@item class
What kinds of colors the frame supports---either @code{color},
@code{grayscale}, or @code{mono}.
@item background
The kind of background--- either @code{light} or @code{dark}.
@end table
If an element of @var{display} specifies more than one
@var{value} for a given @var{characteristic}, any of those values
is acceptable. If an element of @var{display} has elements for
more than one @var{characteristic}, then @var{each} characteristic
of the frame must match one of the values specified for it.
@end defmac
Internally, @code{defface} uses the symbol property
@code{face-defface-spec} to record the face attributes specified in
@code{defface}, @code{saved-face} for the attributes saved by the user
with the customization buffer, and @code{face-documentation} for the
documentation string.
@node Customization Types
@section Customization Types
When you define a user option with @code{defcustom}, you must specify
its @dfn{customization type}. That is a Lisp object which indictaes (1)
its @dfn{customization type}. That is a Lisp object which describes (1)
which values are legitimate and (2) how to display the value in the
customization buffer for editing.
You specify the customization type in @code{defcustom} with the
@code{:type} keyword. The argument of @code{:type} is evaluated; since
types that vary at run time are rarely useful, normally it is a quoted
types that vary at run time are rarely useful, normally you use a quoted
constant. For example:
@example
(defcustom diff-command "diff"
"*The command to use to run diff."
:type 'string
:type '(string)
:group 'diff)
@end example
In general, a customization type appears is a list whose first element
is a symbol, one of the customization type names defined in the
following sections. After this symbol come a number of arguments,
depending on the symbol. Some of the type symbols do not use any
arguments; those are called @dfn{simple types}.
In general, a customization type is a list whose first element is a
symbol, one of the customization type names defined in the following
sections. After this symbol come a number of arguments, depending on
the symbol. Between the type symbol and its arguments, you can
optionally write keyword-value pairs (@pxref{Type Keywords}).
In between the type symbol and its arguments, you can optionally
write keyword-value pairs. @xref{Type Keywords}.
For a simple type, if you do not use any keyword-value pairs, you can
omit the parentheses around the type symbol. The above example does
this, using just @code{string} as the customization type.
But @code{(string)} would mean the same thing.
Some of the type symbols do not use any arguments; those are called
@dfn{simple types}. For a simple type, if you do not use any
keyword-value pairs, you can omit the parentheses around the type
symbol. For example just @code{string} as a customization type is
equivalent to @code{(string)}.
@menu
* Simple Types::
@ -400,10 +345,12 @@ customization buffer.
@item string
The value must be a string, and the customization buffer shows just the
contents, with no @samp{"} characters or quoting with @samp{\}.
contents, with no delimiting @samp{"} characters and no quoting with
@samp{\}.
@item regexp
The value must be a string which is a valid regular expression.
Like @code{string} except that the string must be a valid regular
expression.
@item character
The value must be a character code. A character code is actually an
@ -435,15 +382,19 @@ The value must be a variable name, and you can do completion with
@kbd{M-@key{TAB}}.
@item boolean
The value is boolean---either @code{nil} or @code{t}.
The value is boolean---either @code{nil} or @code{t}. Note that by
using @code{choice} and @code{const} together (see the next section),
you can specify that the value must be @code{nil} or @code{t}, but also
specify the text to describe each value in a way that fits the specific
meaning of the alternative.
@end table
@node Composite Types
@subsection Composite Types
When none of the simple types is appropriate, you can use composite
types, which build from simple types. Here are several ways of doing
that:
types, which build new types from other types. Here are several ways of
doing that:
@table @code
@item (restricted-sexp :match-alternatives @var{criteria})
@ -459,7 +410,7 @@ are acceptable.
@item
A quoted constant---that is, @code{'@var{object}}. This means that
@var{object} is an acceptable value.
@var{object} itself is an acceptable value.
@end itemize
For example,
@ -480,7 +431,7 @@ its @sc{cdr} must fit @var{cdr-type}. For example, @code{(const string
symbol)} is a customization type which matches values such as
@code{("foo" . foo)}.
In the customization buffeer, the @sc{car} and the @sc{cdr} are
In the customization buffer, the @sc{car} and the @sc{cdr} are
displayed and edited separately, each according to the type
that you specify for it.
@ -493,7 +444,7 @@ For example, @code{(list integer string function)} describes a list of
three elements; the first element must be an integer, the second a
string, and the third a function.
In the customization buffeer, the each element is displayed and edited
In the customization buffer, the each element is displayed and edited
separately, according to the type specified for it.
@item (vector @var{element-types}@dots{})
@ -523,22 +474,37 @@ verbatim, you might write the customization type this way,
@noindent
so that the menu offers @samp{Number of spaces} and @samp{Literal Text}.
In any alternative for which @code{nil} is not a valid value, other than
a @code{const}, you should specify a valid default for that alternative
using the @code{:value} keyword. @xref{Type Keywords}.
@item (const @var{value})
The value must be @var{value}---nothing else is allowed.
The main use of @code{const} is inside of @code{choice}. For example,
@code{(choice integer (const nil))} allows either an integer or
@code{nil}. @code{:tag} is often used with @code{const}.
@code{nil}.
@code{:tag} is often used with @code{const}, inside of @code{choice}.
For example,
@smallexample
(choice (const :tag "Yes" t)
(const :tag "No" nil)
(const :tag "Ask" foo))
@end smallexample
@item (function-item @var{function})
Like @code{const}, but used for values which are functions. This
displays the documentation string of the function @var{function}
as well as its name.
displays the documentation string as well as the function name.
The documentation string is either the one you specify with
@code{:doc}, or @var{function}'s own documentation string.
@item (variable-item @var{variable})
Like @code{const}, but used for values which are variable names. This
displays the documentation string of the variable @var{variable} as well
as its name.
displays the documentation string as well as the variable name. The
documentation string is either the one you specify with @code{:doc}, or
@var{variable}'s own documentation string.
@item (set @var{elements}@dots{})
The value must be a list and each element of the list must be one of the
@ -611,20 +577,22 @@ meanings:
@table @code
@item :value @var{default}
This is used for a type that appears as an alternative inside of
@code{:choice}; it specifies the default value to use, at first, if and
@code{choice}; it specifies the default value to use, at first, if and
when the user selects this alternative with the menu in the
customization buffer.
Of course, if the actual value of the option fits this alternative, it
will appear showing the actual value, not @var{default}.
If @code{nil} is not a valid value for the alternative, then it is
essential to specify a valid default with @code{:value}.
@item :format @var{format-string}
This string will be inserted in the buffer to represent the value
corresponding to the type. The following @samp{%} escapes are available
for use in @var{format-string}:
@table @samp
@ignore
@item %[@var{button}%]
Display the text @var{button} marked as a button. The @code{:action}
attribute specifies what the button will do if the user invokes it;
@ -632,8 +600,7 @@ its value is a function which takes two arguments---the widget which
the button appears in, and the event.
There is no way to specify two different buttons with different
actions; but perhaps there is no need for one.
@end ignore
actions.
@item %@{@var{sample}%@}
Show @var{sample} in a special face specified by @code{:sample-face}.
@ -658,11 +625,15 @@ keyword.
Display a literal @samp{%}.
@end table
@item :button-face @var{face}
Use face @var{face} for text displayed with @samp{%[@dots{}%]}.
@item :action @var{action}
Perform @var{action} if the user clicks on a button.
@item :button-prefix
@itemx :button-suffix
@item :button-face @var{face}
Use the face @var{face} (a face name or a list of face names) for button
text displayed with @samp{%[@dots{}%]}.
@item :button-prefix @var{prefix}
@itemx :button-suffix @var{suffix}
These specify the text to display before and after a button.
Each can be:
@ -677,11 +648,19 @@ The string is inserted literally.
The symbol's value is used.
@end table
@item :doc @var{doc}
Use @var{doc} as the documentation string for this item.
@item :tag @var{tag}
Use @var{tag} (a string) as the tag for this item.
Use @var{tag} (a string) as the tag for the value (or part of the value)
that corresponds to this type.
@item :doc @var{doc}
Use @var{doc} as the documentation string for this value (or part of the
value) that corresponds to this type. In order for this to work, you
must specify a value for @code{:format}, and use @samp{%d} or @samp{%h}
in that value.
The usual reason to specify a documentation string for a type is to
provide more information about the meanings of alternatives inside a
@code{:choice} type or the parts of some other composite type.
@item :help-echo @var{motion-doc}
When you move to this item with @code{widget-forward} or
@ -689,9 +668,10 @@ When you move to this item with @code{widget-forward} or
in the echo area.
@item :match @var{function}
Specify how to decide whether a value matches the type. @var{function}
should be a function that accepts two arguments, a widget and a value;
it should return non-@code{nil} if the value is acceptable.
Specify how to decide whether a value matches the type. The
corresponding value, @var{function}, should be a function that accepts
two arguments, a widget and a value; it should return non-@code{nil} if
the value is acceptable.
@ignore
@item :indent @var{columns}

View file

@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1998 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
@setfilename ../info/debugging
@node Debugging, Read and Print, Byte Compilation, Top
@node Debugging, Read and Print, Advising, Top
@chapter Debugging Lisp Programs
There are three ways to investigate a problem in an Emacs Lisp program,
@ -104,14 +104,18 @@ that error does not enter the debugger, regardless of the value of
@code{debug-on-error}.
The normal value of this variable lists several errors that happen often
during editing but rarely result from bugs in Lisp programs.
during editing but rarely result from bugs in Lisp programs. However,
``rarely'' is not ``never''; if your program fails with an error that
matches this list, you will need to change this list in order to debug
the error. The easiest way is usually to set
@code{debug-ignored-errors} to @code{nil}.
@end defopt
@defopt debug-on-signal
Normally, errors that are caught by @code{condition-case} never run the
debugger, even if @code{debug-on-error} is non-@code{nil}. In other
words, @code{condition-case} gets a chance to catch the error before the
debugger gets a chance.
words, @code{condition-case} gets a chance to handle the error before
the debugger gets a chance.
If you set @code{debug-on-signal} non-@code{nil}, then the debugger gets
first chance at every error; an error will invoke the debugger
@ -119,7 +123,7 @@ regardless of any @code{condition-case}, if the fits the criterion
specified by the values of @code{debug-on-error} and
@code{debug-ignored-errors}.
@strong{Warning:} This variable is strong medecine! Various parts of
@strong{Warning:} This variable is strong medicine! Various parts of
Emacs handle errors in the normal course of affairs, and you may not
even realize that errors happen there. If you set
@code{debug-on-signal} to a non-@code{nil} value, those errors will
@ -132,7 +136,7 @@ enter the debugger.
To debug an error that happens during loading of the @file{.emacs}
file, use the option @samp{-debug-init}, which binds
@code{debug-on-error} to @code{t} while @file{.emacs} is loaded and
inhibits use of @code{condition-case} to catch init file errors.
inhibits use of @code{condition-case} to catch init-file errors.
If your @file{.emacs} file sets @code{debug-on-error}, the effect may
not last past the end of loading @file{.emacs}. (This is an undesirable
@ -190,26 +194,25 @@ called shortly before the problem, step quickly over the call to that
function, and then step through its caller.
@deffn Command debug-on-entry function-name
This function requests @var{function-name} to invoke the debugger each time
This function requests @var{function-name} to invoke the debugger each time
it is called. It works by inserting the form @code{(debug 'debug)} into
the function definition as the first form.
Any function defined as Lisp code may be set to break on entry,
Any function defined as Lisp code may be set to break on entry,
regardless of whether it is interpreted code or compiled code. If the
function is a command, it will enter the debugger when called from Lisp
and when called interactively (after the reading of the arguments). You
can't debug primitive functions (i.e., those written in C) this way.
When @code{debug-on-entry} is called interactively, it prompts
for @var{function-name} in the minibuffer.
When @code{debug-on-entry} is called interactively, it prompts for
@var{function-name} in the minibuffer. If the function is already set
up to invoke the debugger on entry, @code{debug-on-entry} does nothing.
@code{debug-on-entry} always returns @var{function-name}.
If the function is already set up to invoke the debugger on entry,
@code{debug-on-entry} does nothing.
@strong{Note:} if you redefine a function after using
@code{debug-on-entry} on it, the code to enter the debugger is lost.
@code{debug-on-entry} returns @var{function-name}.
@strong{Note:} if you redefine a function after using
@code{debug-on-entry} on it, the code to enter the debugger is discarded
by the redefinition. In effect, redefining the function cancels
the break-on-entry feature for that function.
@example
@group
@ -252,11 +255,12 @@ Entering:
This function undoes the effect of @code{debug-on-entry} on
@var{function-name}. When called interactively, it prompts for
@var{function-name} in the minibuffer. If @var{function-name} is
@code{nil} or the empty string, it cancels debugging for all functions.
@code{nil} or the empty string, it cancels break-on-entry for all
functions.
If @code{cancel-debug-on-entry} is called more than once on the same
function, the second call does nothing. @code{cancel-debug-on-entry}
returns @var{function-name}.
Calling @code{cancel-debug-on-entry} does nothing to a function which is
not currently set up to break on entry. It always returns
@var{function-name}.
@end deffn
@node Explicit Debug
@ -326,8 +330,8 @@ code, so that you can see how control flows. The debugger can step
through the control structures of an interpreted function, but cannot do
so in a byte-compiled function. If you would like to step through a
byte-compiled function, replace it with an interpreted definition of the
same function. (To do this, visit the source file for the function and
type @kbd{C-M-x} on its definition.)
same function. (To do this, visit the source for the function and type
@kbd{C-M-x} on its definition.)
Here is a list of Debugger mode commands:
@ -360,7 +364,8 @@ in the backtrace buffer.
@item u
Don't enter the debugger when the current frame is exited. This
cancels a @kbd{b} command on that frame.
cancels a @kbd{b} command on that frame. The visible effect is to
remove the star from the line in the backtrace buffer.
@item e
Read a Lisp expression in the minibuffer, evaluate it, and print the
@ -371,6 +376,10 @@ examine them. This makes the debugger more transparent. By contrast,
@kbd{M-:} does nothing special in the debugger; it shows you the
variable values within the debugger.
@item R
Like @kbd{e}, but also save the result of evaluation in the
buffer @samp{*Debugger-record*}.
@item q
Terminate the program being debugged; return to top-level Emacs
command execution.
@ -383,11 +392,11 @@ Return a value from the debugger. The value is computed by reading an
expression with the minibuffer and evaluating it.
The @kbd{r} command is useful when the debugger was invoked due to exit
from a Lisp call frame (as requested with @kbd{b}); then the value
specified in the @kbd{r} command is used as the value of that frame. It
is also useful if you call @code{debug} and use its return value.
Otherwise, @kbd{r} has the same effect as @kbd{c}, and the specified
return value does not matter.
from a Lisp call frame (as requested with @kbd{b} or by entering the
frame with @kbd{d}); then the value specified in the @kbd{r} command is
used as the value of that frame. It is also useful if you call
@code{debug} and use its return value. Otherwise, @kbd{r} has the same
effect as @kbd{c}, and the specified return value does not matter.
You can't use @kbd{r} when the debugger was entered due to an error.
@end table
@ -448,11 +457,11 @@ Beginning evaluation of function call form:
@end smallexample
@item exit
When the first argument is @code{exit}, it indicates the exit of a
stack frame previously marked to invoke the debugger on exit. The
second argument given to @code{debug} in this case is the value being
returned from the frame. The debugger displays @samp{Return value:} on
the top line of the buffer, followed by the value being returned.
When the first argument is @code{exit}, it indicates the exit of a stack
frame previously marked to invoke the debugger on exit. The second
argument given to @code{debug} in this case is the value being returned
from the frame. The debugger displays @samp{Return value:} in the top
line of the buffer, followed by the value being returned.
@item error
@cindex @code{error} in debug
@ -605,8 +614,8 @@ bound to @code{nil}. The debugger can set this variable to leave
information for future debugger invocations during the same command
invocation.
The advantage, for the debugger, of using this variable rather than
another global variable is that the data will never carry over to a
The advantage, for the debugger, of using this variable rather than an
ordinary global variable is that the data will never carry over to a
subsequent command invocation.
@end defvar
@ -671,7 +680,8 @@ close parenthesis, and finally return to the mark.)
way to be sure of this except by studying the program, but often the
existing indentation is a clue to where the parentheses should have
been. The easiest way to use this clue is to reindent with @kbd{C-M-q}
and see what moves.
and see what moves. @strong{But don't do this yet!} Keep reading,
first.
Before you do this, make sure the defun has enough close parentheses.
Otherwise, @kbd{C-M-q} will get an error, or will reindent all the rest
@ -702,7 +712,7 @@ parenthesis at the beginning of the file, back up over it, and type
insertion of the open parenthesis, and finally return to the mark.)
Then find the actual matching close parenthesis by typing @kbd{C-M-f}
at the beginning of the defun. This will leave you somewhere short of
at the beginning of that defun. This will leave you somewhere short of
the place where the defun ought to end. It is possible that you will
find a spurious close parenthesis in that vicinity.

View file

@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
@setfilename ../info/display
@node Display, Calendar, System Interface, Top
@node Display, Calendar, Processes, Top
@chapter Emacs Display
This chapter describes a number of features related to the display
@ -62,7 +62,7 @@ resumption.
@cindex resume (cf. @code{no-redraw-on-reenter})
This variable controls whether Emacs redraws the entire screen after it
has been suspended and resumed. Non-@code{nil} means there is no need
to redraw, @code{nil} means redrawing is needed.
to redraw, @code{nil} means redrawing is needed. The default is @code{nil}.
@end defvar
@node Screen Size
@ -136,9 +136,9 @@ line can either be continued on the next screen line, or truncated to
one screen line. The additional screen lines used to display a long
text line are called @dfn{continuation} lines. Normally, a @samp{$} in
the rightmost column of the window indicates truncation; a @samp{\} on
the rightmost column indicates a line that ``wraps'' or is continued
onto the next line. (The display table can specify alternative
indicators; see @ref{Display Tables}.)
the rightmost column indicates a line that ``wraps'' onto the next line,
which is also called @dfn{continuing} the line. (The display table can
specify alternative indicators; see @ref{Display Tables}.)
Note that continuation is different from filling; continuation happens
on the screen only, not in the buffer contents, and it breaks a line
@ -157,7 +157,7 @@ frame) regardless of the value of @code{truncate-lines}.
@defopt default-truncate-lines
This variable is the default value for @code{truncate-lines}, for
buffers that do not have local values for it.
buffers that do not have buffer-local values for it.
@end defopt
@defopt truncate-partial-width-windows
@ -184,7 +184,7 @@ unless they are modified.
Turning on the cache slows down processing of short lines somewhat.
This variable is automatically local in every buffer.
This variable is automatically buffer-local in every buffer.
@end defvar
@node The Echo Area
@ -242,6 +242,16 @@ This function returns the message currently being displayed in the
echo area, or @code{nil} if there is none.
@end defun
@defvar cursor-in-echo-area
This variable controls where the cursor appears when a message is
displayed in the echo area. If it is non-@code{nil}, then the cursor
appears at the end of the message. Otherwise, the cursor appears at
point---not in the echo area at all.
The value is normally @code{nil}; Lisp programs bind it to @code{t}
for brief periods of time.
@end defvar
@tindex echo-area-clear-hook
@defvar echo-area-clear-hook
This normal hook is run whenever the echo area is cleared---either by
@ -274,16 +284,6 @@ characters in the same command will be echoed as well.
If the value is zero, then command input is not echoed.
@end defvar
@defvar cursor-in-echo-area
This variable controls where the cursor appears when a message is
displayed in the echo area. If it is non-@code{nil}, then the cursor
appears at the end of the message. Otherwise, the cursor appears at
point---not in the echo area at all.
The value is normally @code{nil}; Lisp programs bind it to @code{t}
for brief periods of time.
@end defvar
@node Invisible Text
@section Invisible Text
@ -295,8 +295,7 @@ text property or a property of an overlay.
In the simplest case, any non-@code{nil} @code{invisible} property makes
a character invisible. This is the default case---if you don't alter
the default value of @code{buffer-invisibility-spec}, this is how the
@code{invisibility} property works. This feature is much like selective
display (@pxref{Selective Display}), but more general and cleaner.
@code{invisible} property works.
More generally, you can use the variable @code{buffer-invisibility-spec}
to control which values of the @code{invisible} property make text
@ -322,17 +321,17 @@ A character is invisible if its @code{invisible} property is
non-@code{nil}. This is the default.
@item a list
Each element of the list makes certain characters invisible.
Ultimately, a character is invisible if any of the elements of this list
applies to it. The list can have two kinds of elements:
Each element of the list specifies a criterion for invisibility; if a
character's @code{invisible} property fits any one of these criteria,
the character is invisible. The list can have two kinds of elements:
@table @code
@item @var{atom}
A character is invisible if its @code{invisible} propery value
A character is invisible if its @code{invisible} property value
is @var{atom} or if it is a list with @var{atom} as a member.
@item (@var{atom} . t)
A character is invisible if its @code{invisible} propery value
A character is invisible if its @code{invisible} property value
is @var{atom} or if it is a list with @var{atom} as a member.
Moreover, if this character is at the end of a line and is followed
by a visible newline, it displays an ellipsis.
@ -360,17 +359,17 @@ that a major mode should use the mode's own name as an element of
property:
@example
;; If we want to display an ellipsis:
;; @r{If you want to display an ellipsis:}
(add-to-invisibility-spec '(my-symbol . t))
;; If you don't want ellipsis:
;; @r{If you don't want ellipsis:}
(add-to-invisibility-spec 'my-symbol)
(overlay-put (make-overlay beginning end)
'invisible 'my-symbol)
;; When done with the overlays:
;; @r{When done with the overlays:}
(remove-from-invisibility-spec '(my-symbol . t))
;; Or respectively:
;; @r{Or respectively:}
(remove-from-invisibility-spec 'my-symbol)
@end example
@ -401,14 +400,13 @@ it invisible again.
@section Selective Display
@cindex selective display
@dfn{Selective display} is a pair of features that hide certain
lines on the screen.
@dfn{Selective display} refers to a pair of related features for
hiding certain lines on the screen.
The first variant, explicit selective display, is designed for use in
a Lisp program. The program controls which lines are hidden by altering
the text. Outline mode has traditionally used this variant. It has
been partially replaced by the invisible text feature (@pxref{Invisible
Text}); there is a new version of Outline mode which uses that instead.
a Lisp program: it controls which lines are hidden by altering the text.
The invisible text feature (@pxref{Invisible Text}) has partially
replaced this feature.
In the second variant, the choice of lines to hide is made
automatically based on indentation. This variant is designed to be a
@ -441,7 +439,8 @@ lines, or portions of lines, may be made invisible.
@itemize @bullet
@item
If the value of @code{selective-display} is @code{t}, then any portion
of a line that follows a control-m is not displayed.
of a line that follows a control-m is not displayed. This is explicit
selective display.
@item
If the value of @code{selective-display} is a positive integer, then
@ -543,15 +542,15 @@ given time.
@c now. Is it?
@end defvar
You can do the same job by creating an overlay with a
You can do a similar job by creating an overlay with a
@code{before-string} property. @xref{Overlay Properties}.
@node Temporary Displays
@section Temporary Displays
Temporary displays are used by commands to put output into a buffer
and then present it to the user for perusal rather than for editing.
Many of the help commands use this feature.
Temporary displays are used by Lisp programs to put output into a
buffer and then present it to the user for perusal rather than for
editing. Many help commands use this feature.
@defspec with-output-to-temp-buffer buffer-name forms@dots{}
This function executes @var{forms} while arranging to insert any
@ -599,9 +598,6 @@ The value of the last form in @var{forms} is returned.
If this variable is non-@code{nil}, @code{with-output-to-temp-buffer}
calls it as a function to do the job of displaying a help buffer. The
function gets one argument, which is the buffer it should display.
In Emacs versions 18 and earlier, this variable was called
@code{temp-buffer-show-hook}.
@end defvar
@defun momentary-string-display string position &optional char message
@ -620,8 +616,9 @@ the display and later (presumably) move point forward. The argument
The return value of @code{momentary-string-display} is not meaningful.
If the string @var{string} does not contain control characters, you can
do the same job in a more general way by creating an overlay with a
@code{before-string} property. @xref{Overlay Properties}.
do the same job in a more general way by creating (and then subsequently
deleting) an overlay with a @code{before-string} property.
@xref{Overlay Properties}.
If @var{message} is non-@code{nil}, it is displayed in the echo area
while @var{string} is displayed in the buffer. If it is @code{nil}, a
@ -685,7 +682,7 @@ not to be part of the text. Thus, copying text between various buffers
and strings preserves text properties, but does not try to preserve
overlays. Changing a buffer's text properties marks the buffer as
modified, while moving an overlay or changing its properties does not.
Unlike text propery changes, overlay changes are not recorded in the
Unlike text property changes, overlay changes are not recorded in the
buffer's undo list.
@table @code
@ -803,8 +800,8 @@ If this property is non-@code{nil}, the overlay is deleted automatically
if it ever becomes empty (i.e., if it spans no characters).
@item local-map
@cindex keymap of character
@kindex local-map @r{(text property)}
@cindex keymap of character (and overlays)
@kindex local-map @r{(overlay property)}
If this property is non-@code{nil}, it specifies a keymap for a portion
of the text. The property's value replaces the buffer's local map, when
the character after point is within the overlay. @xref{Active Keymaps}.
@ -912,10 +909,8 @@ end of an overlay, before @var{pos}.
@section Width
Since not all characters have the same width, these functions let you
check the width of a character. @ref{Primitive Indent}
@xref{Screen Lines}, for related
functions.
check the width of a character. @xref{Primitive Indent}, and
@ref{Screen Lines}, for related functions.
@tindex char-width
@defun char-width char
@ -970,7 +965,7 @@ foreground color, background color, and optional underlining. Faces
control the display of text on the screen.
@cindex face id
Each face has its own @dfn{face id number} which distinguishes faces at
Each face has its own @dfn{face number}, which distinguishes faces at
low levels within Emacs. However, for most purposes, you can refer to
faces in Lisp programs by their names.
@ -986,6 +981,7 @@ face name a special meaning in one frame if you wish.
@menu
* Standard Faces:: The faces Emacs normally comes with.
* Defining Faces:: How to define a face with @code{defface}.
* Merging Faces:: How Emacs decides which face to use for a character.
* Face Functions:: How to define and examine faces.
@end menu
@ -1036,6 +1032,90 @@ This face uses the bold italic variant of the frame's font, if it has
one.
@end table
@node Defining Faces
@section Defining Faces
The way to define a new face is with @code{defface}. This creates a
kind of customization item (@pxref{Customization}) which the user can
customize using the Customization buffer (@pxref{Easy Customization,,,
emacs, The GNU Emacs Manual}).
@tindex defface
@defmac defface face spec doc [keyword value]...
Declare @var{face} as a customizable face that defaults according to
@var{spec}. Do not quote the symbol @var{face}. The argument @var{doc}
specifies the face documentation.
When @code{defface} executes, it defines the face according to
@var{spec}, then uses any customizations saved in the @file{.emacs} file
to override that specification.
The purpose of @var{spec} is to specify how the face should appear on
different kinds of terminals. It should be an alist whose elements have
the form @code{(@var{display} @var{atts})}. The element's @sc{car},
@var{display}, specifies a class of terminals. The @sc{cdr},
@var{atts}, is a list of face attributes and their values; it specifies
what the face should look like on that kind of terminal. The possible
attributes are defined in the value of @code{custom-face-attributes}.
The @var{display} part of an element of @var{spec} determines which
frames the element applies to. If more than one element of @var{spec}
matches a given frame, the first matching element is the only one used
for that frame. There are two possibilities for @var{display}:
@table @asis
@item @code{t}
This element of @var{spec} matches all frames. Therefore, any
subsequent elements of @var{spec} are never used. Normally
@code{t} is used in the last (or only) element of @var{spec}.
@item an list
If @var{display} is alist, each elements should have the form
@code{(@var{characteristic} @var{value}@dots{})}. Here
@var{characteristic} specifies a way of classifying frames, and the
@var{value}s are possible classifications which @var{display} should
apply to. Here are the possible values of @var{characteristic}:
@table @code
@item type
The kind of window system the frame uses---either @code{x}, @code{pc}
(for the MS-DOS console), @code{w32} (for MS Windows 9X/NT), or
@code{tty}.
@item class
What kinds of colors the frame supports---either @code{color},
@code{grayscale}, or @code{mono}.
@item background
The kind of background--- either @code{light} or @code{dark}.
@end table
If an element of @var{display} specifies more than one @var{value} for a
given @var{characteristic}, any of those values is acceptable. If
@var{display} has more than one element, each element should specify a
different @var{characteristic}; then @emph{each} characteristic of the
frame must match one of the @var{value}s specified for it in
@var{display}.
@end table
@end defmac
Here's how the standard face @code{region} could be defined
with @code{defface}:
@example
(defface region
((((class color) (background dark))
(:background "blue"))
(t (:background "gray")))
"Used for displaying the region.")
@end example
Internally, @code{defface} uses the symbol property
@code{face-defface-spec} to record the face attributes specified in
@code{defface}, @code{saved-face} for the attributes saved by the user
with the customization buffer, and @code{face-documentation} for the
documentation string.
@node Merging Faces
@subsection Merging Faces for Display
@ -1043,9 +1123,9 @@ one.
@itemize @bullet
@item
With defaults. Each frame has a @dfn{default face}, whose id number is
zero, which is used for all text that doesn't somehow specify another
face.
With defaults. Each frame has a @dfn{default face}, which is used for
all text that doesn't somehow specify another face. (We may change this
in a forthcoming Emacs version to serve as a default for all text.)
@item
With text properties. A character may have a @code{face} property; if so,
@ -1064,7 +1144,7 @@ With a region that is active. In Transient Mark mode, the region is
highlighted with a particular face (see @code{region-face}, below).
@item
With special glyphs. Each glyph can specify a particular face id
With special glyphs. Each glyph can specify a particular face
number. @xref{Glyphs}.
@end itemize
@ -1147,11 +1227,6 @@ and italic attributes cease to have any effect, because the precise font
that you specified is always used.
@end defun
@defun set-face-underline-p face underline-p &optional frame
This function sets the underline attribute of face @var{face}.
Non-@code{nil} means do underline; @code{nil} means don't.
@end defun
@tindex set-face-bold-p
@defun set-face-bold-p face bold-p &optional frame
This function sets the bold attribute of face @var{face}.
@ -1164,6 +1239,11 @@ This function sets the italic attribute of face @var{face}.
Non-@code{nil} means italic; @code{nil} means non-italic.
@end defun
@defun set-face-underline-p face underline-p &optional frame
This function sets the underline attribute of face @var{face}.
Non-@code{nil} means do underline; @code{nil} means don't.
@end defun
@defun invert-face face &optional frame
Swap the foreground and background colors of face @var{face}. If the
face doesn't specify both foreground and background, then its foreground
@ -1189,10 +1269,6 @@ This function returns the name of the background stipple pattern of face
This function returns the name of the font of face @var{face}.
@end defun
@defun face-underline-p face &optional frame
This function returns the underline attribute of face @var{face}.
@end defun
@tindex face-bold-p
@defun face-bold-p face &optional frame
This function returns the bold attribute of face @var{face}.
@ -1203,8 +1279,12 @@ This function returns the bold attribute of face @var{face}.
This function returns the italic attribute of face @var{face}.
@end defun
@defun face-underline-p face &optional frame
This function returns the underline attribute of face @var{face}.
@end defun
@defun face-id face
This function returns the face id number of face @var{face}.
This function returns the face number of face @var{face}.
@end defun
@tindex face-documentation
@ -1226,13 +1306,13 @@ face if each attribute is either the same as that of the default face or
@end defun
@defvar region-face
This variable's value specifies the face id to use to display characters
This variable's value specifies the face number to use to display characters
in the region when it is active (in Transient Mark mode only). The face
thus specified takes precedence over all faces that come from text
properties and overlays, for characters in the region. @xref{The Mark},
for more information about Transient Mark mode.
Normally, the value is the id number of the face named @code{region}.
Normally, the value is the face number of the face named @code{region}.
@end defvar
@node Blinking
@ -1245,19 +1325,11 @@ Normally, the value is the id number of the face named @code{region}.
This section describes the mechanism by which Emacs shows a matching
open parenthesis when the user inserts a close parenthesis.
@vindex blink-paren-hook
@defvar blink-paren-function
The value of this variable should be a function (of no arguments) to
be called whenever a character with close parenthesis syntax is inserted.
The value of @code{blink-paren-function} may be @code{nil}, in which
case nothing is done.
@quotation
@strong{Please note:} This variable was named @code{blink-paren-hook} in
older Emacs versions, but since it is not called with the standard
convention for hooks, it was renamed to @code{blink-paren-function} in
version 19.
@end quotation
@end defvar
@defvar blink-matching-paren
@ -1321,7 +1393,7 @@ is non-@code{nil}, then mode lines are displayed in inverse video.
Otherwise, mode lines are displayed normally, just like text. The
default is @code{t}.
For X window frames, this displays mode lines using the face named
For window frames, this displays mode lines using the face named
@code{modeline}, which is normally the inverse of the default face
unless you change it.
@end defopt
@ -1356,14 +1428,19 @@ just like the codes in the range 128 to 255.
@item
Character codes 128 through 255 map to sequences of four glyphs, where
the first glyph is the @sc{ASCII} code for @samp{\}, and the others are
digit characters representing the code in octal. (A display table can
specify a glyph to use instead of @samp{\}.)
digit characters representing the charatcer code in octal. (A display
table can specify a glyph to use instead of @samp{\}.)
@item
Multibyte character codes above 256 are displayed as themselves, or as a
question mark or empty box if the terminal cannot display that
character.
@end itemize
The usual display conventions apply even when there is a display
table, for any character whose entry in the active display table is
@code{nil}. Thus, when you set up a display table, you need only
specify the characters for which you want unusual behavior.
specify the characters for which you want special behavior.
These variables affect the way certain characters are displayed on the
screen. Since they change the number of columns the characters occupy,
@ -1397,10 +1474,10 @@ stops used by the command @code{tab-to-tab-stop}. @xref{Indent Tabs}.
@section Display Tables
@cindex display table
You can use the @dfn{display table} feature to control how all 256
possible character codes display on the screen. This is useful for
displaying European languages that have letters not in the @sc{ASCII}
character set.
You can use the @dfn{display table} feature to control how all possible
character codes display on the screen. This is useful for displaying
European languages that have letters not in the @sc{ASCII} character
set.
The display table maps each character code into a sequence of
@dfn{glyphs}, each glyph being an image that takes up one character
@ -1438,8 +1515,8 @@ display that character according to the usual display conventions
characters, the whole buffer will be displayed as one long ``line.''
The display table also has six ``extra slots'' which serve special
purposes. Here is a table of their meanings; @code{nil} means to use
the default stated below.
purposes. Here is a table of their meanings; @code{nil} in any slot
means to use the default for that slot, as stated below.
@table @asis
@item 0
@ -1514,9 +1591,10 @@ The argument @var{table} should be either a display table or
@end defun
@defvar buffer-display-table
This variable is automatically local in all buffers; its value in a
particular buffer is the display table for that buffer, or @code{nil} if
the buffer does not have an assigned display table.
This variable is automatically buffer-local in all buffers; its value in
a particular buffer specifies the display table for that buffer. If it
is @code{nil}, that means the buffer does not have an assigned display
table.
@end defvar
@defvar standard-display-table
@ -1556,22 +1634,23 @@ below).
@item string
Send the characters in @var{string} to the terminal to output
this glyph. This alternative is available on character terminals,
but not under X.
but not under a window system.
@item integer
Define this glyph code as an alias for code @var{integer}. You can use
an alias to specify a face code for the glyph; see below.
Define this glyph code as an alias for glyph code @var{integer}. You
can use an alias to specify a face code for the glyph; see below.
@item @code{nil}
This glyph is simple. On an ordinary terminal, the glyph code mod 524288
is the character to output. With X, the glyph code mod 524288 is the
character to output, and the glyph code divided by 524288 specifies the
@dfn{face id number} to use while outputting it. (524288 is
This glyph is simple. On an ordinary terminal, the glyph code mod
524288 is the character to output. In a window system, the glyph code
mod 524288 is the character to output, and the glyph code divided by
524288 specifies the face number (@pxref{Face Functions}) to use while
outputting it. (524288 is
@ifinfo
2**19.
2**19.)
@end ifinfo
@tex
$2^{19}$.
$2^{19}$.)
@end tex
@xref{Faces}.
@end table
@ -1604,9 +1683,9 @@ This is a synonym for @code{ding}.
@defvar visible-bell
This variable determines whether Emacs should flash the screen to
represent a bell. Non-@code{nil} means yes, @code{nil} means no. This
is effective under X windows, and on a character-only terminal provided
the terminal's Termcap entry defines the visible bell capability
(@samp{vb}).
is effective on a window system, and on a character-only terminal
provided the terminal's Termcap entry defines the visible bell
capability (@samp{vb}).
@end defvar
@tindex ring-bell-function

View file

@ -1,8 +1,10 @@
@comment -*-texinfo-*-
@c This is part of the GNU Emacs Lisp Reference Manual.
@c Copyright (C) 1992, 1993, 1994, 1998 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
@c This file is intended to be used as a section within the Emacs Lisp
@c Reference Manual. It may also be used by an independent Edebug User
@c Manual, edebug.tex, in which case the Edebug node below should be used
@c This file can also be used by an independent Edebug User
@c Manual in which case the Edebug node below should be used
@c with the following links to the Bugs section and to the top level:
@c , Bugs and Todo List, Top, Top
@ -167,9 +169,8 @@ definition @emph{unless} it has a prefix argument. The default value of
edebug-all-defs} toggles the value of the variable
@code{edebug-all-defs}.
@findex edebug-all-forms
@findex eval-region (Edebug)
@findex eval-current-buffer (Edebug)
@findex eval-region @r{(Edebug)}
@findex eval-current-buffer @r{(Edebug)}
If @code{edebug-all-defs} is non-@code{nil}, then the commands
@code{eval-region}, @code{eval-current-buffer}, and @code{eval-buffer}
also instrument any definitions they evaluate. Similarly,
@ -179,16 +180,11 @@ to loading or evaluations in the minibuffer. The command @kbd{M-x
edebug-all-forms} toggles this option.
@findex edebug-eval-top-level-form
Another command, @kbd{M-x edebug-eval-top-level-form}, is available to
Another command, @kbd{M-x edebug-eval-top-level-form}, is available to
instrument any top-level form regardless of the values of
@code{edebug-all-defs} and @code{edebug-all-forms}.
When Edebug is about to instrument code for the first time in a session,
it runs the hook @code{edebug-setup-hook}, then sets it to @code{nil}.
You can use this to load up Edebug specifications associated with a
package you are using, but only when you also use Edebug.
While Edebug is active, the command @kbd{I}
While Edebug is active, the command @kbd{I}
(@code{edebug-instrument-callee}) instruments the definition of the
function or macro called by the list form after point, if is not already
instrumented. This is possible only if Edebug knows where to find the
@ -201,7 +197,7 @@ steps into the call after instrumenting the function.
@cindex interactive commands (Edebug)
@cindex anonymous lambda expressions (Edebug)
@cindex Common Lisp (Edebug)
@pindex cl.el (Edebug)
@pindex cl.el @r{(Edebug)}
@pindex cl-specs.el
Edebug knows how to instrument all the standard special forms, an
interactive form with an expression argument, anonymous lambda
@ -209,7 +205,13 @@ expressions, and other defining forms. Edebug cannot know what a
user-defined macro will do with the arguments of a macro call, so you
must tell it; @xref{Instrumenting Macro Calls}, for details.
@findex eval-expression (Edebug)
When Edebug is about to instrument code for the first time in a
session, it runs the hook @code{edebug-setup-hook}, then sets it to
@code{nil}. You can use this to arrange to load Edebug specifications
(@pxref{Instrumenting Macro Calls}) associated with a package you are
using, but actually load them only if you use Edebug.
@findex eval-expression @r{(Edebug)}
To remove instrumentation from a definition, simply reevaluate its
definition in a way that does not instrument. There are two ways of
evaluating forms that never instrument them: from a file with
@ -472,7 +474,7 @@ stop point that has a previously established conditional breakpoint puts
the previous condition expression in the minibuffer so you can edit it.
You can make a conditional or unconditional breakpoint
@dfn{temporary} by using a prefix arg with the command to set the
@dfn{temporary} by using a prefix argument with the command to set the
breakpoint. When a temporary breakpoint stops the program, it is
automatically unset.
@ -504,7 +506,6 @@ depending on the execution mode, as if a breakpoint had been hit. If
evaluating the condition gets an error, execution does not stop.
@findex edebug-set-global-break-condition
@vindex edebug-global-break-condition
The condition expression is stored in
@code{edebug-global-break-condition}. You can specify a new expression
using the @kbd{X} command (@code{edebug-set-global-break-condition}).
@ -533,24 +534,24 @@ line as shown below to stop when the argument reaches zero:
1))
@end example
When the @code{fac} definition is instrumented and the function is
When the @code{fac} definition is instrumented and the function is
called, the call to @code{edebug} acts as a breakpoint. Depending on
the execution mode, Edebug stops or pauses there.
If no instrumented code is being executed when @code{edebug} is called,
If no instrumented code is being executed when @code{edebug} is called,
that function calls @code{debug}.
@c This may not be a good idea anymore.
@node Trapping Errors
@subsection Trapping Errors
Emacs normally displays an error message when an error is signaled and
not handled with @code{condition-case}. While Edebug is active, it
normally responds to all unhandled errors. You can customize this with
the options @code{edebug-on-error} and @code{edebug-on-quit}; see
@ref{Edebug Options}.
Emacs normally displays an error message when an error is signaled and
not handled with @code{condition-case}. While Edebug is active and
executing instrumented code, it normally responds to all unhandled
errors. You can customize this with the options @code{edebug-on-error}
and @code{edebug-on-quit}; see @ref{Edebug Options}.
When Edebug responds to an error, it shows the last stop point
When Edebug responds to an error, it shows the last stop point
encountered before the error. This may be the location of a call to a
function which was not instrumented, within which the error actually
occurred. For an unbound variable error, the last known stop point
@ -558,7 +559,7 @@ might be quite distant from the offending variable reference. In that
case you might want to display a full backtrace (@pxref{Edebug Misc}).
@c Edebug should be changed for the following: -- dan
If you change @code{debug-on-error} or @code{debug-on-quit} while
If you change @code{debug-on-error} or @code{debug-on-quit} while
Edebug is active, these changes will be forgotten when Edebug becomes
inactive. Furthermore, during Edebug's recursive edit, these variables
are bound to the values they had outside of Edebug.
@ -566,7 +567,7 @@ are bound to the values they had outside of Edebug.
@node Edebug Views
@subsection Edebug Views
These Edebug commands let you view aspects of the buffer and window
These Edebug commands let you view aspects of the buffer and window
status that obtained before entry to Edebug. The outside window
configuration is the collection of windows and contents that were in
effect outside of Edebug.
@ -597,12 +598,12 @@ the selected window. To specify a window that is not displaying the
source code buffer, you must use @kbd{C-x X W} from the global keymap.
@end table
You can view the outside window configuration with @kbd{v} or just
You can view the outside window configuration with @kbd{v} or just
bounce to the point in the current buffer with @kbd{p}, even if
it is not normally displayed. After moving point, you may wish to jump
back to the stop point with @kbd{w} from a source code buffer.
Each time you use @kbd{W} to turn saving @emph{off}, Edebug forgets the
Each time you use @kbd{W} to turn saving @emph{off}, Edebug forgets the
saved outside window configuration---so that even if you turn saving
back @emph{on}, the current window configuration remains unchanged when
you next exit Edebug (by continuing the program). However, the
@ -613,7 +614,7 @@ open.
@node Edebug Eval
@subsection Evaluation
While within Edebug, you can evaluate expressions ``as if'' Edebug were
While within Edebug, you can evaluate expressions ``as if'' Edebug were
not running. Edebug tries to be invisible to the expression's
evaluation and printing. Evaluation of expressions that cause side
effects will work as expected except for things that Edebug explicitly
@ -635,16 +636,15 @@ Evaluate the expression before point, in the context outside of Edebug
@end table
@cindex lexical binding (Edebug)
Edebug supports evaluation of expressions containing references to
Edebug supports evaluation of expressions containing references to
lexically bound symbols created by the following constructs in
@file{cl.el} (version 2.03 or later): @code{lexical-let},
@code{macrolet}, and @code{symbol-macrolet}.
@node Eval List
@subsection Evaluation List Buffer
You can use the @dfn{evaluation list buffer}, called @samp{*edebug*}, to
You can use the @dfn{evaluation list buffer}, called @samp{*edebug*}, to
evaluate expressions interactively. You can also set up the
@dfn{evaluation list} of expressions to be evaluated automatically each
time Edebug updates the display.
@ -655,12 +655,12 @@ Switch to the evaluation list buffer @samp{*edebug*}
(@code{edebug-visit-eval-list}).
@end table
In the @samp{*edebug*} buffer you can use the commands of Lisp
In the @samp{*edebug*} buffer you can use the commands of Lisp
Interaction mode (@pxref{Lisp Interaction,,, emacs, The GNU Emacs
Manual}) as well as these special commands:
@table @kbd
@item LFD
@item C-j
Evaluate the expression before point, in the outside context, and insert
the value in the buffer (@code{edebug-eval-print-last-sexp}).
@ -681,40 +681,36 @@ Switch back to the source code buffer at the current stop point
(@code{edebug-where}).
@end table
You can evaluate expressions in the evaluation list window with
@kbd{LFD} or @kbd{C-x C-e}, just as you would in @samp{*scratch*};
You can evaluate expressions in the evaluation list window with
@kbd{C-j} or @kbd{C-x C-e}, just as you would in @samp{*scratch*};
but they are evaluated in the context outside of Edebug.
The expressions you enter interactively (and their results) are lost
The expressions you enter interactively (and their results) are lost
when you continue execution; but you can set up an @dfn{evaluation list}
consisting of expressions to be evaluated each time execution stops.
@cindex evaluation list group
To do this, write one or more @dfn{evaluation list groups} in the
To do this, write one or more @dfn{evaluation list groups} in the
evaluation list buffer. An evaluation list group consists of one or
more Lisp expressions. Groups are separated by comment lines.
The command @kbd{C-c C-u} (@code{edebug-update-eval-list}) rebuilds the
The command @kbd{C-c C-u} (@code{edebug-update-eval-list}) rebuilds the
evaluation list, scanning the buffer and using the first expression of
each group. (The idea is that the second expression of the group is the
value previously computed and displayed.)
Be careful not to add expressions that execute instrumented code since
that would cause an infinite loop.
@c There ought to be a way to fix this.
Each entry to Edebug redisplays the evaluation list by inserting each
Each entry to Edebug redisplays the evaluation list by inserting each
expression in the buffer, followed by its current value. It also
inserts comment lines so that each expression becomes its own group.
Thus, if you type @kbd{C-c C-u} again without changing the buffer text,
the evaluation list is effectively unchanged.
If an error occurs during an evaluation from the evaluation list, the
If an error occurs during an evaluation from the evaluation list, the
error message is displayed in a string as if it were the result.
Therefore, expressions that use variables not currently valid do not
interrupt your debugging.
Here is an example of what the evaluation list window looks like after
Here is an example of what the evaluation list window looks like after
several expressions have been added to it:
@smallexample
@ -759,8 +755,6 @@ you continue execution, and recreated next time it is needed.
If an expression in your program produces a value containing circular
list structure, you may get an error when Edebug attempts to print it.
@vindex edebug-print-length
@vindex edebug-print-level
One way to cope with circular structure is to set @code{print-length}
or @code{print-level} to truncate the printing. Edebug does this for
you; it binds @code{print-length} and @code{print-level} to 50 if they
@ -768,6 +762,17 @@ were @code{nil}. (Actually, the variables @code{edebug-print-length}
and @code{edebug-print-level} specify the values to use within Edebug.)
@xref{Output Variables}.
@defopt edebug-print-length
If non-@code{nil}, bind @code{print-length} to this while printing
results in Edebug. The default value is @code{50}.
@xref{Printing in Edebug}.
@end defopt
@defopt edebug-print-level
If non-@code{nil}, bind @code{print-level} to this while printing
results in Edebug. The default value is @code{50}.
@end defopt
You can also print circular structures and structures that share
elements more informatively by using the @file{cust-print} package.
@ -790,6 +795,11 @@ Custom printing prints this as @samp{Result: #1=(#1# y)}. The
structure. This notation is used for any shared elements of lists or
vectors.
@defopt edebug-print-circle
If non-@code{nil}, bind @code{print-circle} to this while printing
results in Edebug. The default value is @code{nil}.
@end defopt
Other programs can also use custom printing; see @file{cust-print.el}
for details.
@ -850,7 +860,7 @@ Edebug provides rudimentary coverage testing and display of execution
frequency. All execution of an instrumented function accumulates
frequency counts, both before and after evaluation of each instrumented
expression, even if the execution mode is Go-nonstop. Coverage testing
is more expensive, so it is only done if @code{edebug-test-coverage} is
is more expensive, so it is done only if @code{edebug-test-coverage} is
non-@code{nil}. The command @kbd{M-x edebug-display-freq-count}
displays both the frequency data and the coverage data (if recorded).
@ -858,11 +868,11 @@ displays both the frequency data and the coverage data (if recorded).
This command displays the frequency count data for each line of the
current definition.
The frequency counts appear as comment lines after each line of code, and
you can undo all insertions with one @code{undo} command. The counts
appear under the @kbd{(} before an expression or the @kbd{)} after
an expression, or on the last character of a symbol. Values do not appear if
they are equal to the previous count on the same line.
The frequency counts appear as comment lines after each line of code,
and you can undo all insertions with one @code{undo} command. The
counts appear under the @samp{(} before an expression or the @samp{)}
after an expression, or on the last character of a symbol. Values do
not appear if they are equal to the previous count on the same line.
The character @samp{=} following the count for an expression says that
the expression has returned the same value each time it was evaluated
@ -1035,14 +1045,16 @@ Edebug is active, @code{defining-kbd-macro} is bound to
@node Instrumenting Macro Calls
@subsection Instrumenting Macro Calls
When Edebug instruments an expression that calls a Lisp macro, it needs
additional advice to do the job properly. This is because there is no
way to tell which subexpressions of the macro call are forms to be
evaluated. (Evaluation may occur explicitly in the macro body, or when
the resulting expansion is evaluated, or any time later.) You must
explain the format of calls to each macro to enable Edebug to handle it.
To do this, use @code{def-edebug-spec} to define the format of
calls to a given macro.
When Edebug instruments an expression that calls a Lisp macro, it needs
additional information about the macro to do the job properly. This is
because there is no a-priori way to tell which subexpressions of the
macro call are forms to be evaluated. (Evaluation may occur explicitly
in the macro body, or when the resulting expansion is evaluated, or any
time later.)
Therefore, you must define an Edebug specification for each macro that
Edebug will encounter, to explain the format of calls to that macro. To
do this, use @code{def-edebug-spec}.
@deffn Macro def-edebug-spec macro specification
Specify which expressions of a call to macro @var{macro} are forms to be
@ -1050,7 +1062,7 @@ evaluated. For simple macros, the @var{specification} often looks very
similar to the formal argument list of the macro definition, but
specifications are much more general than macro arguments.
The @var{macro} argument may actually be any symbol, not just a macro
The @var{macro} argument can actually be any symbol, not just a macro
name.
@end deffn
@ -1108,7 +1120,7 @@ as @code{&optional}).
A specification list may contain sublists which match arguments that are
themselves lists, or it may contain vectors used for grouping. Sublists
and groups thus subdivide the specification list into a hierarchy of
levels. Specification keywords only apply to the remainder of the
levels. Specification keywords apply only to the remainder of the
sublist or group they are contained in.
When a specification list involves alternatives or repetition, matching
@ -1262,7 +1274,7 @@ sublist-elements@dots{})}.
@c Need to document extensions with &symbol and :symbol
Here is a list of additional specifications that may only appear after
Here is a list of additional specifications that may appear only after
@code{&define}. See the @code{defun} example below.
@table @code
@ -1304,7 +1316,7 @@ tracing information is not output when the form is executed. See the
@end table
@node Backtracking
@subsubsection Backtracking
@subsubsection Backtracking in Specifications
@cindex backtracking
@cindex syntax error (Edebug)
@ -1473,8 +1485,6 @@ The default value is @code{step}.
@end defopt
@defopt edebug-trace
@findex edebug-print-trace-before
@findex edebug-print-trace-after
Non-@code{nil} means display a trace of function entry and exit.
Tracing output is displayed in a buffer named @samp{*edebug-trace*}, one
function entry or exit per line, indented by the recursion level.
@ -1504,22 +1514,6 @@ debugged.
@xref{Edebug Execution Modes}.
@end defopt
@defopt edebug-print-length
If non-@code{nil}, bind @code{print-length} to this while printing
results in Edebug. The default value is @code{50}.
@xref{Printing in Edebug}.
@end defopt
@defopt edebug-print-level
If non-@code{nil}, bind @code{print-level} to this while printing
results in Edebug. The default value is @code{50}.
@end defopt
@defopt edebug-print-circle
If non-@code{nil}, bind @code{print-circle} to this while printing
results in Edebug. The default value is @code{nil}.
@end defopt
@defopt edebug-on-error
Edebug binds @code{debug-on-error} to this value, if
@code{debug-on-error} was previously @code{nil}. @xref{Trapping

View file

@ -55,8 +55,7 @@ See @code{/} and @code{%} in @ref{Numbers}.
@xref{Read Only Buffers}.
@item cyclic-function-indirection
@code{"Symbol's chain of function indirections contains a@*
loop"}@*
@code{"Symbol's chain of function indirections contains a loop"}@*
@xref{Function Indirection}.
@item end-of-buffer
@ -65,9 +64,14 @@ loop"}@*
@item end-of-file
@code{"End of file during parsing"}@*
This is not a @code{file-error}.@*
Note that this is not a @code{file-error}
because it pertains to the Lisp reader, not to file I/O.
@xref{Input Functions}.
@item file-already-exists
This is a @code{file-error}.@*
@xref{Writing to Files}.
@item file-date-error
This is a subcategory of @code{file-error}. It occurs when
@code{copy-file} tries and fails to set the last-modification time of
@ -83,10 +87,6 @@ condition @code{file-error} is present.@*
This is a @code{file-error}.@*
@xref{File Locks}.
@item file-already-exists
This is a @code{file-error}.@*
@xref{Writing to Files}.
@item file-supersession
This is a @code{file-error}.@*
@xref{Modification Time}.
@ -103,17 +103,28 @@ This is a @code{file-error}.@*
@code{"Invalid regexp"}@*
@xref{Regular Expressions}.
@item mark-inactive
@code{Mark inactive"}@*
@xref{The Mark}.
@item no-catch
@code{"No catch for tag"}@*
@xref{Catch and Throw}.
@item scan-error
@code{"Scan error"}@*
This happens when certain syntax-parsing functions
find invalid syntax or mismatched parentheses.@*
@xref{List Motion}, and @ref{Parsing Expressions}.
@item search-failed
@code{"Search failed"}@*
@xref{Searching and Matching}.
@item setting-constant
@code{"Attempt to set a constant symbol"}@*
The values of the symbols @code{nil} and @code{t}
The values of the symbols @code{nil} and @code{t},
and any symbols that start with @samp{:},
may not be changed.@*
@xref{Constant Variables, , Variables that Never Change}.
@ -138,7 +149,7 @@ may not be changed.@*
@xref{Type Predicates}.
@end table
These error types, which are all classified as special cases of
These kinds of error, which are classified as special cases of
@code{arith-error}, can occur on certain systems for invalid use of
mathematical functions.

View file

@ -139,7 +139,7 @@ unchanged.
@example
@group
'123 ; @r{An object, shown without evaluation.}
'123 ; @r{A number, shown without evaluation.}
@result{} 123
@end group
@group
@ -210,7 +210,8 @@ value of @code{nil} is always @code{nil}, and the value of @code{t} is
always @code{t}; you cannot set or bind them to any other values. Thus,
these two symbols act like self-evaluating forms, even though
@code{eval} treats them like any other symbol. A symbol whose name
starts with @samp{:} also self-evaluates in the same way.
starts with @samp{:} also self-evaluates in the same way; likewise,
its value ordinarily cannot be changed. @xref{Constant Variables}.
@node Classifying Lists
@subsection Classification of List Forms
@ -646,15 +647,16 @@ buffer.
@defvar max-lisp-eval-depth
This variable defines the maximum depth allowed in calls to @code{eval},
@code{apply}, and @code{funcall} before an error is signaled (with error
message @code{"Lisp nesting exceeds max-lisp-eval-depth"}). This counts
internal uses of those functions, such as for calling the functions
mentioned in Lisp expressions, and recursive evaluation of function call
arguments and function body forms.
This limit, with the associated error when it is exceeded, is one way
that Lisp avoids infinite recursion on an ill-defined function.
message @code{"Lisp nesting exceeds max-lisp-eval-depth"}). This limit,
with the associated error when it is exceeded, is one way that Lisp
avoids infinite recursion on an ill-defined function.
@cindex Lisp nesting error
The depth limit counts internal uses of @code{eval}, @code{apply}, and
@code{funcall}, such as for calling the functions mentioned in Lisp
expressions, and recursive evaluation of function call arguments and
function body forms, as well as explicit calls in Lisp code.
The default value of this variable is 200. If you set it to a value
less than 100, Lisp will reset it to 100 if the given value is reached.

View file

@ -35,7 +35,6 @@ substitutions such as @samp{$HOME}. @xref{File Name Expansion}.
* Magic File Names:: Defining "magic" special handling
for certain file names.
* Format Conversion:: Conversion to and from various file formats.
* Files and MS-DOS:: Distinguishing text and binary files on MS-DOS.
@end menu
@node Visiting Files
@ -116,12 +115,11 @@ saved in that buffer. If the file has changed, then this function asks
the user whether to reread the changed file. If the user says
@samp{yes}, any changes previously made in the buffer are lost.
If @code{find-file-noselect} needs to create a buffer, and there is no
file named @var{filename}, it displays the message @samp{New file} in
the echo area, and leaves the buffer empty.
This function displays warning or advisory messages in various peculiar
cases, unless the optional argument @var{nowarn} is non-@code{nil}.
cases, unless the optional argument @var{nowarn} is non-@code{nil}. For
example, if it needs to create a buffer, and there is no file named
@var{filename}, it displays the message @samp{New file} in the echo
area, and leaves the buffer empty.
The @code{find-file-noselect} function normally calls
@code{after-find-file} after reading the file (@pxref{Subroutines of
@ -297,26 +295,20 @@ the user.
The optional @var{exiting} argument, if non-@code{nil}, requests this
function to offer also to save certain other buffers that are not
visiting files. These are buffers that have a non-@code{nil} local
value of @code{buffer-offer-save}. (A user who says yes to saving one
of these is asked to specify a file name to use.) The
visiting files. These are buffers that have a non-@code{nil}
buffer-local value of @code{buffer-offer-save}. (A user who says yes to
saving one of these is asked to specify a file name to use.) The
@code{save-buffers-kill-emacs} function passes a non-@code{nil} value
for this argument.
@end deffn
@defvar buffer-offer-save
When this variable is non-@code{nil} in a buffer, Emacs offers to save
the buffer on exit even if the buffer is not visiting a file. The
variable is automatically local in all buffers. Normally, Mail mode
(used for editing outgoing mail) sets this to @code{t}.
@end defvar
@deffn Command write-file filename
This function writes the current buffer into file @var{filename}, makes
the buffer visit that file, and marks it not modified. Then it renames
the buffer based on @var{filename}, appending a string like @samp{<2>}
if necessary to make a unique buffer name. It does most of this work by
calling @code{set-visited-file-name} and @code{save-buffer}.
calling @code{set-visited-file-name} (@pxref{Buffer File Name}) and
@code{save-buffer}.
@end deffn
Saving a buffer runs several hooks. It also performs format
@ -352,8 +344,8 @@ Even though this is not a normal hook, you can use @code{add-hook} and
@c Emacs 19 feature
@defvar local-write-file-hooks
This works just like @code{write-file-hooks}, but it is intended to be
made local to particular buffers, and used for hooks that pertain to the
file name or the way the buffer contents were obtained.
made buffer-local in particular buffers, and used for hooks that pertain
to the file name or the way the buffer contents were obtained.
The variable is marked as a permanent local, so that changing the major
mode does not alter a buffer-local value. This is convenient for
@ -372,7 +364,7 @@ This variable automatically becomes buffer-local whenever it is set;
switching to a new major mode always resets this variable. When you use
@code{add-hooks} to add an element to this hook, you should @emph{not}
specify a non-@code{nil} @var{local} argument, since this variable is
used @emph{only} locally.
used @emph{only} buffer-locally.
@end defvar
@c Emacs 19 feature
@ -392,8 +384,8 @@ As a side effect, backups are necessarily made by copying. @xref{Rename
or Copy}. Yet, at the same time, saving a precious file always breaks
all hard links between the file you save and other file names.
Some modes set this variable non-@code{nil} locally in particular
buffers.
Some modes give this variable non-@code{nil} buffer-local value
in particular buffers.
@end defvar
@defopt require-final-newline
@ -410,16 +402,8 @@ doesn't add newlines at all. @code{nil} is the default value, but a few
major modes set it to @code{t} in particular buffers.
@end defopt
@deffn Command set-visited-file-name filename &optional no-query
This function changes the visited file name of the current buffer to
@var{filename}. It also renames the buffer based on @var{filename},
appending a string like @samp{<2>} if necessary to make a unique buffer
name. It marks the buffer as @emph{modified},a since the contents do not
(as far as Emacs knows) match the actual file's contents.
If the specified file already exists, @code{set-visited-file-name}
asks for confirmation unless @var{no-query} is non-@code{nil}.
@end deffn
See also the function @code{set-visited-file-name} (@pxref{Buffer File
Name}).
@node Reading from Files
@comment node-name, next, previous, up
@ -542,15 +526,12 @@ files that the user does not need to know about.
@tindex with-temp-file
@defmac with-temp-file file body...
The @code{with-temp-file} macro evaluates the @var{body} forms
with a temporary buffer as the current buffer; then, at the end, it
writes the buffer contents into file @var{file}. It kills the temporary
buffer when finished, restoring the buffer that was current before the
@code{with-temp-file} form.
The return value is the value of the last form in @var{body}. You can
return the contents of the temporary buffer by using
@code{(buffer-string)} as the last form.
The @code{with-temp-file} macro evaluates the @var{body} forms with a
temporary buffer as the current buffer; then, at the end, it writes the
buffer contents into file @var{file}. It kills the temporary buffer
when finished, restoring the buffer that was current before the
@code{with-temp-file} form. Then it returns the value of the last form
in @var{body}.
The current buffer is restored even in case of an abnormal exit via
@code{throw} or error (@pxref{Nonlocal Exits}).
@ -568,13 +549,12 @@ arising by recording a @dfn{file lock} when a file is being modified.
Emacs can then detect the first attempt to modify a buffer visiting a
file that is locked by another Emacs job, and ask the user what to do.
File locks do not work properly when multiple machines can share
file systems, such as with NFS. Perhaps a better file locking system
will be implemented in the future. When file locks do not work, it is
possible for two users to make changes simultaneously, but Emacs can
still warn the user who saves second. Also, the detection of
modification of a buffer visiting a file changed on disk catches some
cases of simultaneous editing; see @ref{Modification Time}.
File locks are not completely reliable when multiple machines can
share file systems. When file locks do not work, it is possible for two
users to make changes simultaneously, but Emacs can still warn the user
who saves second. Also, the detection of modification of a buffer
visiting a file changed on disk catches some cases of simultaneous
editing; see @ref{Modification Time}.
@defun file-locked-p filename
This function returns @code{nil} if the file @var{filename} is not
@ -1032,18 +1012,12 @@ For example, here are the file attributes for @file{files.texi}:
@example
@group
(file-attributes "files.texi")
@result{} (nil
1
2235
75
@result{} (nil 1 2235 75
(8489 20284)
(8489 20284)
(8489 20285)
14906
"-rw-rw-rw-"
nil
129500
-32252)
14906 "-rw-rw-rw-"
nil 129500 -32252)
@end group
@end example
@ -1614,7 +1588,7 @@ form.
@defvar default-directory
The value of this buffer-local variable is the default directory for the
current buffer. It should be an absolute directory name; it may start
with @samp{~}. This variable is local in every buffer.
with @samp{~}. This variable is buffer-local in every buffer.
@code{expand-file-name} uses the default directory when its second
argument is @code{nil}.
@ -1651,8 +1625,8 @@ the user's home directory name, has value @samp{/xcssun/users/rms}.
@end group
@end example
If a @samp{~} or a @samp{/} appears following a @samp{/}, after
substitution, everything before the following @samp{/} is discarded:
After substitution, if a @samp{~} or a @samp{/} appears following a
@samp{/}, everything before the following @samp{/} is discarded:
@example
@group
@ -1996,18 +1970,21 @@ Here are the operations that a magic file name handler gets to handle:
@noindent
@code{add-name-to-file}, @code{copy-file}, @code{delete-directory},
@code{delete-file},@*
@code{delete-file},
@code{diff-latest-backup-file},
@code{directory-file-name},
@code{directory-files},@*
@code{directory-files},
@code{dired-call-process},
@code{dired-compress-file}, @code{dired-uncache},
@code{expand-file-name},@*
@code{file-accessible-directory-p},
@code{file-attributes}, @code{file-directory-p},@*
@code{file-executable-p}, @code{file-exists-p}, @code{file-local-copy},
@code{file-modes}, @code{file-name-all-completions},
@code{file-name-as-directory}, @code{file-name-completion},@*
@code{expand-file-name},
@code{file-accessible-directory-p},@*
@code{file-attributes},
@code{file-directory-p},
@code{file-executable-p}, @code{file-exists-p},@*
@code{file-local-copy},
@code{file-modes}, @code{file-name-all-completions},@*
@code{file-name-as-directory},
@code{file-name-completion},
@code{file-name-directory},
@code{file-name-nondirectory},
@code{file-name-sans-versions}, @code{file-newer-than-file-p},
@ -2015,15 +1992,16 @@ Here are the operations that a magic file name handler gets to handle:
@code{file-readable-p}, @code{file-regular-p}, @code{file-symlink-p},
@code{file-truename}, @code{file-writable-p},
@code{find-backup-file-name},
@code{get-file-buffer},
@code{insert-directory},@*
@code{get-file-buffer},@*
@code{insert-directory},
@code{insert-file-contents},
@code{load}, @code{make-directory},
@code{make-symbolic-link}, @code{rename-file}, @code{set-file-modes},
@code{set-visited-file-modtime}, @code{shell-command}.
@code{unhandled-file-name-directory},@*
@code{set-visited-file-modtime}, @code{shell-command}.@*
@code{unhandled-file-name-directory},
@code{vc-registered},
@code{verify-visited-file-modtime}, @code{write-region}.
@code{verify-visited-file-modtime},@*
@code{write-region}.
Handlers for @code{insert-file-contents} typically need to clear the
buffer's modified flag, with @code{(set-buffer-modified-p nil)}, if the
@ -2140,10 +2118,13 @@ A regular expression which is used to recognize files represented in
this format.
@item from-fn
A function or shell command to decode data in this format (to convert
A shell command or function to decode data in this format (to convert
file data into the usual Emacs data representation).
If @var{from-fn} is a function, it is called with two args, @var{begin}
A shell command is represented as a string; Emacs runs the command as a
filter to perform the conversion.
If @var{from-fn} is a function, it is called with two arguments, @var{begin}
and @var{end}, which specify the part of the buffer it should convert.
It should convert the text by editing it in place. Since this can
change the length of the text, @var{from-fn} should return the modified
@ -2153,17 +2134,14 @@ One responsibility of @var{from-fn} is to make sure that the beginning
of the file no longer matches @var{regexp}. Otherwise it is likely to
get called again.
If @var{from-fn} is a string, it is a shell command; Emacs runs the
command as a filter to perform the conversion.
@item to-fn
A function or shell command to encode data in this format (to convert
the usual Emacs data representation into this format).
A shell command or function to encode data in this format---that is, to
convert the usual Emacs data representation into this format.
If @var{to-fn} is a string, it is a shell command; Emacs runs the
command as a filter to perform the conversion.
If @var{to-fn} is a function, it is called with two args, @var{begin}
If @var{to-fn} is a function, it is called with two arguments, @var{begin}
and @var{end}, which specify the part of the buffer it should convert.
There are two ways it can do the conversion:
@ -2209,7 +2187,7 @@ buffer-local variable @code{buffer-file-format}.
@defvar buffer-file-format
This variable states the format of the visited file. More precisely,
this is a list of the file format names that were decoded in the course
of visiting the current buffer's file. It is always local in all
of visiting the current buffer's file. It is always buffer-local in all
buffers.
@end defvar
@ -2234,7 +2212,7 @@ The argument @var{format} is a list of format names. If @var{format} is
@key{RET} for @var{format} specifies @code{nil}.
@end deffn
@deffn format-insert-file file format %optional beg end
@deffn Command format-insert-file file format &optional beg end
This command inserts the contents of file @var{file}, converting it
according to format @var{format}. If @var{beg} and @var{end} are
non-@code{nil}, they specify which part of the file to read, as in
@ -2254,62 +2232,5 @@ This variable specifies the format to use for auto-saving. Its value is
a list of format names, just like the value of
@code{buffer-file-format}; but it is used instead of
@code{buffer-file-format} for writing auto-save files. This variable
is always local in all buffers.
is always buffer-local in all buffers.
@end defvar
@node Files and MS-DOS
@section Files and MS-DOS
@cindex MS-DOS file types
@cindex file types on MS-DOS
@cindex text files and binary files
@cindex binary files and text files
@cindex Windows file types
@c ??? This needs to be updated.
Emacs on MS-DOS and on Windows NT or 95 makes a distinction between
text files and binary files. This is necessary because ordinary text
files on MS-DOS use a two character sequence between lines:
carriage-return and linefeed (@sc{crlf}). Emacs expects just a newline
character (a linefeed) between lines. When Emacs reads or writes a text
file on MS-DOS, it needs to convert the line separators. This means it
needs to know which files are text files and which are binary. It makes
this decision when visiting a file, and records the decision in the
variable @code{buffer-file-type} for use when the file is saved.
@xref{MS-DOS Subprocesses}, for a related feature for subprocesses.
@defvar buffer-file-type
This variable, automatically local in each buffer, records the file type
of the buffer's visited file. The value is @code{nil} for text,
@code{t} for binary.
@end defvar
@defun find-buffer-file-type filename
This function determines whether file @var{filename} is a text file
or a binary file. It returns @code{nil} for text, @code{t} for binary.
@end defun
@defopt file-name-buffer-file-type-alist
This variable holds an alist for distinguishing text files from binary
files. Each element has the form (@var{regexp} . @var{type}), where
@var{regexp} is matched against the file name, and @var{type} may be
@code{nil} for text, @code{t} for binary, or a function to call to
compute which. If it is a function, then it is called with a single
argument (the file name) and should return @code{t} or @code{nil}.
@end defopt
@defopt default-buffer-file-type
This variable specifies the default file type for files whose names
don't indicate anything in particular. Its value should be @code{nil}
for text, or @code{t} for binary.
@end defopt
@deffn Command find-file-text filename
Like @code{find-file}, but treat the file as text regardless of its name.
@end deffn
@deffn Command find-file-binary filename
Like @code{find-file}, but treat the file as binary regardless of its
name.
@end deffn

View file

@ -18,10 +18,10 @@ horizontally into smaller windows.
@dfn{terminal frame}. If you create additional ones, Emacs displays
one and only one at any given time---on the terminal screen, of course.
When Emacs communicates directly with an X server, it does not have a
terminal frame; instead, it starts with a single @dfn{X window frame}.
It can display multiple X window frames at the same time, each in its
own X window.
When Emacs communicates directly with a supported window system, such
as X Windows, it does not have a terminal frame; instead, it starts with
a single @dfn{window frame}, but you can create more, and Emacs can
display several such frames at once as is usual for window systems.
@defun framep object
This predicate returns @code{t} if @var{object} is a frame, and
@ -30,7 +30,7 @@ This predicate returns @code{t} if @var{object} is a frame, and
@menu
* Creating Frames:: Creating additional frames.
* Multiple Displays:: Creating frames on other X displays.
* Multiple Displays:: Creating frames on other displays.
* Frame Parameters:: Controlling frame size, position, font, etc.
* Frame Titles:: Automatic updating of frame titles.
* Deleting Frames:: Frames last until explicitly deleted.
@ -40,7 +40,7 @@ This predicate returns @code{t} if @var{object} is a frame, and
* Minibuffers and Frames:: How a frame finds the minibuffer to use.
* Input Focus:: Specifying the selected frame.
* Visibility of Frames:: Frames may be visible or invisible, or icons.
* Raising and Lowering:: Raising a frame makes it hide other X windows;
* Raising and Lowering:: Raising a frame makes it hide other windows;
lowering it makes the others hide them.
* Frame Configurations:: Saving the state of all frames.
* Mouse Tracking:: Getting events that say when the mouse moves.
@ -48,7 +48,7 @@ This predicate returns @code{t} if @var{object} is a frame, and
* Pop-Up Menus:: Displaying a menu for the user to select from.
* Dialog Boxes:: Displaying a box to ask yes or no.
* Pointer Shapes:: Specifying the shape of the mouse pointer.
* X Selections:: Transferring text to and from other X clients.
* Window System Selections:: Transferring text to and from other X clients.
* Font Names:: Looking up font names.
* Color Names:: Getting the definitions of color names.
* Resources:: Getting resource values from the server.
@ -63,16 +63,17 @@ This predicate returns @code{t} if @var{object} is a frame, and
To create a new frame, call the function @code{make-frame}.
@defun make-frame &optional alist
This function creates a new frame. If you are using X, it makes
an X window frame; otherwise, it makes a terminal frame.
This function creates a new frame. If you are using a supported window
system, it makes a window frame; otherwise, it makes a terminal frame.
The argument is an alist specifying frame parameters. Any parameters
not mentioned in @var{alist} default according to the value of the
variable @code{default-frame-alist}; parameters not specified even there
default from the standard X defaults file and X resources.
default from the standard X resources or whatever is used instead on
your system.
The set of possible parameters depends in principle on what kind of
window system Emacs uses to display its frames. @xref{X Frame
window system Emacs uses to display its frames. @xref{Window Frame
Parameters}, for documentation of individual parameters you can specify.
@end defun
@ -95,7 +96,7 @@ frame just created.
@cindex multiple X terminals
@cindex displays, multiple
A single Emacs can talk to more than one X Windows display.
A single Emacs can talk to more than one X Window display.
Initially, Emacs uses just one display---the one chosen with the
@code{DISPLAY} environment variable or with the @samp{--display} option
(@pxref{Initial Options,,, emacs, The GNU Emacs Manual}). To connect to
@ -108,7 +109,8 @@ have values local to the current terminal (that is, the terminal
corresponding to the currently selected frame): these are
@code{default-minibuffer-frame}, @code{defining-kbd-macro},
@code{last-kbd-macro}, and @code{system-key-alist}. These variables are
always terminal-local and can never be buffer-local.
always terminal-local and can never be buffer-local or frame-local
(@pxref{Buffer-Local Variables}).
A single X server can handle more than one screen. A display name
@samp{@var{host}.@var{server}.@var{screen}} has three parts; the last
@ -163,12 +165,13 @@ uses.
Frame parameters exist for the sake of window systems. A terminal frame
has a few parameters, mostly for compatibility's sake; only the height,
width and @code{buffer-predicate} parameters really do something.
width, @code{name}, @code{title}, @code{buffer-list} and
@code{buffer-predicate} parameters do something special.
@menu
* Parameter Access:: How to change a frame's parameters.
* Initial Parameters:: Specifying frame parameters when you make a frame.
* X Frame Parameters:: List of frame parameters.
* Window Frame Parameters:: List of frame parameters for window systems.
* Size and Position:: Changing the size and position of a frame.
@end menu
@ -199,7 +202,7 @@ by setting @code{initial-frame-alist} in your @file{.emacs} file.
@defvar initial-frame-alist
This variable's value is an alist of parameter values used when creating
the initial X window frame. You can set this variable to specify the
the initial window frame. You can set this variable to specify the
appearance of the initial frame without altering subsequent frames.
Each element has the form:
@ -239,8 +242,9 @@ to the parameters for the main initial frame.
@defvar default-frame-alist
This is an alist specifying default values of frame parameters for all
Emacs frames---the first frame, and subsequent frames. In many cases,
you can get the same results by means of X resources.
Emacs frames---the first frame, and subsequent frames. When using the X
Window System, you can get the same results by means of X resources
in many cases.
@end defvar
See also @code{special-display-frame-alist}, in @ref{Choosing Window}.
@ -251,28 +255,34 @@ exception is @samp{-geometry}, which adds the specified position to
@code{initial-frame-alist} instead. @xref{Command Arguments,,, emacs,
The GNU Emacs Manual}.
@node X Frame Parameters
@subsection X Window Frame Parameters
@node Window Frame Parameters
@subsection Window Frame Parameters
Just what parameters a frame has depends on what display mechanism it
uses. Here is a table of the parameters of an X window frame; of these,
@code{name}, @code{height}, @code{width}, and @code{buffer-predicate}
provide meaningful information in non-X frames.
uses. Here is a table of the parameters that have special meanings in a
window frame; of these, @code{name}, @code{title}, @code{height},
@code{width}, @code{buffer-list} and @code{buffer-predicate} provide
meaningful information in terminal frames.
@table @code
@item title
If a frame has a non-@code{nil} title, it appears in the window system's
border for the frame, and also in the mode line of windows in that frame
if @code{mode-line-frame-identification} uses @samp{%F}
(@pxref{%-Constructs}). This is normally the case when Emacs is not
using a window system, and can only display one frame at a time.
@xref{Frame Titles}.
@item name
The name of the frame. Most window managers display the frame's name in
the frame's border, at the top of the frame. If you don't specify a
name, and you have more than one frame, Emacs sets the frame name based
on the buffer displayed in the frame's selected window.
The name of the frame. The frame name serves as a default for the frame
title, if the @code{title} parameter is unspecified or @code{nil}. If
you don't specify a name, Emacs sets the frame name automatically
(@pxref{Frame Titles}).
If you specify the frame name explicitly when you create the frame, the
name is also used (instead of the name of the Emacs executable) when
looking up X resources for the frame.
Since a non-window terminal can display only one frame at a time, the
frame name appears in the mode line.
@item display
The display on which to open this frame. It should be a string of the
form @code{"@var{host}:@var{dpy}.@var{screen}"}, just like the
@ -287,8 +297,9 @@ negative @var{pos} value.
A negative number @minus{}@var{pos}, or a list of the form @code{(-
@var{pos})}, actually specifies the position of the right edge of the
window with respect to the right edge of the screen. A positive value
of @var{pos} counts toward the left. If the parameter is a negative
integer @minus{}@var{pos} then @var{pos} is positive!
of @var{pos} counts toward the left. @strong{Reminder:} if the
parameter is a negative integer @minus{}@var{pos}, then @var{pos} is
positive.
Some window managers ignore program-specified positions. If you want to
be sure the position you specify is not ignored, specify a
@ -303,8 +314,9 @@ negative @var{pos} value.
A negative number @minus{}@var{pos}, or a list of the form @code{(-
@var{pos})}, actually specifies the position of the bottom edge of the
window with respect to the bottom edge of the screen. A positive value
of @var{pos} counts toward the top. If the parameter is a negative
integer @minus{}@var{pos} then @var{pos} is positive!
of @var{pos} counts toward the top. @strong{Reminder:} if the
parameter is a negative integer @minus{}@var{pos}, then @var{pos} is
positive.
Some window managers ignore program-specified positions. If you want to
be sure the position you specify is not ignored, specify a
@ -348,7 +360,7 @@ The width of the frame contents, in characters. (To get the height in
pixels, call @code{frame-pixel-width}; see @ref{Size and Position}.)
@item window-id
The number of the X window for the frame.
The number of the window-system window used by the frame.
@item minibuffer
Whether this frame has its own minibuffer. The value @code{t} means
@ -360,12 +372,13 @@ the new frame uses that minibuffer.
The buffer-predicate function for this frame. The function
@code{other-buffer} uses this predicate (from the selected frame) to
decide which buffers it should consider, if the predicate is not
@code{nil}. It calls the predicate with one arg, a buffer, once for
@code{nil}. It calls the predicate with one argument, a buffer, once for
each buffer; if the predicate returns a non-@code{nil} value, it
considers that buffer.
@item buffer-list
A list of buffers recently selected in this frame.
A list of buffers that have been selected in this frame,
ordered most-recently-selected first.
@item font
The name of the font for displaying text in the frame. This is a
@ -401,8 +414,8 @@ The name to use in the icon for this frame, when and if the icon
appears. If this is @code{nil}, the frame's title is used.
@item foreground-color
The color to use for the image of a character. This is a string; the X
server defines the meaningful color names.
The color to use for the image of a character. This is a string; the
window system defines the meaningful color names.
@item background-color
The color to use for the background of characters.
@ -507,7 +520,7 @@ Size}.
@defun x-parse-geometry geom
@cindex geometry specification
The function @code{x-parse-geometry} converts a standard X windows
The function @code{x-parse-geometry} converts a standard X Windows
geometry string to an alist that you can use as part of the argument to
@code{make-frame}.
@ -560,24 +573,25 @@ the second.
@node Frame Titles
@section Frame Titles
Every frame has a title; most window managers display the frame title at
the top of the frame. You can specify an explicit title with the
@code{name} frame property. But normally you don't specify this
explicitly, and Emacs computes the title automatically.
Every frame has a @code{name} parameter; this serves as the default
for the frame title which window systems typically display at the top of
the frame. You can specify a name explicitly by setting the @code{name}
frame property.
Emacs computes the frame title based on a template stored in the
variable @code{frame-title-format}.
Normally you don't specify the name explicitly, and Emacs computes the
frame name automatically based on a template stored in the variable
@code{frame-title-format}. Emacs recomputes the name each time the
frame is redisplayed.
@defvar frame-title-format
This variable specifies how to compute a title for a frame
when you have not explicitly specified one.
The variable's value is actually a mode line construct, just like
@code{mode-line-format}. @xref{Mode Line Data}.
This variable specifies how to compute a name for a frame when you have
not explicitly specified one. The variable's value is actually a mode
line construct, just like @code{mode-line-format}. @xref{Mode Line
Data}.
@end defvar
@defvar icon-title-format
This variable specifies how to compute the title for an iconified frame,
This variable specifies how to compute the name for an iconified frame,
when you have not explicitly specified the frame title. This title
appears in the icon itself.
@end defvar
@ -694,11 +708,11 @@ This function returns the window on @var{frame} that is selected within
@var{frame}.
@end defun
Conversely, selecting a window for Emacs with @code{select-window} also
Conversely, selecting a window for Emacs with @code{select-window} also
makes that window selected within its frame. @xref{Selecting Windows}.
Another function that (usually) returns one of the windows in a frame is
@code{minibuffer-window}. @xref{Minibuffer Misc}.
Another function that (usually) returns one of the windows in a given
frame is @code{minibuffer-window}. @xref{Minibuffer Misc}.
@node Minibuffers and Frames
@section Minibuffers and Frames
@ -736,23 +750,23 @@ window always resides on the selected frame.
This function returns the selected frame.
@end defun
The X server normally directs keyboard input to the X window that the
mouse is in. Some window managers use mouse clicks or keyboard events
to @dfn{shift the focus} to various X windows, overriding the normal
behavior of the server.
Some window systems and window managers direct keyboard input to the
window object that the mouse is in; others require explicit clicks or
commands to @dfn{shift the focus} to various window objects. Either
way, Emacs automatically keeps track of which frame has the focus.
Lisp programs can switch frames ``temporarily'' by calling
the function @code{select-frame}. This does not override the window
manager; rather, it escapes from the window manager's control until
that control is somehow reasserted.
Lisp programs can also switch frames ``temporarily'' by calling the
function @code{select-frame}. This does not alter the window system's
concept of focus; rather, it escapes from the window manager's control
until that control is somehow reasserted.
When using a text-only terminal, there is no window manager; therefore,
@code{switch-frame} is the only way to switch frames, and the effect
lasts until overridden by a subsequent call to @code{switch-frame}.
Only the selected terminal frame is actually displayed on the terminal.
Each terminal screen except for the initial one has a number, and the
number of the selected frame appears in the mode line after the word
@samp{Emacs} (@pxref{Mode Line Variables}).
When using a text-only terminal, only the selected terminal frame is
actually displayed on the terminal. @code{switch-frame} is the only way
to switch frames, and the change lasts until overridden by a subsequent
call to @code{switch-frame}. Each terminal screen except for the
initial one has a number, and the number of the selected frame appears
in the mode line after the word @samp{Emacs} (@pxref{Mode Line
Variables}).
@c ??? This is not yet implemented properly.
@defun select-frame frame
@ -762,10 +776,10 @@ the next time the user does something to select a different frame, or
until the next time this function is called.
@end defun
Emacs cooperates with the X server and the window managers by arranging
to select frames according to what the server and window manager ask
for. It does so by generating a special kind of input event, called a
@dfn{focus} event. The command loop handles a focus event by calling
Emacs cooperates with the window system by arranging to select frames as
the server and window manager request. It does so by generating a
special kind of input event, called a @dfn{focus} event, when
appropriate. The command loop handles a focus event by calling
@code{handle-switch-frame}. @xref{Focus Events}.
@deffn Command handle-switch-frame frame
@ -806,6 +820,14 @@ The redirection lasts until @code{redirect-frame-focus} is called to
change it.
@end defun
@tindex focus-follows-mouse
@defopt focus-follows-mouse
This option is how you inform Emacs whether the window manager transfers
focus when the user moves the mouse. Non-@code{nil} says that it does.
When this is so, the command @code{other-frame} moves the mouse to a
position consistent with the new selected frame.
@end defopt
@node Visibility of Frames
@section Visibility of Frames
@cindex visible frame
@ -813,7 +835,7 @@ change it.
@cindex iconified frame
@cindex frame visibility
An X window frame may be @dfn{visible}, @dfn{invisible}, or
A window frame may be @dfn{visible}, @dfn{invisible}, or
@dfn{iconified}. If it is visible, you can see its contents. If it is
iconified, the frame's contents do not appear on the screen, but an icon
does. If the frame is invisible, it doesn't show on the screen, not
@ -844,7 +866,7 @@ This returns the visibility status of frame @var{frame}. The value is
@end defun
The visibility status of a frame is also available as a frame
parameter. You can read or change it as such. @xref{X Frame
parameter. You can read or change it as such. @xref{Window Frame
Parameters}.
The user can iconify and deiconify frames with the window manager.
@ -855,23 +877,23 @@ changes. @xref{Misc Events}.
@node Raising and Lowering
@section Raising and Lowering Frames
The X Window System uses a desktop metaphor. Part of this metaphor is
Most window systems use a desktop metaphor. Part of this metaphor is
the idea that windows are stacked in a notional third dimension
perpendicular to the screen surface, and thus ordered from ``highest''
to ``lowest''. Where two X windows overlap, the one higher up covers
the one underneath. Even an X window at the bottom of the stack can be
seen if no other X window overlaps it.
to ``lowest''. Where two windows overlap, the one higher up covers
the one underneath. Even a window at the bottom of the stack can be
seen if no other window overlaps it.
@cindex raising a frame
@cindex lowering a frame
An X window's place in this ordering is not fixed; in fact, users tend
to change the order frequently. @dfn{Raising} an X window means moving
it ``up'', to the top of the stack. @dfn{Lowering} an X window means
A window's place in this ordering is not fixed; in fact, users tend
to change the order frequently. @dfn{Raising} a window means moving
it ``up'', to the top of the stack. @dfn{Lowering} a window means
moving it to the bottom of the stack. This motion is in the notional
third dimension only, and does not change the position of the X window
third dimension only, and does not change the position of the window
on the screen.
You can raise and lower Emacs's X windows with these functions:
You can raise and lower Emacs frame Windows with these functions:
@deffn Command raise-frame frame
This function raises frame @var{frame}.
@ -888,7 +910,7 @@ that the minibuffer window is in.
You can also enable auto-raise (raising automatically when a frame is
selected) or auto-lower (lowering automatically when it is deselected)
for any frame using frame parameters. @xref{X Frame Parameters}.
for any frame using frame parameters. @xref{Window Frame Parameters}.
@node Frame Configurations
@section Frame Configurations
@ -896,6 +918,7 @@ for any frame using frame parameters. @xref{X Frame Parameters}.
A @dfn{frame configuration} records the current arrangement of frames,
all their properties, and the window configuration of each one.
(@xref{Window Configurations}.)
@defun current-frame-configuration
This function returns a frame configuration list that describes
@ -925,12 +948,15 @@ mouse forever---only until some other event, such as the release of a
button.
@defspec track-mouse body@dots{}
Execute @var{body}, meanwhile generating input events for mouse motion.
The code in @var{body} can read these events with @code{read-event} or
@code{read-key-sequence}. @xref{Motion Events}, for the format of mouse
motion events.
This special form executes @var{body}, with generation of mouse motion
events enabled. Typically @var{body} would use @code{read-event} to
read the motion events and modify the display accordingly. @xref{Motion
Events}, for the format of mouse motion events.
The value of @code{track-mouse} is that of the last form in @var{body}.
You should design @var{body} to return when it sees the up-event that
indicates the release of the button, or whatever kind of event means
it is time to stop tracking.
@end defspec
The usual purpose of tracking mouse motion is to indicate on the screen
@ -947,7 +973,7 @@ Lisp-level mouse tracking.
These functions change the screen appearance instantaneously. The
effect is transient, only until the next ordinary Emacs redisplay. That
is ok for mouse tracking, since it doesn't make sense for mouse tracking
is OK for mouse tracking, since it doesn't make sense for mouse tracking
to change the text, and the body of @code{track-mouse} normally reads
the events itself and does not do redisplay.
@ -1015,8 +1041,8 @@ characters. These coordinates are not required to be within the frame.
@node Pop-Up Menus
@section Pop-Up Menus
When using X windows, a Lisp program can pop up a menu which the
user can choose from with the mouse.
When using a window system, a Lisp program can pop up a menu so that
the user can choose an alternative with the mouse.
@defun x-popup-menu position menu
This function displays a pop-up menu and returns an indication of
@ -1083,13 +1109,13 @@ the menu keymap as necessary.
@section Dialog Boxes
@cindex dialog boxes
A dialog box is a variant of a pop-up menu. It looks a little
different (if Emacs uses an X toolkit), it always appears in the center
of a frame, and it has just one level and one pane. The main use of
dialog boxes is for asking questions that the user can answer with
``yes'', ``no'', and a few other alternatives. The functions
@code{y-or-n-p} and @code{yes-or-no-p} use dialog boxes instead of the
keyboard, when called from commands invoked by mouse clicks.
A dialog box is a variant of a pop-up menu---it looks a little
different, it always appears in the center of a frame, and it has just
one level and one pane. The main use of dialog boxes is for asking
questions that the user can answer with ``yes'', ``no'', and a few other
alternatives. The functions @code{y-or-n-p} and @code{yes-or-no-p} use
dialog boxes instead of the keyboard, when called from commands invoked
by mouse clicks.
@defun x-popup-dialog position contents
This function displays a pop-up dialog box and returns an indication of
@ -1121,9 +1147,9 @@ Dialog boxes always appear in the center of a frame; the argument
@code{x-popup-menu}, but the precise coordinates don't matter; only the
frame matters.
If your Emacs executable does not use an X toolkit, then it cannot
display a real dialog box; so instead it displays the same items in a
pop-up menu in the center of the frame.
In some configurations, Emacs cannot display a real dialog box; so
instead it displays the same items in a pop-up menu in the center of the
frame.
@end defun
@node Pointer Shapes
@ -1132,7 +1158,7 @@ pop-up menu in the center of the frame.
@cindex mouse pointer shape
These variables specify which shape to use for the mouse pointer in
various situations:
various situations, when using the X Window System:
@table @code
@item x-pointer-shape
@ -1149,14 +1175,14 @@ is over mouse-sensitive text.
These variables affect newly created frames. They do not normally
affect existing frames; however, if you set the mouse color of a frame,
that also updates its pointer shapes based on the current values of
these variables. @xref{X Frame Parameters}.
these variables. @xref{Window Frame Parameters}.
The values you can use, to specify either of these pointer shapes, are
defined in the file @file{lisp/term/x-win.el}. Use @kbd{M-x apropos
@key{RET} x-pointer @key{RET}} to see a list of them.
@node X Selections
@section X Selections
@node Window System Selections
@section Window System Selections
@cindex selection (for X windows)
The X server records a set of @dfn{selections} which permit transfer of
@ -1221,9 +1247,9 @@ like the way successive kills in Emacs move down the kill ring.
@defun x-list-font pattern &optional face frame maximum
This function returns a list of available font names that match
@var{pattern}. If the optional arguments FACE and FRAME are specified,
then the list is limited to fonts that are the same size as @var{face}
currently is on @var{frame}.
@var{pattern}. If the optional arguments @var{face} and @var{frame} are
specified, then the list is limited to fonts that are the same size as
@var{face} currently is on @var{frame}.
The argument @var{pattern} should be a string, perhaps with wildcard
characters: the @samp{*} character matches any substring, and the

View file

@ -112,8 +112,8 @@ byte compiler. @xref{Byte-Code Type}.
@tindex functionp
@defun functionp object
This function returns @code{t} if @var{object} is any kind of function;
that is, anything that could be called as a function.
This function returns @code{t} if @var{object} is any kind of function,
or a special form or macro.
@end defun
@defun subrp object
@ -386,7 +386,7 @@ facilities. @xref{Documentation}, for how the @var{documentation-string} is
accessed.
It is a good idea to provide documentation strings for all the
functions in your program, even those that are only called from within
functions in your program, even those that are called only from within
your program. Documentation strings are like comments, except that they
are easier to access.
@ -419,7 +419,7 @@ as the return value and as the documentation.
In most computer languages, every function has a name; the idea of a
function without a name is nonsensical. In Lisp, a function in the
strictest sense has no name. It is simply a list whose first element is
@code{lambda}, or a primitive subr-object.
@code{lambda}, a byte-code function object, or a primitive subr-object.
However, a symbol can serve as the name of a function. This happens
when you put the function in the symbol's @dfn{function cell}
@ -580,7 +580,8 @@ name it calls is written in your program. This means that you choose
which function to call, and how many arguments to give it, when you
write the program. Usually that's just what you want. Occasionally you
need to compute at run time which function to call. To do that, use the
functions @code{funcall} and @code{apply}.
function @code{funcall}. When you also need to determine at run time
how may arguments to pass, use @code{apply}.
@defun funcall function &rest arguments
@code{funcall} calls @var{function} with @var{arguments}, and returns
@ -690,15 +691,19 @@ This function ignores any arguments and returns @code{nil}.
list or other collection. Emacs Lisp has several such functions;
@code{mapcar} and @code{mapconcat}, which scan a list, are described
here. @xref{Creating Symbols}, for the function @code{mapatoms} which
maps over the symbols in an obarray. @xref{Char-Tables}, for the
function @code{map-char-table}, which maps over the elements in a
char-table.
maps over the symbols in an obarray.
These mapping functions do not allow char-tables because a char-table
is a sparse array whose nominal range of indices is very large. To map
over a char-table in a way that deals properly with its sparse nature,
use the function @code{map-char-table} (@pxref{Char-Tables}).
@defun mapcar function sequence
@code{mapcar} applies @var{function} to each element of @var{sequence}
in turn, and returns a list of the results.
The argument @var{sequence} may be a list, a vector, or a string. The
The argument @var{sequence} can be any kind of sequence except a
char-table; that is, a list, a vector, a bool-vector, or a string. The
result is always a list. The length of the result is the same as the
length of @var{sequence}.
@ -720,14 +725,14 @@ length of @var{sequence}.
@end group
@group
(defun mapcar* (f &rest args)
(defun mapcar* (function &rest args)
"Apply FUNCTION to successive cars of all ARGS.
Return the list of results."
;; @r{If no list is exhausted,}
(if (not (memq 'nil args))
;; @r{apply function to @sc{CAR}s.}
(cons (apply f (mapcar 'car args))
(apply 'mapcar* f
;; @r{apply function to @sc{car}s.}
(cons (apply function (mapcar 'car args))
(apply 'mapcar* function
;; @r{Recurse for rest of elements.}
(mapcar 'cdr args)))))
@end group
@ -747,7 +752,9 @@ Between each pair of result strings, @code{mapconcat} inserts the string
other suitable punctuation.
The argument @var{function} must be a function that can take one
argument and return a string.
argument and return a string. The argument @var{sequence} can be any
kind of sequence except a char-table; that is, a list, a vector, a
bool-vector, or a string.
@smallexample
@group
@ -823,7 +830,7 @@ uses a function as its third argument:
@noindent
Here we define a function that uses @code{change-property},
passing a function that doubles its argument:
passing it a function to double a number:
@example
@group
@ -978,15 +985,18 @@ There are three normal uses of this function:
@itemize @bullet
@item
Copying one symbol's function definition to another. (In other words,
making an alternate name for a function.)
Copying one symbol's function definition to another---in other words,
making an alternate name for a function. (If you think of this as the
definition of the new name, you should use @code{defalias} instead of
@code{fset}; see @ref{Defining Functions}.)
@item
Giving a symbol a function definition that is not a list and therefore
cannot be made with @code{defun}. For example, you can use @code{fset}
to give a symbol @code{s1} a function definition which is another symbol
@code{s2}; then @code{s1} serves as an alias for whatever definition
@code{s2} presently has.
@code{s2} presently has. (Once again use @code{defalias} instead of
@code{fset} if you think of this as the definition of @code{s1}.)
@item
In constructs for defining or altering functions. If @code{defun}
@ -994,21 +1004,17 @@ were not a primitive, it could be written in Lisp (as a macro) using
@code{fset}.
@end itemize
Here are examples of the first two uses:
Here are examples of these uses:
@example
@group
;; @r{Give @code{first} the same definition @code{car} has.}
(fset 'first (symbol-function 'car))
@result{} #<subr car>
@end group
@group
(first '(1 2 3))
@result{} 1
;; @r{Save @code{foo}'s definition in @code{old-foo}.}
(fset 'old-foo (symbol-function 'foo))
@end group
@group
;; @r{Make the symbol @code{car} the function definition of @code{xfirst}.}
;; @r{(Most likely, @code{defalias} would be better than @code{fset} here.)}
(fset 'xfirst 'car)
@result{} car
@end group
@ -1030,10 +1036,14 @@ Here are examples of the first two uses:
(fset 'kill-two-lines "\^u2\^k")
@result{} "\^u2\^k"
@end group
@end example
See also the related function @code{defalias}, in @ref{Defining
Functions}.
@group
;; @r{Here is a function that alters other functions.}
(defun copy-function-definition (new old)
"Define NEW with the same function definition as OLD."
(fset new (symbol-function old)))
@end group
@end example
@end defun
When writing a function that extends a previously defined function,
@ -1058,7 +1068,8 @@ proper results. The only way to avoid this problem is to make sure the
file is loaded before moving aside the old definition of @code{foo}.
But it is unmodular and unclean, in any case, for a Lisp file to
redefine a function defined elsewhere.
redefine a function defined elsewhere. It is cleaner to use the advice
facility (@pxref{Advising Functions}).
@node Inline Functions
@section Inline Functions
@ -1083,15 +1094,14 @@ advantage of inline functions is greatest for small functions, you
generally should not make large functions inline.
It's possible to define a macro to expand into the same code that an
inline function would execute. But the macro would have a limitation:
you can use it only explicitly---a macro cannot be called with
inline function would execute. (@xref{Macros}.) But the macro would be
limited to direct use in expressions---a macro cannot be called with
@code{apply}, @code{mapcar} and so on. Also, it takes some work to
convert an ordinary function into a macro. (@xref{Macros}.) To convert
it into an inline function is very easy; simply replace @code{defun}
with @code{defsubst}. Since each argument of an inline function is
evaluated exactly once, you needn't worry about how many times the
body uses the arguments, as you do for macros. (@xref{Argument
Evaluation}.)
convert an ordinary function into a macro. To convert it into an inline
function is very easy; simply replace @code{defun} with @code{defsubst}.
Since each argument of an inline function is evaluated exactly once, you
needn't worry about how many times the body uses the arguments, as you
do for macros. (@xref{Argument Evaluation}.)
Inline functions can be used and open-coded later on in the same file,
following the definition, just like macros.
@ -1127,6 +1137,9 @@ See @ref{Eval}.
@item funcall
See @ref{Calling Functions}.
@item function
See @ref{Anonymous Functions}.
@item ignore
See @ref{Calling Functions}.
@ -1145,6 +1158,9 @@ See @ref{Creating Symbols}.
@item mapcar
See @ref{Mapping Functions}.
@item map-char-table
See @ref{Char-Tables}.
@item mapconcat
See @ref{Mapping Functions}.

View file

@ -50,11 +50,11 @@ documentation string follows the initial value of the variable.
sentence (or two complete sentences) since some commands, such as
@code{apropos}, show only the first line of a multi-line documentation
string. Also, you should not indent the second line of a documentation
string, if you have one, because that looks odd when you use @kbd{C-h f}
(@code{describe-function}) or @kbd{C-h v} (@code{describe-variable}).
@xref{Documentation Tips}.
string, if it has one, because that looks odd when you use @kbd{C-h f}
(@code{describe-function}) or @kbd{C-h v} (@code{describe-variable}) to
view the documentation string. @xref{Documentation Tips}.
Documentation strings may contain several special substrings, which
Documentation strings can contain several special substrings, which
stand for key bindings to be looked up in the current keymaps when the
documentation is displayed. This allows documentation strings to refer
to the keys for related commands and be accurate even when a user
@ -132,7 +132,7 @@ non-@code{nil}) it calls @code{substitute-command-keys}, to return a
value containing the actual (current) key bindings.
The function @code{documentation} signals a @code{void-function} error
if @var{function} has no function definition. However, it is ok if
if @var{function} has no function definition. However, it is OK if
the function definition has no documentation string. In that case,
@code{documentation} returns @code{nil}.
@end defun
@ -255,7 +255,7 @@ for in the directory @code{doc-directory}. Usually @var{filename} is
@c Emacs 19 feature
@defvar doc-directory
This variable holds the name of the directory which should contion the
This variable holds the name of the directory which should contain the
file @code{"DOC-@var{version}"} that contains documentation strings for
built-in and preloaded functions and variables.
@ -288,12 +288,12 @@ stands for a key sequence that will invoke @var{command}, or @samp{M-x
@var{command}} if @var{command} has no key bindings.
@item \@{@var{mapvar}@}
stands for a summary of the value of @var{mapvar}. The value should be
a keymap. The summary is made by @code{describe-bindings}.
stands for a summary of the keymap which is the value of the variable
@var{mapvar}. The summary is made using @code{describe-bindings}.
@item \<@var{mapvar}>
stands for no text itself. It is used only for a side effect: it
specifies @var{mapvar} as the keymap for any following
specifies @var{mapvar}'s value as the keymap for any following
@samp{\[@var{command}]} sequences in this documentation string.
@item \=
@ -331,7 +331,7 @@ user's own customized key bindings.
? minibuffer-completion-help
SPC minibuffer-complete-word
TAB minibuffer-complete
LFD minibuffer-complete-and-exit
C-j minibuffer-complete-and-exit
RET minibuffer-complete-and-exit
C-g abort-recursive-edit
"
@ -372,7 +372,7 @@ This function returns a string describing @var{event} in the standard
Emacs notation for keyboard input. A normal printing character appears
as itself, but a control character turns into a string starting with
@samp{C-}, a meta character turns into a string starting with @samp{M-},
and space, linefeed, etc.@: appear as @samp{SPC}, @samp{LFD}, etc. A
and space, tab, etc.@: appear as @samp{SPC}, @samp{TAB}, etc. A
function key symbol appears as itself. An event that is a list appears
as the name of the symbol in the @sc{car} of the list.
@ -383,7 +383,7 @@ as the name of the symbol in the @sc{car} of the list.
@end group
@group
(key-description "\C-x \M-y \n \t \r \f123")
@result{} "C-x SPC M-y SPC LFD SPC TAB SPC RET SPC C-l 1 2 3"
@result{} "C-x SPC M-y SPC C-j SPC TAB SPC RET SPC C-l 1 2 3"
@end group
@group
(single-key-description 'C-mouse-1)
@ -423,7 +423,7 @@ the user as subcommands of the prefix @kbd{C-h}. For more information
about them, see @ref{Help, , Help, emacs, The GNU Emacs Manual}. Here
we describe some program-level interfaces to the same information.
@deffn Command apropos regexp &optional do-all predicate
@deffn Command apropos regexp &optional do-all
This function finds all symbols whose names contain a match for the
regular expression @var{regexp}, and returns a list of them
(@pxref{Regular Expressions}). It also displays the symbols in a buffer
@ -434,15 +434,9 @@ beginning of its documentation string.
If @var{do-all} is non-@code{nil}, then @code{apropos} also shows
key bindings for the functions that are found.
If @var{predicate} is non-@code{nil}, it should be a function to be
called on each symbol that has matched @var{regexp}. Only symbols for
which @var{predicate} returns a non-@code{nil} value are listed or
displayed.
In the first of the following examples, @code{apropos} finds all the
symbols with names containing @samp{exec}. In the second example, it
finds and returns only those symbols that are also commands. (We don't
show here the output that results in the @samp{*Help*} buffer.)
symbols with names containing @samp{exec}. (We don't show here the
output that results in the @samp{*Help*} buffer.)
@smallexample
@group
@ -451,42 +445,7 @@ show here the output that results in the @samp{*Help*} buffer.)
exec-path execute-extended-command execute-kbd-macro
executing-kbd-macro executing-macro)
@end group
@group
(apropos "exec" nil 'commandp)
@result{} (Buffer-menu-execute execute-extended-command)
@end group
@ignore
@group
---------- Buffer: *Help* ----------
Buffer-menu-execute
Function: Save and/or delete buffers marked with
M-x Buffer-menu-save or M-x Buffer-menu-delete commands.
execute-extended-command ESC x
Function: Read function name, then read its
arguments and call it.
---------- Buffer: *Help* ----------
@end group
@end ignore
@end smallexample
The command @kbd{C-h a} (@code{command-apropos}) calls @code{apropos},
but specifies a @var{predicate} that restricts the output to symbols
that are commands. The call to @code{apropos} looks like this:
@smallexample
(apropos string t 'commandp)
@end smallexample
@end deffn
@c Emacs 19 feature
@deffn Command super-apropos regexp &optional do-all
This function differs from @code{apropos} in that it searches
documentation strings as well as symbol names for matches for
@var{regexp}. By default, it searches the documentation strings for
preloaded functions and variables only. If @var{do-all} is
non-@code{nil}, it scans the names and documentation strings of all
functions and variables.
@end deffn
@defvar help-map
@ -522,7 +481,7 @@ Documentation}.
@defvar help-char
The value of this variable is the help character---the character that
Emacs recognizes as meaning Help. By default, it is 8, which is
Emacs recognizes as meaning Help. By default, it stands for 8, which is
@kbd{C-h}. When Emacs reads this character, if @code{help-form} is
non-@code{nil} Lisp expression, it evaluates that expression, and
displays the result in a window if it is a string.
@ -539,6 +498,13 @@ binding as a subcommand of the prefix key, it runs
subcommands of the prefix key.
@end defvar
@tindex help-event-list
@defvar help-event-list
The value of this variable is a list of event types that serve as
alternative ``help characters.'' These events are handled just like the
event specified by @code{help-char}.
@end defvar
@defvar help-form
If this variable is non-@code{nil}, its value is a form to evaluate
whenever the character @code{help-char} is read. If evaluating the form
@ -546,19 +512,19 @@ produces a string, that string is displayed.
A command that calls @code{read-event} or @code{read-char} probably
should bind @code{help-form} to a non-@code{nil} expression while it
does input. (The exception is when @kbd{C-h} is meaningful input.)
Evaluating this expression should result in a string that explains what
the input is for and how to enter it properly.
does input. (The time when you should not do this is when @kbd{C-h} has
some other meaning.) Evaluating this expression should result in a
string that explains what the input is for and how to enter it properly.
Entry to the minibuffer binds this variable to the value of
@code{minibuffer-help-form} (@pxref{Minibuffer Misc}).
@end defvar
@defvar prefix-help-command
This variable holds a function to print help for a prefix character.
The function is called when the user types a prefix key followed by the
help character, and the help character has no binding after that prefix.
The variable's default value is @code{describe-prefix-bindings}.
This variable holds a function to print help for a prefix key. The
function is called when the user types a prefix key followed by the help
character, and the help character has no binding after that prefix. The
variable's default value is @code{describe-prefix-bindings}.
@end defvar
@defun describe-prefix-bindings

View file

@ -12,14 +12,15 @@ the preloaded Lisp libraries in it, how storage is allocated, and some
internal aspects of GNU Emacs that may be of interest to C programmers.
@menu
* Building Emacs:: How to preload Lisp libraries into Emacs.
* Building Emacs:: How to the dumped Emacs is made.
* Pure Storage:: A kludge to make preloaded Lisp functions sharable.
* Garbage Collection:: Reclaiming space for Lisp objects no longer used.
* Memory Usage:: Info about total size of Lisp objects made so far.
* Writing Emacs Primitives:: Writing C code for Emacs.
* Object Internals:: Data formats of buffers, windows, processes.
@end menu
@node Building Emacs, Pure Storage, GNU Emacs Internals, GNU Emacs Internals
@node Building Emacs
@appendixsec Building Emacs
@cindex building Emacs
@pindex temacs
@ -118,54 +119,7 @@ If you want to use this function in an Emacs that was already dumped,
you must run Emacs with @samp{-batch}.
@end defun
@deffn Command emacs-version
This function returns a string describing the version of Emacs that is
running. It is useful to include this string in bug reports.
@example
@group
(emacs-version)
@result{} "GNU Emacs 20.2.5 (i486-pc-linux-gnulibc1, X toolkit)
of Sat Feb 14 1998 on psilocin.gnu.org"
@end group
@end example
Called interactively, the function prints the same information in the
echo area.
@end deffn
@defvar emacs-build-time
The value of this variable is the time at which Emacs was built at the
local site.
@example
@group
emacs-build-time
@result{} "Tue Jun 6 14:55:57 1995"
@end group
@end example
@end defvar
@defvar emacs-version
The value of this variable is the version of Emacs being run. It is a
string such as @code{"20.3.1"}. The last number in this string is not
really part of the Emacs release version number; it is incremented each
time you build Emacs in any given directory.
@end defvar
The following two variables have existed since Emacs version 19.23,
@defvar emacs-major-version
The major version number of Emacs, as an integer. For Emacs version
20.2, the value is 20.
@end defvar
@defvar emacs-minor-version
The minor version number of Emacs, as an integer. For Emacs version
20.2, the value is 2.
@end defvar
@node Pure Storage, Garbage Collection, Building Emacs, GNU Emacs Internals
@node Pure Storage
@appendixsec Pure Storage
@cindex pure storage
@ -221,7 +175,7 @@ before and after dumping.
You should not change this flag in a running Emacs.
@end defvar
@node Garbage Collection, Writing Emacs Primitives, Pure Storage, GNU Emacs Internals
@node Garbage Collection
@appendixsec Garbage Collection
@cindex garbage collector
@ -291,11 +245,16 @@ information:
((@var{used-conses} . @var{free-conses})
(@var{used-syms} . @var{free-syms})
@end group
(@var{used-markers} . @var{free-markers})
(@var{used-miscs} . @var{free-miscs})
@var{used-string-chars}
@var{used-vector-slots}
(@var{used-floats} . @var{free-floats})
(@var{used-intervals} . @var{free-intervals}))
@end example
Here is an example:
@example
@group
(garbage-collect)
@result{} ((106886 . 13184) (9769 . 0)
@ -321,12 +280,13 @@ The number of symbols in use.
The number of symbols for which space has been obtained from the
operating system, but that are not currently being used.
@item used-markers
The number of markers in use.
@item used-miscs
The number of miscellaneous objects in use. These include markers and
overlays, plus certain objects not visible to users.
@item free-markers
The number of markers for which space has been obtained from the
operating system, but that are not currently being used.
@item free-miscs
The number of miscellaneous objects for which space has been obtained
from the operating system, but that are not currently being used.
@item used-string-chars
The total size of all strings, in characters.
@ -373,6 +333,11 @@ until the subsequent garbage collection, at which time
@code{garbage-collect} will set the threshold back to 10,000.
@end defopt
The value return by @code{garbage-collect} describes the amount of
memory used by Lisp data, broken down by data type. By contrast, the
function @code{memory-limit} provides information on the total amount of
memory Emacs is currently using.
@c Emacs 19 feature
@defun memory-limit
This function returns the address of the last byte Emacs has allocated,
@ -383,7 +348,53 @@ You can use this to get a general idea of how your actions affect the
memory usage.
@end defun
@node Writing Emacs Primitives, Object Internals, Garbage Collection, GNU Emacs Internals
@node Memory Usage
@section Memory Usage
These functions and variables give information about the total amount
of memory allocation that Emacs has done, broken down by data type.
Note the difference between these and the values returned by
@code{(garbage-collect)}; those count objects that currently exist, but
these count the number or size of all allocations, including those for
objects that have since been freed.
@defvar cons-cells-consed
The total number of cons cells that have been allocated so far
in this Emacs session.
@end defvar
@defvar floats-consed
The total number of floats that have been allocated so far
in this Emacs session.
@end defvar
@defvar vector-cells-consed
The total number of vector cells that have been allocated so far
in this Emacs session.
@end defvar
@defvar symbols-consed
The total number of symbols that have been allocated so far
in this Emacs session.
@end defvar
@defvar string-chars-consed
The total number of string characters that have been allocated so far
in this Emacs session.
@end defvar
@defvar misc-objects-consed
The total number of miscellaneous objects that have been allocated so
far in this Emacs session. These include markers and overlays, plus
certain objects not visible to users.
@end defvar
@defvar intervals-consed
The total number of intervals that have been allocated so far
in this Emacs session.
@end defvar
@node Writing Emacs Primitives
@appendixsec Writing Emacs Primitives
@cindex primitive function internals
@ -576,57 +587,69 @@ visible in Lisp with a value that is always an integer.
@code{DEFVAR_BOOL} makes a C variable of type @code{int} visible in Lisp
with a value that is either @code{t} or @code{nil}.
If you define a file-scope C variable of type @code{Lisp_Object},
you must protect it for garbage-collection by calling @code{staticpro}
in @code{syms_of_@var{filename}}, like this:
@example
staticpro (&@var{variable});
@end example
Here is another example function, with more complicated arguments.
This comes from the code for the X Window System, and it demonstrates
the use of macros and functions to manipulate Lisp objects.
This comes from the code in @file{window.c}, and it demonstrates the use
of macros and functions to manipulate Lisp objects.
@smallexample
@group
DEFUN ("coordinates-in-window-p", Fcoordinates_in_window_p,
Scoordinates_in_window_p, 2, 2,
"xSpecify coordinate pair: \nXExpression which evals to window: ",
"Return non-nil if POSITIONS is in WINDOW.\n\
\(POSITIONS is a list, (SCREEN-X SCREEN-Y)\)\n\
"Return non-nil if COORDINATES is in WINDOW.\n\
COORDINATES is a cons of the form (X . Y), X and Y being distances\n\
...
@end group
@group
Returned value is list of positions expressed\n\
relative to window upper left corner.")
(coordinate, window)
register Lisp_Object coordinate, window;
If they are on the border between WINDOW and its right sibling,\n\
`vertical-line' is returned.")
(coordinates, window)
register Lisp_Object coordinates, window;
@{
register Lisp_Object xcoord, ycoord;
int x, y;
@end group
@group
if (!CONSP (coordinate)) wrong_type_argument (Qlistp, coordinate);
CHECK_WINDOW (window, 2);
xcoord = Fcar (coordinate);
ycoord = Fcar (Fcdr (coordinate));
CHECK_NUMBER (xcoord, 0);
CHECK_NUMBER (ycoord, 1);
CHECK_LIVE_WINDOW (window, 0);
CHECK_CONS (coordinates, 1);
x = XINT (Fcar (coordinates));
y = XINT (Fcdr (coordinates));
@end group
@group
if ((XINT (xcoord) < XINT (XWINDOW (window)->left))
|| (XINT (xcoord) >= (XINT (XWINDOW (window)->left)
+ XINT (XWINDOW (window)->width))))
return Qnil;
/* @r{Subtracting from XFASTINT (xcoord) is safe}
@r{as long as we know the result is not negative.} */
XFASTINT (xcoord) -= XFASTINT (XWINDOW (window)->left);
switch (coordinates_in_window (XWINDOW (window), &x, &y))
@{
case 0: /* NOT in window at all. */
return Qnil;
@end group
@group
if (XINT (ycoord) == (screen_height - 1))
return Qnil;
case 1: /* In text part of window. */
return Fcons (make_number (x), make_number (y));
@end group
@group
if ((XINT (ycoord) < XINT (XWINDOW (window)->top))
|| (XINT (ycoord) >= (XINT (XWINDOW (window)->top)
+ XINT (XWINDOW (window)->height)) - 1))
return Qnil;
case 2: /* In mode line of window. */
return Qmode_line;
@end group
@group
XFASTINT (ycoord) -= XFASTINT (XWINDOW (window)->top);
return (Fcons (xcoord, Fcons (ycoord, Qnil)));
case 3: /* On right border of window. */
return Qvertical_line;
@end group
@group
default:
abort ();
@}
@}
@end group
@end smallexample
@ -650,7 +673,7 @@ number of arguments. They work by calling @code{Ffuncall}.
@file{lisp.h} contains the definitions for some important macros and
functions.
@node Object Internals, , Writing Emacs Primitives, GNU Emacs Internals
@node Object Internals
@appendixsec Object Internals
@cindex object internals
@ -678,7 +701,7 @@ explicitly using a suitable predicate (@pxref{Type Predicates}).
* Process Internals:: Components of a process structure.
@end menu
@node Buffer Internals, Window Internals, Object Internals, Object Internals
@node Buffer Internals
@appendixsubsec Buffer Internals
@cindex internals, of buffer
@cindex buffer internals
@ -717,19 +740,19 @@ This field contains the syntax table for the buffer. @xref{Syntax Tables}.
@item downcase_table
This field contains the conversion table for converting text to lower case.
@xref{Case Table}.
@xref{Case Tables}.
@item upcase_table
This field contains the conversion table for converting text to upper case.
@xref{Case Table}.
@xref{Case Tables}.
@item case_canon_table
This field contains the conversion table for canonicalizing text for
case-folding search. @xref{Case Table}.
case-folding search. @xref{Case Tables}.
@item case_eqv_table
This field contains the equivalence table for case-folding search.
@xref{Case Table}.
@xref{Case Tables}.
@item display_table
This field contains the buffer's display table, or @code{nil} if it doesn't
@ -753,10 +776,11 @@ hence it is also included on the list @code{markers}. @xref{The Mark}.
This field is non-@code{nil} if the buffer's mark is active.
@item local_var_alist
This field contains the association list describing the variables local
in this buffer, and their values, with the exception of local variables
that have special slots in the buffer object. (Those slots are omitted
from this table.) @xref{Buffer-Local Variables}.
This field contains the association list describing the buffer-local
variable bindings of this buffer, not including the built-in
buffer-local bindings that that have special slots in the buffer object.
(Those slots are omitted from this table.) @xref{Buffer-Local
Variables}.
@item base_buffer
This field holds the buffer's base buffer (if it is an indirect buffer),
@ -777,9 +801,13 @@ decreasing end position.
This field holds a list of the overlays in this buffer that end after
the current overlay center position. They are sorted in order of
increasing beginning position.
@item enable_multibyte_characters
This field holds the buffer's local value of
@code{enable-multibyte-characters}---either @code{t} or @code{nil}.
@end table
@node Window Internals, Process Internals, Buffer Internals, Object Internals
@node Window Internals
@appendixsubsec Window Internals
@cindex internals, of window
@cindex window internals
@ -886,7 +914,7 @@ holds the mark position that made one end of that region. Otherwise,
this field is @code{nil}.
@end table
@node Process Internals, , Window Internals, Object Internals
@node Process Internals
@appendixsubsec Process Internals
@cindex internals, of process
@cindex process internals

View file

@ -504,7 +504,9 @@ for other purposes as well, such as writing editing commands.
with its own idiosyncrasies. Many of them were inspired by Maclisp,
which was written in the 1960's at MIT's Project MAC. Eventually the
implementors of the descendants of Maclisp came together and developed a
standard for Lisp systems, called Common Lisp.
standard for Lisp systems, called Common Lisp. In the mean time, Gerry
Sussman and Guy Steele at MIT developed a simplified but very powerful
dialect of Lisp, called Scheme.
GNU Emacs Lisp is largely inspired by Maclisp, and a little by Common
Lisp. If you know Common Lisp, you will notice many similarities.
@ -515,6 +517,10 @@ might be very confused. We will occasionally point out how GNU Emacs
Lisp differs from Common Lisp. If you don't know Common Lisp, don't
worry about it; this manual is self-contained.
Emacs Lisp is not at all influenced by Scheme; but the GNU project has
an implementation of Scheme, called Guile. We use Guile for
extensibility in all new GNU software that calls for extensibility.
@node Conventions
@section Conventions
@ -529,6 +535,7 @@ manual. You may want to skip this section and refer back to it later.
* Error Messages:: The format we use for examples of errors.
* Buffer Text Notation:: The format we use for buffer contents in examples.
* Format of Descriptions:: Notation for describing functions, variables, etc.
* Version Info:: Which Emacs version is running?
@end menu
@node Some Terms
@ -544,8 +551,9 @@ including those you write.
@cindex fonts
Examples of Lisp code appear in this font or form: @code{(list 1 2
3)}. Names that represent arguments or metasyntactic variables appear
in this font or form: @var{first-number}.
3)}. Names that represent metasyntactic variables, or arguments to a
function being described, appear in this font or form:
@var{first-number}.
@node nil and t
@subsection @code{nil} and @code{t}
@ -587,7 +595,8 @@ choosing, use @code{t}. The symbol @code{t} always has value @code{t}.
In Emacs Lisp, @code{nil} and @code{t} are special symbols that always
evaluate to themselves. This is so that you do not need to quote them
to use them as constants in a program. An attempt to change their
values results in a @code{setting-constant} error. @xref{Accessing
values results in a @code{setting-constant} error. The same is true of
any symbol whose name starts with a colon (@samp{:}). @xref{Constant
Variables}.
@node Evaluation Notation
@ -675,7 +684,7 @@ the buffer in question between two lines of dashes containing the buffer
name. In addition, @samp{@point{}} indicates the location of point.
(The symbol for point, of course, is not part of the text in the buffer;
it indicates the place @emph{between} two characters where point is
located.)
currently located.)
@example
---------- Buffer: foo ----------
@ -723,18 +732,18 @@ The description follows on succeeding lines, sometimes with examples.
@cindex special form descriptions
In a function description, the name of the function being described
appears first. It is followed on the same line by a list of parameters.
The names used for the parameters are also used in the body of the
description.
appears first. It is followed on the same line by a list of argument
names. These names are also used in the body of the description, to
stand for the values of the arguments.
The appearance of the keyword @code{&optional} in the parameter list
indicates that the arguments for subsequent parameters may be omitted
(omitted parameters default to @code{nil}). Do not write
@code{&optional} when you call the function.
The appearance of the keyword @code{&optional} in the argument list
indicates that the subsequent arguments may be omitted (omitted
arguments default to @code{nil}). Do not write @code{&optional} when
you call the function.
The keyword @code{&rest} (which will always be followed by a single
parameter) indicates that any number of arguments can follow. The value
of the single following parameter will be a list of all these arguments.
argument name) indicates that any number of arguments can follow. The value
of the single following arguments name will be a list of all these arguments.
Do not write @code{&rest} when you call the function.
Here is a description of an imaginary function @code{foo}:
@ -760,15 +769,15 @@ More generally,
@end example
@end defun
Any parameter whose name contains the name of a type (e.g.,
Any argument whose name contains the name of a type (e.g.,
@var{integer}, @var{integer1} or @var{buffer}) is expected to be of that
type. A plural of a type (such as @var{buffers}) often means a list of
objects of that type. Parameters named @var{object} may be of any type.
(@xref{Lisp Data Types}, for a list of Emacs object types.)
Parameters with other sorts of names (e.g., @var{new-file}) are
discussed specifically in the description of the function. In some
sections, features common to parameters of several functions are
described at the beginning.
objects of that type. Arguments named @var{object} may be of any type.
(@xref{Lisp Data Types}, for a list of Emacs object types.) Arguments
with other sorts of names (e.g., @var{new-file}) are discussed
specifically in the description of the function. In some sections,
features common to the arguments of several functions are described at
the beginning.
@xref{Lambda Expressions}, for a more complete description of optional
and rest arguments.
@ -780,7 +789,7 @@ interactively; macros process their arguments differently from functions
(the arguments are not evaluated), but are presented the same way.
Special form descriptions use a more complex notation to specify
optional and repeated parameters because they can break the argument
optional and repeated arguments because they can break the argument
list down into separate arguments in more complicated ways.
@samp{@code{@r{[}@var{optional-arg}@r{]}}} means that @var{optional-arg} is
optional and @samp{@var{repeated-args}@dots{}} stands for zero or more
@ -798,7 +807,8 @@ if @var{var} equals @var{to}. Here is an example:
@example
(count-loop (i 0 10)
(prin1 i) (princ " ")
(prin1 (aref vector i)) (terpri))
(prin1 (aref vector i))
(terpri))
@end example
If @var{from} and @var{to} are omitted, then @var{var} is bound to
@ -842,6 +852,59 @@ have not yet thought about executing.
User option descriptions have the same format, but `Variable' is
replaced by `User Option'.
@node Version Info
@section Version Information
These functions and variables provide information about which
version of Emacs is in use.
@deffn Command emacs-version
This function returns a string describing the version of Emacs that is
running. It is useful to include this string in bug reports.
@example
@group
(emacs-version)
@result{} "GNU Emacs 20.3.5 (i486-pc-linux-gnulibc1, X toolkit)
of Sat Feb 14 1998 on psilocin.gnu.org"
@end group
@end example
Called interactively, the function prints the same information in the
echo area.
@end deffn
@defvar emacs-build-time
The value of this variable is the time at which Emacs was built at the
local site.
@example
@group
emacs-build-time
@result{} "Tue Jun 6 14:55:57 1995"
@end group
@end example
@end defvar
@defvar emacs-version
The value of this variable is the version of Emacs being run. It is a
string such as @code{"20.3.1"}. The last number in this string is not
really part of the Emacs release version number; it is incremented each
time you build Emacs in any given directory.
@end defvar
The following two variables have existed since Emacs version 19.23,
@defvar emacs-major-version
The major version number of Emacs, as an integer. For Emacs version
20.3, the value is 20.
@end defvar
@defvar emacs-minor-version
The minor version number of Emacs, as an integer. For Emacs version
20.3, the value is 3.
@end defvar
@node Acknowledgements
@section Acknowledgements

View file

@ -44,9 +44,8 @@ found. The whole process is called @dfn{key lookup}.
A @dfn{keymap} is a table mapping event types to definitions (which
can be any Lisp objects, though only certain types are meaningful for
execution by the command loop). Given an event (or an event type) and a
keymap, Emacs can get the event's definition. Events include ordinary
@sc{ASCII} characters, function keys, and mouse actions (@pxref{Input
Events}).
keymap, Emacs can get the event's definition. Events include
characters, function keys, and mouse actions (@pxref{Input Events}).
A sequence of input events that form a unit is called a
@dfn{key sequence}, or @dfn{key} for short. A sequence of one event
@ -125,19 +124,20 @@ completely masks any lower-precedence keymap.
@item @var{vector}
If an element of a keymap is a vector, the vector counts as bindings for
all the @sc{ASCII} characters; vector element @var{n} is the binding for
the character with code @var{n}. This is a compact way to record lots
of bindings. A keymap with such a vector is called a @dfn{full keymap}.
Other keymaps are called @dfn{sparse keymaps}.
all the @sc{ASCII} characters, codes 0 through 127; vector element
@var{n} is the binding for the character with code @var{n}. This is a
compact way to record lots of bindings. A keymap with such a vector is
called a @dfn{full keymap}. Other keymaps are called @dfn{sparse
keymaps}.
When a keymap contains a vector, it always defines a binding for each
@sc{ASCII} character, even if the vector contains @code{nil} for that
character. Such a binding of @code{nil} overrides any default binding
in the keymap. However, default bindings are still meaningful for
events that are not @sc{ASCII} characters. A binding of @code{nil} does
@emph{not} override lower-precedence keymaps; thus, if the local map
gives a binding of @code{nil}, Emacs uses the binding from the global
map.
character. Such a binding of @code{nil} overrides any default key
binding in the keymap. However, default bindings are still meaningful
for events that are not @sc{ASCII} characters. A binding of @code{nil}
does @emph{not} override lower-precedence keymaps; thus, if the local
map gives a binding of @code{nil}, Emacs uses the binding from the
global map.
@item @var{string}
@cindex keymap prompt string
@ -333,7 +333,7 @@ from @code{text-mode-map}:
@cindex prefix key
A @dfn{prefix key} is a key sequence whose binding is a keymap. The
keyamp defines what to do with key sequences that extend the prefix key.
keymap defines what to do with key sequences that extend the prefix key.
For example, @kbd{C-x} is a prefix key, and it uses a keymap that is
also stored in the variable @code{ctl-x-map}. This keymap defines
bindings for key sequences starting with @kbd{C-x}.
@ -481,29 +481,27 @@ minor mode keymaps.
All the active keymaps are used together to determine what command to
execute when a key is entered. Emacs searches these maps one by one, in
order of decreasing precedence, until it finds a binding in one of the maps.
order of decreasing precedence, until it finds a binding in one of the
maps. The procedure for searching a single keymap is called @dfn{key
lookup}; see @ref{Key Lookup}.
Normally, Emacs @emph{first} searches for the key in the minor mode
Normally, Emacs first searches for the key in the minor mode
maps (one map at a time); if they do not supply a binding for the key,
Emacs searches the local map; if that too has no binding, Emacs then
searches the global map. However, if @code{overriding-local-map} is
non-@code{nil}, Emacs searches that map first, before the global map.
The procedure for searching a single keymap is called
@dfn{key lookup}; see @ref{Key Lookup}.
@cindex major mode keymap
Since every buffer that uses the same major mode normally uses the
same local keymap, you can think of the keymap as local to the mode. A
change to the local keymap of a buffer (using @code{local-set-key}, for
example) is seen also in the other buffers that share that keymap.
The local keymaps that are used for Lisp mode, C mode, and several
other major modes exist even if they have not yet been used. These
local maps are the values of the variables @code{lisp-mode-map},
@code{c-mode-map}, and so on. For most other modes, which are less
frequently used, the local keymap is constructed only when the mode is
used for the first time in a session.
The local keymaps that are used for Lisp mode and some other major
modes exist even if they have not yet been used. These local maps are
the values of variables such as @code{lisp-mode-map}. For most major
modes, which are less frequently used, the local keymap is constructed
only when the mode is used for the first time in a session.
The minibuffer has local keymaps, too; they contain various completion
and exit commands. @xref{Intro to Minibuffers}.
@ -593,11 +591,8 @@ enables or disables a minor mode. @xref{Keymaps and Minor Modes}.
Note that elements of @code{minor-mode-map-alist} do not have the same
structure as elements of @code{minor-mode-alist}. The map must be the
@sc{cdr} of the element; a list with the map as the @sc{cadr} will not
do.
What's more, the keymap itself must appear in the @sc{cdr}. It does not
work to store a variable in the @sc{cdr} and make the map the value of
that variable.
do. The @sc{cadr} can be either a keymap (a list) or a symbol
whose function definition is a keymap.
When more than one minor mode keymap is active, their order of priority
is the order of @code{minor-mode-map-alist}. But you should design
@ -614,12 +609,12 @@ Lookup}).
This variable allows major modes to override the key bindings for
particular minor modes. The elements of this alist look like the
elements of @code{minor-mode-map-alist}: @code{(@var{variable}
. @var{keymap})}. If a variable has an element
@code{minor-mode-overriding-map-alist}. that map overrides the one in
@code{minor-mode-map-alist}.
. @var{keymap})}. If a variable appears an element
@code{minor-mode-overriding-map-alist}, that element overrides any
element for the same variable in @code{minor-mode-map-alist}.
@code{minor-mode-overriding-map-alist} is automatically local in all
buffers.
@code{minor-mode-overriding-map-alist} is automatically buffer-local in
all buffers.
@end defvar
@defvar overriding-local-map
@ -688,10 +683,10 @@ keymap.
Let's use the term @dfn{keymap entry} to describe the value found by
looking up an event type in a keymap. (This doesn't include the item
string and other extra elements in menu key bindings because
string and other extra elements in menu key bindings, because
@code{lookup-key} and other key lookup functions don't include them in
the returned value.) While any Lisp object may be stored in a keymap as
a keymap entry, not all make sense for key lookup. Here is a list of
a keymap entry, not all make sense for key lookup. Here is a table of
the meaningful kinds of keymap entries:
@table @asis
@ -702,11 +697,6 @@ undefined key. When a keymap fails to mention an event type at all, and
has no default binding, that is equivalent to a binding of @code{nil}
for that event type.
@item @var{keymap}
@cindex keymap in keymap
The events used so far in the lookup form a prefix key. The next
event of the key sequence is looked up in @var{keymap}.
@item @var{command}
@cindex command in keymap
The events used so far in the lookup form a complete key,
@ -718,6 +708,11 @@ The array (either a string or a vector) is a keyboard macro. The events
used so far in the lookup form a complete key, and the array is its
binding. See @ref{Keyboard Macros}, for more information.
@item @var{keymap}
@cindex keymap in keymap
The events used so far in the lookup form a prefix key. The next
event of the key sequence is looked up in @var{keymap}.
@item @var{list}
@cindex list in keymap
The meaning of a list depends on the types of the elements of the list.
@ -807,23 +802,9 @@ of @code{emacs-lisp-mode-map}. Note that 9 is the code for @key{TAB},
Here are the functions and variables pertaining to key lookup.
@defun lookup-key keymap key &optional accept-defaults
This function returns the definition of @var{key} in @var{keymap}. If
the string or vector @var{key} is not a valid key sequence according to
the prefix keys specified in @var{keymap}, it must be ``too long'' and
have extra events at the end that do not fit into a single key sequence.
Then the value is a number, the number of events at the front of
@var{key} that compose a complete key.
@c Emacs 19 feature
If @var{accept-defaults} is non-@code{nil}, then @code{lookup-key}
considers default bindings as well as bindings for the specific events
in @var{key}. Otherwise, @code{lookup-key} reports only bindings for
the specific sequence @var{key}, ignoring default bindings except when
you explicitly ask about them. (To do this, supply @code{t} as an
element of @var{key}; see @ref{Format of Keymaps}.)
All the other functions described in this chapter that look up keys use
@code{lookup-key}.
This function returns the definition of @var{key} in @var{keymap}. All
the other functions described in this chapter that look up keys use
@code{lookup-key}. Here are examples:
@example
@group
@ -836,7 +817,21 @@ All the other functions described in this chapter that look up keys use
@end group
@end example
If @var{key} contains a meta character, that character is implicitly
If the string or vector @var{key} is not a valid key sequence according
to the prefix keys specified in @var{keymap}, it must be ``too long''
and have extra events at the end that do not fit into a single key
sequence. Then the value is a number, the number of events at the front
of @var{key} that compose a complete key.
@c Emacs 19 feature
If @var{accept-defaults} is non-@code{nil}, then @code{lookup-key}
considers default bindings as well as bindings for the specific events
in @var{key}. Otherwise, @code{lookup-key} reports only bindings for
the specific sequence @var{key}, ignoring default bindings except when
you explicitly ask about them. (To do this, supply @code{t} as an
element of @var{key}; see @ref{Format of Keymaps}.)
If @var{key} contains a meta character, that character is implicitly
replaced by a two-character sequence: the value of
@code{meta-prefix-char}, followed by the corresponding non-meta
character. Thus, the first example below is handled by conversion into
@ -932,7 +927,7 @@ lookup translates @kbd{M-b} into @kbd{@key{ESC} b}, which is normally
defined as the @code{backward-word} command. However, if you set
@code{meta-prefix-char} to 24, the code for @kbd{C-x}, then Emacs will
translate @kbd{M-b} into @kbd{C-x b}, whose standard binding is the
@code{switch-to-buffer} command.
@code{switch-to-buffer} command. Here is an illustration:
@smallexample
@group
@ -995,11 +990,8 @@ event types in a key sequence that is a vector: you can use a list
containing modifier names plus one base event (a character or function
key name). For example, @code{(control ?a)} is equivalent to
@code{?\C-a} and @code{(hyper control left)} is equivalent to
@code{C-H-left}.
One advantage of using a list to represent the event type is that the
precise numeric codes for the modifier bits don't appear in compiled
files.
@code{C-H-left}. One advantage of such lists is that the precise
numeric codes for the modifier bits don't appear in compiled files.
For the functions below, an error is signaled if @var{keymap} is not a
keymap or if @var{key} is not a string or vector representing a key
@ -1016,12 +1008,10 @@ The value returned by @code{define-key} is @var{binding}.
@cindex invalid prefix key error
@cindex key sequence error
Every prefix of @var{key} must be a prefix key (i.e., bound to a
keymap) or undefined; otherwise an error is signaled.
If some prefix of @var{key} is undefined, then @code{define-key} defines
it as a prefix key so that the rest of @var{key} may be defined as
specified.
Every prefix of @var{key} must be a prefix key (i.e., bound to a keymap)
or undefined; otherwise an error is signaled. If some prefix of
@var{key} is undefined, then @code{define-key} defines it as a prefix
key so that the rest of @var{key} can be defined as specified.
If there was previously no binding for @var{key} in @var{keymap}, the
new binding is added at the beginning of @var{keymap}. The order of
@ -1383,7 +1373,7 @@ of a window.
@end smallexample
@noindent
These are not all the keymaps you would see in an actual case.
These are not all the keymaps you would see in actuality.
@end defun
@defun where-is-internal command &optional keymap firstonly noindirect
@ -1425,9 +1415,9 @@ an indirect definition itself.
@end defun
@deffn Command describe-bindings prefix
This function creates a listing of all defined keys and their
definitions. It writes the listing in a buffer named @samp{*Help*} and
displays it in a window.
This function creates a listing of all current key bindings, and
displays it in a buffer named @samp{*Help*}. The text is grouped by
modes---minor modes first, then the major mode, then global bindings.
If @var{prefix} is non-@code{nil}, it should be a prefix key; then the
listing includes only keys that start with @var{prefix}.
@ -1484,21 +1474,29 @@ moving to the top, if you care about the order. When you add an item to
an existing menu, you can specify its position in the menu using
@code{define-key-after} (@pxref{Modifying Menus}).
The individual bindings in the menu keymap should have item
strings; these strings become the items displayed in the menu. A
binding with an item string looks like this:
@menu
* Simple Menu Items::
* Extended Menu Items::
@end menu
@node Simple Menu Items
@subsubsection Simple Menu Items
The simpler and older way to define a menu keymap binding
looks like this:
@example
(@var{string} . @var{real-binding})
(@var{item-string} . @var{real-binding})
@end example
The item string for a binding should be short---one or two words. It
should describe the action of the command it corresponds to.
The @sc{car}, @var{item-string}, is the string to be displayed in the
menu. It should be short---preferably one to three words. It should
describe the action of the command it corresponds to.
You can also supply a second string, called the help string, as follows:
@example
(@var{string} @var{help-string} . @var{real-binding})
(@var{item-string} @var{help-string} . @var{real-binding})
@end example
Currently Emacs does not actually use @var{help-string}; it knows only
@ -1506,13 +1504,13 @@ how to ignore @var{help-string} in order to extract @var{real-binding}.
In the future we may use @var{help-string} as extended documentation for
the menu item, available on request.
As far as @code{define-key} is concerned, @var{string} and
As far as @code{define-key} is concerned, @var{item-string} and
@var{help-string} are part of the event's binding. However,
@code{lookup-key} returns just @var{real-binding}, and only
@var{real-binding} is used for executing the key.
If @var{real-binding} is @code{nil}, then @var{string} appears in the
menu but cannot be selected.
If @var{real-binding} is @code{nil}, then @var{item-string} appears in
the menu but cannot be selected.
If @var{real-binding} is a symbol and has a non-@code{nil}
@code{menu-enable} property, that property is an expression that
@ -1520,7 +1518,7 @@ controls whether the menu item is enabled. Every time the keymap is
used to display a menu, Emacs evaluates the expression, and it enables
the menu item only if the expression's value is non-@code{nil}. When a
menu item is disabled, it is displayed in a ``fuzzy'' fashion, and
cannot be selected with the mouse.
cannot be selected.
The menu bar does not recalculate which items are enabled every time you
look at a menu. This is because the X toolkit requires the whole tree
@ -1534,12 +1532,13 @@ binding, like this:
@c This line is not too long--rms.
@example
(@var{string} @r{[}@var{help-string}@r{]} (@var{key-binding-data}) . @var{real-binding})
(@var{item-string} @r{[}@var{help-string}@r{]} (@var{key-binding-data}) . @var{real-binding})
@end example
@noindent
Don't put these sublists in the menu item yourself; menu display
calculates them automatically. Don't add keyboard equivalents to the
item strings in a mouse menu, since that is redundant.
calculates them automatically. Don't mention keyboard equivalents in
the item strings themselves, since that is redundant.
Sometimes it is useful to make menu items that use the ``same'' command
but with different enable conditions. You can do this by defining alias
@ -1568,23 +1567,82 @@ itself). To request this, give the alias symbol a non-@code{nil}
causes menu items for @code{make-read-only} and @code{make-writable} to
show the keyboard bindings for @code{toggle-read-only}.
@node Extended Menu Items
@subsubsection Extended Menu Items
An extended-format menu item is a more flexible and also cleaner
alternative to the simple format. It consists of a list that starts
with the symbol @code{menu-item}. To define a non-selectable string,
the item looks like this:
@example
(menu-item @var{item-name})
@end example
@noindent
where a string consisting of two or more dashes specifies a separator line.
To define a real menu item which can be selected, the extended format
item looks like this:
@example
(menu-item @var{item-name} @var{real-binding}
. @var{item-property-list})
@end example
@noindent
Here, @var{item-name} is an expression which evaluates to the menu item
string. Thus, the string need not be a constant. The third element,
@var{real-binding}, is the command to execute. The tail of the list,
@var{item-property-list}, has the form of a property list which contains
other information. Here is a table of the properties that are supported:
@table @code
@item :enable FORM
The result of evaluating @var{form} determines whether the item is
enabled (non-@code{nil} means yes).
@item :visible FORM
The result of evaluating @var{form} determines whether the item should
actually appear in the menu (non-@code{nil} means yes). If the item
does not appear, then the menu is displayed as if this item were
not defined at all.
@item :help @var{help}
The value of this property, @var{help}, is the extra help string (not
currently used).
@item :button (@var{type} . @var{selected})
This property provides a way to define radio buttons and toggle buttons.
The @sc{car}, @var{type}, says which: is should be @code{:toggle} or
@code{:radio}. The @sc{cdr}, @var{selected}, should be a form; the
result of evaluating it says whether this button is currently selected.
@item :filter @var{filter-fn}
This property provides a way to compute the menu item dynamically.
The property value @var{filter-fn} should be a function of one argument;
when it is called, its argument will be @var{real-binding}. The
function should return the binding to use instead.
@end table
@node Mouse Menus
@subsection Menus and the Mouse
The way to make a menu keymap produce a menu is to make it the
definition of a prefix key.
The usual way to make a menu keymap produce a menu is to make it the
definition of a prefix key. (A Lisp program can explicitly pop up a
menu and receive the user's choice---see @ref{Pop-Up Menus}.)
If the prefix key ends with a mouse event, Emacs handles the menu keymap
If the prefix key ends with a mouse event, Emacs handles the menu keymap
by popping up a visible menu, so that the user can select a choice with
the mouse. When the user clicks on a menu item, the event generated is
whatever character or symbol has the binding that brought about that
menu item. (A menu item may generate a series of events if the menu has
multiple levels or comes from the menu bar.)
It's often best to use a button-down event to trigger the menu. Then
It's often best to use a button-down event to trigger the menu. Then
the user can select a menu item by releasing the button.
A single keymap can appear as multiple menu panes, if you explicitly
A single keymap can appear as multiple menu panes, if you explicitly
arrange for this. The way to do this is to make a keymap for each pane,
then create a binding for each of those maps in the main keymap of the
menu. Give each of these bindings an item string that starts with
@ -1594,24 +1652,19 @@ bindings with @samp{@@}-less item strings are grouped into one pane,
which appears along with the other panes explicitly created for the
submaps.
X toolkit menus don't have panes; instead, they can have submenus.
X toolkit menus don't have panes; instead, they can have submenus.
Every nested keymap becomes a submenu, whether the item string starts
with @samp{@@} or not. In a toolkit version of Emacs, the only thing
special about @samp{@@} at the beginning of an item string is that the
@samp{@@} doesn't appear in the menu item.
You can also get multiple panes from separate keymaps. The full
definition of a prefix key always comes from merging the definitions
supplied by the various active keymaps (minor mode, local, and
global). When more than one of these keymaps is a menu, each of them
makes a separate pane or panes. @xref{Active Keymaps}.
In toolkit versions of Emacs, menus don't have panes, so submenus are
used to represent the separate keymaps. Each keymap's contribution
becomes one submenu.
A Lisp program can explicitly pop up a menu and receive the user's
choice. You can use keymaps for this also. @xref{Pop-Up Menus}.
You can also produce multiple panes or submenus from separate keymaps.
The full definition of a prefix key always comes from merging the
definitions supplied by the various active keymaps (minor mode, local,
and global). When more than one of these keymaps is a menu, each of
them makes a separate pane or panes (when Emacs does not use an
X-toolkit) or a separate submenu (when using an X-toolkit).
@xref{Active Keymaps}.
@node Keyboard Menus
@subsection Menus and the Keyboard
@ -1661,7 +1714,8 @@ menu bar. First we create the keymap, and give it a name:
(defvar menu-bar-print-menu (make-sparse-keymap "Print"))
@end example
Next we define the menu items:
@noindent
Next we define the menu items:
@example
(define-key menu-bar-print-menu [ps-print-region]
@ -1714,7 +1768,7 @@ item would be meaningless because @code{menu-bar-print-menu} is not a
command.
If you wanted to attach the same print menu to a mouse click, you
might do it this way:
can do it this way:
@example
(define-key global-map [C-S-down-mouse-1] menu-bar-print-menu)
@ -1736,9 +1790,9 @@ so that pressing a button on the menu bar item leads to another menu.
When more than one active keymap defines the same fake function key
for the menu bar, the item appears just once. If the user clicks on
that menu bar item, it brings up a single, combined submenu containing
that menu bar item, it brings up a single, combined menu containing
all the subcommands of that item---the global subcommands, the local
subcommands, and the minor mode subcommands, all together.
subcommands, and the minor mode subcommands.
The variable @code{overriding-local-map} is normally ignored when
determining the menu bar contents. That is, the menu bar is computed
@ -1749,7 +1803,7 @@ were @code{nil}. @xref{Active Keymaps}.
parameter must be greater than zero. Emacs uses just one line for the
menu bar itself; if you specify more than one line, the other lines
serve to separate the menu bar from the windows in the frame. We
recommend 1 or 2 as the value of @code{menu-bar-lines}. @xref{X Frame
recommend 1 or 2 as the value of @code{menu-bar-lines}. @xref{Window Frame
Parameters}.
Here's an example of setting up a menu bar item:
@ -1768,7 +1822,7 @@ Parameters}.
@end group
@group
;; @r{Define specific subcommands in the item's menu.}
;; @r{Define specific subcommands in this menu.}
(define-key global-map
[menu-bar words forward]
'("Forward word" . forward-word))
@ -1800,7 +1854,7 @@ local maps.
This variable holds a list of fake function keys for items to display at
the end of the menu bar rather than in normal sequence. The default
value is @code{(help)}; thus, the @samp{Help} menu item normally appears
value is @code{(help-menu)}; thus, the @samp{Help} menu item normally appears
at the end of the menu bar, following local menu items.
@end defvar
@ -1823,9 +1877,12 @@ Define a binding in @var{map} for @var{key}, with value @var{binding},
just like @code{define-key}, but position the binding in @var{map} after
the binding for the event @var{after}. The argument @var{key} should be
of length one---a vector or string with just one element. But
@var{after} should be an event type---a symbol or a character.
@var{after} should be a single event type---a symbol or a character, not
a sequence. The new binding goes after the binding for @var{after}. If
@var{after} is @code{t}, then the new binding goes last, at the end of
the keymap.
For example,
Here is an example:
@example
(define-key-after my-menu [drink]
@ -1833,11 +1890,8 @@ For example,
@end example
@noindent
makes a binding for the fake function key @key{drink} and puts it
right after the binding for @key{eat}.
If @var{after} is @code{t}, then the new binding goes last---at the end
of the keymap.
makes a binding for the fake function key @key{DRINK} and puts it
right after the binding for @key{EAT}.
Here is how to insert an item called @samp{Work} in the @samp{Signals}
menu of Shell mode, after the item @code{break}:
@ -1847,7 +1901,4 @@ menu of Shell mode, after the item @code{break}:
(lookup-key shell-mode-map [menu-bar signals])
[work] '("Work" . work-command) 'break)
@end example
Note that @var{key} is a sequence containing just one event type, but
@var{after} is just an event type (not a sequence).
@end defun

View file

@ -92,8 +92,9 @@ like this:
@example
@group
___ ___ ___ ___
|___|___|--> |___|___|--> nil
--- --- --- ---
| | |--> | | |--> nil
--- --- --- ---
| |
| |
--> tulip --> lily
@ -106,14 +107,16 @@ two-element list:
@example
@group
___ ___ ___ ___ ___ ___
|___|___|--> |___|___|--> |___|___|--> nil
--- --- --- --- --- ---
| | |--> | | |--> | | |--> nil
--- --- --- --- --- ---
| | |
| | |
| --> oak --> maple
|
| ___ ___ ___ ___
--> |___|___|--> |___|___|--> nil
| --- --- --- ---
--> | | |--> | | |--> nil
--- --- --- ---
| |
| |
--> pine --> needles
@ -323,6 +326,10 @@ If @var{n} is negative, @code{nth} returns the first element of
(nth n x) @equiv{} (car (nthcdr n x))
@end group
@end example
The function @code{elt} is similar, but applies to any kind of sequence.
For historical reasons, it takes its arguments in the opposite order.
@xref{Sequence Functions}.
@end defun
@defun nthcdr n list
@ -351,7 +358,7 @@ If @var{n} is zero or negative, @code{nthcdr} returns all of
@end defun
@tindex safe-length
@defun safe-length sequence
@defun safe-length list
This function returns the length of @var{list}, with no risk
of either an error or an infinite loop.
@ -360,26 +367,30 @@ If @var{list} is not really a list, @code{safe-length} returns 0. If
number of distinct elements.
@end defun
The most common way to compute the length of a list, when you are not
worried that it may be circular, is with @code{length}. @xref{Sequence
Functions}.
@tindex caar
@defun caar list
This is the same as @code{(car (car @var{list}))}.
@defun caar cons-cell
This is the same as @code{(car (car @var{cons-cell}))}.
@end defun
@tindex cadr
@defun cadr list
This is the same as @code{(car (cdr @var{list}))}
or @code{(nth 1 @var{list})}.
@defun cadr cons-cell
This is the same as @code{(car (cdr @var{cons-cell}))}
or @code{(nth 1 @var{cons-cell})}.
@end defun
@tindex cdar
@defun cdar list
This is the same as @code{(cdr (car @var{list}))}.
@defun cdar cons-cell
This is the same as @code{(cdr (car @var{cons-cell}))}.
@end defun
@tindex cddr
@defun cddr list
This is the same as @code{(cdr (cdr @var{list}))}
or @code{(nthcdr 2 @var{list})}.
@defun cddr cons-cell
This is the same as @code{(cdr (cdr @var{cons-cell}))}
or @code{(nthcdr 2 @var{cons-cell})}.
@end defun
@node Building Lists
@ -470,9 +481,11 @@ elements have the identical value @var{object}. Compare
@defun append &rest sequences
@cindex copying lists
This function returns a list containing all the elements of
@var{sequences}. The @var{sequences} may be lists, vectors, or strings,
but the last one should usually be a list. All arguments except the
last one are copied, so none of the arguments is altered.
@var{sequences}. The @var{sequences} may be lists, vectors,
bool-vectors, or strings, but the last one should usually be a list.
All arguments except the last one are copied, so none of the arguments
is altered. (See @code{nconc} in @ref{Rearrangement}, for a way to join
lists with no copying.)
More generally, the final argument to @code{append} may be any Lisp
object. The final argument is not copied or converted; it becomes the
@ -482,9 +495,6 @@ result list. If the final element is not a list, the result is a
``dotted list'' since its final @sc{cdr} is not @code{nil} as required
in a true list.
See @code{nconc} in @ref{Rearrangement}, for a way to join lists with no
copying.
Here is an example of using @code{append}:
@example
@ -517,8 +527,9 @@ original list:
@group
more-trees trees
| |
| ___ ___ ___ ___ -> ___ ___ ___ ___
--> |___|___|--> |___|___|--> |___|___|--> |___|___|--> nil
| --- --- --- --- -> --- --- --- ---
--> | | |--> | | |--> | | |--> | | |--> nil
--- --- --- --- --- --- --- ---
| | | |
| | | |
--> maple -->birch --> pine --> oak
@ -535,7 +546,7 @@ trees
@result{} (pine oak)
@end group
@group
(setq wood (append trees ()))
(setq wood (append trees nil))
@result{} (pine oak)
@end group
@group
@ -552,6 +563,15 @@ wood
This once was the usual way to copy a list, before the function
@code{copy-sequence} was invented. @xref{Sequences Arrays Vectors}.
Here we show the use of vectors and strings as arguments to @code{append}:
@example
@group
(append [a b] "cd" nil)
@result{} (a b 99 100)
@end group
@end example
With the help of @code{apply}, we can append all the lists in a list of
lists:
@ -707,14 +727,16 @@ changes them both:
@example
@group
___ ___ ___ ___ ___ ___
x1---> |___|___|----> |___|___|--> |___|___|--> nil
--- --- --- --- --- ---
x1---> | | |----> | | |--> | | |--> nil
--- --- --- --- --- ---
| --> | |
| | | |
--> a | --> b --> c
|
___ ___ |
x2--> |___|___|--
--- --- |
x2--> | | |--
--- ---
|
|
--> z
@ -904,6 +926,8 @@ x
@end group
@end example
However, the other arguments (all but the last) must be lists.
A common pitfall is to use a quoted constant list as a non-last
argument to @code{nconc}. If you do this, your program will change
each time you run it! Here is what happens:
@ -1157,7 +1181,8 @@ and the @code{(4)} in the @code{sample-list} are not @code{eq}:
@end example
The following two functions are like @code{memq} and @code{delq} but use
@code{equal} rather than @code{eq} to compare elements.
@code{equal} rather than @code{eq} to compare elements. @xref{Equality
Predicates}.
@defun member object list
The function @code{member} tests to see whether @var{object} is a member

View file

@ -88,6 +88,10 @@ If you get a warning that @file{foo.elc} is older than @file{foo.el}, it
means you should consider recompiling @file{foo.el}. @xref{Byte
Compilation}.
When loading a source file (not compiled), @code{load} performs
character set translation just as Emacs would do when visiting the file.
@xref{Coding Systems}.
Messages like @samp{Loading foo...} and @samp{Loading foo...done} appear
in the echo area during loading unless @var{nomessage} is
non-@code{nil}.
@ -170,13 +174,6 @@ followed then by the @file{/user/bil/emacs} directory, the
@file{/usr/local/lisplib} directory, and the @file{~/emacs} directory,
which are then followed by the standard directories for Lisp code.
The command line options @samp{-l} or @samp{-load} specify a Lisp
library to load as part of Emacs startup. Since this file might be in
the current directory, Emacs 18 temporarily adds the current directory
to the front of @code{load-path} so the file can be found there. Newer
Emacs versions also find such files in the current directory, but
without altering @code{load-path}.
Dumping Emacs uses a special value of @code{load-path}. If the value of
@code{load-path} at the end of dumping is unchanged (that is, still the
same special value), the dumped Emacs switches to the ordinary
@ -233,7 +230,7 @@ Normally, the variable's value is @code{nil}, which means those
functions should use @code{read}.
@end defvar
To learn how @code{load} is used to build Emacs, see @ref{Building Emacs}.
For how @code{load} is used to build Emacs, see @ref{Building Emacs}.
@deffn Command locate-library library &optional nosuffix path interactive-call
This command finds the precise file name for library @var{library}. It
@ -265,11 +262,11 @@ as if it had been loaded all along.
@code{autoload}, and by writing a special ``magic'' comment in the
source before the real definition. @code{autoload} is the low-level
primitive for autoloading; any Lisp program can call @code{autoload} at
any time. Magic comments do nothing on their own; they serve as a guide
for the command @code{update-file-autoloads}, which constructs calls to
@code{autoload} and arranges to execute them when Emacs is built. Magic
comments are the most convenient way to make a function autoload, but
only for packages installed along with Emacs.
any time. Magic comments are the most convenient way to make a function
autoload, for packages installed along with Emacs. They do nothing on
their own, but they serve as a guide for the command
@code{update-file-autoloads}, which constructs calls to @code{autoload}
and arranges to execute them when Emacs is built.
@defun autoload function filename &optional docstring interactive type
This function defines the function (or macro) named @var{function} so as
@ -287,10 +284,10 @@ in the function definition itself. Specifying the documentation string
in the call to @code{autoload} makes it possible to look at the
documentation without loading the function's real definition.
If @var{interactive} is non-@code{nil}, then the function can be called
interactively. This lets completion in @kbd{M-x} work without loading
the function's real definition. The complete interactive specification
is not given here; it's not needed unless the user actually calls
If @var{interactive} is non-@code{nil}, that says @var{function} can be
called interactively. This lets completion in @kbd{M-x} work without
loading its real definition. The complete interactive specification is
not given here; it's not needed unless the user actually calls
@var{function}, and when that happens, it's time to load the real
definition.
@ -365,8 +362,9 @@ function definition, it is copied verbatim. You can also use a magic
comment to execute a form at build time @emph{without} executing it when
the file itself is loaded. To do this, write the form @emph{on the same
line} as the magic comment. Since it is in a comment, it does nothing
when you load the source file; but @code{update-file-autoloads} copies
it to @file{loaddefs.el}, where it is executed while building Emacs.
when you load the source file; but @kbd{M-x update-file-autoloads}
copies it to @file{loaddefs.el}, where it is executed while building
Emacs.
The following example shows how @code{doctor} is prepared for
autoloading with a magic comment:
@ -400,7 +398,7 @@ documentation string in the @file{etc/DOC} file. @xref{Building Emacs}.
@section Repeated Loading
@cindex repeated loading
You may load one file more than once in an Emacs session. For
You can load one file more than once in an Emacs session. For
example, after you have rewritten and reinstalled a function definition
by editing it in a buffer, you may wish to return to the original
version; you can do this by reloading the file it came from.
@ -411,8 +409,8 @@ rather than a non-compiled file of similar name. If you rewrite a file
that you intend to save and reinstall, you need to byte-compile the new
version; otherwise Emacs will load the older, byte-compiled file instead
of your newer, non-compiled file! If that happens, the message
displayed when loading the file says, ``(compiled; source is newer'', to
remind you to recompile.
displayed when loading the file includes, @samp{(compiled; source is
newer)}, to remind you to recompile it.
When writing the forms in a Lisp library file, keep in mind that the
file might be loaded more than once. For example, think about whether
@ -445,17 +443,17 @@ already been loaded. Here's one way to test, in a library, whether it
has been loaded before:
@example
(defvar foo-was-loaded)
(defvar foo-was-loaded nil)
(if (not (boundp 'foo-was-loaded))
@var{execute-first-time-only})
(setq foo-was-loaded t)
(unless foo-was-loaded
@var{execute-first-time-only}
(setq foo-was-loaded t))
@end example
@noindent
If the library uses @code{provide} to provide a named feature, you can
use @code{featurep} to test whether the library has been loaded.
use @code{featurep} earlier in the file to test whether the
@code{provide} call has been executed before.
@ifinfo
@xref{Named Features}.
@end ifinfo
@ -486,9 +484,6 @@ file should call @code{provide} at the top level to add the feature to
@code{features}; if it fails to do so, @code{require} signals an error.
@cindex load error with require
Features are normally named after the files that provide them, so that
@code{require} need not be given the file name.
For example, in @file{emacs/lisp/prolog.el},
the definition for @code{run-prolog} includes the following code:
@ -504,7 +499,8 @@ the definition for @code{run-prolog} includes the following code:
@noindent
The expression @code{(require 'comint)} loads the file @file{comint.el}
if it has not yet been loaded. This ensures that @code{make-comint} is
defined.
defined. Features are normally named after the files that provide them,
so that @code{require} need not be given the file name.
The @file{comint.el} file contains the following top-level expression:
@ -541,7 +537,7 @@ feature, as in the following example.
The compiler ignores the @code{provide}, then processes the
@code{require} by loading the file in question. Loading the file does
execute the @code{provide} call, so the subsequent @code{require} call
does nothing while loading.
does nothing when the file is loaded.
@defun provide feature
This function announces that @var{feature} is now loaded, or being
@ -589,7 +585,7 @@ provided}.
@defun featurep feature
This function returns @code{t} if @var{feature} has been provided in the
current Emacs session (i.e., @var{feature} is a member of
current Emacs session (i.e., if @var{feature} is a member of
@code{features}.)
@end defun
@ -612,10 +608,10 @@ reclaim memory for other Lisp objects. To do this, use the function
@deffn Command unload-feature feature &optional force
This command unloads the library that provided feature @var{feature}.
It undefines all functions, macros, and variables defined in that
library with @code{defconst}, @code{defvar}, @code{defun},
@code{defmacro}, @code{defsubst} and @code{defalias}. It then restores
any autoloads formerly associated with those symbols. (Loading
saves these in the @code{autoload} property of the symbol.)
library with @code{defun}, @code{defalias}, @code{defsubst},
@code{defmacro}, @code{defconst}, @code{defvar}, and @code{defcustom}.
It then restores any autoloads formerly associated with those symbols.
(Loading saves these in the @code{autoload} property of the symbol.)
Ordinarily, @code{unload-feature} refuses to unload a library on which
other loaded libraries depend. (A library @var{a} depends on library
@ -686,9 +682,9 @@ do (1), you can do it immediately---there is no need to wait for when
the library is loaded. To do (2), you must load the library (preferably
with @code{require}).
But it is ok to use @code{eval-after-load} in your personal customizations
if you don't feel they must meet the design standards of programs to be
released.
But it is OK to use @code{eval-after-load} in your personal
customizations if you don't feel they must meet the design standards for
programs meant for wider use.
@defvar after-load-alist
An alist of expressions to evaluate if and when particular libraries are

View file

@ -8,143 +8,151 @@
@c The title "Standard Buffer-Local Variables" is too long for
@c smallbook. --rjc 30mar92
The table below lists the general-purpose Emacs variables that are
automatically local (when set) in each buffer. Many Lisp packages
define such variables for their internal use; we don't list them here.
The table below lists the general-purpose Emacs variables that
automatically become buffer-local in each buffer. Most become
buffer-local only when set; a few of them are always local in every
buffer. Many Lisp packages define such variables for their internal
use, but we don't try to list them all here.
@table @code
@item abbrev-mode
@pxref{Abbrevs}
@xref{Abbrevs}.
@item auto-fill-function
@pxref{Auto Filling}
@xref{Auto Filling}.
@item buffer-auto-save-file-name
@pxref{Auto-Saving}
@xref{Auto-Saving}.
@item buffer-backed-up
@pxref{Backup Files}
@xref{Backup Files}.
@item buffer-display-count
@xref{Displaying Buffers}.
@item buffer-display-table
@pxref{Display Tables}
@xref{Display Tables}.
@item buffer-file-format
@pxref{Format Conversion}
@xref{Format Conversion}.
@item buffer-file-name
@pxref{Buffer File Name}
@xref{Buffer File Name}.
@item buffer-file-number
@pxref{Buffer File Name}
@xref{Buffer File Name}.
@item buffer-file-truename
@pxref{Buffer File Name}
@xref{Buffer File Name}.
@item buffer-file-type
@pxref{Files and MS-DOS}
@xref{MS-DOS File Types}.
@item buffer-invisibility-spec
@pxref{Invisible Text}
@xref{Invisible Text}.
@item buffer-offer-save
@pxref{Saving Buffers}
@xref{Saving Buffers}.
@item buffer-read-only
@pxref{Read Only Buffers}
@xref{Read Only Buffers}.
@item buffer-saved-size
@pxref{Point}
@xref{Point}.
@item buffer-undo-list
@pxref{Undo}
@xref{Undo}.
@item cache-long-line-scans
@pxref{Text Lines}
@xref{Text Lines}.
@item case-fold-search
@pxref{Searching and Case}
@xref{Searching and Case}.
@item ctl-arrow
@pxref{Usual Display}
@xref{Usual Display}.
@item comment-column
@pxref{Comments,,, emacs, The GNU Emacs Manual}
@xref{Comments,,, emacs, The GNU Emacs Manual}.
@item default-directory
@pxref{System Environment}
@xref{System Environment}.
@item defun-prompt-regexp
@pxref{List Motion}
@xref{List Motion}.
@item enable-multibyte-characters
@ref{Non-ASCII Characters}.
@item fill-column
@pxref{Auto Filling}
@xref{Auto Filling}.
@item goal-column
@pxref{Moving Point,,, emacs, The GNU Emacs Manual}
@xref{Moving Point,,, emacs, The GNU Emacs Manual}.
@item left-margin
@pxref{Indentation}
@xref{Indentation}.
@item local-abbrev-table
@pxref{Abbrevs}
@xref{Abbrevs}.
@item local-write-file-hooks
@pxref{Saving Buffers}
@xref{Saving Buffers}.
@item major-mode
@pxref{Mode Help}
@xref{Mode Help}.
@item mark-active
@pxref{The Mark}
@xref{The Mark}.
@item mark-ring
@pxref{The Mark}
@xref{The Mark}.
@item minor-modes
@pxref{Minor Modes}
@xref{Minor Modes}.
@item mode-line-buffer-identification
@pxref{Mode Line Variables}
@xref{Mode Line Variables}.
@item mode-line-format
@pxref{Mode Line Data}
@xref{Mode Line Data}.
@item mode-line-modified
@pxref{Mode Line Variables}
@xref{Mode Line Variables}.
@item mode-line-process
@pxref{Mode Line Variables}
@xref{Mode Line Variables}.
@item mode-name
@pxref{Mode Line Variables}
@xref{Mode Line Variables}.
@item overwrite-mode
@pxref{Insertion}
@xref{Insertion}.
@item paragraph-separate
@pxref{Standard Regexps}
@xref{Standard Regexps}.
@item paragraph-start
@pxref{Standard Regexps}
@xref{Standard Regexps}.
@item point-before-scroll
Used for communication between mouse commands and scroll-bar commands.
Ued for communication between mouse commands and scroll-bar commands..
@item require-final-newline
@pxref{Insertion}
@xref{Insertion}.
@item selective-display
@pxref{Selective Display}
@xref{Selective Display}.
@item selective-display-ellipses
@pxref{Selective Display}
@xref{Selective Display}.
@item tab-width
@pxref{Usual Display}
@xref{Usual Display}.
@item truncate-lines
@pxref{Truncation}
@xref{Truncation}.
@item vc-mode
@pxref{Mode Line Variables}
@xref{Mode Line Variables}.
@end table

View file

@ -48,11 +48,12 @@ Here's a macro definition that does the job:
@end group
@end example
When this is called with @code{(inc x)}, the argument @code{var} has
the value @code{x}---@emph{not} the @emph{value} of @code{x}. The body
of the macro uses this to construct the expansion, which is @code{(setq
x (1+ x))}. Once the macro definition returns this expansion, Lisp
proceeds to evaluate it, thus incrementing @code{x}.
When this is called with @code{(inc x)}, the argument @var{var} is the
symbol @code{x}---@emph{not} the @emph{value} of @code{x}, as it would
be in a function. The body of the macro uses this to construct the
expansion, which is @code{(setq x (1+ x))}. Once the macro definition
returns this expansion, Lisp proceeds to evaluate it, thus incrementing
@code{x}.
@node Expansion
@section Expansion of a Macro Call
@ -192,6 +193,7 @@ like this:
(macro lambda @var{argument-list} . @var{body-forms})
@end example
(Note that the @sc{cdr} of this list is a function---a lambda expression.)
This macro object is stored in the function cell of @var{name}. The
value returned by evaluating the @code{defmacro} form is @var{name}, but
usually we ignore this value.
@ -210,8 +212,8 @@ called interactively.
@findex `
Macros often need to construct large list structures from a mixture of
constants and nonconstant parts. To make this easier, use the macro
@samp{`} (often called @dfn{backquote}).
constants and nonconstant parts. To make this easier, use the @samp{`}
syntax (usually called @dfn{backquote}).
Backquote allows you to quote a list, but selectively evaluate
elements of that list. In the simplest case, it is identical to the
@ -299,18 +301,16 @@ Here are some examples:
@end group
@end example
@quotation
Before Emacs version 19.29, @samp{`} used a different syntax which
required an extra level of parentheses around the entire backquote
construct. Likewise, each @samp{,} or @samp{,@@} substition required an
extra level of parentheses surrounding both the @samp{,} or @samp{,@@}
and the following expression. The old syntax required whitespace
between the @samp{`}, @samp{,} or @samp{,@@} and the following
expression.
In old Emacs versions, before version 19.29, @samp{`} used a different
syntax which required an extra level of parentheses around the entire
backquote construct. Likewise, each @samp{,} or @samp{,@@} substitution
required an extra level of parentheses surrounding both the @samp{,} or
@samp{,@@} and the following expression. The old syntax required
whitespace between the @samp{`}, @samp{,} or @samp{,@@} and the
following expression.
This syntax is still accepted, for compatibility with old Emacs
versions, but we recommend not using it in new programs.
@end quotation
@node Problems with Macros
@section Common Problems Using Macros
@ -371,10 +371,10 @@ For example, (for i from 1 to 10 do (print i))."
@end smallexample
@noindent
(The arguments @code{from}, @code{to}, and @code{do} in this macro are
The arguments @code{from}, @code{to}, and @code{do} in this macro are
``syntactic sugar''; they are entirely ignored. The idea is that you
will write noise words (such as @code{from}, @code{to}, and @code{do})
in those positions in the macro call.)
in those positions in the macro call.
Here's an equivalent definition simplified through use of backquote:
@ -428,10 +428,8 @@ Here is a macro definition that creates this expansion:
@end group
@end smallexample
Unfortunately, this introduces another problem.
@ifinfo
Proceed to the following node.
@end ifinfo
Unfortunately, this fix introduces another problem,
described in the following section.
@node Surprising Local Vars
@subsection Local Variables in Macro Expansions
@ -536,17 +534,18 @@ it. Here is an example:
@code{x}, because @code{a} conflicts with the macro argument variable
@code{a}.
Another reason not to call @code{eval} in a macro definition is that
Another problem with calling @code{eval} in a macro definition is that
it probably won't do what you intend in a compiled program. The
byte-compiler runs macro definitions while compiling the program, when
the program's own computations (which you might have wished to access
with @code{eval}) don't occur and its local variable bindings don't
exist.
The safe way to work with the run-time value of an expression is to
put the expression into the macro expansion, so that its value is
computed as part of executing the expansion. This is what the other
examples in this chapter do.
To avoid these problems, @strong{don't evaluate an argument expression
while computing the macro expansion.} Instead, substitute the
expression into the macro expansion, so that its value will be computed
as part of executing the expansion. This is how the other examples in
this chapter work.
@node Repeated Expansion
@subsection How Many Times is the Macro Expanded?
@ -557,15 +556,25 @@ expanded only once (during compilation) for a compiled function. If the
macro definition has side effects, they will work differently depending
on how many times the macro is expanded.
In particular, constructing objects is a kind of side effect. If the
macro is called once, then the objects are constructed only once. In
other words, the same structure of objects is used each time the macro
call is executed. In interpreted operation, the macro is reexpanded
each time, producing a fresh collection of objects each time. Usually
this does not matter---the objects have the same contents whether they
are shared or not. But if the surrounding program does side effects
on the objects, it makes a difference whether they are shared. Here is
an example:
Therefore, you should avoid side effects in computation of the
macro expansion, unless you really know what you are doing.
One special kind of side effect can't be avoided: constructing Lisp
objects. Almost all macro expansions include constructed lists; that is
the whole point of most macros. This is usually safe; there is just one
case where you must be careful: when the object you construct is part of a
quoted constant in the macro expansion.
If the macro is expanded just once, in compilation, then the object is
constructed just once, during compilation. But in interpreted
execution, the macro is expanded each time the macro call runs, and this
means a new object is constructed each time.
In most clean Lisp code, this difference won't matter. It can matter
only if you perform side-effects on the objects constructed by the macro
definition. Thus, to avoid trouble, @strong{avoid side effects on
objects constructed by macro definitions}. Here is an example of how
such side effects can get you into trouble:
@lisp
@group

View file

@ -29,15 +29,12 @@ A sparse keymap used by C mode.
A full keymap used by Command History mode.
@item ctl-x-4-map
@vindex ctl-x-4-map
A sparse keymap for subcommands of the prefix @kbd{C-x 4}.
@item ctl-x-5-map
@vindex ctl-x-5-map
A sparse keymap for subcommands of the prefix @kbd{C-x 5}.
@item ctl-x-map
@vindex ctl-x-map
A full keymap for @kbd{C-x} commands.
@item debugger-mode-map
@ -101,9 +98,9 @@ The keymap that displays the Special Props submenu of the Text
Properties menu.
@item function-key-map
@vindex function-key-map
The keymap for translating keypad and function keys.@*
If there are none, then it contains an empty sparse keymap.
@xref{Translating Input}.
@item fundamental-mode-map
@vindex fundamental-mode-map
@ -130,9 +127,8 @@ A keymap that defines the characters you can type within incremental
search.
@item key-translation-map
@vindex key-translation-map
A keymap for translating keys. This one overrides ordinary key
bindings, unlike @code{function-key-map}.
bindings, unlike @code{function-key-map}. @xref{Translating Input}.
@item lisp-interaction-mode-map
@vindex lisp-interaction-mode-map
@ -154,6 +150,11 @@ The keymap which displays the Files menu in the menu bar.
@vindex menu-bar-help-menu
The keymap which displays the Help menu in the menu bar.
@tindex menu-bar-mule-menu
@item menu-bar-mule-menu
@vindex menu-bar-mule-menu
The keymap which displays the Mule menu in the menu bar.
@item menu-bar-search-menu
@vindex menu-bar-search-menu
The keymap which displays the Search menu in the menu bar.
@ -163,7 +164,6 @@ The keymap which displays the Search menu in the menu bar.
The keymap which displays the Tools menu in the menu bar.
@item mode-specific-map
@vindex mode-specific-map
The keymap for characters following @kbd{C-c}. Note, this is in the
global map. This map is not actually mode specific: its name was chosen
to be informative for the user in @kbd{C-h b} (@code{display-bindings}),
@ -174,7 +174,6 @@ where it describes the main use of the @kbd{C-c} prefix key.
A local keymap used by Occur mode.
@item query-replace-map
@vindex query-replace-map
A local keymap used for responses in @code{query-replace} and related
commands; also for @code{y-or-n-p} and @code{map-y-or-n-p}. The functions
that use this map do not support prefix keys; they look up one event at a

View file

@ -44,9 +44,10 @@ buffer. Relocation changes the integer equivalent of the marker.
@cindex marker relocation
Deleting text around a marker's position leaves the marker between the
characters immediately before and after the deleted text. Inserting
text at the position of a marker normally leaves the marker in front of
the new text---unless it is inserted with @code{insert-before-markers}
(@pxref{Insertion}).
text at the position of a marker normally leaves the marker either in
front of or after the new text, depending on the marker's @dfn{insertion
type} (@pxref{Marker Insertion Types})---unless the insertion is done
with @code{insert-before-markers} (@pxref{Insertion}).
@cindex marker garbage collection
Insertion and deletion in a buffer must check all the markers and
@ -306,7 +307,9 @@ if they both point nowhere.
When you insert text directly at the place where a marker points,
there are two possible ways to relocate that marker: it can point before
the inserted text, or point after it. You can specify which one a given
marker should do by setting its @dfn{insertion type}.
marker should do by setting its @dfn{insertion type}. Note that use of
@code{insert-before-markers} ignores markers' insertion types, always
relocating a marker to point after the inserted text.
@tindex set-marker-insertion-type
@defun set-marker-insertion-type marker type
@ -396,11 +399,12 @@ absence of a mark in that buffer.''
Once the mark ``exists'' in a buffer, it normally never ceases to
exist. However, it may become @dfn{inactive}, if Transient Mark mode is
enabled. The variable @code{mark-active}, which is always local in all
buffers, indicates whether the mark is active: non-@code{nil} means yes.
A command can request deactivation of the mark upon return to the editor
command loop by setting @code{deactivate-mark} to a non-@code{nil} value
(but this causes deactivation only if Transient Mark mode is enabled).
enabled. The variable @code{mark-active}, which is always buffer-local
in all buffers, indicates whether the mark is active: non-@code{nil}
means yes. A command can request deactivation of the mark upon return
to the editor command loop by setting @code{deactivate-mark} to a
non-@code{nil} value (but this causes deactivation only if Transient
Mark mode is enabled).
The main motivation for using Transient Mark mode is that this mode
also enables highlighting of the region when the mark is active.
@ -529,20 +533,30 @@ consequence of this is that commands that modify the buffer normally
make the mark inactive.
@end defopt
@defopt mark-even-if-inactive
If this is non-@code{nil}, Lisp programs and the Emacs user can use the
mark even when it is inactive. This option affects the behavior of
Transient Mark mode. When the option is non-@code{nil}, deactivation of
the mark turns off region highlighting, but commands that use the mark
behave as if the mark were still active.
@end defopt
@defvar deactivate-mark
If an editor command sets this variable non-@code{nil}, then the editor
command loop deactivates the mark after the command returns, but only if
Transient Mark mode is enabled.
command loop deactivates the mark after the command returns (if
Transient Mark mode is enabled). All the primitives that change the
buffer set @code{deactivate-mark}, to deactivate the mark when the
command is finished.
@end defvar
@defun deactivate-mark
This function deactivates the mark, but only if Transient Mark mode
is enabled.
This function deactivates the mark, if Transient Mark mode is enabled.
Otherwise it does nothing.
@end defun
@defvar mark-active
The mark is active when this variable is non-@code{nil}. This variable
is always local in each buffer.
is always buffer-local in each buffer.
@end defvar
@defvar activate-mark-hook

View file

@ -13,8 +13,8 @@
arguments more complicated than the single numeric prefix argument.
These arguments include file names, buffer names, and command names (as
in @kbd{M-x}). The minibuffer is displayed on the bottom line of the
screen, in the same place as the echo area, but only while it is in
use for reading an argument.
frame, in the same place as the echo area, but only while it is in use
for reading an argument.
@menu
* Intro to Minibuffers:: Basic information about minibuffers.
@ -100,26 +100,25 @@ string; however, if @var{read} is non-@code{nil}, then it uses
@code{read} to convert the text into a Lisp object (@pxref{Input
Functions}).
The first thing this function does is to activate a minibuffer and
The first thing this function does is to activate a minibuffer and
display it with @var{prompt-string} as the prompt. This value must be a
string.
string. Then the user can edit text in the minibuffer.
Then, if @var{initial-contents} is a string, @code{read-from-minibuffer}
inserts it into the minibuffer, leaving point at the end. The
minibuffer appears with this text as its contents.
When the user types a command to exit the minibuffer,
@code{read-from-minibuffer} constructs the return value from the text in
the minibuffer. Normally it returns a string containing that text.
However, if @var{read} is non-@code{nil}, @code{read-from-minibuffer}
reads the text and returns the resulting Lisp object, unevaluated.
(@xref{Input Functions}, for information about reading.)
@strong{Usage note:} The @var{initial-contents} argument and the
@var{default} argument are two alternative features for the same job.
It usually does not make sense to use both at once. In most cases, you
should use @var{default}, since this permits the user to insert the
default value but does not burden the user with deleting it from the
minibuffer.
@c Emacs 19 feature
The value of @var{initial-contents} may also be a cons cell of the form
@code{(@var{string} . @var{position})}. This means to insert
@var{string} in the minibuffer but put point @var{position} characters
from the beginning, rather than at the end.
The argument @var{default} specifies a default value to make available
through the history commands. It should be a string, or @code{nil}. If
@var{read} is non-@code{nil}, then @var{default} is also used as the
input to @code{read}, if the user enters empty input. However, in the
usual case (where @var{read} is @code{nil}, @code{read-from-minibuffer}
does not return @var{default} when the user enters empty input; it
returns an empty string, @code{""}. In this respect, it is different
from all the other minibuffer input functions in this chapter.
If @var{keymap} is non-@code{nil}, that keymap is the local keymap to
use in the minibuffer. If @var{keymap} is omitted or @code{nil}, the
@ -131,30 +130,33 @@ The argument @var{hist} specifies which history list variable to use
for saving the input and for history commands used in the minibuffer.
It defaults to @code{minibuffer-history}. @xref{Minibuffer History}.
When the user types a command to exit the minibuffer,
@code{read-from-minibuffer} uses the text in the minibuffer to produce
its return value. Normally it simply makes a string containing that
text. However, if @var{read} is non-@code{nil},
@code{read-from-minibuffer} reads the text and returns the resulting
Lisp object, unevaluated. (@xref{Input Functions}, for information
about reading.)
If the variable @code{minibuffer-allow-text-properties} is
non-@code{nil}, then the string which is returned includes whatever text
properties were present in the minibuffer. Otherwise all the text
properties are stripped when the value is returned.
The argument @var{default} specifies a default value to make available
through the history list. It should be a string, or @code{nil}. If
@var{read} is non-@code{nil}, then @var{default} is passed through
@code{read}, just as ordinary user input would be. Unlike many other
minibuffer functions, this function does @emph{not} return @var{default}
if the user enters empty input. It returns @code{""} in that case.
If the argument @var{inherit-input-method} is non-@code{nil}, then the
minibuffer inherits the current input method and the setting of
@code{enable-multibyte-characters} from whichever buffer was current
before entering the minibuffer.
If @var{initial-contents} is a string, @code{read-from-minibuffer}
inserts it into the minibuffer, leaving point at the end, before the
user starts to edit the text. The minibuffer appears with this text as
its initial contents.
Alternatively, @var{initial-contents} can be a cons cell of the form
@code{(@var{string} . @var{position})}. This means to insert
@var{string} in the minibuffer but put point @var{position} characters
from the beginning, rather than at the end.
@strong{Usage note:} The @var{initial-contents} argument and the
@var{default} argument are two alternative features for more or less the
same job. It does not make sense to use both features in a single call
to @code{read-from-minibuffer}. In general, we recommend using
@var{default}, since this permits the user to insert the default value
when it is wanted, but does not burden the user with deleting it from
the minibuffer on other occasions.
@end defun
@defun read-string prompt &optional initial history default inherit-input-method
@ -177,8 +179,12 @@ This function is a simplified interface to the
@group
(read-string @var{prompt} @var{initial} @var{history} @var{default} @var{inherit})
@equiv{}
(read-from-minibuffer @var{prompt} @var{initial} nil nil
@var{history} @var{default} @var{inherit})
(let ((value
(read-from-minibuffer @var{prompt} @var{initial} nil nil
@var{history} @var{default} @var{inherit})))
(if (equal value "")
@var{default}
value))
@end group
@end smallexample
@end defun
@ -195,7 +201,7 @@ This is the default local keymap for reading from the minibuffer. By
default, it makes the following bindings:
@table @asis
@item @key{LFD}
@item @kbd{C-j}
@code{exit-minibuffer}
@item @key{RET}
@ -368,16 +374,16 @@ expression, thus moving point forward one word.
@cindex minibuffer history
@cindex history list
A @dfn{minibuffer history list} records previous minibuffer inputs so
A @dfn{minibuffer history list} records previous minibuffer inputs so
the user can reuse them conveniently. A history list is actually a
symbol, not a list; it is a variable whose value is a list of strings
(previous inputs), most recent first.
There are many separate history lists, used for different kinds of
There are many separate history lists, used for different kinds of
inputs. It's the Lisp programmer's job to specify the right history
list for each use of the minibuffer.
The basic minibuffer input functions @code{read-from-minibuffer} and
The basic minibuffer input functions @code{read-from-minibuffer} and
@code{completing-read} both accept an optional argument named @var{hist}
which is how you specify the history list. Here are the possible
values:
@ -395,18 +401,20 @@ If you specify @var{startpos}, then you should also specify that element
of the history as the initial minibuffer contents, for consistency.
@end table
If you don't specify @var{hist}, then the default history list
If you don't specify @var{hist}, then the default history list
@code{minibuffer-history} is used. For other standard history lists,
see below. You can also create your own history list variable; just
initialize it to @code{nil} before the first use.
Both @code{read-from-minibuffer} and @code{completing-read} add new
Both @code{read-from-minibuffer} and @code{completing-read} add new
elements to the history list automatically, and provide commands to
allow the user to reuse items on the list. The only thing your program
needs to do to use a history list is to initialize it and to pass its
name to the input functions when you wish. But it is safe to modify the
list by hand when the minibuffer input functions are not using it.
Here are some of the standard minibuffer history list variables:
@defvar minibuffer-history
The default history list for minibuffer history input.
@end defvar
@ -580,7 +588,7 @@ too short). Both of those begin with the string @samp{foobar}.
@defun all-completions string collection &optional predicate nospace
This function returns a list of all possible completions of
@var{string}. The parameters to this function are the same as to
@var{string}. The arguments to this function are the same as those of
@code{try-completion}.
If @var{collection} is a function, it is called with three arguments:
@ -624,10 +632,7 @@ minibuffer with completion.
@defun completing-read prompt collection &optional predicate require-match initial hist default inherit-input-method
This function reads a string in the minibuffer, assisting the user by
providing completion. It activates the minibuffer with prompt
@var{prompt}, which must be a string. If @var{initial} is
non-@code{nil}, @code{completing-read} inserts it into the minibuffer as
part of the input. Then it allows the user to edit the input, providing
several commands to attempt completion.
@var{prompt}, which must be a string.
The actual completion is done by passing @var{collection} and
@var{predicate} to the function @code{try-completion}. This happens in
@ -642,7 +647,8 @@ input already in the buffer matches an element of @var{collection}.
However, empty input is always permitted, regardless of the value of
@var{require-match}; in that case, @code{completing-read} returns
@var{default}.
@var{default}. The value of @var{default} (if non-@code{nil}) is also
available to the user through the history commands.
The user can exit with null input by typing @key{RET} with an empty
minibuffer. Then @code{completing-read} returns @code{""}. This is how
@ -661,8 +667,10 @@ The argument @var{hist} specifies which history list variable to use for
saving the input and for minibuffer history commands. It defaults to
@code{minibuffer-history}. @xref{Minibuffer History}.
The optional argument @var{default} specifies a default value to return
if the user enters null input; it should be a string.
If @var{initial} is non-@code{nil}, @code{completing-read} inserts it
into the minibuffer as part of the input. Then it allows the user to
edit the input, providing several commands to attempt completion.
In most cases, we recommend using @var{default}, and not @var{initial}.
If the argument @var{inherit-input-method} is non-@code{nil}, then the
minibuffer inherits the current input method and the setting of
@ -750,7 +758,7 @@ bindings:
@item @key{TAB}
@code{minibuffer-complete}
@item @key{LFD}
@item @kbd{C-j}
@code{minibuffer-complete-and-exit}
@item @key{RET}
@ -903,10 +911,10 @@ which @code{commandp} returns @code{t}, and a command name is a symbol
for which @code{commandp} returns @code{t}. @xref{Interactive Call}.
The argument @var{default} specifies what to return if the user enters
null input. It can be a symbol or a string, but the value returned by
@code{read-command} is always a symbol. If @var{default} is @code{nil},
that means no default has been specified; then if the user enters null
input, the return value is @code{nil}.
null input. It can be a symbol or a string; if it is a string,
@code{read-command} interns it before returning it. If @var{default} is
@code{nil}, that means no default has been specified; then if the user
enters null input, the return value is @code{nil}.
@example
(read-command "Command name? ")
@ -948,10 +956,10 @@ This function reads the name of a user variable and returns it as a
symbol.
The argument @var{default} specifies what to return if the user enters
null input. It can be a symbol or a string, but the value returned by
@code{read-variable} is always a symbol. If @var{default} is
@code{nil}, that means no default has been specified; then if the user
enters null input, the return value is @code{nil}.
null input. It can be a symbol or a string; if it is a string,
@code{read-variable} interns it before returning it. If @var{default}
is @code{nil}, that means no default has been specified; then if the
user enters null input, the return value is @code{nil}.
@example
@group
@ -988,21 +996,8 @@ predicate @code{user-variable-p} instead of @code{commandp}:
@end example
@end defun
@tindex read-coding-system
@defun read-coding-system prompt default
This function reads a coding system using the minibuffer, prompting with
string @var{prompt}, and returns the coding system name as a symbol. If
the user tries to enter null input, it asks the user to try again.
@xref{Coding Systems}.
@end defun
@tindex read-non-nil-coding-system
@defun read-non-nil-coding-system prompt
This function reads a coding system using the minibuffer, prompting with
string @var{prompt},and returns the coding system name as a symbol. If
the user enters null input, it returns @var{default-coding-system}.
which should be a symbol or a string. @xref{Coding Systems}.
@end defun
See also the functions @code{read-coding-system} and
@code{read-non-nil-coding-system}, in @ref{Lisp and Coding Systems}.
@node Reading File Names
@subsection Reading File Names
@ -1037,7 +1032,8 @@ If you specify @var{initial}, that is an initial file name to insert in
the buffer (after with @var{directory}, if that is inserted). In this
case, point goes at the beginning of @var{initial}. The default for
@var{initial} is @code{nil}---don't insert any file name. To see what
@var{initial} does, try the command @kbd{C-x C-v}.
@var{initial} does, try the command @kbd{C-x C-v}. @strong{Note:} we
recommend using @var{default} rather than @var{initial} in most cases.
Here is an example:
@ -1153,7 +1149,7 @@ string is a unique and exact match already, or @code{nil} if the string
matches no possibility.
If the string is an exact match for one possibility, but also matches
other longer possibilities, the function shuold return the string, not
other longer possibilities, the function should return the string, not
@code{t}.
@item
@ -1533,15 +1529,14 @@ returns zero.
@defopt enable-recursive-minibuffers
If this variable is non-@code{nil}, you can invoke commands (such as
@code{find-file}) that use minibuffers even while in the minibuffer
window. Such invocation produces a recursive editing level for a new
@code{find-file}) that use minibuffers even while the minibuffer window
is active. Such invocation produces a recursive editing level for a new
minibuffer. The outer-level minibuffer is invisible while you are
editing the inner one.
This variable only affects invoking the minibuffer while the
minibuffer window is selected. If you switch windows while in the
minibuffer, you can always invoke minibuffer commands while some other
window is selected.
If this variable is @code{nil}, you cannot invoke minibuffer
commands when the minibuffer window is active, not even if you switch to
another window to do it.
@end defopt
@c Emacs 19 feature

File diff suppressed because it is too large Load diff

View file

@ -20,9 +20,12 @@ characters and how they are stored in strings and buffers.
* Scanning Charsets::
* Chars and Bytes::
* Coding Systems::
* Lisp and Coding System::
* Default Coding Systems::
* Specifying Coding Systems::
* Explicit Encoding::
* MS-DOS File Types::
* MS-DOS Subprocesses::
@end menu
@node Text Representations
@ -41,8 +44,8 @@ attention to the difference.
In unibyte representation, each character occupies one byte and
therefore the possible character codes range from 0 to 255. Codes 0
through 127 are @sc{ASCII} characters; the codes from 128 through 255
are used for one non-@sc{ASCII} character set (you can choose which one
by setting the variable @code{nonascii-insert-offset}).
are used for one non-@sc{ASCII} character set (you can choose which
character set by setting the variable @code{nonascii-insert-offset}).
@cindex leading code
@cindex multibyte text
@ -67,9 +70,8 @@ This variable specifies the current buffer's text representation.
If it is non-@code{nil}, the buffer contains multibyte text; otherwise,
it contains unibyte text.
@strong{Warning:} do not set this variable directly; instead, use the
function @code{set-buffer-multibyte} to change a buffer's
representation.
You cannot set this variable directly; instead, use the function
@code{set-buffer-multibyte} to change a buffer's representation.
@end defvar
@tindex default-enable-multibyte-characters
@ -112,17 +114,17 @@ to unibyte, even though this conversion cannot in general preserve all
the characters that might be in the multibyte text. The other natural
alternative, to convert the buffer contents to multibyte, is not
acceptable because the buffer's representation is a choice made by the
user that cannot simply be overrided.
user that cannot be overridden automatically.
Converting unibyte text to multibyte text leaves @sc{ASCII} characters
unchanged. It converts the non-@sc{ASCII} codes 128 through 255 by
adding the value @code{nonascii-insert-offset} to each character code.
By setting this variable, you specify which character set the unibyte
characters correspond to. For example, if @code{nonascii-insert-offset}
is 2048, which is @code{(- (make-char 'latin-iso8859-1 0) 128)}, then
the unibyte non-@sc{ASCII} characters correspond to Latin 1. If it is
2688, which is @code{(- (make-char 'greek-iso8859-7 0) 128)}, then they
correspond to Greek letters.
unchanged, and likewise 128 through 159. It converts the non-@sc{ASCII}
codes 160 through 255 by adding the value @code{nonascii-insert-offset}
to each character code. By setting this variable, you specify which
character set the unibyte characters correspond to. For example, if
@code{nonascii-insert-offset} is 2048, which is @code{(- (make-char
'latin-iso8859-1 0) 128)}, then the unibyte non-@sc{ASCII} characters
correspond to Latin 1. If it is 2688, which is @code{(- (make-char
'greek-iso8859-7 0) 128)}, then they correspond to Greek letters.
Converting multibyte text to unibyte is simpler: it performs
logical-and of each character code with 255. If
@ -150,22 +152,21 @@ This variable provides a more general alternative to
@code{nonascii-insert-offset}. You can use it to specify independently
how to translate each code in the range of 128 through 255 into a
multibyte character. The value should be a vector, or @code{nil}.
If this is non-@code{nil}, it overrides @code{nonascii-insert-offset}.
@end defvar
@tindex string-make-unibyte
@defun string-make-unibyte string
This function converts the text of @var{string} to unibyte
representation, if it isn't already, and return the result. If
conversion does not change the contents, the value may be @var{string}
itself.
@var{string} is a unibyte string, it is returned unchanged.
@end defun
@tindex string-make-multibyte
@defun string-make-multibyte string
This function converts the text of @var{string} to multibyte
representation, if it isn't already, and return the result. If
conversion does not change the contents, the value may be @var{string}
itself.
@var{string} is a multibyte string, it is returned unchanged.
@end defun
@node Selecting a Representation
@ -188,8 +189,8 @@ representation.
This function sets @code{enable-multibyte-characters} to record which
representation is in use. It also adjusts various data in the buffer
(including its overlays, text properties and markers) so that they
cover or fall between the same text as they did before.
(including overlays, text properties and markers) so that they cover the
same text as they did before.
@end defun
@tindex string-as-unibyte
@ -198,7 +199,7 @@ This function returns a string with the same bytes as @var{string} but
treating each byte as a character. This means that the value may have
more characters than @var{string} has.
If @var{string} is unibyte already, then the value may be @var{string}
If @var{string} is unibyte already, then the value is @var{string}
itself.
@end defun
@ -208,7 +209,7 @@ This function returns a string with the same bytes as @var{string} but
treating each multibyte sequence as one character. This means that the
value may have fewer characters than @var{string} has.
If @var{string} is multibyte already, then the value may be @var{string}
If @var{string} is multibyte already, then the value is @var{string}
itself.
@end defun
@ -221,8 +222,9 @@ codes. The valid character codes for unibyte representation range from
0 to 255---the values that can fit in one byte. The valid character
codes for multibyte representation range from 0 to 524287, but not all
values in that range are valid. In particular, the values 128 through
255 are not valid in multibyte text. Only the @sc{ASCII} codes 0
through 127 are used in both representations.
255 are not legitimate in multibyte text (though they can occur in ``raw
bytes''; @pxref{Explicit Encoding}). Only the @sc{ASCII} codes 0
through 127 are fully legitimate in both representations.
@defun char-valid-p charcode
This returns @code{t} if @var{charcode} is valid for either one of the two
@ -249,11 +251,11 @@ only one character set.
In general, there is one character set for each distinct script. For
example, @code{latin-iso8859-1} is one character set,
@code{greek-iso8859-7} is another, and @code{ascii} is another. An
Emacs character set can hold at most 9025 characters; therefore. in some
cases, a set of characters that would logically be grouped together are
split into several character sets. For example, one set of Chinese
characters is divided into eight Emacs character sets,
@code{chinese-cns11643-1} through @code{chinese-cns11643-7}.
Emacs character set can hold at most 9025 characters; therefore, in some
cases, characters that would logically be grouped together are split
into several character sets. For example, one set of Chinese characters
is divided into eight Emacs character sets, @code{chinese-cns11643-1}
through @code{chinese-cns11643-7}.
@tindex charsetp
@defun charsetp object
@ -299,14 +301,17 @@ that appear in the string @var{string}.
In multibyte representation, each character occupies one or more
bytes. The functions in this section convert between characters and the
byte values used to represent them.
byte values used to represent them. For most purposes, there is no need
to be concerned with the number of bytes used to represent a character
because Emacs translates automatically when necessary.
@tindex char-bytes
@defun char-bytes character
This function returns the number of bytes used to represent the
character @var{character}. In most cases, this is the same as
@code{(length (split-char @var{character}))}; the only exception is for
ASCII characters, which use just one byte.
ASCII characters and the codes used in unibyte text, which use just one
byte.
@example
(char-bytes 2248)
@ -378,17 +383,18 @@ cases, Emacs supports several alternative encodings for the same
characters; for example, there are three coding systems for the Cyrillic
(Russian) alphabet: ISO, Alternativnyj, and KOI8.
@cindex end of line conversion
@dfn{End of line conversion} handles three different conventions used
on various systems for end of line. The Unix convention is to use the
linefeed character (also called newline). The DOS convention is to use
the two character sequence, carriage-return linefeed, at the end of a
line. The Mac convention is to use just carriage-return.
Most coding systems specify a particular character code for
conversion, but some of them leave this unspecified---to be chosen
heuristically based on the data.
@cindex end of line conversion
@dfn{End of line conversion} handles three different conventions used
on various systems for representing end of line in files. The Unix
convention is to use the linefeed character (also called newline). The
DOS convention is to use the two character sequence, carriage-return
linefeed, at the end of a line. The Mac convention is to use just
carriage-return.
@cindex base coding system
@cindex variant coding system
@dfn{Base coding systems} such as @code{latin-1} leave the end-of-line
@ -398,6 +404,9 @@ coding systems} such as @code{latin-1-unix}, @code{latin-1-dos} and
well. Each base coding system has three corresponding variants whose
names are formed by adding @samp{-unix}, @samp{-dos} and @samp{-mac}.
@node Lisp and Coding Systems
@subsection Coding Systems in Lisp
Here are Lisp facilities for working with coding systems;
@tindex coding-system-list
@ -420,11 +429,21 @@ If that is valid, it returns @var{coding-system}.
Otherwise it signals an error with condition @code{coding-system-error}.
@end defun
@tindex find-safe-coding-system
@defun find-safe-coding-system from to
Return a list of proper coding systems to encode a text between
@var{from} and @var{to}. All coding systems in the list can safely
encode any multibyte characters in the text.
If the text contains no multibyte characters, return a list of a single
element @code{undecided}.
@end defun
@tindex detect-coding-region
@defun detect-coding-region start end highest
This function chooses a plausible coding system for decoding the text
from @var{start} to @var{end}. This text should be ``raw bytes''
(@pxref{Specifying Coding Systems}).
(@pxref{Explicit Encoding}).
Normally this function returns is a list of coding systems that could
handle decoding the text that was scanned. They are listed in order of
@ -471,6 +490,25 @@ This function looks up the target in @code{file-coding-system-alist},
@code{process-coding-system-alist}, or
@code{network-coding-system-alist}, depending on @var{operation}.
@xref{Default Coding Systems}.
@end defun
Here are two functions you can use to let the user specify a coding
system, with completion. @xref{Completion}.
@tindex read-coding-system
@defun read-coding-system prompt default
This function reads a coding system using the minibuffer, prompting with
string @var{prompt}, and returns the coding system name as a symbol. If
the user enters null input, @var{default} specifies which coding system
to return. It should be a symbol or a string.
@end defun
@tindex read-non-nil-coding-system
@defun read-non-nil-coding-system prompt
This function reads a coding system using the minibuffer, prompting with
string @var{prompt},and returns the coding system name as a symbol. If
the user tries to enter null input, it asks the user to try again.
@xref{Coding Systems}.
@end defun
@node Default Coding Systems
@ -480,9 +518,9 @@ This function looks up the target in @code{file-coding-system-alist},
certain files or when running certain subprograms. The idea of these
variables is that you set them once and for all to the defaults you
want, and then do not change them again. To specify a particular coding
system for a particular operation, don't change these variables;
instead, override them using @code{coding-system-for-read} and
@code{coding-system-for-write} (@pxref{Specifying Coding Systems}).
system for a particular operation in a Lisp program, don't change these
variables; instead, override them using @code{coding-system-for-read}
and @code{coding-system-for-write} (@pxref{Specifying Coding Systems}).
@tindex file-coding-system-alist
@defvar file-coding-system-alist
@ -519,7 +557,7 @@ other coding systems later using @code{set-process-coding-system}.
@defvar network-coding-system-alist
This variable is an alist that specifies the coding system to use for
network streams. It works much like @code{file-coding-system-alist},
with the difference that the @var{pattern} in an elemetn may be either a
with the difference that the @var{pattern} in an element may be either a
port number or a regular expression. If it is a regular expression, it
is matched against the network service name used to open the network
stream.
@ -561,7 +599,7 @@ of the right way to use the variable:
@example
;; @r{Read the file with no character code conversion.}
;; @r{Assume CRLF represents end-of-line.}
;; @r{Assume @sc{crlf} represents end-of-line.}
(let ((coding-system-for-write 'emacs-mule-dos))
(insert-file-contents filename))
@end example
@ -587,7 +625,7 @@ affect it.
@tindex last-coding-system-used
@defvar last-coding-system-used
All operations that use a coding system set this variable
All I/O operations that use a coding system set this variable
to the coding system name that was used.
@end defvar
@ -646,32 +684,34 @@ text. They are ``raw bytes''---bytes that represent text in the same
way that an external file would. When a buffer contains raw bytes, it
is most natural to mark that buffer as using unibyte representation,
using @code{set-buffer-multibyte} (@pxref{Selecting a Representation}),
but this is not required.
but this is not required. If the buffer's contents are only temporarily
raw, leave the buffer multibyte, which will be correct after you decode
them.
The usual way to get raw bytes in a buffer, for explicit decoding, is
to read them with from a file with @code{insert-file-contents-literally}
to read them from a file with @code{insert-file-contents-literally}
(@pxref{Reading from Files}) or specify a non-@code{nil} @var{rawfile}
arguments when visiting a file with @code{find-file-noselect}.
argument when visiting a file with @code{find-file-noselect}.
The usual way to use the raw bytes that result from explicitly
encoding text is to copy them to a file or process---for example, to
write it with @code{write-region} (@pxref{Writing to Files}), and
write them with @code{write-region} (@pxref{Writing to Files}), and
suppress encoding for that @code{write-region} call by binding
@code{coding-system-for-write} to @code{no-conversion}.
@tindex encode-coding-region
@defun encode-coding-region start end coding-system
This function encodes the text from @var{start} to @var{end} according
to coding system @var{coding-system}. The encoded text replaces
the original text in the buffer. The result of encoding is
``raw bytes.''
to coding system @var{coding-system}. The encoded text replaces the
original text in the buffer. The result of encoding is ``raw bytes,''
but the buffer remains multibyte if it was multibyte before.
@end defun
@tindex encode-coding-string
@defun encode-coding-string string coding-system
This function encodes the text in @var{string} according to coding
system @var{coding-system}. It returns a new string containing the
encoded text. The result of encoding is ``raw bytes.''
encoded text. The result of encoding is a unibyte string of ``raw bytes.''
@end defun
@tindex decode-coding-region
@ -689,3 +729,72 @@ system @var{coding-system}. It returns a new string containing the
decoded text. To make explicit decoding useful, the contents of
@var{string} ought to be ``raw bytes.''
@end defun
@node MS-DOS File Types
@section MS-DOS File Types
@cindex DOS file types
@cindex MS-DOS file types
@cindex Windows file types
@cindex file types on MS-DOS and Windows
@cindex text files and binary files
@cindex binary files and text files
Emacs on MS-DOS and on MS-Windows recognizes certain file names as
text files or binary files. For a text file, Emacs always uses DOS
end-of-line conversion. For a binary file, Emacs does no end-of-line
conversion and no character code conversion.
@defvar buffer-file-type
This variable, automatically buffer-local in each buffer, records the
file type of the buffer's visited file. The value is @code{nil} for
text, @code{t} for binary. When a buffer does not specify a coding
system with @code{buffer-file-coding-system}, this variable is used by
the function @code{find-buffer-file-type-coding-system} to determine
which coding system to use when writing the contents of the buffer.
@end defvar
@defopt file-name-buffer-file-type-alist
This variable holds an alist for recognizing text and binary files.
Each element has the form (@var{regexp} . @var{type}), where
@var{regexp} is matched against the file name, and @var{type} may be
@code{nil} for text, @code{t} for binary, or a function to call to
compute which. If it is a function, then it is called with a single
argument (the file name) and should return @code{t} or @code{nil}.
Emacs when running on MS-DOS or MS-Windows checks this alist to decide
which coding system to use when reading a file. For a text file,
@code{undecided-dos} is used. For a binary file, @code{no-conversion}
is used.
If no element in this alist matches a given file name, then
@code{default-buffer-file-type} says how to treat the file.
@end defopt
@defopt default-buffer-file-type
This variable says how to handle files for which
@code{file-name-buffer-file-type-alist} says nothing about the type.
If this variable is non-@code{nil}, then these files are treated as
binary. Otherwise, nothing special is done for them---the coding system
is deduced solely from the file contents, in the usual Emacs fashion.
@end defopt
@node MS-DOS Subprocesses
@section MS-DOS Subprocesses
On Microsoft operating systems, these variables provide an alternative
way to specify the kind of end-of-line conversion to use for input and
output. The variable @code{binary-process-input} applies to input sent
to the subprocess, and @code{binary-process-output} applies to output
received from it. A non-@code{nil} value means the data is ``binary,''
and @code{nil} means the data is text.
@defvar binary-process-input
If this variable is @code{nil}, convert newlines to @sc{crlf} sequences in
the input to a synchronous subprocess.
@end defvar
@defvar binary-process-output
If this variable is @code{nil}, convert @sc{crlf} sequences to newlines in
the output from a synchronous subprocess.
@end defvar

View file

@ -12,9 +12,9 @@
@dfn{floating point numbers}. Integers are whole numbers such as
@minus{}3, 0, 7, 13, and 511. Their values are exact. Floating point
numbers are numbers with fractional parts, such as @minus{}4.5, 0.0, or
2.71828. They can also be expressed in exponential notation:
1.5e2 equals 150; in this example, @samp{e2} stands for ten to the
second power, and is multiplied by 1.5. Floating point values are not
2.71828. They can also be expressed in exponential notation: 1.5e2
equals 150; in this example, @samp{e2} stands for ten to the second
power, and that is multiplied by 1.5. Floating point values are not
exact; they have a fixed, limited amount of precision.
@menu
@ -149,9 +149,9 @@ values. It also provides for a class of values called NaN or
there is no correct answer. For example, @code{(sqrt -1.0)} returns a
NaN. For practical purposes, there's no significant difference between
different NaN values in Emacs Lisp, and there's no rule for precisely
which NaN value should be used in a particular case, so this manual
which NaN value should be used in a particular case, so Emacs Lisp
doesn't try to distinguish them. Here are the read syntaxes for
these numbers:
these special floating point values:
@table @asis
@item positive infinity
@ -162,6 +162,10 @@ these numbers:
@samp{0.0e+NaN}.
@end table
In addition, the value @code{-0.0} is distinguishable from ordinary
zero in IEEE floating point (although @code{equal} and @code{=} consider
them equal values).
You can use @code{logb} to extract the binary exponent of a floating
point number (or estimate the logarithm of an integer):
@ -323,6 +327,10 @@ This function returns the smallest of its arguments.
@end example
@end defun
@defun abs number
This returns the absolute value of @var{number}.
@end defun
@node Numeric Conversions
@section Numeric Conversions
@cindex rounding in conversions
@ -378,7 +386,7 @@ commonly used.
All of these functions except @code{%} return a floating point value
if any argument is floating.
It is important to note that in GNU Emacs Lisp, arithmetic functions
It is important to note that in Emacs Lisp, arithmetic functions
do not check for overflow. Thus @code{(1+ 134217727)} may evaluate to
@minus{}134217728, depending on your hardware.
@ -414,10 +422,6 @@ like this:
This function returns @var{number-or-marker} minus 1.
@end defun
@defun abs number
This returns the absolute value of @var{number}.
@end defun
@defun + &rest numbers-or-markers
This function adds its arguments together. When given no arguments,
@code{+} returns 0.
@ -478,8 +482,10 @@ permits machine-dependent rounding. As a practical matter, all known
machines round in the standard fashion.
@cindex @code{arith-error} in division
If you divide by 0, an @code{arith-error} error is signaled.
(@xref{Errors}.)
If you divide an integer by 0, an @code{arith-error} error is signaled.
(@xref{Errors}.) Floating point division by zero returns either
infinity or a NaN if your machine supports IEEE floating point;
otherwise, it signals an @code{arith-error} error.
@example
@group
@ -488,6 +494,12 @@ If you divide by 0, an @code{arith-error} error is signaled.
@end group
(/ 5 2)
@result{} 2
(/ 5.0 2)
@result{} 2.5
(/ 5 2.0)
@result{} 2.5
(/ 5.0 2.0)
@result{} 2.5
(/ 25 3 2)
@result{} 4
(/ -17 6)
@ -925,9 +937,8 @@ bit is one in the result if, and only if, the @var{n}th bit is zero in
@cindex transcendental functions
@cindex mathematical functions
These mathematical functions are available if floating point is
supported. They allow integers as well as floating point numbers
as arguments.
These mathematical functions allow integers as well as floating point
numbers as arguments.
@defun sin arg
@defunx cos arg

View file

@ -25,7 +25,7 @@ but not for ``the'' type of an object.
which all other types are constructed, are called @dfn{primitive
types}. Each object belongs to one and only one primitive type. These
types include @dfn{integer}, @dfn{float}, @dfn{cons}, @dfn{symbol},
@dfn{string}, @dfn{vector}, @dfn{subr}, @dfn{byte-code function}, and
@dfn{string}, @dfn{vector}, @dfn{subr}, @dfn{byte-code function}, plus
several special types, such as @dfn{buffer}, that are related to
editing. (@xref{Editing Types}.)
@ -69,8 +69,9 @@ input accepted by the Lisp reader (the function @code{read}) for that
object. @xref{Read and Print}.
Most objects have more than one possible read syntax. Some types of
object have no read syntax; except for these cases, the printed
representation of an object is also a read syntax for it.
object have no read syntax, since it may not make sense to enter objects
of these types directly in a Lisp program. Except for these cases, the
printed representation of an object is also a read syntax for it.
In other languages, an expression is text; it has no other form. In
Lisp, an expression is primarily a Lisp object and only secondarily the
@ -80,14 +81,12 @@ mind, or you will occasionally be very confused.
@cindex hash notation
Every type has a printed representation. Some types have no read
syntax, since it may not make sense to enter objects of these types
directly in a Lisp program. For example, the buffer type does not have
a read syntax. Objects of these types are printed in @dfn{hash
notation}: the characters @samp{#<} followed by a descriptive string
(typically the type name followed by the name of the object), and closed
with a matching @samp{>}. Hash notation cannot be read at all, so the
Lisp reader signals the error @code{invalid-read-syntax} whenever it
encounters @samp{#<}.
syntax---for example, the buffer type has none. Objects of these types
are printed in @dfn{hash notation}: the characters @samp{#<} followed by
a descriptive string (typically the type name followed by the name of
the object), and closed with a matching @samp{>}. Hash notation cannot
be read at all, so the Lisp reader signals the error
@code{invalid-read-syntax} whenever it encounters @samp{#<}.
@kindex invalid-read-syntax
@example
@ -190,8 +189,7 @@ leading @samp{+} or a final @samp{.}.
1 ; @r{The integer 1.}
1. ; @r{Also The integer 1.}
+1 ; @r{Also the integer 1.}
268435457 ; @r{Also the integer 1!}
; @r{ (on a 28-bit implementation)}
268435457 ; @r{Also the integer 1 on a 28-bit implementation.}
@end group
@end example
@ -226,9 +224,10 @@ characters. @xref{String Type}.
Characters in strings, buffers, and files are currently limited to the
range of 0 to 524287---nineteen bits. But not all values in that range
are valid character codes. Characters that represent keyboard input
have a much wider range, so they can modifier keys such as Control, Meta
and Shift.
are valid character codes. Codes 0 through 127 are ASCII codes; the
rest are non-ASCII (@pxref{Non-ASCII Characters}). Characters that represent
keyboard input have a much wider range, to encode modifier keys such as
Control, Meta and Shift.
@cindex read syntax for characters
@cindex printed representation for characters
@ -283,7 +282,7 @@ respectively. Thus,
?\a @result{} 7 ; @r{@kbd{C-g}}
?\b @result{} 8 ; @r{backspace, @key{BS}, @kbd{C-h}}
?\t @result{} 9 ; @r{tab, @key{TAB}, @kbd{C-i}}
?\n @result{} 10 ; @r{newline, @key{LFD}, @kbd{C-j}}
?\n @result{} 10 ; @r{newline, @kbd{C-j}}
?\v @result{} 11 ; @r{vertical tab, @kbd{C-k}}
?\f @result{} 12 ; @r{formfeed character, @kbd{C-l}}
?\r @result{} 13 ; @r{carriage return, @key{RET}, @kbd{C-m}}
@ -314,9 +313,9 @@ equivalent to @samp{?\^I} and to @samp{?\^i}:
that exist in @sc{ASCII}; but for keyboard input purposes, you can turn
any character into a control character with @samp{C-}. The character
codes for these non-@sc{ASCII} control characters include the
@iftex
@tex
$2^{26}$
@end iftex
@end tex
@ifinfo
2**26
@end ifinfo
@ -334,21 +333,22 @@ the control equivalent of @kbd{?}:
@noindent
As a result, it is currently not possible to represent the character
@kbd{Control-?}, which is a meaningful input character under X. It is
not easy to change this as various Lisp files refer to @key{DEL} in this
way.
@kbd{Control-?}, which is a meaningful input character under X, using
@samp{\C-}. It is not easy to change this, as various Lisp files refer
to @key{DEL} in this way.
For representing control characters to be found in files or strings,
we recommend the @samp{^} syntax; for control characters in keyboard
input, we prefer the @samp{C-} syntax. This does not affect the meaning
of the program, but may guide the understanding of people who read it.
input, we prefer the @samp{C-} syntax. Which one you use does not
affect the meaning of the program, but may guide the understanding of
people who read it.
@cindex meta characters
A @dfn{meta character} is a character typed with the @key{META}
modifier key. The integer that represents such a character has the
@iftex
@tex
$2^{27}$
@end iftex
@end tex
@ifinfo
2**27
@end ifinfo
@ -357,9 +357,9 @@ use high bits for this and other modifiers to make possible a wide range
of basic character codes.
In a string, the
@iftex
@tex
$2^{7}$
@end iftex
@end tex
@ifinfo
2**7
@end ifinfo
@ -380,15 +380,15 @@ or as @samp{?\M-\101}. Likewise, you can write @kbd{C-M-b} as
for example, @sc{ASCII} distinguishes between the characters @samp{a}
and @samp{A}. But @sc{ASCII} has no way to represent whether a control
character is upper case or lower case. Emacs uses the
@iftex
@tex
$2^{25}$
@end iftex
@end tex
@ifinfo
2**25
@end ifinfo
bit to indicate that the shift key was used for typing a control
bit to indicate that the shift key was used in typing a control
character. This distinction is possible only when you use X terminals
or other special terminals; ordinary terminals do not indicate the
or other special terminals; ordinary terminals do not report the
distinction to the computer in any way.
@cindex hyper characters
@ -398,10 +398,10 @@ distinction to the computer in any way.
in a character: @dfn{hyper}, @dfn{super} and @dfn{alt}. The syntaxes
for these bits are @samp{\H-}, @samp{\s-} and @samp{\A-}. Thus,
@samp{?\H-\M-\A-x} represents @kbd{Alt-Hyper-Meta-x}.
@iftex
@tex
Numerically, the
bit values are $2^{22}$ for alt, $2^{23}$ for super and $2^{24}$ for hyper.
@end iftex
@end tex
@ifinfo
Numerically, the
bit values are 2**22 for alt, 2**23 for super and 2**24 for hyper.
@ -434,7 +434,7 @@ digits, so you can represent any character code in this way.
Thus, @samp{?\x41} for the character @kbd{A}, @samp{?\x1} for the
character @kbd{C-a}, and @code{?\x8c0} for the character
@iftex
@`a.
@samp{@`a}.
@end iftex
@ifinfo
@samp{a} with grave accent.
@ -478,7 +478,7 @@ backslash. In contrast to its use in strings, however, a backslash in
the name of a symbol simply quotes the single character that follows the
backslash. For example, in a string, @samp{\t} represents a tab
character; in the name of a symbol, however, @samp{\t} merely quotes the
letter @kbd{t}. To have a symbol with a tab character in its name, you
letter @samp{t}. To have a symbol with a tab character in its name, you
must actually use a tab (preceded with a backslash). But it's rare to
do such a thing.
@ -525,26 +525,28 @@ elements. There are two kinds of sequence in Emacs Lisp, lists and
arrays. Thus, an object of type list or of type array is also
considered a sequence.
Arrays are further subdivided into strings and vectors. Vectors can
hold elements of any type, but string elements must be characters in the
range from 0 to 255. However, the characters in a string can have text
properties like characters in a buffer (@pxref{Text Properties});
vectors do not support text properties even when their elements happen
to be characters.
Arrays are further subdivided into strings, vectors, char-tables and
bool-vectors. Vectors can hold elements of any type, but string
elements must be characters, and bool-vector elements must be @code{t}
or @code{nil}. The characters in a string can have text properties like
characters in a buffer (@pxref{Text Properties}); vectors and
bool-vectors do not support text properties even when their elements
happen to be characters. Char-tables are like vectors except that they
are indexed by any valid character code.
Lists, strings and vectors are different, but they have important
similarities. For example, all have a length @var{l}, and all have
elements which can be indexed from zero to @var{l} minus one. Also,
several functions, called sequence functions, accept any kind of
Lists, strings and the other array types are different, but they have
important similarities. For example, all have a length @var{l}, and all
have elements which can be indexed from zero to @var{l} minus one.
Several functions, called sequence functions, accept any kind of
sequence. For example, the function @code{elt} can be used to extract
an element of a sequence, given its index. @xref{Sequences Arrays
Vectors}.
It is impossible to read the same sequence twice, since sequences are
always created anew upon reading. If you read the read syntax for a
sequence twice, you get two sequences with equal contents. There is one
exception: the empty list @code{()} always stands for the same object,
@code{nil}.
It is generally impossible to read the same sequence twice, since
sequences are always created anew upon reading. If you read the read
syntax for a sequence twice, you get two sequences with equal contents.
There is one exception: the empty list @code{()} always stands for the
same object, @code{nil}.
@node Cons Cell Type
@subsection Cons Cell and List Types
@ -596,8 +598,9 @@ violet buttercup)}:
@example
@group
___ ___ ___ ___ ___ ___
|___|___|--> |___|___|--> |___|___|--> nil
--- --- --- --- --- ---
| | |--> | | |--> | | |--> nil
--- --- --- --- --- ---
| | |
| | |
--> rose --> violet --> buttercup
@ -653,8 +656,9 @@ depicted with boxes and arrows:
@example
@group
___ ___ ___ ___
|___|___|--> |___|___|--> nil
--- --- --- ---
| | |--> | | |--> nil
--- --- --- ---
| |
| |
--> A --> nil
@ -688,8 +692,9 @@ shows the pair @code{(rose . violet)}:
@example
@group
___ ___
|___|___|--> violet
--- ---
| | |--> violet
--- ---
|
|
--> rose
@ -703,8 +708,9 @@ chain of cons cells with a non-@code{nil} final @sc{cdr}. For example,
@example
@group
___ ___ ___ ___
|___|___|--> |___|___|--> buttercup
--- --- --- ---
| | |--> | | |--> buttercup
--- --- --- ---
| |
| |
--> rose --> violet
@ -720,8 +726,9 @@ and looks like this:
@example
@group
___ ___ ___ ___
|___|___|--> |___|___|--> nil
--- --- --- ---
| | |--> | | |--> nil
--- --- --- ---
| |
| |
--> rose --> violet
@ -735,8 +742,9 @@ It looks like this:
@example
@group
___ ___ ___ ___ ___ ___
|___|___|--> |___|___|--> |___|___|--> nil
--- --- --- --- --- ---
| | |--> | | |--> | | |--> nil
--- --- --- --- --- ---
| | |
| | |
--> rose --> violet --> buttercup
@ -775,27 +783,35 @@ functions that work on alists.
An @dfn{array} is composed of an arbitrary number of slots for
referring to other Lisp objects, arranged in a contiguous block of
memory. Accessing any element of an array takes the same amount of
time. In contrast, accessing an element of a list requires time
proportional to the position of the element in the list. (Elements at
the end of a list take longer to access than elements at the beginning
of a list.)
memory. Accessing any element of an array takes approximately the same
amount of time. In contrast, accessing an element of a list requires
time proportional to the position of the element in the list. (Elements
at the end of a list take longer to access than elements at the
beginning of a list.)
Emacs defines two types of array, strings and vectors. A string is an
array of characters and a vector is an array of arbitrary objects. Both
are one-dimensional. (Most other programming languages support
multidimensional arrays, but they are not essential; you can get the
same effect with an array of arrays.) Each type of array has its own
read syntax; see @ref{String Type}, and @ref{Vector Type}.
Emacs defines four types of array: strings, vectors, bool-vectors, and
char-tables.
An array may have any length up to the largest integer; but once
created, it has a fixed size. The first element of an array has index
zero, the second element has index 1, and so on. This is called
@dfn{zero-origin} indexing. For example, an array of four elements has
indices 0, 1, 2, @w{and 3}.
A string is an array of characters and a vector is an array of
arbitrary objects. A bool-vector can hold only @code{t} or @code{nil}.
These kinds of array may have any length up to the largest integer.
Char-tables are sparse arrays indexed by any valid character code; they
can hold arbitrary objects.
The array type is contained in the sequence type and contains both the
string type and the vector type.
The first element of an array has index zero, the second element has
index 1, and so on. This is called @dfn{zero-origin} indexing. For
example, an array of four elements has indices 0, 1, 2, @w{and 3}. The
largest possible index value is one less than the length of the array.
Once an array is created, its length is fixed.
All Emacs Lisp arrays are one-dimensional. (Most other programming
languages support multidimensional arrays, but they are not essential;
you can get the same effect with an array of arrays.) Each type of
array has its own read syntax; see the following sections for details.
The array type is contained in the sequence type and
contains the string type, the vector type, the bool-vector type, and the
char-table type.
@node String Type
@subsection String Type
@ -854,10 +870,13 @@ but the newline is ignored if escaped."
constant by writing it literally. There are two text representations
for non-@sc{ASCII} characters in Emacs strings (and in buffers): unibyte
and multibyte. If the string constant is read from a multibyte source,
then the character is read as a multibyte character, and that makes the
string multibyte. If the string constant is read from a unibyte source,
then the character is read as unibyte and that makes the string unibyte.
such as a multibyte buffer or string, or a file that would be visited as
multibyte, then the character is read as a multibyte character, and that
makes the string multibyte. If the string constant is read from a
unibyte source, then the character is read as unibyte and that makes the
string unibyte.
@c ??? Change this?
You can also represent a multibyte non-@sc{ASCII} character with its
character code, using a hex escape, @samp{\x@var{nnnnnnn}}, with as many
digits as necessary. (Multibyte non-@sc{ASCII} character codes are all
@ -895,9 +914,9 @@ characters.
If you use the @samp{\M-} syntax to indicate a meta character in a
string constant, this sets the
@iftex
@tex
$2^{7}$
@end iftex
@end tex
@ifinfo
2**7
@end ifinfo
@ -975,9 +994,24 @@ special purposes. A char-table can also specify a single value for
a whole character set.
The printed representation of a char-table is like a vector
except that there is an extra @samp{#} at the beginning.
except that there is an extra @samp{#^} at the beginning.
@xref{Char-Tables}, for special functions to operate on char-tables.
Uses of char-tables include:
@itemize @bullet
@item
Case tables (@pxref{Case Tables}).
@item
Character category tables (@pxref{Categories}).
@item
Display Tables (@pxref{Display Tables}).
@item
Syntax tables (@pxref{Syntax Tables}).
@end itemize
@node Bool-Vector Type
@subsection Bool-Vector Type
@ -999,6 +1033,9 @@ make no difference.
@result{} #&3"\377"
(make-bool-vector 3 nil)
@result{} #&3"\0""
;; @r{These are equal since only the first 3 bits are used.}
(equal #&3"\377" #&3"\340")
@result{} t
@end example
@node Function Type
@ -1027,7 +1064,7 @@ functions @code{funcall} and @code{apply}. @xref{Calling Functions}.
A @dfn{Lisp macro} is a user-defined construct that extends the Lisp
language. It is represented as an object much like a function, but with
different parameter-passing semantics. A Lisp macro has the form of a
different argument-passing semantics. A Lisp macro has the form of a
list whose first element is the symbol @code{macro} and whose @sc{cdr}
is a Lisp function object, including the @code{lambda} symbol.
@ -1053,12 +1090,12 @@ not evaluate all its arguments is called a @dfn{special form}
(@pxref{Special Forms}).@refill
It does not matter to the caller of a function whether the function is
primitive. However, this does matter if you try to substitute a
function written in Lisp for a primitive of the same name. The reason
is that the primitive function may be called directly from C code.
Calls to the redefined function from Lisp will use the new definition,
but calls from C code may still use the built-in definition. Therefore,
@strong{we discourage redefinition of primitive functions}.
primitive. However, this does matter if you try to redefine a primitive
with a function written in Lisp. The reason is that the primitive
function may be called directly from C code. Calls to the redefined
function from Lisp will use the new definition, but calls from C code
may still use the built-in definition. Therefore, @strong{we discourage
redefinition of primitive functions}.
The term @dfn{function} refers to all Emacs functions, whether written
in Lisp or C. @xref{Function Type}, for information about the
@ -1114,9 +1151,10 @@ symbol. @xref{Autoload}, for more details.
@section Editing Types
@cindex editing types
The types in the previous section are common to many Lisp dialects.
Emacs Lisp provides several additional data types for purposes connected
with editing.
The types in the previous section used for general programming
purposes, and most of them are common to most Lisp dialects. Emacs Lisp
provides several additional data types for purposes connected with
editing.
@menu
* Buffer Type:: The basic object of editing.
@ -1124,11 +1162,10 @@ with editing.
* Window Type:: Buffers are displayed in windows.
* Frame Type:: Windows subdivide frames.
* Window Configuration Type:: Recording the way a frame is subdivided.
* Frame Configuration Type:: Recording the status of all frames.
* Process Type:: A process running on the underlying OS.
* Stream Type:: Receive or send characters.
* Keymap Type:: What function a keystroke invokes.
* Syntax Table Type:: What a character means.
* Display Table Type:: How display tables are represented.
* Overlay Type:: How an overlay is represented.
@end menu
@ -1144,8 +1181,8 @@ buffer need not be displayed in any window.
The contents of a buffer are much like a string, but buffers are not
used like strings in Emacs Lisp, and the available operations are
different. For example, insertion of text into a buffer is very
efficient, whereas ``inserting'' text into a string requires
different. For example, you can insert text efficiently into an
existing buffer, whereas ``inserting'' text into a string requires
concatenating substrings, and the result is an entirely new string
object.
@ -1167,10 +1204,10 @@ a local syntax table (@pxref{Syntax Tables});
a local keymap (@pxref{Keymaps}); and,
@item
a local variable binding list (@pxref{Buffer-Local Variables}).
a list of buffer-local variable bindings (@pxref{Buffer-Local Variables}).
@item
a list of overlays (@pxref{Overlays}).
overlays (@pxref{Overlays}).
@item
text properties for the text in the buffer (@pxref{Text Properties}).
@ -1183,7 +1220,7 @@ behavior of programs in different buffers, without actually changing the
programs.
A buffer may be @dfn{indirect}, which means it shares the text
of another buffer. @xref{Indirect Buffers}.
of another buffer, but presents it differently. @xref{Indirect Buffers}.
Buffers have no read syntax. They print in hash notation, showing the
buffer name.
@ -1263,7 +1300,7 @@ uniquely).
@example
@group
(selected-frame)
@result{} #<frame xemacs@@mole.gnu.ai.mit.edu 0xdac80>
@result{} #<frame emacs@@mole.gnu.ai.mit.edu 0xdac80>
@end group
@end example
@ -1282,6 +1319,19 @@ looks like @samp{#<window-configuration>}. @xref{Window
Configurations}, for a description of several functions related to
window configurations.
@node Frame Configuration Type
@subsection Frame Configuration Type
@cindex screen layout
A @dfn{frame configuration} stores information about the positions,
sizes, and contents of the windows in all frames. It is actually
a list whose @sc{car} is @code{frame-configuration} and whose
@sc{cdr} is an alist. Each alist element describes one frame,
which appears as the @sc{car} of that element.
@xref{Frame Configurations}, for a description of several functions
related to frame configurations.
@node Process Type
@subsection Process Type
@ -1343,36 +1393,6 @@ a list whose @sc{car} is the symbol @code{keymap}.
@xref{Keymaps}, for information about creating keymaps, handling prefix
keys, local as well as global keymaps, and changing key bindings.
@node Syntax Table Type
@subsection Syntax Table Type
A @dfn{syntax table} is a char-table which specifies the syntax of
each character, for word and list parsing. Each element of the syntax
table defines how one character is interpreted when it appears in a
buffer. For example, in C mode (@pxref{Major Modes}), the @samp{+}
character is punctuation, but in Lisp mode it is a valid character in a
symbol. These modes specify different interpretations by changing the
syntax table entry for @samp{+}, at index 43 in the syntax table.
Syntax tables are used only to control primitives that scan text in
buffers, not for reading Lisp expressions. The syntax that the Lisp
interpreter uses to read expressions is built into the Emacs source code
and cannot be changed; thus, to change the list delimiters to be
@samp{@{} and @samp{@}} instead of @samp{(} and @samp{)} would be
impossible. (Some Lisp systems provide ways to redefine the read
syntax, but we decided to leave this feature out of Emacs Lisp for
simplicity.)
@xref{Syntax Tables}, for details about syntax classes and how to make
and modify syntax tables.
@node Display Table Type
@subsection Display Table Type
A @dfn{display table} specifies how to display each character code.
Each buffer and each window can have its own display table. A display
table is actually a char-table. @xref{Display Tables}.
@node Overlay Type
@subsection Overlay Type
@ -1437,7 +1457,7 @@ a list and @code{symbolp} to check for a symbol.
(setq list (append x list)))
@need 3000
(t
;; We only handle symbols and lists.
;; We handle only symbols and lists.
(error "Invalid argument %s in add-on" x))))
@end example
@ -1451,6 +1471,9 @@ with references to further information.
@item arrayp
@xref{Array Functions, arrayp}.
@item bool-vector-p
@xref{Bool-Vectors, bool-vector-p}.
@item bufferp
@xref{Buffer Basics, bufferp}.
@ -1458,20 +1481,29 @@ with references to further information.
@xref{Byte-Code Type, byte-code-function-p}.
@item case-table-p
@xref{Case Table, case-table-p}.
@xref{Case Tables, case-table-p}.
@item char-or-string-p
@xref{Predicates for Strings, char-or-string-p}.
@item char-table-p
@xref{Char-Tables, char-table-p}.
@item commandp
@xref{Interactive Call, commandp}.
@item consp
@xref{List-related Predicates, consp}.
@item display-table-p
@xref{Display Tables, display-table-p}.
@item floatp
@xref{Predicates on Numbers, floatp}.
@item frame-configuration-p
@xref{Frame Configurations, frame-configuration-p}.
@item frame-live-p
@xref{Deleting Frames, frame-live-p}.
@ -1556,8 +1588,9 @@ types. In most cases, it is more convenient to use type predicates than
This function returns a symbol naming the primitive type of
@var{object}. The value is one of the symbols @code{symbol},
@code{integer}, @code{float}, @code{string}, @code{cons}, @code{vector},
@code{marker}, @code{overlay}, @code{window}, @code{buffer},
@code{subr}, @code{compiled-function}, @code{process}, or
@code{char-table}, @code{bool-vector}, @code{subr},
@code{compiled-function}, @code{marker}, @code{overlay}, @code{window},
@code{buffer}, @code{frame}, @code{process}, or
@code{window-configuration}.
@example
@ -1594,11 +1627,6 @@ arguments with the same contents or elements are not necessarily
@code{eq} to each other: they are @code{eq} only if they are the same
object.
(The @code{make-symbol} function returns an uninterned symbol that is
not interned in the standard @code{obarray}. When uninterned symbols
are in use, symbol names are no longer unique. Distinct symbols with
the same name are not @code{eq}. @xref{Creating Symbols}.)
@example
@group
(eq 'foo 'foo)
@ -1640,6 +1668,17 @@ the same name are not @code{eq}. @xref{Creating Symbols}.)
@end group
@end example
(The @code{make-symbol} function returns an uninterned symbol that is
not interned in the standard @code{obarray}. When uninterned symbols
are in use, symbol names are no longer unique. Distinct symbols with
the same name are not @code{eq}. @xref{Creating Symbols}.)
@example
@group
(eq (make-symbol "foo") 'foo)
@result{} nil
@end group
@end example
@end defun
@defun equal object1 object2

View file

@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
@setfilename ../info/os
@node System Interface, Display, Processes, Top
@node System Interface, Tips, Calendar, Top
@chapter Operating System Interface
This chapter is about starting and getting out of Emacs, access to
@ -64,7 +64,7 @@ It processes the initial options. (Some of them are handled
even earlier than this.)
@item
It initializes the X window frame and faces, if appropriate.
It initializes the window frame and faces, if appropriate.
@item
It runs the normal hook @code{before-init-hook}.
@ -76,13 +76,13 @@ It loads the library @file{site-start}, unless the option
@cindex @file{site-start.el}
@item
It loads the file @file{~/.emacs} unless @samp{-q} was specified on
the command line. (This is not done in @samp{-batch} mode.) The @samp{-u}
option can specify the user name whose home directory should be used
It loads the file @file{~/.emacs}, unless @samp{-q} was specified on the
command line. (This is not done in @samp{-batch} mode.) The @samp{-u}
option can specify another user name whose home directory should be used
instead of @file{~}.
@item
It loads the library @file{default} unless @code{inhibit-default-init}
It loads the library @file{default}, unless @code{inhibit-default-init}
is non-@code{nil}. (This is not done in @samp{-batch} mode or if
@samp{-q} was specified on the command line.) The library's file name
is usually @file{default.el}.
@ -461,11 +461,11 @@ likely @code{fg}.
systems, ``suspension'' actually creates a new shell temporarily as a
subprocess of Emacs. Then you would exit the shell to return to Emacs.
Suspension is not useful with window systems such as X, because the
Emacs job may not have a parent that can resume it again, and in any
case you can give input to some other job such as a shell merely by
moving to a different window. Therefore, suspending is not allowed
when Emacs is an X client.
Suspension is not useful with window systems, because the Emacs job
may not have a parent that can resume it again, and in any case you can
give input to some other job such as a shell merely by moving to a
different window. Therefore, suspending is not allowed when Emacs is using
a window system.
@defun suspend-emacs string
This function stops Emacs and returns control to the superior process.
@ -478,10 +478,7 @@ as terminal input by Emacs's superior shell. The characters in
appear.
Before suspending, @code{suspend-emacs} runs the normal hook
@code{suspend-hook}. In Emacs version 18, @code{suspend-hook} was not a
normal hook; its value was a single function, and if its value was
non-@code{nil}, then @code{suspend-emacs} returned immediately without
actually suspending anything.
@code{suspend-hook}.
After the user resumes Emacs, @code{suspend-emacs} runs the normal hook
@code{suspend-resume-hook}. @xref{Hooks}.
@ -553,6 +550,12 @@ This variable is a normal hook run after suspending.
through various functions. These variables include the name of the
system, the user's @sc{uid}, and so on.
@defvar system-configuration
This variable holds the GNU configuration name for the hardware/software
configuration of your system, as a string. The convenient way to test
parts of this string is with @code{string-match}.
@end defvar
@defvar system-type
The value of this variable is a symbol indicating the type of operating
system Emacs is operating on. Here is a table of the possible values:
@ -568,10 +571,12 @@ Berkeley BSD.
Data General DGUX operating system.
@item gnu
A GNU system (using the GNU kernel, which consists of the HURD and Mach).
the GNU system (using the GNU kernel, which consists of the HURD and Mach).
@item gnu/linux
A variant GNU system using the Linux kernel.
A GNU/Linux system---that is, a variant GNU system, using the Linux
kernel. (These systems are the ones people often call ``Linux,'' but
actually Linux is just the kernel, not the whole system.)
@item hpux
Hewlett-Packard HPUX operating system.
@ -611,12 +616,6 @@ alternatives in the future. We recommend using
systems.
@end defvar
@defvar system-configuration
This variable holds the GNU configuration name for the hardware/software
configuration of your system, as a string. The convenient way to test
parts of this string is with @code{string-match}.
@end defvar
@defun system-name
This function returns the name of the machine you are running on.
@example
@ -944,7 +943,7 @@ in the past or future.
Time conversion functions always use the Gregorian calendar, even for
dates before the Gregorian calendar was introduced. Year numbers count
the number of years since the year 1 B.C., and do not skip zero as
traditional Gregorian years do; for example, the year number -37
traditional Gregorian years do; for example, the year number @minus{}37
represents the Gregorian year 38 B.C@.
@defun format-time-string format-string time
@ -1012,11 +1011,11 @@ This stands for the numeric day of week (0-6). Sunday is day 0.
This stands for the week of the year (01-52), assuming that weeks
start on Monday.
@item %x
This has a locale-specific meaning. In the default locale (named C), it
is equivalent to @samp{%D}.
This has a locale-specific meaning. In the default locale (named
@samp{C}), it is equivalent to @samp{%D}.
@item %X
This has a locale-specific meaning. In the default locale (named C), it
is equivalent to @samp{%T}.
This has a locale-specific meaning. In the default locale (named
@samp{C}), it is equivalent to @samp{%T}.
@item %y
This stands for the year without century (00-99).
@item %Y
@ -1026,8 +1025,8 @@ This stands for the time zone abbreviation.
@end table
You can also specify the field width and type of padding for any of
these @samp{%}-constructs. This works as in @code{printf}: you write
the field width as digits in the middle of a @samp{%}-construct. If you
these @samp{%}-sequences. This works as in @code{printf}: you write
the field width as digits in the middle of a @samp{%}-sequences. If you
start the field width with 0, it means to pad with zeros.
For example, @samp{%S} specifies the number of seconds since the minute;
@ -1069,8 +1068,8 @@ An integer indicating the time zone, as the number of seconds east of
Greenwich.
@end table
Note that Common Lisp has different meanings for @var{dow} and
@var{zone}.
@strong{Common Lisp Note:} Common Lisp has different meanings for
@var{dow} and @var{zone}.
@end defun
@defun encode-time seconds minutes hour day month year &optional @dots{}zone
@ -1111,7 +1110,7 @@ arguments; for example, day 0 means the day preceding the given month.
You can set up a @dfn{timer} to call a function at a specified future time or
after a certain length of idleness.
Emacs cannot run a timer at any arbitrary point in a Lisp program; it
Emacs cannot run timers at any arbitrary point in a Lisp program; it
can run them only when Emacs could accept output from a subprocess:
namely, while waiting or inside certain primitive functions such as
@code{sit-for} or @code{read-char} which @emph{can} wait. Therefore, a
@ -1124,10 +1123,11 @@ at time @var{time}. The argument @var{function} is a function to call
later, and @var{args} are the arguments to give it when it is called.
The time @var{time} is specified as a string.
Absolute times may be specified in a variety of formats; The form
Absolute times may be specified in a wide variety of formats, and tries
to accept all common date formats. One valid format is
@samp{@var{hour}:@var{min}:@var{sec} @var{timezone}
@var{month}/@var{day}/@var{year}}, where all fields are numbers, works;
the format that @code{current-time-string} returns is also allowed.
@var{month}/@var{day}/@var{year}}, where all fields are numbers; the
format that @code{current-time-string} returns is also allowed.
To specify a relative time, use numbers followed by units.
For example:
@ -1208,12 +1208,12 @@ idleness will continue to increase and will not go down to five seconds
again.
Emacs can do various things while idle: garbage collect, autosave or
handle data from a subprocess. But these interludes during idleness
have little effect on idle timers. An idle timer set for 600 seconds
will run when ten minutes have elapsed since the last user command was
finished, even if subprocess output has been accepted thousands of times
within those ten minutes, even if there have been garbage collections
and autosaves.
handle data from a subprocess. But these interludes during idleness do
not interfere with idle timers, because they do not reset the clock of
idleness to zero. An idle timer set for 600 seconds will run when ten
minutes have elapsed since the last user command was finished, even if
subprocess output has been accepted thousands of times within those ten
minutes, even if there have been garbage collections and autosaves.
When the user supplies input, Emacs becomes non-idle while executing the
input. Then it becomes idle again, and all the idle timers that are
@ -1249,16 +1249,16 @@ functions.
@defun set-input-mode interrupt flow meta quit-char
This function sets the mode for reading keyboard input. If
@var{interrupt} is non-null, then Emacs uses input interrupts. If it is
@code{nil}, then it uses @sc{cbreak} mode. When Emacs communicates
directly with X, it ignores this argument and uses interrupts if that is
the way it knows how to communicate.
@code{nil}, then it uses @sc{cbreak} mode. The default setting is
system dependent. Some systems always use @sc{cbreak} mode regardless
of what is specified.
If @var{flow} is non-@code{nil}, then Emacs uses @sc{xon/xoff} (@kbd{C-q},
@kbd{C-s}) flow control for output to the terminal. This has no effect except
in @sc{cbreak} mode. @xref{Flow Control}.
When Emacs communicates directly with X, it ignores this argument and
uses interrupts if that is the way it knows how to communicate.
The default setting is system dependent. Some systems always use
@sc{cbreak} mode regardless of what is specified.
If @var{flow} is non-@code{nil}, then Emacs uses @sc{xon/xoff}
(@kbd{C-q}, @kbd{C-s}) flow control for output to the terminal. This
has no effect except in @sc{cbreak} mode. @xref{Flow Control}.
@c Emacs 19 feature
The argument @var{meta} controls support for input character codes
@ -1267,7 +1267,7 @@ the 8th bit set into Meta characters. If @var{meta} is @code{nil},
Emacs disregards the 8th bit; this is necessary when the terminal uses
it as a parity bit. If @var{meta} is neither @code{t} nor @code{nil},
Emacs uses all 8 bits of input unchanged. This is good for terminals
using European 8-bit character sets.
that use 8-bit character sets.
@c Emacs 19 feature
If @var{quit-char} is non-@code{nil}, it specifies the character to
@ -1290,8 +1290,8 @@ is non-@code{nil} when Emacs is using interrupt-driven input. If
@code{nil}, Emacs is using @sc{cbreak} mode.
@item flow
is non-@code{nil} if Emacs uses @sc{xon/xoff} (@kbd{C-q}, @kbd{C-s})
flow control for output to the terminal. This value has no effect
unless @var{interrupt} is non-@code{nil}.
flow control for output to the terminal. This value has effect when
unless @var{interrupt} is @code{nil}.
@item meta
is @code{t} if Emacs treats the eighth bit of input characters as
the meta bit; @code{nil} means Emacs clears the eighth bit of every
@ -1310,10 +1310,11 @@ is the character Emacs currently uses for quitting, usually @kbd{C-g}.
other input events before they become part of key sequences. These
features apply to each event in the order they are described here: each
event is first modified according to @code{extra-keyboard-modifiers},
then translated through @code{keyboard-translate-table} (if applicable).
If it is being read as part of a key sequence, it is then added to the
sequece being read; then subsequences containing it are checked first
with @code{function-key-map} and then with @code{key-translation-map}.
then translated through @code{keyboard-translate-table} (if applicable),
and finally decoded with the specified keyboard coding system. If it is
being read as part of a key sequence, it is then added to the sequence
being read; then subsequences containing it are checked first with
@code{function-key-map} and then with @code{key-translation-map}.
@c Emacs 19 feature
@defvar extra-keyboard-modifiers
@ -1334,9 +1335,9 @@ The @key{META} key.
Each time the user types a keyboard key, it is altered as if the
modifier keys specified in the bit mask were held down.
When using X windows, the program can ``press'' any of the modifier
keys in this way. Otherwise, only the @key{CTL} and @key{META} keys can
be virtually pressed.
When using a window system, the program can ``press'' any of the
modifier keys in this way. Otherwise, only the @key{CTL} and @key{META}
keys can be virtually pressed.
@end defvar
@defvar keyboard-translate-table
@ -1392,7 +1393,7 @@ the keyboard translate table if necessary.
The remaining translation features translate subsequences of key
sequences being read. They are implemented in @code{read-key-sequence}
and have no effect on @code{read-char}.
and have no effect on input read with @code{read-event}.
@defvar function-key-map
This variable holds a keymap that describes the character sequences sent
@ -1406,7 +1407,7 @@ If @code{function-key-map} ``binds'' a key sequence @var{k} to a vector
key sequence, it is replaced with the events in @var{v}.
For example, VT100 terminals send @kbd{@key{ESC} O P} when the
keypad PF1 key is pressed. Therefore, we want Emacs to translate
keypad @key{PF1} key is pressed. Therefore, we want Emacs to translate
that sequence of events into the single event @code{pf1}. We accomplish
this by ``binding'' @kbd{@key{ESC} O P} to @code{[pf1]} in
@code{function-key-map}, when using a VT100.
@ -1419,7 +1420,8 @@ this back into @kbd{C-c @key{PF1}}, which it returns as the vector
Entries in @code{function-key-map} are ignored if they conflict with
bindings made in the minor mode, local, or global keymaps. The intent
is that the character sequences that function keys send should not have
command bindings in their own right.
command bindings in their own right---but if they do, the ordinary
bindings take priority.
The value of @code{function-key-map} is usually set up automatically
according to the terminal's Terminfo or Termcap entry, but sometimes
@ -1427,9 +1429,6 @@ those need help from terminal-specific Lisp files. Emacs comes with
terminal-specific files for many common terminals; their main purpose is
to make entries in @code{function-key-map} beyond those that can be
deduced from Termcap and Terminfo. @xref{Terminal-Specific}.
Emacs versions 18 and earlier used totally different means of detecting
the character sequences that represent function keys.
@end defvar
@defvar key-translation-map
@ -1494,21 +1493,21 @@ to turn the character that follows into a Hyper character:
@end group
@end example
@pindex iso-transl
@cindex Latin-1 character set (input)
@cindex ISO Latin-1 characters (input)
The @file{iso-transl} library uses this feature to provide a way of
inputting non-ASCII Latin-1 characters.
Finally, if you have enabled keyboard character set decoding using
@code{set-keyboard-coding-system}, decoding is done after the
translations listed above. @xref{Specifying Coding Systems}. In future
Emacs versions, character set decoding may be done before the other
translations.
@node Recording Input
@subsection Recording Input
@defun recent-keys
This function returns a vector containing the last 100 input events
from the keyboard or mouse. All input events are included, whether or
not they were used as parts of key sequences. Thus, you always get the
last 100 inputs, not counting keyboard macros. (Events from keyboard
macros are excluded because they are less interesting for debugging; it
This function returns a vector containing the last 100 input events from
the keyboard or mouse. All input events are included, whether or not
they were used as parts of key sequences. Thus, you always get the last
100 input events, not counting events generated by keyboard macros.
(These are excluded because they are less interesting for debugging; it
should be enough to see the events that invoked the macros.)
@end defun
@ -1565,9 +1564,8 @@ not. If Emacs has the wrong value, it makes decisions that are less
than optimal. To fix the problem, set @code{baud-rate}.
@defun baud-rate
This function returns the value of the variable @code{baud-rate}. In
Emacs versions 18 and earlier, this was the only way to find out the
terminal speed.
This obsolete function returns the value of the variable
@code{baud-rate}.
@end defun
@defun send-string-to-terminal string
@ -1619,15 +1617,28 @@ To define system-specific X11 keysyms, set the variable
This variable's value should be an alist with one element for each
system-specific keysym. An element has this form: @code{(@var{code}
. @var{symbol})}, where @var{code} is the numeric keysym code (not
including the ``vendor specific'' bit, 1 << 28), and @var{symbol} is the
name for the function key.
including the ``vendor specific'' bit,
@ifinfo
-2**28,
@end ifinfo
@tex
$-2^{28}$,
@end tex
and @var{symbol} is the name for the function key.
For example @code{(168 . mute-acute)} defines a system-specific key used
by HP X servers whose numeric code is (1 << 28) + 168.
by HP X servers whose numeric code is
@ifinfo
-2**28
@end ifinfo
@tex
$-2^{28}$
@end tex
+ 168.
It is not a problem if the alist defines keysyms for other X servers, as
long as they don't conflict with the ones used by the X server actually
in use.
It is not crucial to exclude from the alist the keysyms of other X
servers; those do no harm, as long as they don't conflict with the ones
used by the X server actually in use.
The variable is always local to the current X terminal and cannot be
buffer-local. @xref{Multiple Displays}.
@ -1637,9 +1648,9 @@ buffer-local. @xref{Multiple Displays}.
@section Flow Control
@cindex flow control characters
This section attempts to answer the question ``Why does Emacs choose
to use flow-control characters in its command character set?'' For a
second view on this issue, read the comments on flow control in the
This section attempts to answer the question ``Why does Emacs use
flow-control characters in its command character set?'' For a second
view on this issue, read the comments on flow control in the
@file{emacs/INSTALL} file from the distribution; for help with Termcap
entries and DEC terminal concentrators, see @file{emacs/etc/TERMS}.
@ -1647,20 +1658,20 @@ entries and DEC terminal concentrators, see @file{emacs/etc/TERMS}.
@cindex @kbd{C-q}
At one time, most terminals did not need flow control, and none used
@code{C-s} and @kbd{C-q} for flow control. Therefore, the choice of
@kbd{C-s} and @kbd{C-q} as command characters was uncontroversial.
Emacs, for economy of keystrokes and portability, used nearly all the
@sc{ASCII} control characters, with mnemonic meanings when possible;
thus, @kbd{C-s} for search and @kbd{C-q} for quote.
@kbd{C-s} and @kbd{C-q} as command characters for searching and quoting
was natural and uncontroversial. With so many commands needing key
assignments. of course we assigned meanings to nearly all @sc{ASCII}
control characters.
Later, some terminals were introduced which required these characters
for flow control. They were not very good terminals for full-screen
editing, so Emacs maintainers did not pay attention. In later years,
flow control with @kbd{C-s} and @kbd{C-q} became widespread among
terminals, but by this time it was usually an option. And the majority
of users, who can turn flow control off, were unwilling to switch to
less mnemonic key bindings for the sake of flow control.
editing, so Emacs maintainers ignored them. In later years, flow
control with @kbd{C-s} and @kbd{C-q} became widespread among terminals,
but by this time it was usually an option. And the majority of Emacs
users, who can turn flow control off, did not want to switch to less
mnemonic key bindings for the sake of flow control.
So which usage is ``right'', Emacs's or that of some terminal and
So which usage is ``right''---Emacs's or that of some terminal and
concentrator manufacturers? This question has no simple answer.
One reason why we are reluctant to cater to the problems caused by
@ -1668,13 +1679,13 @@ concentrator manufacturers? This question has no simple answer.
techniques (albeit less common in practice) for flow control that
preserve transparency of the character stream. Note also that their use
for flow control is not an official standard. Interestingly, on the
model 33 teletype with a paper tape punch (which is very old), @kbd{C-s}
and @kbd{C-q} were sent by the computer to turn the punch on and off!
model 33 teletype with a paper tape punch (around 1970), @kbd{C-s} and
@kbd{C-q} were sent by the computer to turn the punch on and off!
As X servers and other window systems replace character-only
terminals, this problem is gradually being cured. For the mean time,
Emacs provides a convenient way of enabling flow control if you want it:
call the function @code{enable-flow-control}.
As window systems and PC terminal emulators replace character-only
terminals, the flow control problem is gradually disappearing. For the
mean time, Emacs provides a convenient way of enabling flow control if
you want it: call the function @code{enable-flow-control}.
@deffn Command enable-flow-control
This function enables use of @kbd{C-s} and @kbd{C-q} for output flow

View file

@ -241,7 +241,7 @@ puts point @var{n} tenths of the way from the beginning of the buffer.
In an interactive call, @var{n} is the numeric prefix argument,
if provided; otherwise @var{n} defaults to @code{nil}.
Don't use this function in Lisp programs!
@strong{Warning:} Don't use this function in Lisp programs!
@end deffn
@deffn Command end-of-buffer &optional n
@ -253,7 +253,7 @@ point @var{n} tenths of the way from the end of the buffer.
In an interactive call, @var{n} is the numeric prefix argument,
if provided; otherwise @var{n} defaults to @code{nil}.
Don't use this function in Lisp programs!
@strong{Warning:} Don't use this function in Lisp programs!
@end deffn
@node Text Lines
@ -759,6 +759,11 @@ The value returned by @code{save-excursion} is the result of the last of
@end example
@end defspec
Although @code{save-excursion} saves the location of the mark, it does
not prevent functions which modify the buffer from setting
@code{deactivate-mark}, and thus causing the deactivation of the mark
after the command finishes. @xref{The Mark}.
@node Narrowing
@section Narrowing
@cindex narrowing

View file

@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
@setfilename ../info/processes
@node Processes, System Interface, Abbrevs, Top
@node Processes, Display, Abbrevs, Top
@chapter Processes
@cindex child process
@cindex parent process
@ -35,8 +35,6 @@ This function returns @code{t} if @var{object} is a process,
@menu
* Subprocess Creation:: Functions that start subprocesses.
* Synchronous Processes:: Details of using synchronous subprocesses.
* MS-DOS Subprocesses:: On MS-DOS, you must indicate text vs binary
for data sent to and from a subprocess.
* Asynchronous Processes:: Starting up an asynchronous subprocess.
* Deleting Processes:: Eliminating an asynchronous subprocess.
* Process Information:: Accessing run-status and other attributes.
@ -127,6 +125,46 @@ The value of @code{exec-path} is used by @code{call-process} and
file name.
@end defopt
@node Shell Arguments
@section Shell Arguments
Lisp programs sometimes need to run a shell and give it a command
which contains file names that were specified by the user. These
programs ought to be able to support any valid file name. But the shell
gives special treatment to certain characters, and if these characters
occur in the file name, they will confuse the shell. To handle these
characters, use the function @code{shell-quote-argument}:
@defun shell-quote-argument argument
This function returns a string which represents, in shell syntax,
an argument whose actual contents are @var{argument}. It should
work reliably to concatenate the return value into a shell command
and then pass it to a shell for execution.
Precisely what this function does depends on your operating system. The
function is designed to work with the usual shell syntax; if you use an
unusual shell, you will need to redefine this function. On MS-DOS, the
function returns @var{argument} unchanged; while this is not really
correct, it is the best one can do, since the MS-DOS shell has no
quoting features.
@example
;; @r{This example shows the behavior on GNU and Unix systems.}
(shell-quote-argument "foo > bar")
@result{} "foo\\ \\>\\ bar"
@end example
Here's an example of using @code{shell-quote-argument} to construct
a shell command:
@example
(concat "diff -c "
(shell-quote-argument oldfile)
" "
(shell-quote-argument newfile))
@end example
@end defun
@node Synchronous Processes
@section Creating a Synchronous Process
@cindex synchronous subprocess
@ -145,13 +183,15 @@ subprocess actually terminates before quitting. If during that time the
user types another @kbd{C-g}, that kills the subprocess instantly with
@code{SIGKILL} and quits immediately. @xref{Quitting}.
The synchronous subprocess functions returned @code{nil} in version
18. Now they return an indication of how the process terminated.
The synchronous subprocess functions return an indication of how the
process terminated.
The output from a synchronous subprocess is generally decoded using a
coding system, much like text read from a file. The input sent to a
subprocess by @code{call-process-region} is encoded using a coding
system, much like text written into a file. @xref{Coding Systems}.
On Microsoft operating systems, additional variables control
the conversion for end-of-line (@pxref{MS-DOS Subprocesses}).
@defun call-process program &optional infile destination display &rest args
This function calls @var{program} in a separate process and waits for
@ -168,8 +208,7 @@ Insert the output in that buffer, before point. This includes both the
standard output stream and the standard error stream of the process.
@item a string
Find the buffer with that name, then insert the output in that buffer,
before point.
Insert the output in a buffer with that name, before point.
@item @code{t}
Insert the output in the current buffer, before point.
@ -190,9 +229,9 @@ function returns.
Keep the standard output stream separate from the standard error stream;
deal with the ordinary output as specified by @var{real-destination},
and dispose of the error output according to @var{error-destination}.
The value @code{nil} means discard it, @code{t} means mix it with the
ordinary output, and a string specifies a file name to redirect error
output into.
If @var{error-destination} is @code{nil}, that means to discard the
error output, @code{t} means mix it with the ordinary output, and a
string specifies a file name to redirect error output into.
You can't directly specify a buffer to put the error output in; that is
too difficult to implement. But you can achieve this result by sending
@ -237,12 +276,12 @@ lewis:5LTsHm66CSWKg:398:21:Bil Lewis:/user/lewis:/bin/csh
@end group
@end smallexample
The @code{insert-directory} function contains a good example of the use
of @code{call-process}:
Here is a good example of the use of @code{call-process}, which used to
be found in the definition of @code{insert-directory}:
@smallexample
@group
(call-process insert-directory-program nil t nil switches
(call-process insert-directory-program nil t nil @var{switches}
(if full-directory-p
(concat (file-name-as-directory file) ".")
file))
@ -318,32 +357,6 @@ This function executes @var{command} (a string) as a shell command,
then returns the command's output as a string.
@end defun
@node MS-DOS Subprocesses
@section MS-DOS Subprocesses
On MS-DOS, you must indicate whether the data going to and from
a synchronous subprocess are text or binary. Text data requires
translation between the end-of-line convention used within Emacs
(a single newline character) and the convention used outside Emacs
(the two-character sequence, @sc{crlf}).
The variable @code{binary-process-input} applies to input sent to the
subprocess, and @code{binary-process-output} applies to output received
from it. A non-@code{nil} value means the data is non-text; @code{nil}
means the data is text, and calls for conversion.
@defvar binary-process-input
If this variable is @code{nil}, convert newlines to @sc{crlf} sequences in
the input to a synchronous subprocess.
@end defvar
@defvar binary-process-output
If this variable is @code{nil}, convert @sc{crlf} sequences to newlines in
the output from a synchronous subprocess.
@end defvar
@xref{Files and MS-DOS}, for related information.
@node Asynchronous Processes
@section Creating an Asynchronous Process
@cindex asynchronous subprocess
@ -403,6 +416,14 @@ to execute the specified command. The argument @var{command} is a shell
command name, and @var{command-args} are the arguments for the shell
command. The variable @code{shell-file-name} specifies which shell to
use.
The point of running a program through the shell, rather than directly
with @code{start-process}, is so that you can employ shell features such
as wildcards in the arguments. It follows that if you include an
arbitrary user-specified filename in the command, you should quote it
with @code{shell-quote-argument} first, so that any special shell
characters in the file name do @emph{not} have their special shell
meanings. @xref{Shell Arguments}.
@end defun
@defvar process-connection-type
@ -602,9 +623,6 @@ x
For a network connection, @code{process-status} returns one of the symbols
@code{open} or @code{closed}. The latter means that the other side
closed the connection, or Emacs did @code{delete-process}.
In Emacs version 18, the status of a network connection was @code{run}
if open, and @code{exit} if closed.
@end defun
@defun process-exit-status process
@ -628,8 +646,7 @@ for decoding output from @var{process} and for encoding input to
@var{process} (@pxref{Coding Systems}). The value has this form:
@example
(@var{coding-system-for-decoding}
. @var{coding-system-for-encoding})
(@var{coding-system-for-decoding} . @var{coding-system-for-encoding})
@end example
@end defun
@ -789,7 +806,7 @@ This function stops the process @var{process-name} by sending the
signal @code{SIGTSTP}. Use @code{continue-process} to resume its
execution.
On systems with job control, outside of Emacs)\, the ``stop character''
Outside of Emacs, on systems with job control, the ``stop character''
(usually @kbd{C-z}) normally sends this signal. When
@var{current-group} is non-@code{nil}, you can think of this function as
``typing @kbd{C-z}'' on the terminal Emacs uses to communicate with the

View file

@ -199,15 +199,15 @@ the string @samp{fo}. Still trivial. To do something more powerful, you
need to use one of the special characters. Here is a list of them:
@need 1200
@table @kbd
@item .@: @r{(Period)}
@table @asis
@item @samp{.}@: @r{(Period)}
@cindex @samp{.} in regexp
is a special character that matches any single character except a newline.
Using concatenation, we can make regular expressions like @samp{a.b}, which
matches any three-character string that begins with @samp{a} and ends with
@samp{b}.@refill
@item *
@item @samp{*}
@cindex @samp{*} in regexp
is not a construct by itself; it is a postfix operator that means to
match the preceding regular expression repetitively as many times as
@ -237,35 +237,35 @@ Emacs must try each imaginable way of grouping the 35 @samp{x}'s before
concluding that none of them can work. To make sure your regular
expressions run fast, check nested repetitions carefully.
@item +
@item @samp{+}
@cindex @samp{+} in regexp
is a postfix operator, similar to @samp{*} except that it must match
the preceding expression at least once. So, for example, @samp{ca+r}
matches the strings @samp{car} and @samp{caaaar} but not the string
@samp{cr}, whereas @samp{ca*r} matches all three strings.
@item ?
@item @samp{?}
@cindex @samp{?} in regexp
is a postfix operator, similar to @samp{*} except that it must match the
preceding expression either once or not at all. For example,
@samp{ca?r} matches @samp{car} or @samp{cr}; nothing else.
@item [ @dots{} ]
@cindex character set (in regexp)
@item @samp{[ @dots{} ]}
@cindex character alternative (in regexp)
@cindex @samp{[} in regexp
@cindex @samp{]} in regexp
is a @dfn{character set}, which begins with @samp{[} and is terminated
by @samp{]}. In the simplest case, the characters between the two
brackets are what this set can match.
is a @dfn{character alternative}, which begins with @samp{[} and is
terminated by @samp{]}. In the simplest case, the characters between
the two brackets are what this character alternative can match.
Thus, @samp{[ad]} matches either one @samp{a} or one @samp{d}, and
@samp{[ad]*} matches any string composed of just @samp{a}s and @samp{d}s
(including the empty string), from which it follows that @samp{c[ad]*r}
matches @samp{cr}, @samp{car}, @samp{cdr}, @samp{caddaar}, etc.
You can also include character ranges in a character set, by writing the
starting and ending characters with a @samp{-} between them. Thus,
@samp{[a-z]} matches any lower-case ASCII letter. Ranges may be
You can also include character ranges in a character alternative, by
writing the starting and ending characters with a @samp{-} between them.
Thus, @samp{[a-z]} matches any lower-case ASCII letter. Ranges may be
intermixed freely with individual characters, as in @samp{[a-z$%.]},
which matches any lower case ASCII letter or @samp{$}, @samp{%} or
period.
@ -284,33 +284,33 @@ The beginning and end of a range must be in the same character set
(@samp{a} with grave accent) is in the Latin-1 character set.
Note that the usual regexp special characters are not special inside a
character set. A completely different set of special characters exists
inside character sets: @samp{]}, @samp{-} and @samp{^}.
character alternative. A completely different set of characters are
special inside character alternatives: @samp{]}, @samp{-} and @samp{^}.
To include a @samp{]} in a character set, you must make it the first
character. For example, @samp{[]a]} matches @samp{]} or @samp{a}. To
include a @samp{-}, write @samp{-} as the first or last character of the
set, or put it after a range. Thus, @samp{[]-]} matches both @samp{]}
and @samp{-}.
To include a @samp{]} in a character alternative, you must make it the
first character. For example, @samp{[]a]} matches @samp{]} or @samp{a}.
To include a @samp{-}, write @samp{-} as the first or last character of
the character alternative, or put it after a range. Thus, @samp{[]-]}
matches both @samp{]} and @samp{-}.
To include @samp{^} in a set, put it anywhere but at the beginning of
the set.
To include @samp{^} in a character alternative, put it anywhere but at
the beginning.
@item [^ @dots{} ]
@item @samp{[^ @dots{} ]}
@cindex @samp{^} in regexp
@samp{[^} begins a @dfn{complemented character set}, which matches any
@samp{[^} begins a @dfn{complemented character alternative}, which matches any
character except the ones specified. Thus, @samp{[^a-z0-9A-Z]} matches
all characters @emph{except} letters and digits.
@samp{^} is not special in a character set unless it is the first
@samp{^} is not special in a character alternative unless it is the first
character. The character following the @samp{^} is treated as if it
were first (in other words, @samp{-} and @samp{]} are not special there).
A complemented character set can match a newline, unless newline is
A complemented character alternative can match a newline, unless newline is
mentioned as one of the characters not to match. This is in contrast to
the handling of regexps in programs such as @code{grep}.
@item ^
@item @samp{^}
@cindex @samp{^} in regexp
@cindex beginning of line in regexp
is a special character that matches the empty string, but only at the
@ -321,7 +321,7 @@ the beginning of a line.
When matching a string instead of a buffer, @samp{^} matches at the
beginning of the string or after a newline character @samp{\n}.
@item $
@item @samp{$}
@cindex @samp{$} in regexp
is similar to @samp{^} but matches only at the end of a line. Thus,
@samp{x+$} matches a string of one @samp{x} or more at the end of a line.
@ -329,7 +329,7 @@ is similar to @samp{^} but matches only at the end of a line. Thus,
When matching a string instead of a buffer, @samp{$} matches at the end
of the string or before a newline character @samp{\n}.
@item \
@item @samp{\}
@cindex @samp{\} in regexp
has two functions: it quotes the special characters (including
@samp{\}), and it introduces additional special constructs.
@ -360,7 +360,7 @@ sequences starting with @samp{\} which have special meanings. The
second character in the sequence is always an ordinary character on
their own. Here is a table of @samp{\} constructs.
@table @kbd
@table @samp
@item \|
@cindex @samp{|} in regexp
@cindex regexp alternative
@ -454,7 +454,7 @@ matches any character whose syntax is not @var{code}.
they don't use up any characters---but whether they match depends on the
context.
@table @kbd
@table @samp
@item \`
@cindex @samp{\`} in regexp
matches the empty string, but only at the beginning
@ -519,7 +519,7 @@ string match when calling a function that wants a regular expression.
One use of @code{regexp-quote} is to combine an exact string match with
context described as a regular expression. For example, this searches
for the string that is the value of @code{string}, surrounded by
for the string that is the value of @var{string}, surrounded by
whitespace:
@example
@ -558,7 +558,7 @@ regular expression which is equivalent to the actual value
@tindex regexp-opt-depth
@defun regexp-opt-depth regexp
This function returns the total number of grouping constructs
(parenthesised expressions) in @var{regexp}.
(parenthesized expressions) in @var{regexp}.
@end defun
@node Regexp Example
@ -579,14 +579,14 @@ tab and @samp{\n} for a newline.
"[.?!][]\"')@}]*\\($\\| $\\|\t\\| \\)[ \t\n]*"
@end example
In contrast, if you evaluate the variable @code{sentence-end}, you
@noindent
In contrast, if you evaluate the variable @code{sentence-end}, you
will see the following:
@example
@group
sentence-end
@result{}
"[.?!][]\"')@}]*\\($\\| $\\| \\| \\)[
@result{} "[.?!][]\"')@}]*\\($\\| $\\| \\| \\)[
]*"
@end group
@end example
@ -599,16 +599,16 @@ deciphered as follows:
@table @code
@item [.?!]
The first part of the pattern is a character set that matches any one of
three characters: period, question mark, and exclamation mark. The
match must begin with one of these three characters.
The first part of the pattern is a character alternative that matches
any one of three characters: period, question mark, and exclamation
mark. The match must begin with one of these three characters.
@item []\"')@}]*
The second part of the pattern matches any closing braces and quotation
marks, zero or more of them, that may follow the period, question mark
or exclamation mark. The @code{\"} is Lisp syntax for a double-quote in
a string. The @samp{*} at the end indicates that the immediately
preceding regular expression (a character set, in this case) may be
preceding regular expression (a character alternative, in this case) may be
repeated zero or more times.
@item \\($\\|@ $\\|\t\\|@ @ \\)
@ -630,11 +630,11 @@ beyond the minimum needed to end a sentence.
@cindex regexp searching
@cindex searching for regexp
In GNU Emacs, you can search for the next match for a regexp either
incrementally or not. For incremental search commands, see @ref{Regexp
Search, , Regular Expression Search, emacs, The GNU Emacs Manual}. Here
we describe only the search functions useful in programs. The principal
one is @code{re-search-forward}.
In GNU Emacs, you can search for the next match for a regular
expression either incrementally or not. For incremental search
commands, see @ref{Regexp Search, , Regular Expression Search, emacs,
The GNU Emacs Manual}. Here we describe only the search functions
useful in programs. The principal one is @code{re-search-forward}.
These search functions convert the regular expression to multibyte if
the buffer is multibyte; they convert the regular expression to unibyte
@ -704,8 +704,8 @@ matching a regular expression at a given spot always works from
beginning to end, and starts at a specified beginning position.
A true mirror-image of @code{re-search-forward} would require a special
feature for matching regexps from end to beginning. It's not worth the
trouble of implementing that.
feature for matching regular expressions from end to beginning. It's
not worth the trouble of implementing that.
@end deffn
@defun string-match regexp string &optional start
@ -1001,13 +1001,76 @@ can't avoid another intervening search, you must save and restore the
match data around it, to prevent it from being overwritten.
@menu
* Replacing Match:: Replacing a substring that was matched.
* Simple Match Data:: Accessing single items of match data,
such as where a particular subexpression started.
* Replacing Match:: Replacing a substring that was matched.
* Entire Match Data:: Accessing the entire match data at once, as a list.
* Saving Match Data:: Saving and restoring the match data.
@end menu
@node Replacing Match
@subsection Replacing the Text That Matched
This function replaces the text matched by the last search with
@var{replacement}.
@cindex case in replacements
@defun replace-match replacement &optional fixedcase literal string subexp
This function replaces the text in the buffer (or in @var{string}) that
was matched by the last search. It replaces that text with
@var{replacement}.
If you did the last search in a buffer, you should specify @code{nil}
for @var{string}. Then @code{replace-match} does the replacement by
editing the buffer; it leaves point at the end of the replacement text,
and returns @code{t}.
If you did the search in a string, pass the same string as @var{string}.
Then @code{replace-match} does the replacement by constructing and
returning a new string.
If @var{fixedcase} is non-@code{nil}, then the case of the replacement
text is not changed; otherwise, the replacement text is converted to a
different case depending upon the capitalization of the text to be
replaced. If the original text is all upper case, the replacement text
is converted to upper case. If the first word of the original text is
capitalized, then the first word of the replacement text is capitalized.
If the original text contains just one word, and that word is a capital
letter, @code{replace-match} considers this a capitalized first word
rather than all upper case.
If @code{case-replace} is @code{nil}, then case conversion is not done,
regardless of the value of @var{fixed-case}. @xref{Searching and Case}.
If @var{literal} is non-@code{nil}, then @var{replacement} is inserted
exactly as it is, the only alterations being case changes as needed.
If it is @code{nil} (the default), then the character @samp{\} is treated
specially. If a @samp{\} appears in @var{replacement}, then it must be
part of one of the following sequences:
@table @asis
@item @samp{\&}
@cindex @samp{&} in replacement
@samp{\&} stands for the entire text being replaced.
@item @samp{\@var{n}}
@cindex @samp{\@var{n}} in replacement
@samp{\@var{n}}, where @var{n} is a digit, stands for the text that
matched the @var{n}th subexpression in the original regexp.
Subexpressions are those expressions grouped inside @samp{\(@dots{}\)}.
@item @samp{\\}
@cindex @samp{\} in replacement
@samp{\\} stands for a single @samp{\} in the replacement text.
@end table
If @var{subexp} is non-@code{nil}, that says to replace just
subexpression number @var{subexp} of the regexp that was matched, not
the entire match. For example, after matching @samp{foo \(ba*r\)},
calling @code{replace-match} with 1 as @var{subexp} means to replace
just the text that matched @samp{\(ba*r\)}.
@end defun
@node Simple Match Data
@subsection Simple Match Data Access
@ -1038,7 +1101,7 @@ range, or if that subexpression didn't match anything, the value is
If the last such operation was done against a string with
@code{string-match}, then you should pass the same string as the
argument @var{in-string}. Otherwise, after a buffer search or match,
argument @var{in-string}. After a buffer search or match,
you should omit @var{in-string} or pass @code{nil} for it; but you
should make sure that the current buffer when you call
@code{match-string} is the one in which you did the searching or
@ -1056,7 +1119,7 @@ last regular expression searched for, or a subexpression of it.
If @var{count} is zero, then the value is the position of the start of
the entire match. Otherwise, @var{count} specifies a subexpression in
the regular expresion, and the value of the function is the starting
the regular expression, and the value of the function is the starting
position of the match for that subexpression.
The value is @code{nil} for a subexpression inside a @samp{\|}
@ -1136,69 +1199,6 @@ I read "The cat @point{}in the hat comes back" twice.
(In this case, the index returned is a buffer position; the first
character of the buffer counts as 1.)
@node Replacing Match
@subsection Replacing the Text That Matched
This function replaces the text matched by the last search with
@var{replacement}.
@cindex case in replacements
@defun replace-match replacement &optional fixedcase literal string subexp
This function replaces the text in the buffer (or in @var{string}) that
was matched by the last search. It replaces that text with
@var{replacement}.
If you did the last search in a buffer, you should specify @code{nil}
for @var{string}. Then @code{replace-match} does the replacement by
editing the buffer; it leaves point at the end of the replacement text,
and returns @code{t}.
If you did the search in a string, pass the same string as @var{string}.
Then @code{replace-match} does the replacement by constructing and
returning a new string.
If @var{fixedcase} is non-@code{nil}, then the case of the replacement
text is not changed; otherwise, the replacement text is converted to a
different case depending upon the capitalization of the text to be
replaced. If the original text is all upper case, the replacement text
is converted to upper case. If the first word of the original text is
capitalized, then the first word of the replacement text is capitalized.
If the original text contains just one word, and that word is a capital
letter, @code{replace-match} considers this a capitalized first word
rather than all upper case.
If @code{case-replace} is @code{nil}, then case conversion is not done,
regardless of the value of @var{fixed-case}. @xref{Searching and Case}.
If @var{literal} is non-@code{nil}, then @var{replacement} is inserted
exactly as it is, the only alterations being case changes as needed.
If it is @code{nil} (the default), then the character @samp{\} is treated
specially. If a @samp{\} appears in @var{replacement}, then it must be
part of one of the following sequences:
@table @asis
@item @samp{\&}
@cindex @samp{&} in replacement
@samp{\&} stands for the entire text being replaced.
@item @samp{\@var{n}}
@cindex @samp{\@var{n}} in replacement
@samp{\@var{n}}, where @var{n} is a digit, stands for the text that
matched the @var{n}th subexpression in the original regexp.
Subexpressions are those expressions grouped inside @samp{\(@dots{}\)}.
@item @samp{\\}
@cindex @samp{\} in replacement
@samp{\\} stands for a single @samp{\} in the replacement text.
@end table
If @var{subexp} is non-@code{nil}, that says to replace just
subexpression number @var{subexp} of the regexp that was matched, not
the entire match. For example, after matching @samp{foo \(ba*r\)},
calling @code{replace-match} with 1 as @var{subexp} means to replace
just the text that matched @samp{\(ba*r\)}.
@end defun
@node Entire Match Data
@subsection Accessing the Entire Match Data
@ -1230,9 +1230,7 @@ corresponds to @code{(match-end @var{n})}.
All the elements are markers or @code{nil} if matching was done on a
buffer, and all are integers or @code{nil} if matching was done on a
string with @code{string-match}. (In Emacs 18 and earlier versions,
markers were used even for matching on a string, except in the case
of the integer 0.)
string with @code{string-match}.
As always, there must be no possibility of intervening searches between
the call to a search function and the call to @code{match-data} that is
@ -1258,7 +1256,7 @@ If @var{match-list} refers to a buffer that doesn't exist, you don't get
an error; that sets the match data in a meaningless but harmless way.
@findex store-match-data
@code{store-match-data} is an alias for @code{set-match-data}.
@code{store-match-data} is a semi-obsolete alias for @code{set-match-data}.
@end defun
@node Saving Match Data
@ -1287,9 +1285,9 @@ This special form executes @var{body}, saving and restoring the match
data around it.
@end defmac
You can use @code{set-match-data} together with @code{match-data} to
imitate the effect of the special form @code{save-match-data}. This is
useful for writing code that can run in Emacs 18. Here is how:
You could use @code{set-match-data} together with @code{match-data} to
imitate the effect of the special form @code{save-match-data}. Here is
how:
@example
@group
@ -1384,9 +1382,10 @@ same as @code{(default-value 'case-fold-search)}.
used for certain purposes in editing:
@defvar page-delimiter
This is the regexp describing line-beginnings that separate pages. The
default value is @code{"^\014"} (i.e., @code{"^^L"} or @code{"^\C-l"});
this matches a line that starts with a formfeed character.
This is the regular expression describing line-beginnings that separate
pages. The default value is @code{"^\014"} (i.e., @code{"^^L"} or
@code{"^\C-l"}); this matches a line that starts with a formfeed
character.
@end defvar
The following two regular expressions should @emph{not} assume the

View file

@ -7,16 +7,15 @@
@chapter Sequences, Arrays, and Vectors
@cindex sequence
Recall that the @dfn{sequence} type is the union of three other Lisp
types: lists, vectors, and strings. In other words, any list is a
sequence, any vector is a sequence, and any string is a sequence. The
common property that all sequences have is that each is an ordered
collection of elements.
Recall that the @dfn{sequence} type is the union of two other Lisp
types: lists and arrays. In other words, any list is a sequence, and
any array is a sequence. The common property that all sequences have is
that each is an ordered collection of elements.
An @dfn{array} is a single primitive object that has a slot for each
elements. All the elements are accessible in constant time, but the
length of an existing array cannot be changed. Strings and vectors are
the two types of arrays.
of its elements. All the elements are accessible in constant time, but
the length of an existing array cannot be changed. Strings, vectors,
char-tables and bool-vectors are the four types of arrays.
A list is a sequence of elements, but it is not a single primitive
object; it is made of cons cells, one cell per element. Finding the
@ -28,18 +27,22 @@ But it is possible to add elements to the list, or remove elements.
@example
@group
___________________________________
| |
| Sequence |
| ______ ______________________ |
| | | | | |
| | List | | Array | |
| | | | ________ _______ | |
| |______| | | | | | | |
| | | Vector | | String| | |
| | |________| |_______| | |
| |______________________| |
|___________________________________|
_____________________________________________
| |
| Sequence |
| ______ ________________________________ |
| | | | | |
| | List | | Array | |
| | | | ________ ________ | |
| |______| | | | | | | |
| | | Vector | | String | | |
| | |________| |________| | |
| | ____________ _____________ | |
| | | | | | | |
| | | Char-table | | Bool-vector | | |
| | |____________| |_____________| | |
| |________________________________| |
|_____________________________________________|
@end group
@end example
@ -59,16 +62,88 @@ elements of strings are all characters.
@node Sequence Functions
@section Sequences
In Emacs Lisp, a @dfn{sequence} is either a list, a vector or a
string. The common property that all sequences have is that each is an
ordered collection of elements. This section describes functions that
accept any kind of sequence.
In Emacs Lisp, a @dfn{sequence} is either a list or an array. The
common property of all sequences is that they are ordered collections of
elements. This section describes functions that accept any kind of
sequence.
@defun sequencep object
Returns @code{t} if @var{object} is a list, vector, or
string, @code{nil} otherwise.
@end defun
@defun length sequence
@cindex string length
@cindex list length
@cindex vector length
@cindex sequence length
This function returns the number of elements in @var{sequence}. If
@var{sequence} is a cons cell that is not a list (because the final
@sc{cdr} is not @code{nil}), a @code{wrong-type-argument} error is
signaled.
@xref{List Elements}, for the related function @code{safe-list}.
@example
@group
(length '(1 2 3))
@result{} 3
@end group
@group
(length ())
@result{} 0
@end group
@group
(length "foobar")
@result{} 6
@end group
@group
(length [1 2 3])
@result{} 3
@end group
@group
(length (make-bool-vector 5 nil))
@result{} 5
@end group
@end example
@end defun
@defun elt sequence index
@cindex elements of sequences
This function returns the element of @var{sequence} indexed by
@var{index}. Legitimate values of @var{index} are integers ranging from
0 up to one less than the length of @var{sequence}. If @var{sequence}
is a list, then out-of-range values of @var{index} return @code{nil};
otherwise, they trigger an @code{args-out-of-range} error.
@example
@group
(elt [1 2 3 4] 2)
@result{} 3
@end group
@group
(elt '(1 2 3 4) 2)
@result{} 3
@end group
@group
;; @r{We use @code{string} to show clearly which character @code{elt} returns.}
(string (elt "1234" 2))
@result{} "3"
@end group
@group
(elt [1 2 3 4] 4)
@error{}Args out of range: [1 2 3 4], 4
@end group
@group
(elt [1 2 3 4] -1)
@error{}Args out of range: [1 2 3 4], -1
@end group
@end example
This function generalizes @code{aref} (@pxref{Array Functions}) and
@code{nth} (@pxref{List Elements}).
@end defun
@defun copy-sequence sequence
@cindex copying sequences
Returns a copy of @var{sequence}. The copy is the same type of object
@ -133,72 +208,6 @@ y @result{} [foo (69 2)]
@end example
@end defun
@defun length sequence
@cindex string length
@cindex list length
@cindex vector length
@cindex sequence length
Returns the number of elements in @var{sequence}. If @var{sequence} is
a cons cell that is not a list (because the final @sc{cdr} is not
@code{nil}), a @code{wrong-type-argument} error is signaled.
@xref{List Elements}, for the related function @code{safe-list}.
@example
@group
(length '(1 2 3))
@result{} 3
@end group
@group
(length ())
@result{} 0
@end group
@group
(length "foobar")
@result{} 6
@end group
@group
(length [1 2 3])
@result{} 3
@end group
@end example
@end defun
@defun elt sequence index
@cindex elements of sequences
This function returns the element of @var{sequence} indexed by
@var{index}. Legitimate values of @var{index} are integers ranging from
0 up to one less than the length of @var{sequence}. If @var{sequence}
is a list, then out-of-range values of @var{index} return @code{nil};
otherwise, they trigger an @code{args-out-of-range} error.
@example
@group
(elt [1 2 3 4] 2)
@result{} 3
@end group
@group
(elt '(1 2 3 4) 2)
@result{} 3
@end group
@group
(char-to-string (elt "1234" 2))
@result{} "3"
@end group
@group
(elt [1 2 3 4] 4)
@error{}Args out of range: [1 2 3 4], 4
@end group
@group
(elt [1 2 3 4] -1)
@error{}Args out of range: [1 2 3 4], -1
@end group
@end example
This function generalizes @code{aref} (@pxref{Array Functions}) and
@code{nth} (@pxref{List Elements}).
@end defun
@node Arrays
@section Arrays
@cindex array
@ -209,20 +218,14 @@ be accessed in constant time. In contrast, an element of a list
requires access time that is proportional to the position of the element
in the list.
When you create an array, you must specify how many elements it has.
The amount of space allocated depends on the number of elements.
Therefore, it is impossible to change the size of an array once it is
created; you cannot add or remove elements. However, you can replace an
element with a different value.
Emacs defines four types of array, both of which are one-dimensional:
@dfn{strings}, @dfn{vectors}, @dfn{bool-vectors} and @dfn{char-tables}.
A vector is a general array; its elements can be any Lisp objects. A
string is a specialized array; its elements must be characters (i.e.,
integers between 0 and 255). Each type of array has its own read
syntax. @xref{String Type}, and @ref{Vector Type}.
Emacs defines two types of array, both of which are one-dimensional:
@dfn{strings} and @dfn{vectors}. A vector is a general array; its
elements can be any Lisp objects. A string is a specialized array; its
elements must be characters (i.e., integers between 0 and 255). Each
type of array has its own read syntax. @xref{String Type}, and
@ref{Vector Type}.
Both kinds of array share these characteristics:
All four kinds of array share these characteristics:
@itemize @bullet
@item
@ -230,14 +233,26 @@ The first element of an array has index zero, the second element has
index 1, and so on. This is called @dfn{zero-origin} indexing. For
example, an array of four elements has indices 0, 1, 2, @w{and 3}.
@item
The length of the array is fixed once you create it; you cannot
change the length of an existing array.
@item
The array is a constant, for evaluation---in other words, it evaluates
to itself.
@item
The elements of an array may be referenced or changed with the functions
@code{aref} and @code{aset}, respectively (@pxref{Array Functions}).
@end itemize
In principle, if you wish to have an array of text characters, you
could use either a string or a vector. In practice, we always choose
strings for such applications, for four reasons:
When you create an array, other than a char-table, you must specify
its length. You cannot specify the length of a char-table, because that
is determined by the range of character codes.
In principle, if you want an array of text characters, you could use
either a string or a vector. In practice, we always choose strings for
such applications, for four reasons:
@itemize @bullet
@item
@ -274,9 +289,11 @@ vector, a string, a bool-vector or a char-table).
@example
@group
(arrayp [a])
@result{} t
@result{} t
(arrayp "asdf")
@result{} t
@result{} t
(arrayp (syntax-table)) ;; @r{A char-table.}
@result{} t
@end group
@end example
@end defun
@ -292,10 +309,7 @@ first element is at index zero.
@result{} [2 3 5 7 11 13]
(aref primes 4)
@result{} 11
(elt primes 4)
@result{} 11
@end group
@group
(aref "abcdefg" 1)
@result{} 98 ; @r{@samp{b} is @sc{ASCII} code 98.}
@ -371,11 +385,11 @@ are often useful for objects known to be arrays. @xref{Sequence Functions}.
Arrays in Lisp, like arrays in most languages, are blocks of memory
whose elements can be accessed in constant time. A @dfn{vector} is a
general-purpose array; its elements can be any Lisp objects. (By
contrast, a string can hold only characters as elements.) Vectors in
Emacs are used for obarrays (vectors of symbols), and as part of keymaps
(vectors of commands). They are also used internally as part of the
representation of a byte-compiled function; if you print such a
general-purpose array of specified length; its elements can be any Lisp
objects. (By contrast, a string can hold only characters as elements.)
Vectors in Emacs are used for obarrays (vectors of symbols), and as part
of keymaps (vectors of commands). They are also used internally as part
of the representation of a byte-compiled function; if you print such a
function, you will see a vector in it.
In Emacs Lisp, the indices of the elements of a vector start from zero
@ -405,7 +419,7 @@ not evaluate or even examine the elements of the vector.
@end example
@node Vector Functions
@section Functions That Operate on Vectors
@section Functions for Vectors
Here are some functions that relate to vectors:
@ -473,6 +487,10 @@ existing vector.
@end group
@end example
The @code{vconcat} function also allows byte-code function objects as
arguments. This is a special feature to make it easy to access the entire
contents of a byte-code function object. @xref{Byte-Code Objects}.
The @code{vconcat} function also allows integers as arguments. It
converts them to strings of digits, making up the decimal print
representation of the integer, and then uses the strings instead of the
@ -505,8 +523,9 @@ list with the same elements (@pxref{Building Lists}):
A char-table is much like a vector, except that it is indexed by
character codes. Any valid character code, without modifiers, can be
used as an index in a char-table. You can access a char-table with
@code{aref} and @code{aset}, just like a vector.
used as an index in a char-table. You can access a char-table's
elements with @code{aref} and @code{aset}, as with any array.
Char-tables are constants when evaluated.
@cindex extra slots of char-table
@cindex subtype of char-table
@ -534,11 +553,14 @@ Return a newly created char-table, with subtype @var{subtype}. Each
element is initialized to @var{init}, which defaults to @code{nil}. You
cannot alter the subtype of a char-table after the char-table is
created.
There is no argument to specify the length of the char-table, because
all char-tables have room for any valid character code as an index.
@end defun
@tindex char-table-p
@defun char-table-p object
This function returns @code{t} if @code{object} is a char-table,
This function returns @code{t} if @var{object} is a char-table,
otherwise @code{nil}.
@end defun
@ -628,9 +650,9 @@ This function calls @var{function} for each element of @var{char-table}.
@var{function} is called with two arguments, a key and a value. The key
is a possible @var{range} argument for @code{char-table-range}, and the
value is @code{(char-table-range @var{char-table} @var{key})}. Invalid
character codes are never used as the key.
character codes are never used as @var{key}.
Overall, the keys-value pairs passed to @var{function} describe all the
Overall, the key-value pairs passed to @var{function} describe all the
values stored in @var{char-table}.
@end defun
@ -640,8 +662,10 @@ values stored in @var{char-table}.
A bool-vector is much like a vector, except that it stores only the
values @code{t} and @code{nil}. If you try to store any non-@code{nil}
value into an element of the bool-vector, that actually stores @code{t}
there.
value into an element of the bool-vector, the effect is to store
@code{t} there. As with all arrays, bool-vector indices start from 0,
and the length cannot be changed once the bool-vector is created.
Bool-vectors are constants when evaluated.
There are two special functions for working with bool-vectors; aside
from that, you manipulate them with same functions used for other kinds

View file

@ -103,17 +103,21 @@ character in the string and using as many characters as required.
@item @var{function}
@cindex function input stream
The input characters are generated by @var{function}, one character per
call. Normally @var{function} is called with no arguments, and should
return a character.
The input characters are generated by @var{function}, which must support
two kinds of calls:
@cindex unreading
Occasionally @var{function} is called with one argument (always a
character). When that happens, @var{function} should save the argument
and arrange to return it on the next call. This is called
@dfn{unreading} the character; it happens when the Lisp reader reads one
character too many and wants to ``put it back where it came from''.
In this case, it makes no difference what value @var{function} returns.
@itemize @bullet
@item
When it is called with no arguments, it should return the next character.
@item
When it is called with one argument (always a character), @var{function}
should save the argument and arrange to return it on the next call.
This is called @dfn{unreading} the character; it happens when the Lisp
reader reads one character too many and wants to ``put it back where it
came from''. In this case, it makes no difference what value
@var{function} returns.
@end itemize
@item @code{t}
@cindex @code{t} input stream
@ -163,13 +167,6 @@ This is the@point{} contents of foo.
Note that the first read skips a space. Reading skips any amount of
whitespace preceding the significant text.
In Emacs 18, reading a symbol discarded the delimiter terminating the
symbol. Thus, point would end up at the beginning of @samp{contents}
rather than after @samp{the}. The current behavior is superior because
it correctly handles input such as @samp{bar(foo)}, where the
open-parenthesis that ends one object is needed as the beginning of
another object.
Here is an example of reading from a stream that is a marker,
initially positioned at the beginning of the buffer shown. The value
read is the symbol @code{This}.
@ -296,9 +293,9 @@ and whose @sc{cdr} is an integer giving the position of the next
remaining character in the string (i.e., the first one not read).
If @var{start} is supplied, then reading begins at index @var{start} in
the string (where the first character is at index 0). If @var{end} is
also supplied, then reading stops just before that index, as if the rest
of the string were not there.
the string (where the first character is at index 0). If you specify
@var{end}, then reading is forced to stop just before that index, as if
the rest of the string were not there.
For example:
@ -381,8 +378,8 @@ definition (if any).
@end table
Many of the valid output streams are also valid as input streams. The
difference between input and output streams is therefore mostly one of
how you use a Lisp object, not a distinction of types of object.
difference between input and output streams is therefore more a matter
of how you use a Lisp object, than of different types of object.
Here is an example of a buffer used as an output stream. Point is
initially located as shown immediately before the @samp{h} in
@ -532,18 +529,18 @@ being taken as delimiters when reading. @xref{Printed Representation},
for full details. You specify quoting or no quoting by the choice of
printing function.
If the text is to be read back into Lisp, then it is best to print
with quoting characters to avoid ambiguity. Likewise, if the purpose is
to describe a Lisp object clearly for a Lisp programmer. However, if
the purpose of the output is to look nice for humans, then it is better
to print without quoting.
If the text is to be read back into Lisp, then you should print with
quoting characters to avoid ambiguity. Likewise, if the purpose is to
describe a Lisp object clearly for a Lisp programmer. However, if the
purpose of the output is to look nice for humans, then it is usually
better to print without quoting.
Printing a self-referent Lisp object requires an infinite amount of
text. In certain cases, trying to produce this text leads to a stack
overflow. Emacs detects such recursion and prints @samp{#@var{level}}
instead of recursively printing an object already being printed. For
example, here @samp{#0} indicates a recursive reference to the object at
level 0 of the current print operation:
Printing a self-referent Lisp object in the normal way would require
an infinite amount of text, and could even result in stack overflow.
Emacs detects such recursion and prints @samp{#@var{level}} instead of
recursively printing an object already being printed. For example, here
@samp{#0} indicates a recursive reference to the object at level 0 of
the current print operation:
@example
(setq foo (list nil))
@ -696,9 +693,9 @@ If this variable is non-@code{nil}, then newline characters in strings
are printed as @samp{\n} and formfeeds are printed as @samp{\f}.
Normally these characters are printed as actual newlines and formfeeds.
This variable affects the print functions @code{prin1} and @code{print},
as well as everything that uses them. It does not affect @code{princ}.
Here is an example using @code{prin1}:
This variable affects the print functions @code{prin1} and @code{print}
that print with quoting. It does not affect @code{princ}. Here is an
example using @code{prin1}:
@example
@group

View file

@ -29,8 +29,8 @@ keyboard character events.
* Text Comparison:: Comparing characters or strings.
* String Conversion:: Converting characters or strings and vice versa.
* Formatting Strings:: @code{format}: Emacs's analog of @code{printf}.
* Character Case:: Case conversion functions.
* Case Table:: Customizing case conversion.
* Case Conversion:: Case conversion functions.
* Case Tables:: Customizing case conversion.
@end menu
@node String Basics
@ -38,19 +38,19 @@ keyboard character events.
Strings in Emacs Lisp are arrays that contain an ordered sequence of
characters. Characters are represented in Emacs Lisp as integers;
whether an integer was intended as a character or not is determined only
by how it is used. Thus, strings really contain integers.
whether an integer is a character or not is determined only by how it is
used. Thus, strings really contain integers.
The length of a string (like any array) is fixed, and cannot be
altered once the string exists. Strings in Lisp are @emph{not}
terminated by a distinguished character code. (By contrast, strings in
C are terminated by a character with @sc{ASCII} code 0.)
Since strings are considered arrays, you can operate on them with the
general array functions. (@xref{Sequences Arrays Vectors}.) For
example, you can access or change individual characters in a string
using the functions @code{aref} and @code{aset} (@pxref{Array
Functions}).
Since strings are arrays, and therefore sequences as well, you can
operate on them with the general array and sequence functions.
(@xref{Sequences Arrays Vectors}.) For example, you can access or
change individual characters in a string using the functions @code{aref}
and @code{aset} (@pxref{Array Functions}).
There are two text representations for non-@sc{ASCII} characters in
Emacs strings (and in buffers): unibyte and multibyte (@pxref{Text
@ -62,8 +62,8 @@ representations.
Sometimes key sequences are represented as strings. When a string is
a key sequence, string elements in the range 128 to 255 represent meta
characters (which are extremely large integers) rather than keyboard
events in the range 128 to 255.
characters (which are extremely large integers) rather than character
codes in the range 128 to 255.
Strings cannot hold characters that have the hyper, super or alt
modifiers; they can hold @sc{ASCII} control characters, but no other
@ -201,14 +201,19 @@ Functions}).
If the characters copied from @var{string} have text properties, the
properties are copied into the new string also. @xref{Text Properties}.
@code{substring} also allows vectors for the first argument.
For example:
@example
(substring [a b (c) "d"] 1 3)
@result{} [b (c)]
@end example
A @code{wrong-type-argument} error is signaled if either @var{start} or
@var{end} is not an integer or @code{nil}. An @code{args-out-of-range}
error is signaled if @var{start} indicates a character following
@var{end}, or if either integer is out of range for @var{string}.
@code{substring} actually allows vectors as well as strings for
the first argument.
Contrast this function with @code{buffer-substring} (@pxref{Buffer
Contents}), which returns a string containing a portion of the text in
the current buffer. The beginning of a string is at index 0, but the
@ -313,7 +318,7 @@ Empty matches do count, when not adjacent to another match:
@var{idx} @var{char})} stores @var{char} into @var{string} at index
@var{idx}. Each character occupies one or more bytes, and if @var{char}
needs a different number of bytes from the character already present at
that index, @code{aset} gets an error.
that index, @code{aset} signals an error.
A more powerful function is @code{store-substring}:
@ -325,8 +330,8 @@ may be either a character or a (smaller) string.
Since it is impossible to change the length of an existing string, it is
an error if @var{obj} doesn't fit within @var{string}'s actual length,
or if it requires a different number of bytes from the characters
currently present at that point in @var{string}.
of if any new character requires a different number of bytes from the
character currently present at that point in @var{string}.
@end defun
@need 2000
@ -365,7 +370,7 @@ The function @code{string=} ignores the text properties of the two
strings. When @code{equal} (@pxref{Equality Predicates}) compares two
strings, it uses @code{string=}.
If the arguments contain non-@sc{ASCII} characters, and one is unibyte
If the strings contain non-@sc{ASCII} characters, and one is unibyte
while the other is multibyte, then they cannot be equal. @xref{Text
Representations}.
@end defun
@ -385,11 +390,12 @@ function returns @code{t}. If the lesser character is the one from
@var{string2}, then @var{string1} is greater, and this function returns
@code{nil}. If the two strings match entirely, the value is @code{nil}.
Pairs of characters are compared by their @sc{ASCII} codes. Keep in
mind that lower case letters have higher numeric values in the
@sc{ASCII} character set than their upper case counterparts; numbers and
Pairs of characters are compared according to their character codes.
Keep in mind that lower case letters have higher numeric values in the
@sc{ASCII} character set than their upper case counterparts; digits and
many punctuation characters have a lower numeric value than upper case
letters. A unibyte non-@sc{ASCII} character is always less than any
letters. An @sc{ASCII} character is less than any non-@sc{ASCII}
character; a unibyte non-@sc{ASCII} character is always less than any
multibyte non-@sc{ASCII} character (@pxref{Text Representations}).
@example
@ -453,23 +459,9 @@ functions are used primarily for making help messages.
@defun char-to-string character
@cindex character to string
This function returns a new string with a length of one character.
The value of @var{character}, modulo 256, is used to initialize the
element of the string.
This function is similar to @code{make-string} with an integer argument
of 1. (@xref{Creating Strings}.) This conversion can also be done with
@code{format} using the @samp{%c} format specification.
(@xref{Formatting Strings}.)
@example
(char-to-string ?x)
@result{} "x"
(char-to-string (+ 256 ?x))
@result{} "x"
(make-string 1 ?x)
@result{} "x"
@end example
This function returns a new string containing one character,
@var{character}. This function is semi-obsolete because the function
@code{string} is more general. @xref{Creating Strings}.
@end defun
@defun string-to-char string
@ -579,7 +571,7 @@ formatting feature described here; they differ from @code{format} only
in how they use the result of formatting.
@defun format string &rest objects
This function returns a new string that is made by copying
This function returns a new string that is made by copying
@var{string} and then replacing any format specification
in the copy with encodings of the corresponding @var{objects}. The
arguments @var{objects} are the computed values to be formatted.
@ -619,7 +611,7 @@ meaningless.
@item %s
Replace the specification with the printed representation of the object,
made without quoting (that is, using @code{princ}, not
@code{print}---@pxref{Output Functions}). Thus, strings are represented
@code{prin1}---@pxref{Output Functions}). Thus, strings are represented
by their contents alone, with no @samp{"} characters, and symbols appear
without @samp{\} characters.
@ -740,12 +732,13 @@ not truncated. In the third case, the padding is on the right.
@end group
@end smallexample
@node Character Case
@node Case Conversion
@comment node-name, next, previous, up
@section Character Case
@section Case Conversion in Lisp
@cindex upper case
@cindex lower case
@cindex character case
@cindex case conversion in Lisp
The character case functions change the case of single characters or
of the contents of strings. The functions convert only alphabetic
@ -827,18 +820,39 @@ has the same result as @code{upcase}.
@end example
@end defun
@node Case Table
@defun upcase-initials string
This function capitalizes the initials of the words in @var{string}.
without altering any letters other than the initials. It returns a new
string whose contents are a copy of @var{string-or-char}, in which each
word has been converted to upper case.
The definition of a word is any sequence of consecutive characters that
are assigned to the word constituent syntax class in the current syntax
table (@xref{Syntax Class Table}).
@example
@group
(upcase-initials "The CAT in the hAt")
@result{} "The CAT In The HAt"
@end group
@end example
@end defun
@node Case Tables
@section The Case Table
You can customize case conversion by installing a special @dfn{case
table}. A case table specifies the mapping between upper case and lower
case letters. It affects both the string and character case conversion
functions (see the previous section) and those that apply to text in the
buffer (@pxref{Case Changes}).
case letters. It affects both the case conversion functions for Lisp
objects (see the previous section) and those that apply to text in the
buffer (@pxref{Case Changes}). Each buffer has a case table; there is
also a standard case table which is used to initialize the case table
of new buffers.
A case table is a char-table whose subtype is @code{case-table}. This
char-table maps each character into the corresponding lower case
character It has three extra slots, which are related tables:
A case table is a char-table (@pxref{Char-Tables}) whose subtype is
@code{case-table}. This char-table maps each character into the
corresponding lower case character. It has three extra slots, which
hold related tables:
@table @var
@item upcase
@ -874,17 +888,13 @@ equivalent). (For ordinary @sc{ASCII}, this would map @samp{a} into
equivalent characters.)
When you construct a case table, you can provide @code{nil} for
@var{canonicalize}; then Emacs fills in this string from the lower case
@var{canonicalize}; then Emacs fills in this slot from the lower case
and upper case mappings. You can also provide @code{nil} for
@var{equivalences}; then Emacs fills in this string from
@var{equivalences}; then Emacs fills in this slot from
@var{canonicalize}. In a case table that is actually in use, those
components are non-@code{nil}. Do not try to specify @var{equivalences}
without also specifying @var{canonicalize}.
Each buffer has a case table. Emacs also has a @dfn{standard case
table} which is copied into each buffer when you create the buffer.
Changing the standard case table doesn't affect any existing buffers.
Here are the functions for working with case tables:
@defun case-table-p object
@ -894,7 +904,7 @@ table.
@defun set-standard-case-table table
This function makes @var{table} the standard case table, so that it will
apply to any buffers created subsequently.
be used in any buffers created subsequently.
@end defun
@defun standard-case-table
@ -912,7 +922,8 @@ This sets the current buffer's case table to @var{table}.
The following three functions are convenient subroutines for packages
that define non-@sc{ASCII} character sets. They modify the specified
case table @var{case-table}; they also modify the standard syntax table.
@xref{Syntax Tables}.
@xref{Syntax Tables}. Normally you would use these functions to change
the standard case table.
@defun set-case-syntax-pair uc lc case-table
This function specifies a pair of corresponding letters, one upper case

View file

@ -145,7 +145,8 @@ variable.
@code{defvar} and @code{defconst} are special forms that define a
symbol as a global variable. They are documented in detail in
@ref{Defining Variables}.
@ref{Defining Variables}. For defining user option variables that can
be customized, use @code{defcustom} (@pxref{Customization}).
@code{defun} defines a symbol as a function, creating a lambda
expression and storing it in the function cell of the symbol. This
@ -229,11 +230,6 @@ valid way to create an obarray.} Prime numbers as lengths tend
to result in good hashing; lengths one less than a power of two are also
good.
It is possible for two different symbols to have the same name in
different obarrays; these symbols are not @code{eq} or @code{equal}.
However, this normally happens only as part of the abbrev mechanism
(@pxref{Abbrevs}).
@strong{Do not try to put symbols in an obarray yourself.} This does
not work---only @code{intern} can enter a symbol in an obarray properly.
@ -440,10 +436,10 @@ an association list than to update a property. All properties for a
symbol are stored in the same property list, so there is a possibility
of a conflict between different uses of a property name. (For this
reason, it is a good idea to choose property names that are probably
unique, such as by including the name of the library in the property
name.) An association list may be used like a stack where associations
are pushed on the front of the list and later discarded; this is not
possible with a property list.
unique, such as by beginning the property name with the program's usual
name-prefix for variables and functions.) An association list may be
used like a stack where associations are pushed on the front of the list
and later discarded; this is not possible with a property list.
@node Symbol Plists
@subsection Property List Functions for Symbols
@ -532,3 +528,10 @@ in the place where you got @var{plist}. For example,
@end example
@end defun
You could define @code{put} in terms of @code{plist-put} as follows:
@example
(defun put (symbol prop value)
(setplist symbol
(plist-put (symbol-plist symbol) prop value)))
@end example

View file

@ -44,12 +44,16 @@ list motion functions (@pxref{List Motion}) as well as the functions in
this chapter.
@end ifinfo
A syntax table is a char-table (@pxref{Char-Tables}). Each element is
a list that encodes the syntax of the character in question.
A syntax table is a char-table (@pxref{Char-Tables}). The element at
index @var{c} describes the character with code @var{c}. The element's
value should be a list that encodes the syntax of the character in
question.
Syntax tables are used only for moving across text, not for the Emacs
Lisp reader. Emacs Lisp uses built-in syntactic rules when reading Lisp
expressions, and these rules cannot be changed.
expressions, and these rules cannot be changed. (Some Lisp systems
provide ways to redefine the read syntax, but we decided to leave this
feature out of Emacs Lisp for simplicity.)
Each buffer has its own major mode, and each major mode has its own
idea of the syntactic class of various characters. For example, in Lisp
@ -80,12 +84,11 @@ This function returns @code{t} if @var{object} is a syntax table.
This section describes the syntax classes and flags that denote the
syntax of a character, and how they are represented as a @dfn{syntax
descriptor}, which is a Lisp string that you pass to
@code{modify-syntax-entry} to specify the desired syntax.
@code{modify-syntax-entry} to specify the syntax you want.
Emacs defines a number of @dfn{syntax classes}. Each syntax table
puts each character into one class. There is no necessary relationship
between the class of a character in one syntax table and its class in
any other table.
The syntax table specifies a syntax class for each character. There
is no necessary relationship between the class of a character in one
syntax table and its class in any other table.
Each class is designated by a mnemonic character, which serves as the
name of the class when you need to specify a class. Usually the
@ -124,7 +127,8 @@ their meanings, and examples of their use.
separate symbols and words from each other. Typically, whitespace
characters have no other syntactic significance, and multiple whitespace
characters are syntactically equivalent to a single one. Space, tab,
newline and formfeed are almost always classified as whitespace.
newline and formfeed are classified as whitespace in almost all major
modes.
@end deffn
@deffn {Syntax class} @w{word constituent}
@ -384,9 +388,9 @@ prefix (@samp{'}). @xref{Motion and Syntax}.
altering syntax tables.
@defun make-syntax-table
This function creates a new syntax table. Character codes 32 through
127 are set up by copying the syntax from the standard syntax table.
All other codes are set up to inherit from the standard syntax table.
This function creates a new syntax table. It inherits the syntax for
letters and control characters from the standard syntax table. For
other characters, the syntax is copied from the standard syntax table.
Most major mode syntax tables are created in this way.
@end defun
@ -465,20 +469,23 @@ character, @samp{)}.
@example
@group
(char-to-string (char-syntax ?\ ))
(string (char-syntax ?\ ))
@result{} " "
@end group
@group
(char-to-string (char-syntax ?/))
(string (char-syntax ?/))
@result{} "."
@end group
@group
(char-to-string (char-syntax ?\())
(string (char-syntax ?\())
@result{} "("
@end group
@end example
We use @code{string} to make it easier to see the character returned by
@code{char-syntax}.
@end defun
@defun set-syntax-table table
@ -500,7 +507,7 @@ language, you can use @code{syntax-table} text properties to override
the syntax table for specific character occurrences in the buffer.
@xref{Text Properties}.
The valid values of @code{syntax-table} text property are
The valid values of @code{syntax-table} text property are:
@table @asis
@item @var{syntax-table}
@ -527,9 +534,8 @@ table.
@node Motion and Syntax
@section Motion and Syntax
This section describes functions for moving across characters in
certain syntax classes. None of these functions exists in Emacs
version 18 or earlier.
This section describes functions for moving across characters that
have certain syntax classes.
@defun skip-syntax-forward syntaxes &optional limit
This function moves point forward across characters having syntax classes
@ -596,7 +602,7 @@ string, or the of a comment or a string, whichever comes first.
@cindex parse state
The fifth argument @var{state} is a nine-element list of the same form
as the value of this function, described below. (It is ok to omit the
as the value of this function, described below. (It is OK to omit the
last element of the nine.) The return value of one call may be used to
initialize the state of the parse on another call to
@code{parse-partial-sexp}.
@ -758,42 +764,46 @@ a character to match was specified.
This table gives the value of @var{syntax-code} which corresponds
to each syntactic type.
@table @asis
@item @i{Integer}
@i{Class}
@item 0
whitespace
@item 1
punctuation
@item 2
word
@item 3
symbol
@item 4
open parenthesis
@item 5
close parenthesis
@item 6
expression prefix
@item 7
string quote
@item 8
paired delimiter
@item 9
escape
@item 10
character quote
@item 11
comment-start
@item 12
comment-end
@item 13
inherit
@item 14
comment-fence
@item 15
string-fence
@end table
@multitable @columnfractions .05 .3 .3 .3
@item@tab
@i{Integer} @i{Class}
@tab
@i{Integer} @i{Class}
@tab
@i{Integer} @i{Class}
@item@tab
0 @ @ whitespace
@tab
5 @ @ close parenthesis
@tab
10 @ @ character quote
@item@tab
1 @ @ punctuation
@tab
6 @ @ expression prefix
@tab
11 @ @ comment-start
@item@tab
2 @ @ word
@tab
7 @ @ string quote
@tab
12 @ @ comment-end
@item@tab
3 @ @ symbol
@tab
8 @ @ paired delimiter
@tab
13 @ @ inherit
@item@tab
4 @ @ open parenthesis
@tab
9 @ @ escape
@tab
14 @ @ comment-fence
@item@tab
15 @ string-fence
@end multitable
For example, the usual syntax value for @samp{(} is @code{(4 . 41)}.
(41 is the character code for @samp{)}.)
@ -802,39 +812,46 @@ string-fence
least significant bit. This table gives the power of two which
corresponds to each syntax flag.
@table @samp
@item @i{Flag}
@i{Bit value}
@item 1
@code{(lsh 1 16)}
@item 2
@code{(lsh 1 17)}
@item 3
@code{(lsh 1 18)}
@item 4
@code{(lsh 1 19)}
@item p
@code{(lsh 1 20)}
@item b
@code{(lsh 1 21)}
@end table
@multitable @columnfractions .05 .3 .3 .3
@item@tab
@i{Prefix} @i{Flag}
@tab
@i{Prefix} @i{Flag}
@tab
@i{Prefix} @i{Flag}
@item@tab
@samp{1} @ @ @code{(lsh 1 16)}
@tab
@samp{3} @ @ @code{(lsh 1 18)}
@tab
@samp{p} @ @ @code{(lsh 1 20)}
@item@tab
@samp{2} @ @ @code{(lsh 1 17)}
@tab
@samp{4} @ @ @code{(lsh 1 19)}
@tab
@samp{b} @ @ @code{(lsh 1 21)}
@end multitable
@node Categories
@section Categories
@cindex categories of characters
@dfn{Categories} provide an alternate way of classifying characters
syntactically. You can define a large number of categories, and then
independently assign each character to one or more of them. Unlike
syntactically. You can define several categories as needed, then
independently assign each character to one or more categories. Unlike
syntax classes, categories are not mutually exclusive; it is normal for
one character to belong to several categories.
Each buffer has a @dfn{category table} which records which categories
are defined and also which characters belong to each category. Each
category table defines its own categories. Each category has a name,
which is an @sc{ASCII} printing character in the range @w{@samp{ }} to
@samp{~}. You specify the name of a category when you define it with
@code{define-category}.
category table defines its own categories, but normally these are
initialized by copying from the standard categories table, so that the
standard categories are available in all modes.
Each category has a name, which is an @sc{ASCII} printing character in
the range @w{@samp{ }} to @samp{~}. You specify the name of a category
when you define it with @code{define-category}.
The category table is actually a char-table (@pxref{Char-Tables}).
The element of the category table at index @var{c} is a @dfn{category
@ -865,8 +882,8 @@ in category table @var{table}.
@defun get-unused-category table
This function returns a category name (a character) which is not
currently defined in @var{table}. If none is still available, it
returns @code{nil},
currently defined in @var{table}. If all possible categories are in use
in @var{table}, it returns @code{nil},
@end defun
@defun category-table

View file

@ -79,6 +79,13 @@ buffer is @samp{@@}:
@end example
@end defun
@defun char-before position
This function returns the character in the current buffer immediately
before position @var{position}. If @var{position} is out of range for
this purpose, either before the beginning of the buffer, or at or beyond
the end, then the value is @code{nil}.
@end defun
@defun following-char
This function returns the character following point in the current
buffer. This is similar to @code{(char-after (point))}. However, if
@ -185,19 +192,6 @@ This is the contents of buffer foo
@defun buffer-substring-no-properties start end
This is like @code{buffer-substring}, except that it does not copy text
properties, just the characters themselves. @xref{Text Properties}.
Here's an example of using this function to get a word to look up in an
alist:
@example
(setq flammable
(assoc (buffer-substring-no-properties start end)
'(("wood" . t) ("paper" . t)
("steel" . nil) ("asbestos" . nil))))
@end example
If this were written using @code{buffer-substring} instead, it would not
work reliably; any text properties that happened to be in the word
copied from the buffer would make the comparisons fail.
@end defun
@defun buffer-string
@ -282,23 +276,22 @@ at the second character.
@cindex insertion of text
@cindex text insertion
@cindex insertion before point
@cindex before point, insertion
@dfn{Insertion} means adding new text to a buffer. The inserted text
goes at point---between the character before point and the character
after point.
after point. Some insertion functions leave point before the inserted
text, while other functions leave it after. We call the former
insertion @dfn{after point} and the latter insertion @dfn{before point}.
Insertion relocates markers that point at positions after the
insertion point, so that they stay with the surrounding text
(@pxref{Markers}). When a marker points at the place of insertion,
insertion normally doesn't relocate the marker, so that it points to the
beginning of the inserted text; however, certain special functions such
as @code{insert-before-markers} relocate such markers to point after the
inserted text.
@cindex insertion before point
@cindex before point, insertion
Some insertion functions leave point before the inserted text, while
other functions leave it after. We call the former insertion @dfn{after
point} and the latter insertion @dfn{before point}.
insertion may or may not relocate the marker, depending on the marker's
insertion type (@pxref{Marker Insertion Types}). Certain special
functions such as @code{insert-before-markers} relocate all such markers
to point after the inserted text, regardless of the markers' insertion
type.
Insertion functions signal an error if the current buffer is
read-only.
@ -329,11 +322,11 @@ inserted text falls outside the overlay; if a nonempty overlay ends at
the insertion point, the inserted text falls inside that overlay.
@end defun
@defun insert-char character count &optional inherit
@defun insert-char character &optional count inherit
This function inserts @var{count} instances of @var{character} into the
current buffer before point. The argument @var{count} must be a number,
and @var{character} must be a character. The value is @code{nil}.
@c It's unfortunate that count comes second. Not like make-string, etc.
current buffer before point. The argument @var{count} should be a
number (@code{nil} means 1), and @var{character} must be a character.
The value is @code{nil}.
If @var{inherit} is non-@code{nil}, then the inserted characters inherit
sticky text properties from the two characters before and after the
@ -531,6 +524,16 @@ the kill ring.
The value returned is always @code{nil}.
@end deffn
@tindex backward-delete-char-untabify-method
@defopt backward-delete-char-untabify-method
This option specifies how @code{backward-delete-char-untabify} should
deal with whitespace. Possible values include @code{untabify}, the
default, meaning convert a tab to many spaces and delete one;
@code{hungry}, meaning delete all the whitespace characters before point
with one command, and @code{nil}, meaning do nothing special for
whitespace characters.
@end defopt
@node User-Level Deletion
@section User-Level Deletion Commands
@ -668,7 +671,7 @@ A blank line is defined as a line containing only tabs and spaces.
@section The Kill Ring
@cindex kill ring
@dfn{Kill} functions delete text like the deletion functions, but save
@dfn{Kill functions} delete text like the deletion functions, but save
it so that the user can reinsert it by @dfn{yanking}. Most of these
functions have @samp{kill-} in their name. By contrast, the functions
whose names start with @samp{delete-} normally do not save text for
@ -828,10 +831,10 @@ The value is always @code{nil}.
@node Low-Level Kill Ring
@subsection Low-Level Kill Ring
These functions and variables provide access to the kill ring at a lower
level, but still convenient for use in Lisp programs. They take care of
interaction with X Window selections. They do not exist in Emacs
version 18.
These functions and variables provide access to the kill ring at a
lower level, but still convenient for use in Lisp programs, because they
take care of interaction with window system selections
(@pxref{Window System Selections}).
@defun current-kill n &optional do-not-move
The function @code{current-kill} rotates the yanking pointer which
@ -873,9 +876,9 @@ If the value is a function, @code{current-kill} calls it to get the
then that value is used as the ``most recent kill''. If it returns
@code{nil}, then the first element of @code{kill-ring} is used.
The normal use of this hook is to get the X server's primary selection
as the most recent kill, even if the selection belongs to another X
client. @xref{X Selections}.
The normal use of this hook is to get the window system's primary
selection as the most recent kill, even if the selection belongs to
another application. @xref{Window System Selections}.
@end defvar
@defvar interprogram-cut-function
@ -886,8 +889,8 @@ programs, when you are using a window system. Its value should be
If the value is a function, @code{kill-new} and @code{kill-append} call
it with the new first element of the kill ring as an argument.
The normal use of this hook is to set the X server's primary selection
from the newly killed text.
The normal use of this hook is to set the window system's primary
selection from the newly killed text. @xref{Window System Selections}.
@end defvar
@node Internals of Kill Ring
@ -925,10 +928,12 @@ different piece of text" "yet older text")}.
@example
@group
kill-ring kill-ring-yank-pointer
| |
| ___ ___ ---> ___ ___ ___ ___
--> |___|___|------> |___|___|--> |___|___|--> nil
kill-ring ---- kill-ring-yank-pointer
| |
| v
| --- --- --- --- --- ---
--> | | |------> | | |--> | | |--> nil
--- --- --- --- --- ---
| | |
| | |
| | -->"yet older text"
@ -1103,8 +1108,7 @@ has no effect.
This function returns @code{nil}. It cannot be called interactively.
The name @code{buffer-flush-undo} is not considered obsolete, but the
preferred name @code{buffer-disable-undo} is new as of Emacs versions
19.
preferred name is @code{buffer-disable-undo}.
@end defun
As editing continues, undo lists get longer and longer. To prevent
@ -1153,7 +1157,8 @@ If it is non-@code{nil}, that requests some kind of justification. It
can be @code{left}, @code{right}, @code{full}, or @code{center}, to
request a specific style of justification. If it is @code{t}, that
means to use the current justification style for this part of the text
(see @code{current-justification}, below).
(see @code{current-justification}, below). Any other value is treated
as @code{full}.
When you call the filling functions interactively, using a prefix
argument implies the value @code{full} for @var{justify}.
@ -1358,10 +1363,19 @@ whitespace.
@defvar left-margin
This variable specifies the base left margin column. In Fundamental
mode, @key{LFD} indents to this column. This variable automatically
mode, @kbd{C-j} indents to this column. This variable automatically
becomes buffer-local when set in any fashion.
@end defvar
@tindex fill-nobreak-predicate
@defvar fill-nobreak-predicate
This variable gives major modes a way to specify not to break a line at
certain places. Its value should be a function. This function is
called during filling, with no arguments and with point located at the
place where a break is being considered. If the function returns
non-@code{nil}, then the line won't be broken there.
@end defvar
@node Auto Filling
@comment node-name, next, previous, up
@section Auto Filling
@ -1395,7 +1409,8 @@ was renamed to @code{auto-fill-function} in version 19.
@defvar normal-auto-fill-function
This variable specifies the function to use for
@code{auto-fill-function}, if and when Auto Fill is turned on. Major
modes can set this locally to alter how Auto Fill works.
modes can set buffer-local values for this variable to alter how Auto
Fill works.
@end defvar
@node Sorting
@ -1485,9 +1500,7 @@ the sort order.
(save-restriction
(narrow-to-region beg end)
(goto-char (point-min))
(sort-subr reverse
'forward-line
'end-of-line)))
(sort-subr reverse 'forward-line 'end-of-line)))
@end group
@end example
@ -1503,8 +1516,7 @@ its @code{sort-subr} call looks like this:
@group
(sort-subr reverse
(function
(lambda ()
(skip-chars-forward "\n \t\f")))
(lambda () (skip-chars-forward "\n \t\f")))
'forward-paragraph)
@end group
@end example
@ -1630,7 +1642,7 @@ containing position @var{beg}, and the entire line containing position
Note that @code{sort-columns} uses the @code{sort} utility program,
and so cannot work properly on text containing tab characters. Use
@kbd{M-x @code{untabify}} to convert tabs to spaces before sorting.
@kbd{M-x untabify} to convert tabs to spaces before sorting.
@end deffn
@node Columns
@ -1715,7 +1727,7 @@ count from zero at the left margin.
This section describes the primitive functions used to count and
insert indentation. The functions in the following sections use these
primitives.
primitives. @xref{Width}, for related functions.
@defun current-indentation
@comment !!Type Primitive Function
@ -1745,7 +1757,7 @@ Properties}.
@comment !!SourceFile indent.c
If this variable is non-@code{nil}, indentation functions can insert
tabs as well as spaces. Otherwise, they insert only spaces. Setting
this variable automatically makes it local to the current buffer.
this variable automatically makes it buffer-local in the current buffer.
@end defopt
@node Mode-Specific Indent
@ -2009,11 +2021,11 @@ nonblank character on that line. It returns @code{nil}.
@node Case Changes
@comment node-name, next, previous, up
@section Case Changes
@cindex case changes
@cindex case conversion in buffers
The case change commands described here work on text in the current
buffer. @xref{Character Case}, for case conversion commands that work
on strings and characters. @xref{Case Table}, for how to customize
buffer. @xref{Case Conversion}, for case conversion functions that work
on strings and characters. @xref{Case Tables}, for how to customize
which characters are upper or lower case and how to convert them.
@deffn Command capitalize-region start end
@ -2417,9 +2429,9 @@ for @var{object} is the current buffer.
@subsection Properties with Special Meanings
Here is a table of text property names that have special built-in
meanings. The following section lists a few more special property names
that are used to control filling. All other names have no standard
meaning, and you can use them as you like.
meanings. The following sections list a few additional special property
names that control filling and property inheritance. All other names
have no standard meaning, and you can use them as you like.
@table @code
@cindex category of text character
@ -2813,8 +2825,8 @@ is done by the command definition. Here is how Dired does it:
(save-excursion
(set-buffer (window-buffer (posn-window (event-end event))))
(save-excursion
(goto-char (posn-point (event-end event)))
(setq file (dired-get-filename))))
(goto-char (posn-point (event-end event)))
(setq file (dired-get-filename))))
(select-window (posn-window (event-end event)))
(find-file-other-window (file-name-sans-versions file t))))
@end smallexample
@ -2955,15 +2967,11 @@ translation table.
@cindex registers
A register is a sort of variable used in Emacs editing that can hold a
marker, a string, a rectangle, a window configuration (of one frame), or
a frame configuration (of all frames). Each register is named by a
single character. All characters, including control and meta characters
(but with the exception of @kbd{C-g}), can be used to name registers.
Thus, there are 255 possible registers. A register is designated in
Emacs Lisp by a character that is its name.
The functions in this section return unpredictable values unless
otherwise stated.
variety of different kinds of values. Each register is named by a
single character. All ASCII characters and their meta variants (but
with the exception of @kbd{C-g}) can be used to name registers. Thus,
there are 255 possible registers. A register is designated in Emacs
Lisp by the character that is its name.
@defvar register-alist
This variable is an alist of elements of the form @code{(@var{name} .
@ -2971,13 +2979,47 @@ This variable is an alist of elements of the form @code{(@var{name} .
register that has been used.
The object @var{name} is a character (an integer) identifying the
register. The object @var{contents} is a string, marker, window
configuration, frame configuration, or list representing the register
contents. A string represents text stored in the register. A marker
represents a position. A list represents a rectangle; its elements are
strings, one per line of the rectangle.
register.
@end defvar
The @var{contents} of a register can have several possible types:
@table @asis
@item a number
A number stands for itself. If @code{insert-register} finds a number
in the register, it converts the number to decimal.
@item a marker
A marker represents a buffer position to jump to.
@item a string
A string is text saved in the register.
@item a rectangle
A rectangle is represented by a list of strings.
@item @code{(@var{window-configuration} @var{position})}
This represents a window configuration to restore in one frame, and a
position to jump to in the current buffer.
@item @code{(@var{frame-configuration} @var{position})}
This represents a frame configuration to restore, and a position
to jump to in the current buffer.
@item (file @var{filename})
This represents a file to visit; jumping to this value visits file
@var{filename}.
@item (file-query @var{filename} @var{position})
This represents a file to visit and a position in it; jumping to this
value visits file @var{filename} and goes to buffer position
@var{position}. Restoring this type of position asks the user for
confirmation first.
@end table
The functions in this section return unpredictable values unless
otherwise stated.
@defun get-register reg
This function returns the contents of the register
@var{reg}, or @code{nil} if it has no contents.
@ -3136,11 +3178,18 @@ that seems safe.
If a program makes several text changes in the same area of the buffer,
using the macro @code{combine-after-change-calls} around that part of
the program can make it run considerably faster when after-change hooks
are in use.
are in use. When the after-change hooks are ultimately called, the
arguments specify a portion of the buffer including all of the changes
made within the @code{combine-after-change-calls} body.
@strong{Warning:} You must not alter the values of
@code{after-change-functions} and @code{after-change-function} within
the body of a @code{combine-after-change-calls} form.
@strong{Note:} If the changes you combine occur in widely scattered
parts of the buffer, this will still work, but it is not advisable,
because it may lead to inefficient behavior for some change hook
functions.
@end defmac
@defvar before-change-function
@ -3177,8 +3226,11 @@ to call. Here is an example:
(while list
(funcall (car list) beg end len)
(setq list (cdr list)))))
@group
(add-hooks 'after-change-functions
'indirect-after-change-function)
@end group
@end example
@defvar first-change-hook

View file

@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1995, 1998 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
@setfilename ../info/tips
@node Tips, GNU Emacs Internals, Calendar, Top
@node Tips, GNU Emacs Internals, System Interface, Top
@appendix Tips and Conventions
@cindex tips
@cindex standards of coding style
@ -37,10 +37,11 @@ names of all global variables, constants, and functions with the chosen
prefix. This helps avoid name conflicts.
This recommendation applies even to names for traditional Lisp
primitives that are not primitives in Emacs Lisp---even to @code{cadr}.
Believe it or not, there is more than one plausible way to define
@code{cadr}. Play it safe; append your name prefix to produce a name
like @code{foo-cadr} or @code{mylib-cadr} instead.
primitives that are not primitives in Emacs Lisp---even to
@code{copy-list}. Believe it or not, there is more than one plausible
way to define @code{copy-list}. Play it safe; append your name prefix
to produce a name like @code{foo-copy-list} or @code{mylib-copy-list}
instead.
If you write a function that you think ought to be added to Emacs under
a certain name, such as @code{twiddle-files}, don't call it by that name
@ -75,11 +76,11 @@ macro:
@end example
@noindent
(And @var{bar} should contain @code{(provide '@var{bar})}, to make the
@code{require} work.) This will cause @var{bar} to be loaded when you
byte-compile @var{foo}. Otherwise, you risk compiling @var{foo} without
the necessary macro loaded, and that would produce compiled code that
won't work right. @xref{Compiling Macros}.
(And the library @var{bar} should contain @code{(provide '@var{bar})},
to make the @code{require} work.) This will cause @var{bar} to be
loaded when you byte-compile @var{foo}. Otherwise, you risk compiling
@var{foo} without the necessary macro loaded, and that would produce
compiled code that won't work right. @xref{Compiling Macros}.
Using @code{eval-when-compile} avoids loading @var{bar} when
the compiled version of @var{foo} is @emph{used}.
@ -111,9 +112,9 @@ Instead, define sequences consisting of @kbd{C-c} followed by a control
character, a digit, or certain punctuation characters. These sequences
are reserved for major modes.
Changing all the major modes in Emacs 18 so they would follow this
convention was a lot of work. Abandoning this convention would make
that work go to waste, and inconvenience users.
Changing all the Emacs major modes to follow this convention was a lot
of work. Abandoning this convention would make that work go to waste,
and inconvenience users.
@item
Sequences consisting of @kbd{C-c} followed by @kbd{@{}, @kbd{@}},
@ -136,7 +137,7 @@ as a help character for listing the subcommands of the prefix character.
@item
Do not bind a key sequence ending in @key{ESC} except following
another @key{ESC}. (That is, it is ok to bind a sequence ending in
another @key{ESC}. (That is, it is OK to bind a sequence ending in
@kbd{@key{ESC} @key{ESC}}.)
The reason for this rule is that a non-prefix binding for @key{ESC} in
@ -251,7 +252,7 @@ user switch back at will. @xref{Recursive Editing}.
In some other systems there is a convention of choosing variable names
that begin and end with @samp{*}. We don't use that convention in Emacs
Lisp, so please don't use it in your programs. (Emacs uses such names
only for program-generated buffers.) The users will find Emacs more
only for special-purpose buffers.) The users will find Emacs more
coherent if all libraries use the same conventions.
@item
@ -273,7 +274,7 @@ default indentation parameters.
Don't make a habit of putting close-parentheses on lines by themselves;
Lisp programmers find this disconcerting. Once in a while, when there
is a sequence of many consecutive close-parentheses, it may make sense
to split them in one or two significant places.
to split the sequence in one or two significant places.
@item
Please put a copyright notice on the file if you give copies to anyone.
@ -366,7 +367,11 @@ the speed. @xref{Inline Functions}.
@node Documentation Tips
@section Tips for Documentation Strings
Here are some tips for the writing of documentation strings.
@tindex checkdoc-minor-mode
@findex checkdoc-minor-mode
Here are some tips and conventions for the writing of documentation
strings. You can check many of these conventions by running the command
@kbd{M-x checkdoc-minor-mode}.
@itemize @bullet
@item
@ -471,10 +476,18 @@ write @code{t} and @code{nil} without single-quotes.
When a documentation string refers to a Lisp symbol, write it as it
would be printed (which usually means in lower case), with single-quotes
around it. For example: @samp{lambda}. There are two exceptions: write
t and nil without single-quotes. (In this manual, we normally do use
single-quotes for those symbols.)
t and nil without single-quotes. (In this manual, we use a different
convention, with single-quotes for all symbols.)
@end ifinfo
For example:
@example
The value of `swim-speed' specifies how fast to swim.
Possible values are t for high speed, nil for low speed,
and `medium' for medium speed.
@end example
@item
Don't write key sequences directly in documentation strings. Instead,
use the @samp{\\[@dots{}]} construct to stand for them. For example,
@ -541,11 +554,12 @@ at that point. For example:
@end group
@end smallexample
Every function that has no documentation string (because it is use only
internally within the package it belongs to), should have instead a
two-semicolon comment right before the function, explaining what the
function does and how to call it properly. Explain precisely what each
argument means and how the function interprets its possible values.
Every function that has no documentation string (presumably one that is
used only internally within the package it belongs to), should have
instead a two-semicolon comment right before the function, explaining
what the function does and how to call it properly. Explain precisely
what each argument means and how the function interprets its possible
values.
@item ;;;
Comments that start with three semicolons, @samp{;;;}, should start at
@ -584,7 +598,7 @@ program. For example:
@noindent
The indentation commands of the Lisp modes in Emacs, such as @kbd{M-;}
(@code{indent-for-comment}) and @key{TAB} (@code{lisp-indent-line})
(@code{indent-for-comment}) and @key{TAB} (@code{lisp-indent-line}),
automatically indent comments according to these conventions,
depending on the number of semicolons. @xref{Comments,,
Manipulating Comments, emacs, The GNU Emacs Manual}.
@ -613,7 +627,9 @@ them. This section explains these conventions. First, an example:
;; Keywords: docs
;; This file is part of GNU Emacs.
@var{copying permissions}@dots{}
@dots{}
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
@end group
@end smallexample

View file

@ -38,6 +38,8 @@ variable.
* Setting Variables:: Storing new values in variables.
* Variable Scoping:: How Lisp chooses among local and global values.
* Buffer-Local Variables:: Variable values in effect only in one buffer.
* Frame-Local Variables:: Variable values in effect only in one frame.
* Future Local Variables:: New kinds of local values we might add some day.
@end menu
@node Global Variables
@ -73,7 +75,8 @@ x @result{} (a b)
@noindent
assuming the @code{setq} form shown above has already been executed.
If you do another @code{setq}, the new value replaces the old one:
If you do set the same variable again, the new value replaces the old
one:
@example
@group
@ -96,14 +99,13 @@ x
@vindex t
@kindex setting-constant
In Emacs Lisp, certain symbols normally evaluate to themselves.
These include @code{nil} and @code{t}, as well as any symbol whose
name starts with @samp{:}.
The symbols @code{nil} and @code{t} @emph{always} evaluate to
themselves. These symbols cannot be rebound, nor can their values be
changed. Any attempt to change the value of @code{nil} or @code{t}
signals a @code{setting-constant} error.
In Emacs Lisp, certain symbols normally evaluate to themselves. These
include @code{nil} and @code{t}, as well as any symbol whose name starts
with @samp{:}. These symbols cannot be rebound, nor can their values be
changed. Any attempt to set or bind @code{nil} or @code{t} signals a
@code{setting-constant} error. The same is true for a symbol whose name
starts with @samp{:}, except that you are allowed to set such symbol to
itself.
@example
@group
@ -116,6 +118,13 @@ nil @equiv{} 'nil
@end group
@end example
@tindex keyword-symbols-constant-flag
@defvar keyword-symbols-constant-flag
If this variable is @code{nil}, you are allowed to set and bind symbols
whose names start with @samp{:} as you wish. This is to make it
possible to run old Lisp programs which do that.
@end defvar
@node Local Variables
@section Local Variables
@cindex binding local variables
@ -125,7 +134,7 @@ nil @equiv{} 'nil
Global variables have values that last until explicitly superseded
with new values. Sometimes it is useful to create variable values that
exist temporarily---only while within a certain part of the program.
exist temporarily---only until a certain part of the program finishes.
These values are called @dfn{local}, and the variables so used are
called @dfn{local variables}.
@ -143,7 +152,7 @@ local values may be shadowed (@pxref{Scope}).
If you set a variable (such as with @code{setq}) while it is local,
this replaces the local value; it does not alter the global value, or
previous local values that are shadowed. To model this behavior, we
previous local values, that are shadowed. To model this behavior, we
speak of a @dfn{local binding} of the variable as well as a local value.
The local binding is a conceptual place that holds a local value.
@ -161,12 +170,12 @@ not create a new binding.
A variable can have more than one local binding at a time (for
example, if there are nested @code{let} forms that bind it). In such a
case, the most recently created local binding that still exists is the
@dfn{current binding} of the variable. (This is called @dfn{dynamic
scoping}; see @ref{Variable Scoping}.) If there are no local bindings,
the variable's global binding is its current binding. We also call the
current binding the @dfn{most-local existing binding}, for emphasis.
Ordinary evaluation of a symbol always returns the value of its current
binding.
@dfn{current binding} of the variable. (This rule is called
@dfn{dynamic scoping}; see @ref{Variable Scoping}.) If there are no
local bindings, the variable's global binding is its current binding.
We sometimes call the current binding the @dfn{most-local existing
binding}, for emphasis. Ordinary evaluation of a symbol always returns
the value of its current binding.
The special forms @code{let} and @code{let*} exist to create
local bindings.
@ -289,8 +298,7 @@ the error @code{void-variable}, unless and until you set it again.
@example
@group
(makunbound 'x) ; @r{Make the global value}
; @r{of @code{x} void.}
(makunbound 'x) ; @r{Make the global value of @code{x} void.}
@result{} x
@end group
@group
@ -304,9 +312,9 @@ local existing binding. This is the only way a symbol can have a void
local binding, since all the constructs that create local bindings
create them with values. In this case, the voidness lasts at most as
long as the binding does; when the binding is removed due to exit from
the construct that made it, the previous or global binding is reexposed
as usual, and the variable is no longer void unless the newly reexposed
binding was void all along.
the construct that made it, the previous local or global binding is
reexposed as usual, and the variable is no longer void unless the newly
reexposed binding was void all along.
@smallexample
@group
@ -439,9 +447,9 @@ Emacs help functions (@pxref{Documentation}) look for this property.
If the first character of @var{doc-string} is @samp{*}, it means that
this variable is considered a user option. This lets users set the
variable conventiently using the commands @code{set-variable} and
variable conveniently using the commands @code{set-variable} and
@code{edit-options}. However, it is better to use @code{defcustom}
instead of @code{defvar}, for user option variables, to specify
instead of @code{defvar} for user option variables, so you can specify
customization information. @xref{Customization}.
Here are some examples. This form defines @code{foo} but does not
@ -580,7 +588,7 @@ entire computation of the value into the @code{defvar}, like this:
@noindent
This method has several benefits. First, if the user quits while
loading the file, the variable is either still uninitialized or
initialized properly, never in-between. If it is uninitialized,
initialized properly, never in-between. If it is still uninitialized,
reloading the file will initialize it properly. Second, reloading the
file once the variable is initialized will not alter it; that is
important if the user has run hooks to alter part of the contents (such
@ -620,11 +628,11 @@ each form, if you do want to reinitialize the variable.
@end example
@noindent
This code sets the variable, then alters it, but only if the variable
had been @code{ni}. If the user quits just after the @code{setq}, that
leaves the variable neither correctly initialized nor void nor
@code{nil}. Once that happens, reloading the file will not initialize
the variable; it will remain incomplete.
This code sets the variable, then alters it, but it does so in more than
one step. If the user quits just after the @code{setq}, that leaves the
variable neither correctly initialized nor void nor @code{nil}. Once
that happens, reloading the file will not initialize the variable; it
will remain incomplete.
@node Accessing Variables
@section Accessing Variable Values
@ -673,8 +681,8 @@ has no local bindings.
@end group
@end example
A @code{void-variable} error is signaled if @var{symbol} has neither a
local binding nor a global one.
A @code{void-variable} error is signaled if the current binding of
@var{symbol} is void.
@end defun
@node Setting Variables
@ -803,6 +811,7 @@ value of @var{symbol} had better be a list already before the call.
The argument @var{symbol} is not implicitly quoted; @code{add-to-list}
is an ordinary function, like @code{set} and unlike @code{setq}. Quote
the argument yourself if that is what you want.
@end defun
Here's a scenario showing how to use @code{add-to-list}:
@ -819,7 +828,6 @@ Here's a scenario showing how to use @code{add-to-list}:
foo ;; @r{@code{foo} was changed.}
@result{} (c a b)
@end example
@end defun
An equivalent expression for @code{(add-to-list '@var{var}
@var{value})} is this:
@ -979,10 +987,11 @@ closures.
works) may help you understand dynamic binding. This technique is
called @dfn{deep binding} and was used in early Lisp systems.
Suppose there is a stack of bindings: variable-value pairs. At entry
to a function or to a @code{let} form, we can push bindings onto the stack
for the arguments or local variables created there. We can pop those
bindings from the stack at exit from the binding construct.
Suppose there is a stack of bindings, which are variable-value pairs.
At entry to a function or to a @code{let} form, we can push bindings
onto the stack for the arguments or local variables created there. We
can pop those bindings from the stack at exit from the binding
construct.
We can find the value of a variable by searching the stack from top to
bottom for a binding for that variable; the value from that binding is
@ -1052,18 +1061,22 @@ use short names like @code{x}.
@cindex buffer-local variables
Global and local variable bindings are found in most programming
languages in one form or another. Emacs also supports another, unusual
kind of variable binding: @dfn{buffer-local} bindings, which apply only
to one buffer. Emacs Lisp is meant for programming editing commands,
and having different values for a variable in different buffers is an
important customization method. (A few variables have bindings that
are local to a given X terminal; see @ref{Multiple Displays}.)
languages in one form or another. Emacs also supports additional,
unusual kinds of variable binding: @dfn{buffer-local} bindings, which
apply only in one buffer, and frame-local bindings, which apply only in
one frame. Having different values for a variable in different buffers
and/or frames is an important customization method.
This section describes buffer-local bindings; for frame-local
bindings, see the following section, @ref{Frame-Local Variables}. (A few
variables have bindings that are local to a X terminal; see
@ref{Multiple Displays}.)
@menu
* Intro to Buffer-Local:: Introduction and concepts.
* Creating Buffer-Local:: Creating and destroying buffer-local bindings.
* Default Value:: The default value is seen in buffers
that don't have their own local values.
that don't have their own buffer-local values.
@end menu
@node Intro to Buffer-Local
@ -1082,22 +1095,25 @@ this is the global binding.
A variable can have buffer-local bindings in some buffers but not in
other buffers. The default binding is shared by all the buffers that
don't have their own bindings for the variable. If you set the variable
in a buffer that does not have a buffer-local binding for it, this sets
the default binding, so the new value is visible in all the buffers that
see the default binding.
don't have their own bindings for the variable. (This includes all
newly created buffers.) If you set the variable in a buffer that does
not have a buffer-local binding for it, this sets the default binding
(assuming there are no frame-local bindings to complicate the matter),
so the new value is visible in all the buffers that see the default
binding.
The most common use of buffer-local bindings is for major modes to change
variables that control the behavior of commands. For example, C mode and
Lisp mode both set the variable @code{paragraph-start} to specify that only
blank lines separate paragraphs. They do this by making the variable
buffer-local in the buffer that is being put into C mode or Lisp mode, and
then setting it to the new value for that mode.
then setting it to the new value for that mode. @xref{Major Modes}.
The usual way to make a buffer-local binding is with
@code{make-local-variable}, which is what major mode commands use. This
affects just the current buffer; all other buffers (including those yet to
be created) continue to share the default value.
@code{make-local-variable}, which is what major mode commands typically
use. This affects just the current buffer; all other buffers (including
those yet to be created) will continue to share the default value unless
they are explicitly given their own buffer-local bindings.
@cindex automatically buffer-local
A more powerful operation is to mark the variable as
@ -1107,11 +1123,11 @@ variable local in all buffers, even those yet to be created. More
precisely, the effect is that setting the variable automatically makes
the variable local to the current buffer if it is not already so. All
buffers start out by sharing the default value of the variable as usual,
but any @code{setq} creates a buffer-local binding for the current
but setting the variable creates a buffer-local binding for the current
buffer. The new value is stored in the buffer-local binding, leaving
the default binding untouched. The default value can no longer be
changed with @code{setq} in this buffer; you need to use
@code{setq-default} to do that.
the default binding untouched. This means that the default value cannot
be changed with @code{setq} in any buffer; the only way to change it is
with @code{setq-default}.
@strong{Warning:} When a variable has buffer-local values in one or
more buffers, you can get Emacs very confused by binding the variable
@ -1161,7 +1177,8 @@ But @code{save-excursion} as shown here avoids the problem:
buffer-local binding of buffer @samp{b}.
When a file specifies local variable values, these become buffer-local
values when you visit the file. @xref{Auto Major Mode}.
values when you visit the file. @xref{File Variables,,, emacs, The
GNU Emacs Manual}.
@node Creating Buffer-Local
@subsection Creating and Deleting Buffer-Local Bindings
@ -1209,9 +1226,10 @@ foo
@end example
Making a variable buffer-local within a @code{let}-binding for that
variable does not work. This is because @code{let} does not distinguish
between different kinds of bindings; it knows only which variable the
binding was made for.
variable does not work reliably, unless the buffer in which you do this
is not current either on entry to or exit from the @code{let}. This is
because @code{let} does not distinguish between different kinds of
bindings; it knows only which variable the binding was made for.
If the variable is terminal-local, this function signals an error. Such
variables cannot have buffer-local bindings as well. @xref{Multiple
@ -1226,16 +1244,24 @@ This function marks @var{variable} (a symbol) automatically
buffer-local, so that any subsequent attempt to set it will make it
local to the current buffer at the time.
A peculiar wrinkle of this feature is that binding the variable (with
@code{let} or other binding constructs) does not create a buffer-local
binding for it. Only setting the variable (with @code{set} or
@code{setq}) does so.
The value returned is @var{variable}.
@strong{Note:} It is a mistake to use @code{make-variable-buffer-local}
for user-option variables, simply because users @emph{might} want to
customize them differently in different buffers. Users can make any
variable local, when they wish to.
@strong{Warning:} Don't assume that you should use
@code{make-variable-buffer-local} for user-option variables, simply
because users @emph{might} want to customize them differently in
different buffers. Users can make any variable local, when they wish
to. It is better to leave the choice to them.
The main use of @code{make-variable-buffer-local} is when a variable is
used for internal purposes, and the Lisp program depends on having
separate values in separate buffers.
The time to use @code{make-variable-buffer-local} is when it is crucial
that no two buffers ever share the same binding. For example, when a
variable is used for internal purposes in a Lisp program which depends
on having separate values in separate buffers, then using
@code{make-variable-buffer-local} can be the best solution.
@end deffn
@defun local-variable-p variable &optional buffer
@ -1246,11 +1272,11 @@ This returns @code{t} if @var{variable} is buffer-local in buffer
@defun buffer-local-variables &optional buffer
This function returns a list describing the buffer-local variables in
buffer @var{buffer}. It returns an association list (@pxref{Association
Lists}) in which each association contains one buffer-local variable and
its value. When a buffer-local variable is void in @var{buffer}, then
it appears directly in the resulting list. If @var{buffer} is omitted,
the current buffer is used.
buffer @var{buffer}. (If @var{buffer} is omitted, the current buffer is
used.) It returns an association list (@pxref{Association Lists}) in
which each element contains one buffer-local variable and its value.
However, when a variable's buffer-local binding in @var{buffer} is void,
then the variable appears directly in the resulting list.
@example
@group
@ -1309,7 +1335,7 @@ value of @code{standard-syntax-table}, and the abbrev table to the value
of @code{fundamental-mode-abbrev-table}.
The very first thing this function does is run the normal hook
@code{change-major-mode-hook} (@pxref{Major Mode Conventions}).
@code{change-major-mode-hook} (see below).
Every major mode command begins by calling this function, which has the
effect of switching to Fundamental mode and erasing most of the effects
@ -1319,6 +1345,15 @@ variables that major modes set should not be marked permanent.
@code{kill-all-local-variables} returns @code{nil}.
@end defun
@defvar change-major-mode-hook
The function @code{kill-all-local-variables} runs this normal hook
before it does anything else. This gives major modes a way to arrange
for something special to be done if the user switches to a different
major mode. For best results, make this variable buffer-local, so that
it will disappear after doing its job and will not interfere with the
subsequent major mode. @xref{Hooks}.
@end defvar
@c Emacs 19 feature
@cindex permanent local variable
A buffer-local variable is @dfn{permanent} if the variable name (a
@ -1332,7 +1367,8 @@ came from or how to save it, rather than with how to edit the contents.
The global value of a variable with buffer-local bindings is also
called the @dfn{default} value, because it is the value that is in
effect except when specifically overridden.
effect whenever neither the current buffer nor the selected frame has
its own binding for the variable.
The functions @code{default-value} and @code{setq-default} access and
change a variable's default value regardless of whether the current
@ -1345,13 +1381,13 @@ this variable.
@c Emacs 19 feature
The special forms @code{defvar} and @code{defconst} also set the
default value (if they set the variable at all), rather than any
buffer-local value.
buffer-local or frame-local value.
@defun default-value symbol
This function returns @var{symbol}'s default value. This is the value
that is seen in buffers that do not have their own values for this
variable. If @var{symbol} is not buffer-local, this is equivalent to
@code{symbol-value} (@pxref{Accessing Variables}).
that is seen in buffers and frames that do not have their own values for
this variable. If @var{symbol} is not buffer-local, this is equivalent
to @code{symbol-value} (@pxref{Accessing Variables}).
@end defun
@c Emacs 19 feature
@ -1379,49 +1415,49 @@ current buffer sees.
@example
@group
;; @r{In buffer @samp{foo}:}
(make-local-variable 'local)
@result{} local
(make-local-variable 'buffer-local)
@result{} buffer-local
@end group
@group
(setq local 'value-in-foo)
(setq buffer-local 'value-in-foo)
@result{} value-in-foo
@end group
@group
(setq-default local 'new-default)
(setq-default buffer-local 'new-default)
@result{} new-default
@end group
@group
local
buffer-local
@result{} value-in-foo
@end group
@group
(default-value 'local)
(default-value 'buffer-local)
@result{} new-default
@end group
@group
;; @r{In (the new) buffer @samp{bar}:}
local
buffer-local
@result{} new-default
@end group
@group
(default-value 'local)
(default-value 'buffer-local)
@result{} new-default
@end group
@group
(setq local 'another-default)
(setq buffer-local 'another-default)
@result{} another-default
@end group
@group
(default-value 'local)
(default-value 'buffer-local)
@result{} another-default
@end group
@group
;; @r{Back in buffer @samp{foo}:}
local
buffer-local
@result{} value-in-foo
(default-value 'local)
(default-value 'buffer-local)
@result{} another-default
@end group
@end example
@ -1442,3 +1478,123 @@ an ordinary evaluated argument.
@end group
@end example
@end defun
@node Frame-Local Variables
@section Frame-Local Variables
Just as variables can have buffer-local bindings, they can also have
frame-local bindings. These bindings belong to one frame, and are in
effect when that frame is selected. Frame-local bindings are actually
frame parameters: you create a frame-local binding in a specific frame
by calling @code{modify-frame-parameters} and specifying the variable
name as the parameter name.
To enable frame-local bindings for a certain variable, call the function
@code{make-variable-frame-local}.
@defun make-variable-frame-local variable
Enable the use of frame-local bindings for @var{variable}. This does
not in itself create any frame-local bindings for the variable; however,
if some frame already has a value for @var{variable} as a frame
parameter, that value automatically becomes a frame-local binding.
If the variable is terminal-local, this function signals an error. Such
variables cannot have buffer-local bindings as well. @xref{Multiple
Displays}. A few variables that are implemented specially in Emacs
can be (and usually are) buffer-local, but can never be frame-local.
@end defun
Buffer-local bindings take precedence over frame-local bindings. Thus,
consider a variable @code{foo}: if the current buffer has a buffer-local
binding for @code{foo}, that binding is active; otherwise, if the
selected frame has a frame-local binding for @code{foo}, that binding is
active; otherwise, the default binding of @code{foo} is active.
Here is an example. First we prepare a few bindings for @code{foo}:
@example
(setq f1 (selected-frame))
(make-variable-frame-local 'foo)
;; @r{Make a buffer-local binding for @code{foo} in @samp{b1}.}
(set-buffer (get-buffer-create "b1"))
(make-local-variable 'foo)
(setq foo '(b 1))
;; @r{Make a frame-local binding for @code{foo} in a new frame.}
;; @r{Store that frame in @code{f2}.}
(setq f2 (make-frame))
(modify-frame-parameters f2 '((foo . (f 2))))
@end example
Now we examine @code{foo} in various contexts. Whenever the
buffer @samp{b1} is current, its buffer-local binding is in effect,
regardless of the selected frame:
@example
(select-frame f1)
(set-buffer (get-buffer-create "b1"))
foo
@result{} (b 1)
(select-frame f2)
(set-buffer (get-buffer-create "b1"))
foo
@result{} (b 1)
@end example
@noindent
Otherwise, the frame gets a chance to provide the binding; when frame
@code{f2} is selected, its frame-local binding is in effect:
@example
(select-frame f2)
(set-buffer (get-buffer "*scratch*"))
foo
@result{} (f 2)
@end example
@noindent
When neither the current buffer nor the selected frame provides
a binding, the default binding is used:
@example
(select-frame f1)
(set-buffer (get-buffer "*scratch*"))
foo
@result{} nil
@end example
@noindent
When the active binding of a variable is a frame-local binding, setting
the variable changes that binding. You can observe the result with
@code{frame-parameters}:
@example
(select-frame f2)
(set-buffer (get-buffer "*scratch*"))
(setq foo 'nobody)
(assq 'foo (frame-parameters f2))
@result{} (foo . nobody)
@end example
@node Future Local Variables
@section Possible Future Local Variables
We have considered the idea of bindings that are local to a category
of frames---for example, all color frames, or all frames with dark
backgrounds. We have not implemented them because it is not clear that
this feature is really useful. You can get more or less the same
results by adding a function to @code{after-make-frame-hook}, set up to
define a particular frame parameter according to the appropriate
conditions for each frame.
It would also be possible to implement window-local bindings. We
don't know of many situations where they would be useful, and it seems
that indirect buffers (@pxref{Indirect Buffers}) with buffer-local
bindings offer a way to handle these situations more robustly.
If sufficient application is found for either of these two kinds of
local bindings, we will provide it in a subsequent Emacs version.

View file

@ -246,7 +246,7 @@ Now, the screen looks like this:
@end smallexample
Normally, Emacs indicates the border between two side-by-side windows
with a scroll bar (@pxref{X Frame Parameters,Scroll Bars}) or @samp{|}
with a scroll bar (@pxref{Window Frame Parameters,Scroll Bars}) or @samp{|}
characters. The display table can specify alternative border
characters; see @ref{Display Tables}.
@end deffn
@ -328,8 +328,7 @@ of a window aside from restoring a saved window configuration
deletes any windows that aren't part of that configuration.
When you delete a window, the space it took up is given to one
adjacent sibling. (In Emacs version 18, the space was divided evenly
among all the siblings.)
adjacent sibling.
@c Emacs 19 feature
@defun window-live-p window
@ -341,14 +340,10 @@ using a deleted window as if it were live.
@end defun
@deffn Command delete-window &optional window
This function removes @var{window} from the display. If @var{window}
is omitted, then the selected window is deleted. An error is signaled
if there is only one window when @code{delete-window} is called.
This function returns @code{nil}.
When @code{delete-window} is called interactively, @var{window}
defaults to the selected window.
This function removes @var{window} from display, and returns @code{nil}.
If @var{window} is omitted, then the selected window is deleted. An
error is signaled if there is only one window when @code{delete-window}
is called.
@end deffn
@deffn Command delete-other-windows &optional window
@ -356,7 +351,7 @@ This function makes @var{window} the only window on its frame, by
deleting the other windows in that frame. If @var{window} is omitted or
@code{nil}, then the selected window is used by default.
The result is @code{nil}.
The return value is @code{nil}.
@end deffn
@deffn Command delete-windows-on buffer &optional frame
@ -426,7 +421,7 @@ or contents of windows; therefore, if the @var{forms} change them,
the change persists.
Each frame, at any time, has a window selected within the frame. This
macro only saves @emph{the} selected window; it does not save anything
macro saves only @emph{the} selected window; it does not save anything
about other frames. If the @var{forms} select some other frame and
alter the window selected within it, the change persists.
@end defmac
@ -565,8 +560,8 @@ include in the cycle, as in @code{next-window}.
@deffn Command other-window count
This function selects the @var{count}th following window in the cyclic
order. If count is negative, then it selects the @minus{}@var{count}th
preceding window. It returns @code{nil}.
order. If count is negative, then it moves back @minus{}@var{count}
windows in the cycle, rather than forward. It returns @code{nil}.
In an interactive call, @var{count} is the numeric prefix argument.
@end deffn
@ -695,7 +690,7 @@ low-level functions that give you more precise control.
Do not use the functions in this section in order to make a buffer
current so that a Lisp program can access or modify it; they are too
drastic for that purpose, since they change the display of buffers in
windows, which is gratuitous and will surprise the user. Instead, use
windows, which would be gratuitous and surprise the user. Instead, use
@code{set-buffer} (@pxref{Current Buffer}) and @code{save-excursion}
(@pxref{Excursions}), which designate buffers as current for programmed
access without affecting the display of buffers in windows.
@ -713,8 +708,9 @@ buffer by that name is created. The major mode for the new buffer is
set according to the variable @code{default-major-mode}. @xref{Auto
Major Mode}.
Normally the specified buffer is put at the front of the buffer list.
This affects the operation of @code{other-buffer}. However, if
Normally the specified buffer is put at the front of the buffer list
(both the selected frame's buffer list and the frame-independent buffer
list). This affects the operation of @code{other-buffer}. However, if
@var{norecord} is non-@code{nil}, this is not done. @xref{The Buffer
List}.
@ -792,7 +788,7 @@ This function returns @code{nil}.
@tindex buffer-display-count
@defvar buffer-display-count
This variable is always local in each buffer. When the buffer is
This variable is always buffer-local in each buffer. When the buffer is
created, @code{buffer-display-count} has value 0. Each time the buffer
is displayed in a window, that increments the value of
@code{buffer-display-count}.
@ -965,7 +961,8 @@ described above.
@c Emacs 19 feature
@cindex dedicated window
A window can be marked as ``dedicated'' to its buffer. Then
@code{display-buffer} does not try to use that window.
@code{display-buffer} will not try to use that window to display any
other buffer.
@defun window-dedicated-p window
This function returns @code{t} if @var{window} is marked as dedicated;
@ -1069,32 +1066,23 @@ For a realistic example of using @code{window-start}, see the
description of @code{count-lines} in @ref{Text Lines}.
@end defun
@defun window-end &optional window
@defun window-end &optional window update
This function returns the position of the end of the display in window
@var{window}. If @var{window} is @code{nil}, the selected window is
used.
Simply changing the buffer text or moving point does not update the
value that @code{window-end} returns. The value is updated only when
Emacs redisplays and redisplay actually finishes.
Emacs redisplays and redisplay completes without being preempted.
If the last redisplay of @var{window} was preempted, and did not finish,
Emacs does not know the position of the end of display in that window.
In that case, this function returns a value that is not correct. In a
future version, @code{window-end} will return @code{nil} in that case.
@ignore
in that case, this function returns @code{nil}. You can compute where
the end of the window @emph{would} have been, if redisplay had finished,
like this:
In that case, this function returns @code{nil}.
@example
(save-excursion
(goto-char (window-start window))
(vertical-motion (1- (window-height window))
window)
(point))
@end example
@end ignore
If you @var{update} is non-@code{nil}, @code{window-end} always returns
an up-to-date value for where the window ends. If the saved value is
valid, @code{window-end} returns that; otherwise it computes the correct
value by scanning the buffer text.
@end defun
@defun set-window-start window position &optional noforce
@ -1428,10 +1416,10 @@ characters that separates side-by-side windows.
The following three functions return size information about a window:
@defun window-height &optional window
This function returns the number of lines in @var{window}, including
its mode line. If @var{window} fills its entire frame, this is one less
than the value of @code{frame-height} on that frame (since the last line
is always reserved for the minibuffer).
This function returns the number of lines in @var{window}, including its
mode line. If @var{window} fills its entire frame, this is typically
one less than the value of @code{frame-height} on that frame (since the
last line is always reserved for the minibuffer).
If @var{window} is @code{nil}, the function uses the selected window.
@ -1654,16 +1642,9 @@ If you omit @var{frame}, the selected frame is used.
This function checks whether a particular frame position falls within
the window @var{window}.
@need 3000
The argument @var{coordinates} is a cons cell of this form:
@example
(@var{x} . @var{y})
@end example
@noindent
The coordinates @var{x} and @var{y} are measured in characters, and
count from the top left corner of the screen or frame.
The argument @var{coordinates} is a cons cell of the form @code{(@var{x}
. @var{y})}. The coordinates @var{x} and @var{y} are measured in
characters, and count from the top left corner of the screen or frame.
The value returned by @code{coordinates-in-window-p} is non-@code{nil}
if the coordinates are inside @var{window}. The value also indicates
@ -1713,7 +1694,9 @@ This function returns a new object representing the selected frame's
current window configuration, including the number of windows, their
sizes and current buffers, which window is the selected window, and for
each window the displayed buffer, the display-start position, and the
positions of point and the mark. An exception is made for point in the
positions of point and the mark. It also includes the values of
@code{window-min-height}, @code{window-min-width} and
@code{minibuffer-scroll-window}. An exception is made for point in the
current buffer, whose value is not saved.
@end defun
@ -1721,14 +1704,17 @@ current buffer, whose value is not saved.
This function restores the configuration of windows and buffers as
specified by @var{configuration}. The argument @var{configuration} must
be a value that was previously returned by
@code{current-window-configuration}. This function operates on the
frame for which @var{configuration} was made, whether that frame is
selected or not.
@code{current-window-configuration}. This configuration is restored in
the frame from which @var{configuration} was made, whether that frame is
selected or not. This always counts as a window size change and
triggers execution of the @code{window-size-change-functions}
(@pxref{Window Hooks}), because @code{set-window-configuration} doesn't
know how to tell whether the new configuration actually differs from the
old one.
This function always counts as a window size change and triggers
execution of the @code{window-size-change-functions}. (It doesn't know
how to tell whether the new configuration actually differs from the old
one.)
If the frame which @var{configuration} was saved from is dead, all this
function does is restore the three variables @code{window-min-height},
@code{window-min-width} and @code{minibuffer-scroll-window}.
Here is a way of using this function to get the same effect
as @code{save-window-excursion}:
@ -1784,6 +1770,17 @@ For example:
@defun window-configuration-p object
This function returns @code{t} if @var{object} is a window configuration.
@end defun
@defun compare-window-configurations config1 config2
This function compares two window configurations as regards the
structure of windows, but ignores the values of point and mark and the
saved scrolling positions---it can return @code{t} even if those
aspects differ.
The function @code{equal} can also compare two window configurations; it
regards configurations as unequal if they differ in any respect, even a
saved point or mark.
@end defun
Primitives to look inside of window configurations would make sense,
@ -1799,8 +1796,8 @@ There are three actions that can change this: scrolling the window,
switching buffers in the window, and changing the size of the window.
The first two actions run @code{window-scroll-functions}; the last runs
@code{window-size-change-functions}. The paradigmatic use of these
hooks is Lazy Lock mode; see @ref{Support Modes, Lazy Lock, Font Lock
Support Modes, emacs, The GNU Emacs Manual}.
hooks is in the implementation of Lazy Lock mode; see @ref{Support
Modes, Lazy Lock, Font Lock Support Modes, emacs, The GNU Emacs Manual}.
@defvar window-scroll-functions
This variable holds a list of functions that Emacs should call before