changeset 7086:075343a6b32b

*** empty log message ***
author Richard M. Stallman <rms@gnu.org>
date Sun, 24 Apr 1994 21:47:17 +0000
parents 5e56975be72a
children 57553b30baed
files lispref/display.texi lispref/internals.texi lispref/os.texi lispref/positions.texi lispref/searching.texi
diffstat 5 files changed, 379 insertions(+), 230 deletions(-) [+]
line wrap: on
line diff
--- a/lispref/display.texi	Sun Apr 24 21:32:06 1994 +0000
+++ b/lispref/display.texi	Sun Apr 24 21:47:17 1994 +0000
@@ -136,7 +136,7 @@
 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 Table}.)
+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
@@ -538,8 +538,9 @@
 @kindex modification-hooks @r{(overlay property)}
 This property's value is a list of functions to be called if any
 character within the overlay is changed or if text is inserted strictly
-within the overlay.  Each function receives two arguments: the beginning
-and end of the part of the buffer being modified.
+within the overlay.  Each function receives three arguments: the
+overlay, and the beginning and end of the part of the buffer being
+modified.
 
 @item insert-in-front-hooks
 @kindex insert-in-front-hooks @r{(overlay property)}
--- a/lispref/internals.texi	Sun Apr 24 21:32:06 1994 +0000
+++ b/lispref/internals.texi	Sun Apr 24 21:47:17 1994 +0000
@@ -58,9 +58,9 @@
 
   Some operating systems don't support dumping.  On those systems, you
 must start Emacs with the @samp{temacs -l loadup} command each time you
-use it.  This takes a long time, but since you need to start Emacs once
-a day at most---or once a week if you never log out---the extra time is
-not too severe a problem.
+use it.  This takes a substantial time, but since you need to start
+Emacs once a day at most---or once a week if you never log out---the
+extra time is not too severe a problem.
 
 @cindex @file{site-load.el}
   You can specify additional files to preload by writing a library named
@@ -72,18 +72,18 @@
 advisable.
 
 @cindex @file{site-init.el}
-  You can specify other things to be done in Lisp just before dumping by
-putting them in a library named @file{site-init.el}.  However, if these
-things might alter the behavior that users expect from an ordinary
-unmodified Emacs, it is better to do them in @file{default.el}, so that
+  You can specify other Lisp expressions to execute just before dumping
+by putting them in a library named @file{site-init.el}.  However, if
+they might alter the behavior that users expect from an ordinary
+unmodified Emacs, it is better to put them in @file{default.el}, so that
 users can override them if they wish.  @xref{Start-up Summary}.
 
-  Before @file{emacs} is dumped, the documentation strings for primitive
-and preloaded functions (and variables) need to be found in the file
-where they are stored.  This is done by calling
+  Before @file{loadup.el} dumps the new executable, it finds the
+documentation strings for primitive and preloaded functions (and
+variables) in the file where they are stored, by calling
 @code{Snarf-documentation} (@pxref{Accessing Documentation}).  These
-strings were moved out of @file{emacs} to make it smaller.
-@xref{Documentation Basics}.
+strings were moved out of the @file{emacs} executable to make it
+smaller.  @xref{Documentation Basics}.
 
 @defun dump-emacs to-file from-file
 @cindex unexec
@@ -129,16 +129,29 @@
 string such as @code{"19.22.1"}.
 @end defvar
 
+  The following two variables did not exist before Emacs version 19.23,
+which reduces their usefulness at present, but we hope they will be
+convenient in the future.
+
+@defvar emacs-major-version
+The major version number of Emacs, as an integer.
+@end defvar
+
+@defvar emacs-minor-version
+The minor version number of Emacs, as an integer.  For Emacs version
+19.23, the value is 23.
+@end defvar
+
 @node Pure Storage, Garbage Collection, Building Emacs, GNU Emacs Internals
 @appendixsec Pure Storage
 @cindex pure storage
 
-  There are two types of storage in GNU Emacs Lisp for user-created Lisp
-objects: @dfn{normal storage} and @dfn{pure storage}.  Normal storage is
-where all the new data which is created during an Emacs session is kept;
-see the following section for information on normal storage.  Pure
-storage is used for certain data in the preloaded standard Lisp files:
-data that should never change during actual use of Emacs.
+  Emacs Lisp uses two kinds of storage for user-created Lisp objects:
+@dfn{normal storage} and @dfn{pure storage}.  Normal storage is where
+all the new data which is created during an Emacs session is kept; see
+the following section for information on normal storage.  Pure storage
+is used for certain data in the preloaded standard Lisp files---data
+that should never change during actual use of Emacs.
 
   Pure storage is allocated only while @file{temacs} is loading the
 standard preloaded Lisp libraries.  In the file @file{emacs}, it is
@@ -146,17 +159,17 @@
 the memory space can be shared by all the Emacs jobs running on the
 machine at once.  Pure storage is not expandable; a fixed amount is
 allocated when Emacs is compiled, and if that is not sufficient for the
-preloaded libraries, @file{temacs} crashes.  If that happens, you will
-have to increase the compilation parameter @code{PURESIZE} in the file
+preloaded libraries, @file{temacs} crashes.  If that happens, you must
+increase the compilation parameter @code{PURESIZE} in the file
 @file{src/puresize.h}.  This normally won't happen unless you try to
 preload additional libraries or add features to the standard ones.
 
 @defun purecopy object
-  This function makes a copy of @var{object} in pure storage and returns
+This function makes a copy of @var{object} in pure storage and returns
 it.  It copies strings by simply making a new string with the same
 characters in pure storage.  It recursively copies the contents of
-vectors and cons cells.  It does not make copies of symbols, or any
-other objects, but just returns them unchanged.  It signals an error if
+vectors and cons cells.  It does not make copies of other objects such
+as symbols, but just returns them unchanged.  It signals an error if
 asked to copy markers.
 
 This function is used only while Emacs is being built and dumped; it is
@@ -164,23 +177,24 @@
 @end defun
 
 @defvar pure-bytes-used
-  The value of this variable is the number of bytes of pure storage
+The value of this variable is the number of bytes of pure storage
 allocated so far.  Typically, in a dumped Emacs, this number is very
 close to the total amount of pure storage available---if it were not,
 we would preallocate less.
 @end defvar
 
 @defvar purify-flag
-  This variable determines whether @code{defun} should make a copy of the
+This variable determines whether @code{defun} should make a copy of the
 function definition in pure storage.  If it is non-@code{nil}, then the
 function definition is copied into pure storage.
 
-  This flag is @code{t} while loading all of the basic functions for
+This flag is @code{t} while loading all of the basic functions for
 building Emacs initially (allowing those functions to be sharable and
-non-collectible).  It is set to @code{nil} when Emacs is saved out
-as @file{emacs}.  The flag is set and reset in the C sources.
+non-collectible).  Dumping Emacs as an executable always writes
+@code{nil} in this variable, regardless of the value it actually has
+before and after dumping.
 
- You should not change this flag in a running Emacs.
+You should not change this flag in a running Emacs.
 @end defvar
 
 @node Garbage Collection, Writing Emacs Primitives, Pure Storage, GNU Emacs Internals
@@ -189,41 +203,40 @@
 
 @cindex memory allocation
   When a program creates a list or the user defines a new function (such
-as by loading a library), then that data is placed in normal storage.
-If normal storage runs low, then Emacs asks the operating system to
+as by loading a library), that data is placed in normal storage.  If
+normal storage runs low, then Emacs asks the operating system to
 allocate more memory in blocks of 1k bytes.  Each block is used for one
-type of Lisp object, so symbols, cons cells, markers, etc.@: are
-segregated in distinct blocks in memory.  (Vectors, buffers and certain
-other editing types, which are fairly large, are allocated in individual
-blocks, one per object, while strings are packed into blocks of 8k
-bytes.)
+type of Lisp object, so symbols, cons cells, markers, etc., are
+segregated in distinct blocks in memory.  (Vectors, long strings,
+buffers and certain other editing types, which are fairly large, are
+allocated in individual blocks, one per object, while small strings are
+packed into blocks of 8k bytes.)
 
-  It is quite common to use some storage for a while, then release it
-by, for example, killing a buffer or deleting the last pointer to an
+  It is quite common to use some storage for a while, then release it by
+(for example) killing a buffer or deleting the last pointer to an
 object.  Emacs provides a @dfn{garbage collector} to reclaim this
 abandoned storage.  (This name is traditional, but ``garbage recycler''
 might be a more intuitive metaphor for this facility.)
 
-  The garbage collector operates by scanning all the objects that have
-been allocated and marking those that are still accessible to Lisp
-programs.  To begin with, all the symbols, their values and associated
-function definitions, and any data presently on the stack, are
-accessible.  Any objects which can be reached indirectly through other
-accessible objects are also accessible.
+  The garbage collector operates by finding and marking all Lisp objects
+that are still accessible to Lisp programs.  To begin with, it assumes
+all the symbols, their values and associated function definitions, and
+any data presently on the stack, are accessible.  Any objects which can
+be reached indirectly through other accessible objects are also
+accessible.
 
-  When this is finished, all inaccessible objects are garbage.  No
+  When marking is finished, all objects still unmarked are garbage.  No
 matter what the Lisp program or the user does, it is impossible to refer
-to them, since there is no longer a way to reach them.  Their
-space might as well be reused, since no one will notice.  That is what
-the garbage collector arranges to do.
+to them, since there is no longer a way to reach them.  Their space
+might as well be reused, since no one will miss them.  The second,
+``sweep'' phase of the garbage collector arranges to reuse them.
 
 @cindex free list
-  Unused cons cells are chained together onto a @dfn{free list} for
-future allocation; likewise for symbols and markers.  The accessible
-strings are compacted so they are contiguous in memory; then the rest of
-the space formerly occupied by strings is made available to the string
-creation functions.  Vectors, buffers, windows and other large objects
-are individually allocated and freed using @code{malloc}.
+  The sweep phase puts unused cons cells onto a @dfn{free list}
+for future allocation; likewise for symbols and markers.  It compacts
+the accessible strings so they occupy fewer 8k blocks; then it frees the
+other 8k blocks.  Vectors, buffers, windows and other large objects are
+individually allocated and freed using @code{malloc} and @code{free}.
 
 @cindex CL note---allocate more storage
 @quotation
@@ -241,28 +254,30 @@
 @end quotation
 
 @deffn Command garbage-collect
-  This command runs a garbage collection, and returns information on
+This command runs a garbage collection, and returns information on
 the amount of space in use.  (Garbage collection can also occur
 spontaneously if you use more than @code{gc-cons-threshold} bytes of
 Lisp data since the previous garbage collection.)
 
-  @code{garbage-collect} returns a list containing the following
+@code{garbage-collect} returns a list containing the following
 information:
 
-@smallexample
+@example
 @group
 ((@var{used-conses} . @var{free-conses})
  (@var{used-syms} . @var{free-syms})
+@end group
  (@var{used-markers} . @var{free-markers})
  @var{used-string-chars} 
  @var{used-vector-slots}
  (@var{used-floats} . @var{free-floats}))
 
+@group
 (garbage-collect)
      @result{} ((3435 . 2332) (1688 . 0)
            (57 . 417) 24510 3839 (4 . 1))
 @end group
-@end smallexample
+@end example
 
 Here is a table explaining each element:
 
@@ -306,22 +321,22 @@
 @end deffn
 
 @defopt gc-cons-threshold
-  The value of this variable is the number of bytes of storage that must
+The value of this variable is the number of bytes of storage that must
 be allocated for Lisp objects after one garbage collection in order to
-request another garbage collection.  A cons cell counts as eight bytes,
+trigger another garbage collection.  A cons cell counts as eight bytes,
 a string as one byte per character plus a few bytes of overhead, and so
-on.  (Space allocated to the contents of buffers does not count.)  Note
-that the new garbage collection does not happen immediately when the
-threshold is exhausted, but only the next time the Lisp evaluator is
+on; space allocated to the contents of buffers does not count.  Note
+that the subsequent garbage collection does not happen immediately when
+the threshold is exhausted, but only the next time the Lisp evaluator is
 called.
 
-  The initial threshold value is 100,000.  If you specify a larger
+The initial threshold value is 100,000.  If you specify a larger
 value, garbage collection will happen less often.  This reduces the
 amount of time spent garbage collecting, but increases total memory use.
 You may want to do this when running a program which creates lots of
 Lisp data.
 
-  You can make collections more frequent by specifying a smaller value,
+You can make collections more frequent by specifying a smaller value,
 down to 10,000.  A value less than 10,000 will remain in effect only
 until the subsequent garbage collection, at which time
 @code{garbage-collect} will set the threshold back to 10,000.
@@ -354,11 +369,11 @@
 @smallexample
 @group
 DEFUN ("or", For, Sor, 0, UNEVALLED, 0,
-  "Eval args until one of them yields non-NIL, then return that value.\n\
+  "Eval args until one of them yields non-nil, then return that value.\n\
 The remaining args are not evalled at all.\n\
 @end group
 @group
-If all args return NIL, return NIL.")
+If all args return nil, return nil.")
   (args)
      Lisp_Object args;
 @{
@@ -368,7 +383,7 @@
 @end group
 
 @group
-  if (NULL(args))
+  if (NULL (args))
     return Qnil;
 
   args_left = args;
@@ -383,7 +398,7 @@
         break;
       args_left = Fcdr (args_left);
     @}
-  while (!NULL(args_left));
+  while (!NULL (args_left));
 @end group
 
 @group
@@ -394,7 +409,7 @@
 @end smallexample
 
   Let's start with a precise explanation of the arguments to the
-@code{DEFUN} macro.  Here are the general names for them:
+@code{DEFUN} macro.  Here is a template for them:
 
 @example
 DEFUN (@var{lname}, @var{fname}, @var{sname}, @var{min}, @var{max}, @var{interactive}, @var{doc})
@@ -402,8 +417,8 @@
 
 @table @var
 @item lname
-This is the name of the Lisp symbol to define with this
-function; in the example above, it is @code{or}.
+This is the name of the Lisp symbol to define as the function name; in
+the example above, it is @code{or}.
 
 @item fname
 This is the C function name for this function.  This is
@@ -424,24 +439,24 @@
 @samp{S}.
 
 @item min
-This is the minimum number of arguments that the function requires.  For
-@code{or}, no arguments are required.
+This is the minimum number of arguments that the function requires.  The
+function @code{or} allows a minimum of zero arguments.
 
 @item max
-This is the maximum number of arguments that the function accepts.
-Alternatively, it can be @code{UNEVALLED}, indicating a special form
-that receives unevaluated arguments.  A function with the equivalent of
-an @code{&rest} argument would have @code{MANY} in this position.  Both
-@code{UNEVALLED} and @code{MANY} are macros.  This argument must be one
-of these macros or a number at least as large as @var{min}.  It may not
-be greater than six.
+This is the maximum number of arguments that the function accepts, if
+there is a fixed maximum.  Alternatively, it can be @code{UNEVALLED},
+indicating a special form that receives unevaluated arguments, or
+@code{MANY}, indicating an unlimited number of evaluated arguments (the
+equivalent of @code{&rest}).  Both @code{UNEVALLED} and @code{MANY} are
+macros.  If @var{max} is a number, it may not be less than @var{min} and
+it may not be greater than seven.
 
 @item interactive
 This is an interactive specification, a string such as might be used as
 the argument of @code{interactive} in a Lisp function.  In the case of
 @code{or}, it is 0 (a null pointer), indicating that @code{or} cannot be
-called interactively.  A value of @code{""} indicates an interactive
-function taking no arguments.
+called interactively.  A value of @code{""} indicates a function that
+should receive no arguments when called interactively.
 
 @item doc
 This is the documentation string.  It is written just like a
@@ -450,13 +465,15 @@
 should be a single sentence.
 @end table
 
-  After the call to the @code{DEFUN} macro, you must write the list
-of argument names that every C function must have, followed by
-ordinary C declarations for them.  Normally, all the arguments must
-be declared as @code{Lisp_Object}.  If the function has no upper limit
-on the number of arguments in Lisp, then in C it receives two arguments:
-the number of Lisp arguments, and the address of a block containing their
-values.  These have types @code{int} and @w{@code{Lisp_Object *}}.
+  After the call to the @code{DEFUN} macro, you must write the argument
+name list that every C function must have, followed by ordinary C
+declarations for the arguments.  For a function with a fixed maximum
+number of arguments, declare a C argument for each Lisp argument, and
+give them all type @code{Lisp_Object}.  If the function has no upper
+limit on the number of arguments in Lisp, then in C it receives two
+arguments: the first is the number of Lisp arguments, and the second is
+the address of a block containing their values.  They have types
+@code{int} and @w{@code{Lisp_Object *}}.
 
   Within the function @code{For} itself, note the use of the macros
 @code{GCPRO1} and @code{UNGCPRO}.  @code{GCPRO1} is used to ``protect''
@@ -468,55 +485,56 @@
 @code{UNGCPRO} cancels the protection of the variables that are
 protected in the current function.  It is necessary to do this explicitly.
 
-  For most data types, it suffices to know that one pointer to the
-object is protected; as long as the object is not recycled, all pointers
-to it remain valid.  This is not so for strings, because the garbage
-collector can move them.  When a string is moved, any pointers to it
-that the garbage collector does not know about will not be properly
-relocated.  Therefore, all pointers to strings must be protected across
-any point where garbage collection may be possible.
+  For most data types, it suffices to protect at least one pointer to
+the object; as long as the object is not recycled, all pointers to it
+remain valid.  This is not so for strings, because the garbage collector
+can move them.  When the garbage collector moves a string, it relocates
+all the pointers it knows about; any other pointers become invalid.
+Therefore, you must protect all pointers to strings across any point
+where garbage collection may be possible.
 
-  The macro @code{GCPRO1} protects just one local variable.  If you
-want to protect two, use @code{GCPRO2} instead; repeating @code{GCPRO1}
-will not work.  There are also @code{GCPRO3} and @code{GCPRO4}.
+  The macro @code{GCPRO1} protects just one local variable.  If you want
+to protect two, use @code{GCPRO2} instead; repeating @code{GCPRO1} will
+not work.  Macros @code{GCPRO3} and @code{GCPRO4} also exist.
 
-  In addition to using these macros, you must declare the local
-variables such as @code{gcpro1} which they implicitly use.  If you
-protect two variables, with @code{GCPRO2}, you must declare
-@code{gcpro1} and @code{gcpro2}, as it uses them both.  Alas, we can't
-explain all the tricky details here.
+  These macros implicitly use local variables such as @code{gcpro1}; you
+must declare these explicitly, with type @code{struct gcpro}.  Thus, if
+you use @code{GCPRO2}, you must declare @code{gcpro1} and @code{gcpro2}.
+Alas, we can't explain all the tricky details here.
 
-  Defining the C function is not enough; you must also create the
-Lisp symbol for the primitive and store a suitable subr object
-in its function cell.  This is done by adding code to an initialization
-routine.  The code looks like this:
+  Defining the C function is not enough to make a Lisp primitive
+available; you must also create the Lisp symbol for the primitive and
+store a suitable subr object in its function cell.  The code looks like
+this:
 
 @example
 defsubr (&@var{subr-structure-name});
 @end example
 
 @noindent
-@var{subr-structure-name} is the name you used as the third argument to
-@code{DEFUN}.
+Here @var{subr-structure-name} is the name you used as the third
+argument to @code{DEFUN}.
 
-  If you are adding a primitive to a file that already has Lisp
-primitives defined in it, find the function (near the end of the file)
-named @code{syms_of_@var{something}}, and add that function call to it.
-If the file doesn't have this function, or if you create a new file, add
-to it a @code{syms_of_@var{filename}} (e.g., @code{syms_of_myfile}).
-Then find the spot in @file{emacs.c} where all of these functions are
-called, and add a call to @code{syms_of_@var{filename}} there.
+  If you add a new primitive to a file that already has Lisp primitives
+defined in it, find the function (near the end of the file) named
+@code{syms_of_@var{something}}, and add the call to @code{defsubr}
+there.  If the file doesn't have this function, or if you create a new
+file, add to it a @code{syms_of_@var{filename}} (e.g.,
+@code{syms_of_myfile}).  Then find the spot in @file{emacs.c} where all
+of these functions are called, and add a call to
+@code{syms_of_@var{filename}} there.
 
   This function @code{syms_of_@var{filename}} is also the place to
 define any C variables which are to be visible as Lisp variables.
-@code{DEFVAR_LISP} is used to make a C variable of type
-@code{Lisp_Object} visible in Lisp.  @code{DEFVAR_INT} is used to make a
-C variable of type @code{int} visible in Lisp with a value that is an
-integer.
+@code{DEFVAR_LISP} makes a C variable of type @code{Lisp_Object} visible
+in Lisp.  @code{DEFVAR_INT} makes a C variable of type @code{int}
+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}.
 
-  Here is another 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.
+  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.
 
 @smallexample
 @group
@@ -547,9 +565,7 @@
   if ((XINT (xcoord) < XINT (XWINDOW (window)->left))
       || (XINT (xcoord) >= (XINT (XWINDOW (window)->left)
                             + XINT (XWINDOW (window)->width))))
-    @{
-      return Qnil;
-    @}
+    return Qnil;
   XFASTINT (xcoord) -= XFASTINT (XWINDOW (window)->left);
 @end group
 @group
@@ -560,9 +576,7 @@
   if ((XINT (ycoord) < XINT (XWINDOW (window)->top))
       || (XINT (ycoord) >= (XINT (XWINDOW (window)->top)
                             + XINT (XWINDOW (window)->height)) - 1))
-    @{
-      return Qnil;
-    @}
+    return Qnil;
 @end group
 @group
   XFASTINT (ycoord) -= XFASTINT (XWINDOW (window)->top);
@@ -571,10 +585,20 @@
 @end group
 @end smallexample
 
-  Note that you cannot directly call functions defined in Lisp as, for
-example, the primitive function @code{Fcons} is called above.  You must
-create the appropriate Lisp form, protect everything from garbage
-collection, and @code{Feval} the form, as was done in @code{For} above.
+  Note that C code cannot call functions by name unless they are defined
+in C.  The way to call a function written in Lisp is to use
+@code{Ffuncall}, which embodies the Lisp function @code{funcall}.  Since
+the Lisp function @code{funcall} accepts an unlimited number of
+arguments, in C it takes two: the number of Lisp-level arguments, and a
+one-dimensional array containing their values.  The first Lisp-level
+argument is the Lisp function to call, and the rest are the arguments to
+pass to it.  Since @code{Ffuncall} can call the evaluator, you must
+protect pointers from garbage collection around the call to
+@code{Ffuncall}.
+
+  The C functions @code{call0}, @code{call1}, @code{call2}, and so on,
+provide handy ways to call a Lisp function conveniently with a fixed
+number of arguments.  They work by calling @code{Ffuncall}.
 
   @file{eval.c} is a very good file to look through for examples;
 @file{lisp.h} contains the definitions for some important macros and
@@ -592,12 +616,14 @@
 address the object, and the remaining six to eight bits are used for a
 tag that identifies the object's type.
 
-  Because all access to data is through tagged pointers, it is always
-possible to determine the type of any object.  This allows variables to
-be untyped, and the values assigned to them to be changed without regard
-to type.  Function arguments also can be of any type; if you want a
-function to accept only a certain type of argument, you must check the
-type explicitly using a suitable predicate (@pxref{Type Predicates}).
+  Because Lisp objects are represented as tagged pointers, it is always
+possible to determine the Lisp data type of any object.  The C data type
+@code{Lisp_Object} can hold any Lisp object of any data type.  Ordinary
+variables have type @code{Lisp_Object}, which means they can hold any
+type of Lisp value; you can determine the actual data type only at run
+time.  The same is true for function arguments; if you want a function
+to accept only a certain type of argument, you must check the type
+explicitly using a suitable predicate (@pxref{Type Predicates}).
 @cindex type checking internals
 
 @menu
@@ -637,8 +663,8 @@
 This field contains the @code{window-start} position in the buffer as of
 the last time the buffer was displayed in a window.
 
-@item undodata
-This field points to the buffer's undo stack.  @xref{Undo}.
+@item undo_list
+This field points to the buffer's undo list.  @xref{Undo}.
 
 @item syntax_table_v
 This field contains the syntax table for the buffer.  @xref{Syntax Tables}.
@@ -664,9 +690,10 @@
 have one.  @xref{Display Tables}.
 
 @item markers
-This field contains the chain of all markers that point into the
-buffer.  At each deletion or motion of the buffer gap, all of these
-markers must be checked and perhaps updated.  @xref{Markers}.
+This field contains the chain of all markers that currently point into
+the buffer.  Deletion of text in the buffer, and motion of the buffer's
+gap, must check each of these markers and perhaps update it.
+@xref{Markers}.
 
 @item backed_up
 This field is a flag which tells whether a backup file has been made
@@ -676,15 +703,30 @@
 This field contains the mark for the buffer.  The mark is a marker,
 hence it is also included on the list @code{markers}.  @xref{The Mark}.
 
+@item mark_active
+This field is non-@code{nil} if the buffer's mark is active.
+
 @item local_var_alist
-This field contains the association list containing all of the variables
-local in this buffer, and their values.  The function
-@code{buffer-local-variables} returns a copy of this list.
-@xref{Buffer-Local Variables}.
+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}.
+
+@item keymap
+This field holds the buffer's local keymap.  @xref{Keymaps}.
 
-@item mode_line_format
-This field contains a Lisp object which controls how to display the mode
-line for this buffer.  @xref{Mode Line Format}.
+@item overlay_center
+This field holds the current overlay center position.  @xref{Overlays}.
+
+@item overlays_before
+This field holds a list of the overlays in this buffer that end at or
+before the current overlay center position.  They are sorted in order of
+decreasing end position.
+
+@item overlays_after
+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.
 @end table
 
 @node Window Internals, Process Internals, Buffer Internals, Object Internals
@@ -696,64 +738,102 @@
 
 @table @code
 @item frame
-  The frame that this window is on.
+The frame that this window is on.
 
 @item mini_p
-  Non-@code{nil} if this window is a minibuffer window.
-
-@item height
-  The height of the window, measured in lines.
-
-@item width
-  The width of the window, measured in columns.
+Non-@code{nil} if this window is a minibuffer window.
 
 @item buffer
-  The buffer which the window is displaying.  This may change often during
+The buffer which the window is displaying.  This may change often during
 the life of the window.
 
 @item dedicated
-  Non-@code{nil} if this window is dedicated to its buffer.
-
-@item start
- The position in the buffer which is the first character to be displayed
-in the window.
+Non-@code{nil} if this window is dedicated to its buffer.
 
 @item pointm
 @cindex window point internals
-  This is the value of point in the current buffer when this window is
+This is the value of point in the current buffer when this window is
 selected; when it is not selected, it retains its previous value.
 
+@item start
+he position in the buffer which is the first character to be displayed
+in the window.
+
+@item force_start
+If this flag is non-@code{nil}, it says that the window has been
+scrolled explicitly by the Lisp program.  This affects what the next
+redisplay does if point is off the screen: instead of scrolling the
+window to show the text around point, it moves point to a location that
+is on the screen.
+
+@item last_modified
+The @code{modified} field of the window's buffer, as of the last time
+a redisplay completed in this window.
+
+@item last_point
+The buffer's value of point, as of the last time
+a redisplay completed in this window.
+
 @item left
-  This is the left-hand edge of the window, measured in columns.  (The
+This is the left-hand edge of the window, measured in columns.  (The
 leftmost column on the screen is @w{column 0}.)
 
 @item top
-  This is the top edge of the window, measured in lines.  (The top line on
+This is the top edge of the window, measured in lines.  (The top line on
 the screen is @w{line 0}.)
 
+@item height
+The height of the window, measured in lines.
+
+@item width
+The width of the window, measured in columns.
+
 @item next
-  This is the window that is the next in the chain of siblings.
+This is the window that is the next in the chain of siblings.  It is
+@code{nil} in a window that is the rightmost or bottommost of a group of
+siblings.
 
 @item prev
-  This is the window that is the previous in the chain of siblings.
+This is the window that is the previous in the chain of siblings.  It is
+@code{nil} in a window that is the leftmost or topmost of a group of
+siblings.
 
-@item force_start
-  This is a flag which, if non-@code{nil}, says that the window has been
-scrolled explicitly by the Lisp program.  At the next redisplay, if
-point is off the screen, instead of scrolling the window to show the
-text around point, point will be moved to a location that is on the
-screen.
+@item parent
+Internally, Emacs arranges windows in a tree; each group of siblings has
+a parent window whose area includes all the siblings.  This field points
+to a window's parent.
+
+Parent windows do not display buffers, and play little role in display
+except to shape their child windows.  Emacs Lisp programs usually have
+no access to the parent windows; they operate on the windows at the
+leaves of the tree, that actually display buffers.
 
 @item hscroll
-  This is the number of columns that the display in the window is scrolled
+This is the number of columns that the display in the window is scrolled
 horizontally to the left.  Normally, this is 0.
 
 @item use_time
-  This is the last time that the window was selected.  The function
+This is the last time that the window was selected.  The function
 @code{get-lru-window} uses this field.
 
 @item display_table
-  The window's display table, or @code{nil} if none is specified for it.
+The window's display table, or @code{nil} if none is specified for it.
+
+@item update_mode_line
+Non-@code{nil} means this window's mode line needs to be updated.
+
+@item base_line_number
+The line number of a certain position in the buffer, or @code{nil}.
+This is used for displaying the line number of point in the mode line.
+
+@item base_line_pos
+The position in the buffer for which the line number is known, or
+@code{nil} meaning none is known.
+
+@item region_showing
+If the region (or part of it) is highlighted in this window, this field
+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
@@ -788,20 +868,40 @@
 A flag, non-@code{nil} if this is really a child process.
 It is @code{nil} for a network connection.
 
-@item flags
-A symbol indicating the state of the process.  Possible values include
-@code{run}, @code{stop}, @code{closed}, etc.
-
-@item reason
-An integer, the Unix signal number that the process received that
-caused the process to terminate or stop.  If the process has exited,
-then this is the exit code it specified.
-
 @item mark
 A marker indicating the position of end of last output from this process
 inserted into the buffer.  This is usually the end of the buffer.
 
 @item kill_without_query
-A flag, non-@code{nil} meaning this process should not cause
-confirmation to be needed if Emacs is killed.
+If this is non-@code{nil}, killing Emacs while this process is still
+running does not ask for confirmation about killing the process.
+
+@item raw_status_low
+@itemx raw_status_high
+These two fields record 16 bits each of the process status returned by
+the @code{wait} system call.
+
+@item status
+The process status, as @code{process-status} should return it.
+
+@item tick
+@itemx update_tick
+If these two fields are not equal, a change in the status of the process
+needs to be reported, either by running the sentinel or by inserting a
+message in the process buffer.
+
+@item pty_flag
+Non-@code{nil} if communication with the subprocess uses a @sc{pty};
+@code{nil} if it uses a pipe.
+
+@item infd
+The file descriptor for input from the process.
+
+@item outfd
+The file descriptor for output to the process.
+
+@item subtty
+The file descriptor for the terminal that the subprocess is using.  (On
+some systems, there is no need to record this, so the value is
+@code{nil}.)
 @end table
--- a/lispref/os.texi	Sun Apr 24 21:32:06 1994 +0000
+++ b/lispref/os.texi	Sun Apr 24 21:47:17 1994 +0000
@@ -159,7 +159,7 @@
 contain Lisp code.  It is called your @dfn{init file}.  The command line
 switches @samp{-q} and @samp{-u} affect the use of the init file;
 @samp{-q} says not to load an init file, and @samp{-u} says to load a
-specified user's init file instead of yours.  @xref{Entering Emacs, , ,
+specified user's init file instead of yours.  @xref{Entering Emacs,,,
 emacs, The GNU Emacs Manual}.
 
 @cindex default init file
@@ -182,7 +182,7 @@
 byte-compile it (@pxref{Byte Compilation}), and make your @file{.emacs}
 file load the other file using @code{load} (@pxref{Loading}).
 
-  @xref{Init File Examples, , , emacs, The GNU Emacs Manual}, for
+  @xref{Init File Examples,,, emacs, The GNU Emacs Manual}, for
 examples of how to make various commonly desired customizations in your
 @file{.emacs} file.
 
@@ -648,6 +648,23 @@
 @end smallexample
 @end defvar
 
+@defvar invocation-name
+This variable holds the program name under which Emacs was invoked.  The
+value is a string, and does not include a directory name.
+@end defvar
+
+@defvar invocation-directory
+This variable holds the directory from which the Emacs executable was
+invoked, or perhaps @code{nil} if that directory cannot be determined.
+@end defvar
+
+@defvar installation-directory
+If non-@code{nil}, this is a directory within which to look for the
+@file{lib-src} and @file{etc} subdirectories.  This is non-@code{nil}
+when Emacs can't find those directories in their standard installed
+locations, but can find them near where the Emacs executable was found.
+@end defvar
+
 @defun load-average
 This function returns the current 1 minute, 5 minute and 15 minute
 load averages in a list.  The values are integers that are 100 times
@@ -1321,6 +1338,7 @@
 but @kbd{C-s} and @kbd{C-q}, so you can in effect type them as @kbd{C-\}
 and @kbd{C-^} even when they are input for other commands.
 @xref{Translating Input}.
+@end enumerate
 
 If the terminal is the source of the flow control characters, then once
 you enable kernel flow control handling, you probably can make do with
--- a/lispref/positions.texi	Sun Apr 24 21:32:06 1994 +0000
+++ b/lispref/positions.texi	Sun Apr 24 21:47:17 1994 +0000
@@ -106,11 +106,6 @@
 @end example
 @end defun
 
-@defvar buffer-saved-size
-  The value of this buffer-local variable is the former length of the
-current buffer, as of the last time it was read in, saved or auto-saved.
-@end defvar
-
 @node Motion
 @section Motion
 
@@ -447,14 +442,19 @@
 flag, and display table may vary between windows).  @xref{Usual
 Display}.
 
-@defun vertical-motion count
+@defun vertical-motion count &optional window
 This function moves point to the start of the screen line @var{count}
 screen lines down from the screen line containing point.  If @var{count}
 is negative, it moves up instead.
 
-This function returns the number of lines moved.  The value may be less
-in absolute value than @var{count} if the beginning or end of the buffer
-was reached.
+@code{vertical-motion} returns the number of lines moved.  The value may
+be less in absolute value than @var{count} if the beginning or end of
+the buffer was reached.
+
+The window @var{window} is used for obtaining parameters such as the
+width, the horizontal scrolling, and the display table.  But
+@code{vertical-motion} always operates on the current buffer, even if
+@var{window} currently displays some other buffer.
 @end defun
 
 @deffn Command move-to-window-line count
@@ -478,7 +478,7 @@
 window numbered 0.
 @end deffn
 
-@defun compute-motion from frompos to topos width offsets
+@defun compute-motion from frompos to topos width offsets window
 This function scan through the current buffer, calculating screen
 position.  It scans the current buffer forward from position @var{from},
 assuming that is at screen coordinates @var{frompos}, to position
@@ -494,11 +494,16 @@
 
 The argument @var{offsets} is either @code{nil} or a cons cell of the
 form @code{(@var{hscroll} . @var{tab-offset})}.  Here @var{hscroll} is
-the number of columns not being displayed at the left margin; in most
-calls, this comes from @code{window-hscroll}.  Meanwhile,
-@var{tab-offset} is the number of columns of an initial tab character
-(at @var{from}) that aren't included in the display, perhaps because the
-line was continued within that character.
+the number of columns not being displayed at the left margin; most
+callers get this from @code{window-hscroll}.  Meanwhile,
+@var{tab-offset} is the offset between column numbers on the screen and
+column numbers in the buffer.  This can be nonzero in a continuation
+line, when the previous screen lines' widths do not add up to a multiple
+of @code{tab-width}.  It is always zero in a non-continuation line.
+
+The window @var{window} serves to specify which display table to use;
+that is its only effect.  @code{compute-motion} always operates on the
+current buffer, regardless of what buffer is displayed in @var{window}.
 
 The return value is a list of five elements:
 
@@ -530,6 +535,10 @@
                        (window-width)
                        (cons (window-hscroll) 0))))
 @end example
+
+When you use @code{compute-motion} for the minibuffer, you need to use
+@code{minibuffer-prompt-width} to get the horizontal position of the
+beginning of the first screen line.  @xref{Minibuffer Misc}.
 @end defun
 
 @node Vertical Motion
@@ -590,31 +599,32 @@
 Emacs Manual}.
 
 @deffn Command forward-list arg
-Move forward across @var{arg} balanced groups of parentheses.
-(Other syntactic entities such as words or paired string quotes
-are ignored.)
+This function moves forward across @var{arg} balanced groups of
+parentheses.  (Other syntactic entities such as words or paired string
+quotes are ignored.)
 @end deffn
 
 @deffn Command backward-list arg
-Move backward across @var{arg} balanced groups of parentheses.
-(Other syntactic entities such as words or paired string quotes
-are ignored.)
+This function moves backward across @var{arg} balanced groups of
+parentheses.  (Other syntactic entities such as words or paired string
+quotes are ignored.)
 @end deffn
 
 @deffn Command up-list arg
-Move forward out of @var{arg} levels of parentheses.
+This function moves forward out of @var{arg} levels of parentheses.
 A negative argument means move backward but still to a less deep spot.
 @end deffn
 
 @deffn Command down-list arg
-Move forward down @var{arg} levels of parentheses.  A negative argument
-means move backward but still go down @var{arg} levels.
+This function moves forward down @var{arg} levels of parentheses.  A
+negative argument means move backward but still go down @var{arg}
+levels.
 @end deffn
 
 @deffn Command forward-sexp arg
-Move forward across @var{arg} balanced expressions.
-Balanced expressions include both those delimited by parentheses
-and other kinds, such as words and string constants.  For example,
+This function moves forward across @var{arg} balanced expressions.
+Balanced expressions include both those delimited by parentheses and
+other kinds, such as words and string constants.  For example,
 
 @example
 @group
@@ -635,9 +645,29 @@
 @end deffn
 
 @deffn Command backward-sexp arg
-Move backward across @var{arg} balanced expressions.
+This function moves backward across @var{arg} balanced expressions.
+@end deffn
+
+@deffn Command beginning-of-defun arg
+This function moves back to the @var{arg}th beginning of a defun.  If
+@var{arg} is negative, this actually moves forward, but it still moves
+to the beginning of a defun, not to the end of one.
 @end deffn
 
+@deffn Command end-of-defun arg
+Move forward to the @var{arg}th end of a defun.  If @var{arg} is
+negative, this actually moves backward, but it still moves to the end of
+a defun, not to the beginning of one.
+@end deffn
+
+@defopt defun-prompt-regexp
+If non-@code{nil}, this variable holds a regular expression that
+specifies what text can appear before the open-parenthesis that starts a
+defun.  That is to say, the a defun begins on a line which starts
+with a match for this regular expression, followed by a character
+with open-parenthesis syntax.
+@end defopt
+
 @node Skipping Characters
 @comment  node-name,  next,  previous,  up
 @subsection Skipping Characters
--- a/lispref/searching.texi	Sun Apr 24 21:32:06 1994 +0000
+++ b/lispref/searching.texi	Sun Apr 24 21:47:17 1994 +0000
@@ -1002,11 +1002,11 @@
 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, except when all of the words in the original
-text are only one character long.  In that event, the replacement text
-is capitalized.  If @emph{any} of the words in the original text is
-capitalized, then all of the words in the replacement text are
-capitalized.
+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 @var{literal} is non-@code{nil}, then @var{replacement} is inserted
 exactly as it is, the only alterations being case changes as needed.