linking to an external LDAP client library. As of 21.2, XEmacs has been
successfully built and tested with
- * OpenLDAP 1.0.3 (<http://www.openldap.org/>)
+ * OpenLDAP 1.2 (<http://www.openldap.org/>)
* University of Michigan's LDAP 3.3
(<http://www.umich.edu/~dirsvcs/ldap/>)
Other libraries conforming to RFC 1823 will probably work also but
may require some minor tweaking at C level.
- The standard XEmacs configure script autodetects an installed LDAP
+ The standard XEmacs configure script auto-detects an installed LDAP
library provided the library itself and the corresponding header files
can be found in the library and include paths. A successful detection
will be signalled in the final output of the configure script.
higher-level layer which provides more convenient primitives to
effectively use LDAP.
- As of XEmacs 21.0, only interfaces to basic LDAP search functions are
-provided, broader support is planned in future versions.
+ The low-level API should be used directly for very specific purposes
+(such as multiple operations on a connection) only. The higher-level
+functions provide a more convenient way to access LDAP directories
+hiding the subtleties of handling the connection, translating arguments
+and ensuring compliance with LDAP internationalization rules and formats
+(currently partly implemented only).
* Menu:
* LDAP Variables:: Lisp variables related to LDAP
* The High-Level LDAP API:: High-level LDAP lisp functions
* The Low-Level LDAP API:: Low-level LDAP lisp primitives
+* LDAP Internationalization:: I18n variables and functions
\1f
File: lispref.info, Node: LDAP Variables, Next: The High-Level LDAP API, Prev: XEmacs LDAP API, Up: XEmacs LDAP API
- Variable: ldap-default-base
Default base for LDAP searches. This is a string using the syntax
- of RFC 1779. For instance, "o¬ME, cÿ" limits the search to the
+ of RFC 1779. For instance, "o=ACME, c=US" limits the search to the
Acme organization in the United States.
- Variable: ldap-host-parameters-alist
properties:
`binddn'
The distinguished name of the user to bind as. This may look
- like `cÿ, o¬me, cnÿnny Bugs', see RFC 1779 for details.
+ like `cn=Babs Jensen,o=ACME,c=US', see RFC 1779 for details.
`passwd'
The password to use for authentication.
The maximum number of matches to return for searches
performed on this connection.
+ - Variable: ldap-verbose
+ If non-`nil', LDAP operations will echo progress messages.
+ Defaults to `nil'.
+
\1f
File: lispref.info, Node: The High-Level LDAP API, Next: The Low-Level LDAP API, Prev: LDAP Variables, Up: XEmacs LDAP API
The High-Level LDAP API
-----------------------
- As of this writing the high-level Lisp LDAP API only provides for
-LDAP searches. Further support is planned in the future.
-
- The `ldap-search' function provides the most convenient interface to
-perform LDAP searches. It opens a connection to a host, performs the
-query and cleanly closes the connection thus insulating the user from
+ The following functions provide the most convenient interface to
+perform LDAP operations. All of them open a connection to a host,
+perform an operation (add/search/modify/delete) on one or several
+entries and cleanly close the connection thus insulating the user from
all the details of the low-level interface such as LDAP Lisp objects
-*note The Low-Level LDAP API::
-
- - Function: ldap-search filter &optional host attributes attrsonly
+*note The Low-Level LDAP API::.
+
+ Note that `ldap-search' which used to be the name of the high-level
+search function in XEmacs 21.1 is now obsolete. For consistency in the
+naming as well as backward compatibility, that function now acts as a
+wrapper that calls either `ldap-search-basic' (low-level search
+function) or `ldap-search-entries' (high-level search function)
+according to the actual parameters. A direct call to one of these two
+functions is preferred since it is faster and unambiguous.
+
+ - Function: ldap-search-entries filter &optional host attributes
+ attrsonly withdn
Perform an LDAP search. FILTER is the search filter *note Syntax
of Search Filters:: HOST is the LDAP host on which to perform the
- search ATTRIBUTES is the specific attributes to retrieve, `nil'
- means retrieve all ATTRSONLY if non-`nil' retrieves the attributes
- only without their associated values. Additional search
- parameters can be specified through `ldap-host-parameters-alist'.
+ search. ATTRIBUTES is the specific attributes to retrieve, `nil'
+ means retrieve all. ATTRSONLY if non-`nil' retrieves the
+ attributes only without their associated values. If WITHDN is
+ non-`nil' each entry in the result will be prepended with its
+ distinguished name DN. Additional search parameters can be
+ specified through `ldap-host-parameters-alist'. The function
+ returns a list of matching entries. Each entry is itself an alist
+ of attribute/value pairs optionally preceded by the DN of the
+ entry according to the value of WITHDN.
+
+ - Function: ldap-add-entries entries &optional host binddn passwd
+ Add entries to an LDAP directory. ENTRIES is a list of entry
+ specifications of the form `(DN (ATTR . VALUE) (ATTR . VALUE) ...)'
+ where DN the distinguished name of an entry to add, the following
+ are cons cells containing attribute/value string pairs. HOST is
+ the LDAP host, defaulting to `ldap-default-host' BINDDN is the DN
+ to bind as to the server PASSWD is the corresponding password.
+
+ - Function: ldap-modify-entries entry-mods &optional host binddn passwd
+ Modify entries of an LDAP directory. ENTRY_MODS is a list of
+ entry modifications of the form `(DN MOD-SPEC1 MOD-SPEC2 ...)'
+ where DN is the distinguished name of the entry to modify, the
+ following are modification specifications. A modification
+ specification is itself a list of the form `(MOD-OP ATTR VALUE1
+ VALUE2 ...)' MOD-OP and ATTR are mandatory, VALUES are optional
+ depending on MOD-OP. MOD-OP is the type of modification, one of
+ the symbols `add', `delete' or `replace'. ATTR is the LDAP
+ attribute type to modify. HOST is the LDAP host, defaulting to
+ `ldap-default-host' BINDDN is the DN to bind as to the server
+ PASSWD is the corresponding password"
+
+ - Function: ldap-delete-entries dn &optional host binddn passwd
+ Delete an entry from an LDAP directory. DN is the distinguished
+ name of an entry to delete or a list of those. HOST is the LDAP
+ host, defaulting to `ldap-default-host' BINDDN is the DN to bind
+ as to the server PASSWD is the corresponding password.
\1f
-File: lispref.info, Node: The Low-Level LDAP API, Prev: The High-Level LDAP API, Up: XEmacs LDAP API
+File: lispref.info, Node: The Low-Level LDAP API, Next: LDAP Internationalization, Prev: The High-Level LDAP API, Up: XEmacs LDAP API
The Low-Level LDAP API
----------------------
+ The low-level API should be used directly for very specific purposes
+(such as multiple operations on a connection) only. The higher-level
+functions provide a more convenient way to access LDAP directories
+hiding the subtleties of handling the connection, translating arguments
+and ensuring compliance with LDAP internationalization rules and formats
+(currently partly implemented only). See *note The High-Level LDAP API::
+
+ Note that the former functions `ldap-*-internal' functions have been
+renamed in XEmacs 21.2
+
* Menu:
* The LDAP Lisp Object::
* Opening and Closing a LDAP Connection::
-* Searching on a LDAP Server (Low-level)::
+* Low-level Operations on a LDAP Server::
\1f
File: lispref.info, Node: The LDAP Lisp Object, Next: Opening and Closing a LDAP Connection, Prev: The Low-Level LDAP API, Up: The Low-Level LDAP API
Return non-`nil' if LDAP is an active LDAP connection
\1f
-File: lispref.info, Node: Opening and Closing a LDAP Connection, Next: Searching on a LDAP Server (Low-level), Prev: The LDAP Lisp Object, Up: The Low-Level LDAP API
+File: lispref.info, Node: Opening and Closing a LDAP Connection, Next: Low-level Operations on a LDAP Server, Prev: The LDAP Lisp Object, Up: The Low-Level LDAP API
Opening and Closing a LDAP Connection
.....................................
`binddn'
The distinguished name of the user to bind as. This may look
- like `cÿ, o¬me, cnÿnny Bugs', see RFC 1779 for details.
+ like `c=com, o=Acme, cn=Babs Jensen', see RFC 1779 for
+ details.
`passwd'
The password to use for authentication.
Close the connection represented by LDAP
\1f
-File: lispref.info, Node: Searching on a LDAP Server (Low-level), Prev: Opening and Closing a LDAP Connection, Up: The Low-Level LDAP API
+File: lispref.info, Node: Low-level Operations on a LDAP Server, Prev: Opening and Closing a LDAP Connection, Up: The Low-Level LDAP API
-Searching on a LDAP Server (Low-level)
-......................................
+Low-level Operations on a LDAP Server
+.....................................
- `ldap-search-internal' is the low-level primitive to perform a
-search on a LDAP server. It works directly on an open LDAP connection
-thus requiring a preliminary call to `ldap-open'. Multiple searches
-can be made on the same connection, then the session must be closed
-with `ldap-close'.
+ `ldap-search-basic' is the low-level primitive to perform a search
+on a LDAP server. It works directly on an open LDAP connection thus
+requiring a preliminary call to `ldap-open'. Multiple searches can be
+made on the same connection, then the session must be closed with
+`ldap-close'.
- - Function: ldap-search-internal ldap filter base scope attrs attrsonly
+ - Function: ldap-search-basic ldap filter base scope attrs attrsonly
Perform a search on an open connection LDAP created with
`ldap-open'. FILTER is a filter string for the search *note
Syntax of Search Filters:: BASE is the distinguished name at which
which attributes to retrieve for each matching entry. If `nil' all
available attributes are returned. If `attrsonly' is non-`nil'
then only the attributes are retrieved, not their associated values
- The function returns a list of matching entries. Each entry being
- itself an alist of attribute/values.
+ If `withdn' is non-`nil' then each entry in the result is
+ prepended with its distinguished name DN If `verbose' is non-`nil'
+ then progress messages are echoed The function returns a list of
+ matching entries. Each entry is itself an alist of
+ attribute/value pairs optionally preceded by the DN of the entry
+ according to the value of `withdn'.
+
+ - Function: ldap-add ldap dn entry
+ Add ENTRY to a LDAP directory which a connection LDAP has been
+ opened to with `ldap-open'. DN is the distinguished name of the
+ entry to add. ENTRY is an entry specification, i.e., a list of
+ cons cells containing attribute/value string pairs.
+
+ - Function: ldap-modify ldap dn mods
+ Modify an entry in an LDAP directory. LDAP is an LDAP connection
+ object created with `ldap-open'. DN is the distinguished name of
+ the entry to modify. MODS is a list of modifications to apply. A
+ modification is a list of the form `(MOD-OP ATTR VALUE1 VALUE2
+ ...)' MOD-OP and ATTR are mandatory, VALUES are optional
+ depending on MOD-OP. MOD-OP is the type of modification, one of
+ the symbols `add', `delete' or `replace'. ATTR is the LDAP
+ attribute type to modify
+
+ - Function: ldap-delete ldap dn
+ Delete an entry to an LDAP directory. LDAP is an LDAP connection
+ object created with `ldap-open'. DN is the distinguished name of
+ the entry to delete
+
+\1f
+File: lispref.info, Node: LDAP Internationalization, Prev: The Low-Level LDAP API, Up: XEmacs LDAP API
+
+LDAP Internationalization
+-------------------------
+
+ The XEmacs LDAP API provides basic internationalization features
+based on the LDAP v3 specification (essentially RFC2252 on "LDAP v3
+Attribute Syntax Definitions"). Unfortunately since there is currently
+no free LDAP v3 server software, this part has not received much
+testing and should be considered experimental. The framework is in
+place though.
+
+ - Function: ldap-decode-attribute attr
+ Decode the attribute/value pair ATTR according to LDAP rules. The
+ attribute name is looked up in `ldap-attribute-syntaxes-alist' and
+ the corresponding decoder is then retrieved from
+ `ldap-attribute-syntax-decoders'' and applied on the value(s).
+
+* Menu:
+
+* LDAP Internationalization Variables::
+* Encoder/Decoder Functions::
+
+\1f
+File: lispref.info, Node: LDAP Internationalization Variables, Next: Encoder/Decoder Functions, Prev: LDAP Internationalization, Up: LDAP Internationalization
+
+LDAP Internationalization Variables
+...................................
+
+ - Variable: ldap-ignore-attribute-codings
+ If non-`nil', no encoding/decoding will be performed LDAP
+ attribute values
+
+ - Variable: ldap-coding-system
+ Coding system of LDAP string values. LDAP v3 specifies the coding
+ system of strings to be UTF-8. You need an XEmacs with Mule
+ support for this.
+
+ - Variable: ldap-default-attribute-decoder
+ Decoder function to use for attributes whose syntax is unknown.
+ Such a function receives an encoded attribute value as a string
+ and should return the decoded value as a string
+
+ - Variable: ldap-attribute-syntax-encoders
+ A vector of functions used to encode LDAP attribute values. The
+ sequence of functions corresponds to the sequence of LDAP
+ attribute syntax object identifiers of the form
+ 1.3.6.1.4.1.1466.1115.121.1.* as defined in RFC2252 section 4.3.2.
+ As of this writing, only a few encoder functions are available.
+
+ - Variable: ldap-attribute-syntax-decoders
+ A vector of functions used to decode LDAP attribute values. The
+ sequence of functions corresponds to the sequence of LDAP
+ attribute syntax object identifiers of the form
+ 1.3.6.1.4.1.1466.1115.121.1.* as defined in RFC2252 section 4.3.2.
+ As of this writing, only a few decoder functions are available.
+
+ - Variable: ldap-attribute-syntaxes-alist
+ A map of LDAP attribute names to their type object id minor number.
+ This table is built from RFC2252 Section 5 and RFC2256 Section 5
+
+\1f
+File: lispref.info, Node: Encoder/Decoder Functions, Prev: LDAP Internationalization Variables, Up: LDAP Internationalization
+
+Encoder/Decoder Functions
+.........................
+
+ - Function: ldap-encode-boolean bool
+ A function that encodes an elisp boolean BOOL into a LDAP boolean
+ string representation
+
+ - Function: ldap-decode-boolean str
+ A function that decodes a LDAP boolean string representation STR
+ into an elisp boolean
+
+ - Function: ldap-decode-string str
+ Decode a string STR according to `ldap-coding-system'
+
+ - Function: ldap-encode-string str
+ Encode a string STR according to `ldap-coding-system'
+
+ - Function: ldap-decode-address str
+ Decode an address STR according to `ldap-coding-system' and
+ replacing $ signs with newlines as specified by LDAP encoding
+ rules for addresses
+
+ - Function: ldap-encode-address str
+ Encode an address STR according to `ldap-coding-system' and
+ replacing newlines with $ signs as specified by LDAP encoding
+ rules for addresses
\1f
File: lispref.info, Node: Syntax of Search Filters, Prev: XEmacs LDAP API, Up: LDAP Support
Compatibility Note: This variable is not present in InfoDock.
-\1f
-File: lispref.info, Node: libpq Lisp Symbols and DataTypes, Next: Synchronous Interface Functions, Prev: libpq Lisp Variables, Up: XEmacs PostgreSQL libpq API
-
-libpq Lisp Symbols and Datatypes
---------------------------------
-
- The following set of symbols are used to represent the intermediate
-states involved in the asynchronous interface.
-
- - Symbol: pgres::polling-failed
- Undocumented. A fatal error has occurred during processing of an
- asynchronous operation.
-
- - Symbol: pgres::polling-reading
- An intermediate status return during an asynchronous operation. It
- indicates that one may use `select' before polling again.
-
- - Symbol: pgres::polling-writing
- An intermediate status return during an asynchronous operation. It
- indicates that one may use `select' before polling again.
-
- - Symbol: pgres::polling-ok
- An asynchronous operation has successfully completed.
-
- - Symbol: pgres::polling-active
- An intermediate status return during an asynchronous operation.
- One can call the poll function again immediately.
-
- - Function: pq-pgconn conn field
- CONN A database connection object. FIELD A symbol indicating
- which field of PGconn to fetch. Possible values are shown in the
- following table.
- `pq::db'
- Database name
-
- `pq::user'
- Database user name
-
- `pq::pass'
- Database user's password
-
- `pq::host'
- Hostname database server is running on
-
- `pq::port'
- TCP port number used in the connection
-
- `pq::tty'
- Debugging TTY
-
- Compatibility note: Debugging TTYs are not used in the
- XEmacs Lisp API.
-
- `pq::options'
- Additional server options
-
- `pq::status'
- Connection status. Possible return values are shown in the
- following table.
- `pg::connection-ok'
- The normal, connected status.
-
- `pg::connection-bad'
- The connection is not open and the PGconn object needs
- to be deleted by `pq-finish'.
-
- `pg::connection-started'
- An asynchronous connection has been started, but is not
- yet complete.
-
- `pg::connection-made'
- An asynchronous connect has been made, and there is data
- waiting to be sent.
-
- `pg::connection-awaiting-response'
- Awaiting data from the backend during an asynchronous
- connection.
-
- `pg::connection-auth-ok'
- Received authentication, waiting for the backend to
- start up.
-
- `pg::connection-setenv'
- Negotiating environment during an asynchronous
- connection.
-
- `pq::error-message'
- The last error message that was delivered to this connection.
-
- `pq::backend-pid'
- The process ID of the backend database server.
-
- The `PGresult' object is used by libpq to encapsulate the results of
-queries. The printed representation takes on four forms. When the
-PGresult object contains tuples from an SQL `SELECT' it will look like:
-
- (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
- => #<PGresult PGRES_TUPLES_OK[5] - SELECT>
-
- The number in brackets indicates how many rows of data are available.
-When the PGresult object is the result of a command query that doesn't
-return anything, it will look like:
-
- (pq-exec P "CREATE TABLE a_new_table (i int);")
- => #<PGresult PGRES_COMMAND_OK - CREATE>
-
- When either the query is a command-type query that can affect a
-number of different rows, but doesn't return any of them it will look
-like:
-
- (progn
- (pq-exec P "INSERT INTO a_new_table VALUES (1);")
- (pq-exec P "INSERT INTO a_new_table VALUES (2);")
- (pq-exec P "INSERT INTO a_new_table VALUES (3);")
- (setq R (pq-exec P "DELETE FROM a_new_table;")))
- => #<PGresult PGRES_COMMAND_OK[3] - DELETE 3>
-
- Lastly, when the underlying PGresult object has been deallocated
-directly by `pq-clear' the printed representation will look like:
-
- (progn
- (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
- (pq-clear R)
- R)
- => #<PGresult DEAD>
-
- The following set of functions are accessors to various data in the
-PGresult object.
-
- - Function: pq-result-status result
- Return status of a query result. RESULT is a PGresult object.
- The return value is one of the symbols in the following table.
- `pgres::empty-query'
- A query contained no text. This is usually the result of a
- recoverable error, or a minor programming error.
-
- `pgres::command-ok'
- A query command that doesn't return anything was executed
- properly by the backend.
-
- `pgres::tuples-ok'
- A query command that returns tuples was executed properly by
- the backend.
-
- `pgres::copy-out'
- Copy Out data transfer is in progress.
-
- `pgres::copy-in'
- Copy In data transfer is in progress.
-
- `pgres::bad-response'
- An unexpected response was received from the backend.
-
- `pgres::nonfatal-error'
- Undocumented. This value is returned when the libpq function
- `PQresultStatus' is called with a NULL pointer.
-
- `pgres::fatal-error'
- Undocumented. An error has occurred in processing the query
- and the operation was not completed.
-
- - Function: pq-res-status result
- Return the query result status as a string, not a symbol. RESULT
- is a PGresult object.
-
- (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
- => #<PGresult PGRES_TUPLES_OK[5] - SELECT>
- (pq-res-status R)
- => "PGRES_TUPLES_OK"
-
- - Function: pq-result-error-message result
- Return an error message generated by the query, if any. RESULT is
- a PGresult object.
-
- (setq R (pq-exec P "SELECT * FROM xemacs-test;"))
- => <A fatal error is signaled in the echo area>
- (pq-result-error-message R)
- => "ERROR: parser: parse error at or near \"-\"
- "
-
- - Function: pq-ntuples result
- Return the number of tuples in the query result. RESULT is a
- PGresult object.
-
- (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
- => #<PGresult PGRES_TUPLES_OK[5] - SELECT>
- (pq-ntuples R)
- => 5
-
- - Function: pq-nfields result
- Return the number of fields in each tuple of the query result.
- RESULT is a PGresult object.
-
- (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
- => #<PGresult PGRES_TUPLES_OK[5] - SELECT>
- (pq-nfields R)
- => 3
-
- - Function: pq-binary-tuples result
- Returns t if binary tuples are present in the results, nil
- otherwise. RESULT is a PGresult object.
-
- (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
- => #<PGresult PGRES_TUPLES_OK[5] - SELECT>
- (pq-binary-tuples R)
- => nil
-
- - Function: pq-fname result field-index
- Returns the name of a specific field. RESULT is a PGresult object.
- FIELD-INDEX is the number of the column to select from. The first
- column is number zero.
-
- (let (i l)
- (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
- (setq i (pq-nfields R))
- (while (>= (decf i) 0)
- (push (pq-fname R i) l))
- l)
- => ("id" "shikona" "rank")
-
- - Function: pq-fnumber result field-name
- Return the field number corresponding to the given field name. -1
- is returned on a bad field name. RESULT is a PGresult object.
- FIELD-NAME is a string representing the field name to find.
- (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
- => #<PGresult PGRES_TUPLES_OK[5] - SELECT>
- (pq-fnumber R "id")
- => 0
- (pq-fnumber R "Not a field")
- => -1
-
- - Function: pq-ftype result field-num
- Return an integer code representing the data type of the specified
- column. RESULT is a PGresult object. FIELD-NUM is the field
- number.
-
- The return value of this function is the Object ID (Oid) in the
- database of the type. Further queries need to be made to various
- system tables in order to convert this value into something useful.
-
- - Function: pq-fmod result field-num
- Return the type modifier code associated with a field. Field
- numbers start at zero. RESULT is a PGresult object. FIELD-INDEX
- selects which field to use.
-
- - Function: pq-fsize result field-index
- Return size of the given field. RESULT is a PGresult object.
- FIELD-INDEX selects which field to use.
-
- (let (i l)
- (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
- (setq i (pq-nfields R))
- (while (>= (decf i) 0)
- (push (list (pq-ftype R i) (pq-fsize R i)) l))
- l)
- => ((23 23) (25 25) (25 25))
-
- - Function: pq-get-value result tup-num field-num
- Retrieve a return value. RESULT is a PGresult object. TUP-NUM
- selects which tuple to fetch from. FIELD-NUM selects which field
- to fetch from.
-
- Both tuples and fields are numbered from zero.
-
- (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
- => #<PGresult PGRES_TUPLES_OK[5] - SELECT>
- (pq-get-value R 0 1)
- => "Musashimaru"
- (pq-get-value R 1 1)
- => "Dejima"
- (pq-get-value R 2 1)
- => "Musoyama"
-
- - Function: pq-get-length result tup-num field-num
- Return the length of a specific value. RESULT is a PGresult
- object. TUP-NUM selects which tuple to fetch from. FIELD-NUM
- selects which field to fetch from.
-
- (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
- => #<PGresult PGRES_TUPLES_OK[5] - SELECT>
- (pq-get-length R 0 1)
- => 11
- (pq-get-length R 1 1)
- => 6
- (pq-get-length R 2 1)
- => 8
-
- - Function: pq-get-is-null result tup-num field-num
- Return t if the specific value is the SQL NULL. RESULT is a
- PGresult object. TUP-NUM selects which tuple to fetch from.
- FIELD-NUM selects which field to fetch from.
-
- - Function: pq-cmd-status result
- Return a summary string from the query. RESULT is a PGresult
- object.
- (pq-exec P "INSERT INTO xemacs_test
- VALUES (6, 'Wakanohana', 'Yokozuna');")
- => #<PGresult PGRES_COMMAND_OK[1] - INSERT 542086 1>
- (pq-cmd-status R)
- => "INSERT 542086 1"
- (setq R (pq-exec P "UPDATE xemacs_test SET rank='retired'
- WHERE shikona='Wakanohana';"))
- => #<PGresult PGRES_COMMAND_OK[1] - UPDATE 1>
- (pq-cmd-status R)
- => "UPDATE 1"
-
- Note that the first number returned from an insertion, like in the
- example, is an object ID number and will almost certainly vary from
- system to system since object ID numbers in Postgres must be unique
- across all databases.
-
- - Function: pq-cmd-tuples result
- Return the number of tuples if the last command was an
- INSERT/UPDATE/DELETE. If the last command was something else, the
- empty string is returned. RESULT is a PGresult object.
-
- (setq R (pq-exec P "INSERT INTO xemacs_test VALUES
- (7, 'Takanohana', 'Yokuzuna');"))
- => #<PGresult PGRES_COMMAND_OK[1] - INSERT 38688 1>
- (pq-cmd-tuples R)
- => "1"
- (setq R (pq-exec P "SELECT * from xemacs_test;"))
- => #<PGresult PGRES_TUPLES_OK[7] - SELECT>
- (pq-cmd-tuples R)
- => ""
- (setq R (pq-exec P "DELETE FROM xemacs_test
- WHERE shikona LIKE '%hana';"))
- => #<PGresult PGRES_COMMAND_OK[2] - DELETE 2>
- (pq-cmd-tuples R)
- => "2"
-
- - Function: pq-oid-value result
- Return the object id of the insertion if the last command was an
- INSERT. 0 is returned if the last command was not an insertion.
- RESULT is a PGresult object.
-
- In the first example, the numbers you will see on your local
- system will almost certainly be different, however the second
- number from the right in the unprintable PGresult object and the
- number returned by `pq-oid-value' should match.
- (setq R (pq-exec P "INSERT INTO xemacs_test VALUES
- (8, 'Terao', 'Maegashira');"))
- => #<PGresult PGRES_COMMAND_OK[1] - INSERT 542089 1>
- (pq-oid-value R)
- => 542089
- (setq R (pq-exec P "SELECT shikona FROM xemacs_test
- WHERE rank='Maegashira';"))
- => #<PGresult PGRES_TUPLES_OK[2] - SELECT>
- (pq-oid-value R)
- => 0
-
- - Function: pq-make-empty-pgresult conn status
- Create an empty pgresult with the given status. CONN a database
- connection object STATUS a value that can be returned by
- `pq-result-status'.
-
- The caller is responsible for making sure the return value gets
- properly freed.
-
-\1f
-File: lispref.info, Node: Synchronous Interface Functions, Next: Asynchronous Interface Functions, Prev: libpq Lisp Symbols and DataTypes, Up: XEmacs PostgreSQL libpq API
-
-Synchronous Interface Functions
--------------------------------
-
- - Function: pq-connectdb conninfo
- Establish a (synchronous) database connection. CONNINFO A string
- of blank separated options. Options are of the form "OPTION =
- VALUE". If VALUE contains blanks, it must be single quoted.
- Blanks around the equal sign are optional. Multiple option
- assignments are blank separated.
- (pq-connectdb "dbname=japanese port = 25432")
- => #<PGconn localhost:25432 steve/japanese>
- The printed representation of a database connection object has four
- fields. The first field is the hostname where the database server
- is running (in this case localhost), the second field is the port
- number, the third field is the database user name, and the fourth
- field is the name of the database.
-
- Database connection objects which have been disconnected and will
- generate an immediate error if they are used look like:
- #<PGconn BAD>
- Bad connections can be reestablished with `pq-reset', or deleted
- entirely with `pq-finish'.
-
- A database connection object that has been deleted looks like:
- (let ((P1 (pq-connectdb "")))
- (pq-finish P1)
- P1)
- => #<PGconn DEAD>
-
- Note that database connection objects are the most heavy weight
- objects in XEmacs Lisp at this writing, usually representing as
- much as several megabytes of virtual memory on the machine the
- database server is running on. It is wisest to explicitly delete
- them when you are finished with them, rather than letting garbage
- collection do it. An example idiom is:
-
- (let ((P (pq-connectiondb "")))
- (unwind-protect
- (progn
- (...)) ; access database here
- (pq-finish P)))
-
- The following options are available in the options string:
- `authtype'
- Authentication type. Same as PGAUTHTYPE. This is no longer
- used.
-
- `user'
- Database user name. Same as PGUSER.
-
- `password'
- Database password.
-
- `dbname'
- Database name. Same as PGDATABASE
-
- `host'
- Symbolic hostname. Same as PGHOST.
-
- `hostaddr'
- Host address as four octets (eg. like 192.168.1.1).
-
- `port'
- TCP port to connect to. Same as PGPORT.
-
- `tty'
- Debugging TTY. Same as PGTTY. This value is suppressed in
- the XEmacs Lisp API.
-
- `options'
- Extra backend database options. Same as PGOPTIONS. A
- database connection object is returned regardless of whether a
- connection was established or not.
-
- - Function: pq-reset conn
- Reestablish database connection. CONN A database connection
- object.
-
- This function reestablishes a database connection using the
- original connection parameters. This is useful if something has
- happened to the TCP link and it has become broken.
-
- - Function: pq-exec conn query
- Make a synchronous database query. CONN A database connection
- object. QUERY A string containing an SQL query. A PGresult
- object is returned, which in turn may be queried by its many
- accessor functions to retrieve state out of it. If the query
- string contains multiple SQL commands, only results from the final
- command are returned.
-
- (setq R (pq-exec P "SELECT * FROM xemacs_test;
- DELETE FROM xemacs_test WHERE id=8;"))
- => #<PGresult PGRES_COMMAND_OK[1] - DELETE 1>
-
- - Function: pq-notifies conn
- Return the latest async notification that has not yet been handled.
- CONN A database connection object. If there has been a
- notification, then a list of two elements will be returned. The
- first element contains the relation name being notified, the second
- element contains the backend process ID number. nil is returned
- if there aren't any notifications to process.
-
- - Function: PQsetenv conn
- Synchronous transfer of environment variables to a backend CONN A
- database connection object.
-
- Environment variable transfer is done as a normal part of database
- connection.
-
- Compatibility note: This function was present but not documented
- in versions of libpq prior to 7.0.
-
Foundation instead of in the original English.
\1f
+File: lispref.info, Node: libpq Lisp Symbols and DataTypes, Next: Synchronous Interface Functions, Prev: libpq Lisp Variables, Up: XEmacs PostgreSQL libpq API
+
+libpq Lisp Symbols and Datatypes
+--------------------------------
+
+ The following set of symbols are used to represent the intermediate
+states involved in the asynchronous interface.
+
+ - Symbol: pgres::polling-failed
+ Undocumented. A fatal error has occurred during processing of an
+ asynchronous operation.
+
+ - Symbol: pgres::polling-reading
+ An intermediate status return during an asynchronous operation. It
+ indicates that one may use `select' before polling again.
+
+ - Symbol: pgres::polling-writing
+ An intermediate status return during an asynchronous operation. It
+ indicates that one may use `select' before polling again.
+
+ - Symbol: pgres::polling-ok
+ An asynchronous operation has successfully completed.
+
+ - Symbol: pgres::polling-active
+ An intermediate status return during an asynchronous operation.
+ One can call the poll function again immediately.
+
+ - Function: pq-pgconn conn field
+ CONN A database connection object. FIELD A symbol indicating
+ which field of PGconn to fetch. Possible values are shown in the
+ following table.
+ `pq::db'
+ Database name
+
+ `pq::user'
+ Database user name
+
+ `pq::pass'
+ Database user's password
+
+ `pq::host'
+ Hostname database server is running on
+
+ `pq::port'
+ TCP port number used in the connection
+
+ `pq::tty'
+ Debugging TTY
+
+ Compatibility note: Debugging TTYs are not used in the
+ XEmacs Lisp API.
+
+ `pq::options'
+ Additional server options
+
+ `pq::status'
+ Connection status. Possible return values are shown in the
+ following table.
+ `pg::connection-ok'
+ The normal, connected status.
+
+ `pg::connection-bad'
+ The connection is not open and the PGconn object needs
+ to be deleted by `pq-finish'.
+
+ `pg::connection-started'
+ An asynchronous connection has been started, but is not
+ yet complete.
+
+ `pg::connection-made'
+ An asynchronous connect has been made, and there is data
+ waiting to be sent.
+
+ `pg::connection-awaiting-response'
+ Awaiting data from the backend during an asynchronous
+ connection.
+
+ `pg::connection-auth-ok'
+ Received authentication, waiting for the backend to
+ start up.
+
+ `pg::connection-setenv'
+ Negotiating environment during an asynchronous
+ connection.
+
+ `pq::error-message'
+ The last error message that was delivered to this connection.
+
+ `pq::backend-pid'
+ The process ID of the backend database server.
+
+ The `PGresult' object is used by libpq to encapsulate the results of
+queries. The printed representation takes on four forms. When the
+PGresult object contains tuples from an SQL `SELECT' it will look like:
+
+ (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
+ => #<PGresult PGRES_TUPLES_OK[5] - SELECT>
+
+ The number in brackets indicates how many rows of data are available.
+When the PGresult object is the result of a command query that doesn't
+return anything, it will look like:
+
+ (pq-exec P "CREATE TABLE a_new_table (i int);")
+ => #<PGresult PGRES_COMMAND_OK - CREATE>
+
+ When either the query is a command-type query that can affect a
+number of different rows, but doesn't return any of them it will look
+like:
+
+ (progn
+ (pq-exec P "INSERT INTO a_new_table VALUES (1);")
+ (pq-exec P "INSERT INTO a_new_table VALUES (2);")
+ (pq-exec P "INSERT INTO a_new_table VALUES (3);")
+ (setq R (pq-exec P "DELETE FROM a_new_table;")))
+ => #<PGresult PGRES_COMMAND_OK[3] - DELETE 3>
+
+ Lastly, when the underlying PGresult object has been deallocated
+directly by `pq-clear' the printed representation will look like:
+
+ (progn
+ (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
+ (pq-clear R)
+ R)
+ => #<PGresult DEAD>
+
+ The following set of functions are accessors to various data in the
+PGresult object.
+
+ - Function: pq-result-status result
+ Return status of a query result. RESULT is a PGresult object.
+ The return value is one of the symbols in the following table.
+ `pgres::empty-query'
+ A query contained no text. This is usually the result of a
+ recoverable error, or a minor programming error.
+
+ `pgres::command-ok'
+ A query command that doesn't return anything was executed
+ properly by the backend.
+
+ `pgres::tuples-ok'
+ A query command that returns tuples was executed properly by
+ the backend.
+
+ `pgres::copy-out'
+ Copy Out data transfer is in progress.
+
+ `pgres::copy-in'
+ Copy In data transfer is in progress.
+
+ `pgres::bad-response'
+ An unexpected response was received from the backend.
+
+ `pgres::nonfatal-error'
+ Undocumented. This value is returned when the libpq function
+ `PQresultStatus' is called with a NULL pointer.
+
+ `pgres::fatal-error'
+ Undocumented. An error has occurred in processing the query
+ and the operation was not completed.
+
+ - Function: pq-res-status result
+ Return the query result status as a string, not a symbol. RESULT
+ is a PGresult object.
+
+ (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
+ => #<PGresult PGRES_TUPLES_OK[5] - SELECT>
+ (pq-res-status R)
+ => "PGRES_TUPLES_OK"
+
+ - Function: pq-result-error-message result
+ Return an error message generated by the query, if any. RESULT is
+ a PGresult object.
+
+ (setq R (pq-exec P "SELECT * FROM xemacs-test;"))
+ => <A fatal error is signaled in the echo area>
+ (pq-result-error-message R)
+ => "ERROR: parser: parse error at or near \"-\"
+ "
+
+ - Function: pq-ntuples result
+ Return the number of tuples in the query result. RESULT is a
+ PGresult object.
+
+ (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
+ => #<PGresult PGRES_TUPLES_OK[5] - SELECT>
+ (pq-ntuples R)
+ => 5
+
+ - Function: pq-nfields result
+ Return the number of fields in each tuple of the query result.
+ RESULT is a PGresult object.
+
+ (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
+ => #<PGresult PGRES_TUPLES_OK[5] - SELECT>
+ (pq-nfields R)
+ => 3
+
+ - Function: pq-binary-tuples result
+ Returns t if binary tuples are present in the results, nil
+ otherwise. RESULT is a PGresult object.
+
+ (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
+ => #<PGresult PGRES_TUPLES_OK[5] - SELECT>
+ (pq-binary-tuples R)
+ => nil
+
+ - Function: pq-fname result field-index
+ Returns the name of a specific field. RESULT is a PGresult object.
+ FIELD-INDEX is the number of the column to select from. The first
+ column is number zero.
+
+ (let (i l)
+ (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
+ (setq i (pq-nfields R))
+ (while (>= (decf i) 0)
+ (push (pq-fname R i) l))
+ l)
+ => ("id" "shikona" "rank")
+
+ - Function: pq-fnumber result field-name
+ Return the field number corresponding to the given field name. -1
+ is returned on a bad field name. RESULT is a PGresult object.
+ FIELD-NAME is a string representing the field name to find.
+ (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
+ => #<PGresult PGRES_TUPLES_OK[5] - SELECT>
+ (pq-fnumber R "id")
+ => 0
+ (pq-fnumber R "Not a field")
+ => -1
+
+ - Function: pq-ftype result field-num
+ Return an integer code representing the data type of the specified
+ column. RESULT is a PGresult object. FIELD-NUM is the field
+ number.
+
+ The return value of this function is the Object ID (Oid) in the
+ database of the type. Further queries need to be made to various
+ system tables in order to convert this value into something useful.
+
+ - Function: pq-fmod result field-num
+ Return the type modifier code associated with a field. Field
+ numbers start at zero. RESULT is a PGresult object. FIELD-INDEX
+ selects which field to use.
+
+ - Function: pq-fsize result field-index
+ Return size of the given field. RESULT is a PGresult object.
+ FIELD-INDEX selects which field to use.
+
+ (let (i l)
+ (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
+ (setq i (pq-nfields R))
+ (while (>= (decf i) 0)
+ (push (list (pq-ftype R i) (pq-fsize R i)) l))
+ l)
+ => ((23 23) (25 25) (25 25))
+
+ - Function: pq-get-value result tup-num field-num
+ Retrieve a return value. RESULT is a PGresult object. TUP-NUM
+ selects which tuple to fetch from. FIELD-NUM selects which field
+ to fetch from.
+
+ Both tuples and fields are numbered from zero.
+
+ (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
+ => #<PGresult PGRES_TUPLES_OK[5] - SELECT>
+ (pq-get-value R 0 1)
+ => "Musashimaru"
+ (pq-get-value R 1 1)
+ => "Dejima"
+ (pq-get-value R 2 1)
+ => "Musoyama"
+
+ - Function: pq-get-length result tup-num field-num
+ Return the length of a specific value. RESULT is a PGresult
+ object. TUP-NUM selects which tuple to fetch from. FIELD-NUM
+ selects which field to fetch from.
+
+ (setq R (pq-exec P "SELECT * FROM xemacs_test;"))
+ => #<PGresult PGRES_TUPLES_OK[5] - SELECT>
+ (pq-get-length R 0 1)
+ => 11
+ (pq-get-length R 1 1)
+ => 6
+ (pq-get-length R 2 1)
+ => 8
+
+ - Function: pq-get-is-null result tup-num field-num
+ Return t if the specific value is the SQL NULL. RESULT is a
+ PGresult object. TUP-NUM selects which tuple to fetch from.
+ FIELD-NUM selects which field to fetch from.
+
+ - Function: pq-cmd-status result
+ Return a summary string from the query. RESULT is a PGresult
+ object.
+ (pq-exec P "INSERT INTO xemacs_test
+ VALUES (6, 'Wakanohana', 'Yokozuna');")
+ => #<PGresult PGRES_COMMAND_OK[1] - INSERT 542086 1>
+ (pq-cmd-status R)
+ => "INSERT 542086 1"
+ (setq R (pq-exec P "UPDATE xemacs_test SET rank='retired'
+ WHERE shikona='Wakanohana';"))
+ => #<PGresult PGRES_COMMAND_OK[1] - UPDATE 1>
+ (pq-cmd-status R)
+ => "UPDATE 1"
+
+ Note that the first number returned from an insertion, like in the
+ example, is an object ID number and will almost certainly vary from
+ system to system since object ID numbers in Postgres must be unique
+ across all databases.
+
+ - Function: pq-cmd-tuples result
+ Return the number of tuples if the last command was an
+ INSERT/UPDATE/DELETE. If the last command was something else, the
+ empty string is returned. RESULT is a PGresult object.
+
+ (setq R (pq-exec P "INSERT INTO xemacs_test VALUES
+ (7, 'Takanohana', 'Yokuzuna');"))
+ => #<PGresult PGRES_COMMAND_OK[1] - INSERT 38688 1>
+ (pq-cmd-tuples R)
+ => "1"
+ (setq R (pq-exec P "SELECT * from xemacs_test;"))
+ => #<PGresult PGRES_TUPLES_OK[7] - SELECT>
+ (pq-cmd-tuples R)
+ => ""
+ (setq R (pq-exec P "DELETE FROM xemacs_test
+ WHERE shikona LIKE '%hana';"))
+ => #<PGresult PGRES_COMMAND_OK[2] - DELETE 2>
+ (pq-cmd-tuples R)
+ => "2"
+
+ - Function: pq-oid-value result
+ Return the object id of the insertion if the last command was an
+ INSERT. 0 is returned if the last command was not an insertion.
+ RESULT is a PGresult object.
+
+ In the first example, the numbers you will see on your local
+ system will almost certainly be different, however the second
+ number from the right in the unprintable PGresult object and the
+ number returned by `pq-oid-value' should match.
+ (setq R (pq-exec P "INSERT INTO xemacs_test VALUES
+ (8, 'Terao', 'Maegashira');"))
+ => #<PGresult PGRES_COMMAND_OK[1] - INSERT 542089 1>
+ (pq-oid-value R)
+ => 542089
+ (setq R (pq-exec P "SELECT shikona FROM xemacs_test
+ WHERE rank='Maegashira';"))
+ => #<PGresult PGRES_TUPLES_OK[2] - SELECT>
+ (pq-oid-value R)
+ => 0
+
+ - Function: pq-make-empty-pgresult conn status
+ Create an empty pgresult with the given status. CONN a database
+ connection object STATUS a value that can be returned by
+ `pq-result-status'.
+
+ The caller is responsible for making sure the return value gets
+ properly freed.
+
+\1f
+File: lispref.info, Node: Synchronous Interface Functions, Next: Asynchronous Interface Functions, Prev: libpq Lisp Symbols and DataTypes, Up: XEmacs PostgreSQL libpq API
+
+Synchronous Interface Functions
+-------------------------------
+
+ - Function: pq-connectdb conninfo
+ Establish a (synchronous) database connection. CONNINFO A string
+ of blank separated options. Options are of the form "OPTION =
+ VALUE". If VALUE contains blanks, it must be single quoted.
+ Blanks around the equal sign are optional. Multiple option
+ assignments are blank separated.
+ (pq-connectdb "dbname=japanese port = 25432")
+ => #<PGconn localhost:25432 steve/japanese>
+ The printed representation of a database connection object has four
+ fields. The first field is the hostname where the database server
+ is running (in this case localhost), the second field is the port
+ number, the third field is the database user name, and the fourth
+ field is the name of the database.
+
+ Database connection objects which have been disconnected and will
+ generate an immediate error if they are used look like:
+ #<PGconn BAD>
+ Bad connections can be reestablished with `pq-reset', or deleted
+ entirely with `pq-finish'.
+
+ A database connection object that has been deleted looks like:
+ (let ((P1 (pq-connectdb "")))
+ (pq-finish P1)
+ P1)
+ => #<PGconn DEAD>
+
+ Note that database connection objects are the most heavy weight
+ objects in XEmacs Lisp at this writing, usually representing as
+ much as several megabytes of virtual memory on the machine the
+ database server is running on. It is wisest to explicitly delete
+ them when you are finished with them, rather than letting garbage
+ collection do it. An example idiom is:
+
+ (let ((P (pq-connectiondb "")))
+ (unwind-protect
+ (progn
+ (...)) ; access database here
+ (pq-finish P)))
+
+ The following options are available in the options string:
+ `authtype'
+ Authentication type. Same as PGAUTHTYPE. This is no longer
+ used.
+
+ `user'
+ Database user name. Same as PGUSER.
+
+ `password'
+ Database password.
+
+ `dbname'
+ Database name. Same as PGDATABASE
+
+ `host'
+ Symbolic hostname. Same as PGHOST.
+
+ `hostaddr'
+ Host address as four octets (eg. like 192.168.1.1).
+
+ `port'
+ TCP port to connect to. Same as PGPORT.
+
+ `tty'
+ Debugging TTY. Same as PGTTY. This value is suppressed in
+ the XEmacs Lisp API.
+
+ `options'
+ Extra backend database options. Same as PGOPTIONS. A
+ database connection object is returned regardless of whether a
+ connection was established or not.
+
+ - Function: pq-reset conn
+ Reestablish database connection. CONN A database connection
+ object.
+
+ This function reestablishes a database connection using the
+ original connection parameters. This is useful if something has
+ happened to the TCP link and it has become broken.
+
+ - Function: pq-exec conn query
+ Make a synchronous database query. CONN A database connection
+ object. QUERY A string containing an SQL query. A PGresult
+ object is returned, which in turn may be queried by its many
+ accessor functions to retrieve state out of it. If the query
+ string contains multiple SQL commands, only results from the final
+ command are returned.
+
+ (setq R (pq-exec P "SELECT * FROM xemacs_test;
+ DELETE FROM xemacs_test WHERE id=8;"))
+ => #<PGresult PGRES_COMMAND_OK[1] - DELETE 1>
+
+ - Function: pq-notifies conn
+ Return the latest async notification that has not yet been handled.
+ CONN A database connection object. If there has been a
+ notification, then a list of two elements will be returned. The
+ first element contains the relation name being notified, the second
+ element contains the backend process ID number. nil is returned
+ if there aren't any notifications to process.
+
+ - Function: PQsetenv conn
+ Synchronous transfer of environment variables to a backend CONN A
+ database connection object.
+
+ Environment variable transfer is done as a normal part of database
+ connection.
+
+ Compatibility note: This function was present but not documented
+ in versions of libpq prior to 7.0.
+
+\1f
File: lispref.info, Node: Asynchronous Interface Functions, Next: Large Object Support, Prev: Synchronous Interface Functions, Up: XEmacs PostgreSQL libpq API
Asynchronous Interface Functions
* CCL:: A special language for writing fast converters.
* Category Tables:: Subdividing charsets into groups.
-\1f
-File: lispref.info, Node: Internationalization Terminology, Next: Charsets, Up: MULE
-
-Internationalization Terminology
-================================
-
- In internationalization terminology, a string of text is divided up
-into "characters", which are the printable units that make up the text.
-A single character is (for example) a capital `A', the number `2', a
-Katakana character, a Hangul character, a Kanji ideograph (an
-"ideograph" is a "picture" character, such as is used in Japanese
-Kanji, Chinese Hanzi, and Korean Hanja; typically there are thousands
-of such ideographs in each language), etc. The basic property of a
-character is that it is the smallest unit of text with semantic
-significance in text processing.
-
- Human beings normally process text visually, so to a first
-approximation a character may be identified with its shape. Note that
-the same character may be drawn by two different people (or in two
-different fonts) in slightly different ways, although the "basic shape"
-will be the same. But consider the works of Scott Kim; human beings
-can recognize hugely variant shapes as the "same" character.
-Sometimes, especially where characters are extremely complicated to
-write, completely different shapes may be defined as the "same"
-character in national standards. The Taiwanese variant of Hanzi is
-generally the most complicated; over the centuries, the Japanese,
-Koreans, and the People's Republic of China have adopted
-simplifications of the shape, but the line of descent from the original
-shape is recorded, and the meanings and pronunciation of different
-forms of the same character are considered to be identical within each
-language. (Of course, it may take a specialist to recognize the
-related form; the point is that the relations are standardized, despite
-the differing shapes.)
-
- In some cases, the differences will be significant enough that it is
-actually possible to identify two or more distinct shapes that both
-represent the same character. For example, the lowercase letters `a'
-and `g' each have two distinct possible shapes--the `a' can optionally
-have a curved tail projecting off the top, and the `g' can be formed
-either of two loops, or of one loop and a tail hanging off the bottom.
-Such distinct possible shapes of a character are called "glyphs". The
-important characteristic of two glyphs making up the same character is
-that the choice between one or the other is purely stylistic and has no
-linguistic effect on a word (this is the reason why a capital `A' and
-lowercase `a' are different characters rather than different
-glyphs--e.g. `Aspen' is a city while `aspen' is a kind of tree).
-
- Note that "character" and "glyph" are used differently here than
-elsewhere in XEmacs.
-
- A "character set" is essentially a set of related characters. ASCII,
-for example, is a set of 94 characters (or 128, if you count
-non-printing characters). Other character sets are ISO8859-1 (ASCII
-plus various accented characters and other international symbols), JIS
-X 0201 (ASCII, more or less, plus half-width Katakana), JIS X 0208
-(Japanese Kanji), JIS X 0212 (a second set of less-used Japanese Kanji),
-GB2312 (Mainland Chinese Hanzi), etc.
-
- The definition of a character set will implicitly or explicitly give
-it an "ordering", a way of assigning a number to each character in the
-set. For many character sets, there is a natural ordering, for example
-the "ABC" ordering of the Roman letters. But it is not clear whether
-digits should come before or after the letters, and in fact different
-European languages treat the ordering of accented characters
-differently. It is useful to use the natural order where available, of
-course. The number assigned to any particular character is called the
-character's "code point". (Within a given character set, each
-character has a unique code point. Thus the word "set" is ill-chosen;
-different orderings of the same characters are different character sets.
-Identifying characters is simple enough for alphabetic character sets,
-but the difference in ordering can cause great headaches when the same
-thousands of characters are used by different cultures as in the Hanzi.)
-
- A code point may be broken into a number of "position codes". The
-number of position codes required to index a particular character in a
-character set is called the "dimension" of the character set. For
-practical purposes, a position code may be thought of as a byte-sized
-index. The printing characters of ASCII, being a relatively small
-character set, is of dimension one, and each character in the set is
-indexed using a single position code, in the range 1 through 94. Use of
-this unusual range, rather than the familiar 33 through 126, is an
-intentional abstraction; to understand the programming issues you must
-break the equation between character sets and encodings.
-
- JIS X 0208, i.e. Japanese Kanji, has thousands of characters, and is
-of dimension two - every character is indexed by two position codes,
-each in the range 1 through 94. (This number "94" is not a
-coincidence; we shall see that the JIS position codes were chosen so
-that JIS kanji could be encoded without using codes that in ASCII are
-associated with device control functions.) Note that the choice of the
-range here is somewhat arbitrary. You could just as easily index the
-printing characters in ASCII using numbers in the range 0 through 93, 2
-through 95, 3 through 96, etc. In fact, the standardized _encoding_
-for the ASCII _character set_ uses the range 33 through 126.
-
- An "encoding" is a way of numerically representing characters from
-one or more character sets into a stream of like-sized numerical values
-called "words"; typically these are 8-bit, 16-bit, or 32-bit
-quantities. If an encoding encompasses only one character set, then the
-position codes for the characters in that character set could be used
-directly. (This is the case with the trivial cipher used by children,
-assigning 1 to `A', 2 to `B', and so on.) However, even with ASCII,
-other considerations intrude. For example, why are the upper- and
-lowercase alphabets separated by 8 characters? Why do the digits start
-with `0' being assigned the code 48? In both cases because semantically
-interesting operations (case conversion and numerical value extraction)
-become convenient masking operations. Other artificial aspects (the
-control characters being assigned to codes 0-31 and 127) are historical
-accidents. (The use of 127 for `DEL' is an artifact of the "punch
-once" nature of paper tape, for example.)
-
- Naive use of the position code is not possible, however, if more than
-one character set is to be used in the encoding. For example, printed
-Japanese text typically requires characters from multiple character sets
-- ASCII, JIS X 0208, and JIS X 0212, to be specific. Each of these is
-indexed using one or more position codes in the range 1 through 94, so
-the position codes could not be used directly or there would be no way
-to tell which character was meant. Different Japanese encodings handle
-this differently - JIS uses special escape characters to denote
-different character sets; EUC sets the high bit of the position codes
-for JIS X 0208 and JIS X 0212, and puts a special extra byte before each
-JIS X 0212 character; etc. (JIS, EUC, and most of the other encodings
-you will encounter in files are 7-bit or 8-bit encodings. There is one
-common 16-bit encoding, which is Unicode; this strives to represent all
-the world's characters in a single large character set. 32-bit
-encodings are often used internally in programs, such as XEmacs with
-MULE support, to simplify the code that manipulates them; however, they
-are not used externally because they are not very space-efficient.)
-
- A general method of handling text using multiple character sets
-(whether for multilingual text, or simply text in an extremely
-complicated single language like Japanese) is defined in the
-international standard ISO 2022. ISO 2022 will be discussed in more
-detail later (*note ISO 2022::), but for now suffice it to say that text
-needs control functions (at least spacing), and if escape sequences are
-to be used, an escape sequence introducer. It was decided to make all
-text streams compatible with ASCII in the sense that the codes 0-31
-(and 128-159) would always be control codes, never graphic characters,
-and where defined by the character set the `SPC' character would be
-assigned code 32, and `DEL' would be assigned 127. Thus there are 94
-code points remaining if 7 bits are used. This is the reason that most
-character sets are defined using position codes in the range 1 through
-94. Then ISO 2022 compatible encodings are produced by shifting the
-position codes 1 to 94 into character codes 33 to 126, or (if 8 bit
-codes are available) into character codes 161 to 254.
-
- Encodings are classified as either "modal" or "non-modal". In a
-"modal encoding", there are multiple states that the encoding can be
-in, and the interpretation of the values in the stream depends on the
-current global state of the encoding. Special values in the encoding,
-called "escape sequences", are used to change the global state. JIS,
-for example, is a modal encoding. The bytes `ESC $ B' indicate that,
-from then on, bytes are to be interpreted as position codes for JIS X
-0208, rather than as ASCII. This effect is cancelled using the bytes
-`ESC ( B', which mean "switch from whatever the current state is to
-ASCII". To switch to JIS X 0212, the escape sequence `ESC $ ( D'.
-(Note that here, as is common, the escape sequences do in fact begin
-with `ESC'. This is not necessarily the case, however. Some encodings
-use control characters called "locking shifts" (effect persists until
-cancelled) to switch character sets.)
-
- A "non-modal encoding" has no global state that extends past the
-character currently being interpreted. EUC, for example, is a
-non-modal encoding. Characters in JIS X 0208 are encoded by setting
-the high bit of the position codes, and characters in JIS X 0212 are
-encoded by doing the same but also prefixing the character with the
-byte 0x8F.
-
- The advantage of a modal encoding is that it is generally more
-space-efficient, and is easily extendable because there are essentially
-an arbitrary number of escape sequences that can be created. The
-disadvantage, however, is that it is much more difficult to work with
-if it is not being processed in a sequential manner. In the non-modal
-EUC encoding, for example, the byte 0x41 always refers to the letter
-`A'; whereas in JIS, it could either be the letter `A', or one of the
-two position codes in a JIS X 0208 character, or one of the two
-position codes in a JIS X 0212 character. Determining exactly which
-one is meant could be difficult and time-consuming if the previous
-bytes in the string have not already been processed, or impossible if
-they are drawn from an external stream that cannot be rewound.
-
- Non-modal encodings are further divided into "fixed-width" and
-"variable-width" formats. A fixed-width encoding always uses the same
-number of words per character, whereas a variable-width encoding does
-not. EUC is a good example of a variable-width encoding: one to three
-bytes are used per character, depending on the character set. 16-bit
-and 32-bit encodings are nearly always fixed-width, and this is in fact
-one of the main reasons for using an encoding with a larger word size.
-The advantages of fixed-width encodings should be obvious. The
-advantages of variable-width encodings are that they are generally more
-space-efficient and allow for compatibility with existing 8-bit
-encodings such as ASCII. (For example, in Unicode ASCII characters are
-simply promoted to a 16-bit representation. That means that every
-ASCII character contains a `NUL' byte; evidently all of the standard
-string manipulation functions will lose badly in a fixed-width Unicode
-environment.)
-
- The bytes in an 8-bit encoding are often referred to as "octets"
-rather than simply as bytes. This terminology dates back to the days
-before 8-bit bytes were universal, when some computers had 9-bit bytes,
-others had 10-bit bytes, etc.
-
-\1f
-File: lispref.info, Node: Charsets, Next: MULE Characters, Prev: Internationalization Terminology, Up: MULE
-
-Charsets
-========
-
- A "charset" in MULE is an object that encapsulates a particular
-character set as well as an ordering of those characters. Charsets are
-permanent objects and are named using symbols, like faces.
-
- - Function: charsetp object
- This function returns non-`nil' if OBJECT is a charset.
-
-* Menu:
-
-* Charset Properties:: Properties of a charset.
-* Basic Charset Functions:: Functions for working with charsets.
-* Charset Property Functions:: Functions for accessing charset properties.
-* Predefined Charsets:: Predefined charset objects.
-
-\1f
-File: lispref.info, Node: Charset Properties, Next: Basic Charset Functions, Up: Charsets
-
-Charset Properties
-------------------
-
- Charsets have the following properties:
-
-`name'
- A symbol naming the charset. Every charset must have a different
- name; this allows a charset to be referred to using its name
- rather than the actual charset object.
-
-`doc-string'
- A documentation string describing the charset.
-
-`registry'
- A regular expression matching the font registry field for this
- character set. For example, both the `ascii' and `latin-iso8859-1'
- charsets use the registry `"ISO8859-1"'. This field is used to
- choose an appropriate font when the user gives a general font
- specification such as `-*-courier-medium-r-*-140-*', i.e. a
- 14-point upright medium-weight Courier font.
-
-`dimension'
- Number of position codes used to index a character in the
- character set. XEmacs/MULE can only handle character sets of
- dimension 1 or 2. This property defaults to 1.
-
-`chars'
- Number of characters in each dimension. In XEmacs/MULE, the only
- allowed values are 94 or 96. (There are a couple of pre-defined
- character sets, such as ASCII, that do not follow this, but you
- cannot define new ones like this.) Defaults to 94. Note that if
- the dimension is 2, the character set thus described is 94x94 or
- 96x96.
-
-`columns'
- Number of columns used to display a character in this charset.
- Only used in TTY mode. (Under X, the actual width of a character
- can be derived from the font used to display the characters.) If
- unspecified, defaults to the dimension. (This is almost always the
- correct value, because character sets with dimension 2 are usually
- ideograph character sets, which need two columns to display the
- intricate ideographs.)
-
-`direction'
- A symbol, either `l2r' (left-to-right) or `r2l' (right-to-left).
- Defaults to `l2r'. This specifies the direction that the text
- should be displayed in, and will be left-to-right for most
- charsets but right-to-left for Hebrew and Arabic. (Right-to-left
- display is not currently implemented.)
-
-`final'
- Final byte of the standard ISO 2022 escape sequence designating
- this charset. Must be supplied. Each combination of (DIMENSION,
- CHARS) defines a separate namespace for final bytes, and each
- charset within a particular namespace must have a different final
- byte. Note that ISO 2022 restricts the final byte to the range
- 0x30 - 0x7E if dimension == 1, and 0x30 - 0x5F if dimension == 2.
- Note also that final bytes in the range 0x30 - 0x3F are reserved
- for user-defined (not official) character sets. For more
- information on ISO 2022, see *Note Coding Systems::.
-
-`graphic'
- 0 (use left half of font on output) or 1 (use right half of font on
- output). Defaults to 0. This specifies how to convert the
- position codes that index a character in a character set into an
- index into the font used to display the character set. With
- `graphic' set to 0, position codes 33 through 126 map to font
- indices 33 through 126; with it set to 1, position codes 33
- through 126 map to font indices 161 through 254 (i.e. the same
- number but with the high bit set). For example, for a font whose
- registry is ISO8859-1, the left half of the font (octets 0x20 -
- 0x7F) is the `ascii' charset, while the right half (octets 0xA0 -
- 0xFF) is the `latin-iso8859-1' charset.
-
-`ccl-program'
- A compiled CCL program used to convert a character in this charset
- into an index into the font. This is in addition to the `graphic'
- property. If a CCL program is defined, the position codes of a
- character will first be processed according to `graphic' and then
- passed through the CCL program, with the resulting values used to
- index the font.
-
- This is used, for example, in the Big5 character set (used in
- Taiwan). This character set is not ISO-2022-compliant, and its
- size (94x157) does not fit within the maximum 96x96 size of
- ISO-2022-compliant character sets. As a result, XEmacs/MULE
- splits it (in a rather complex fashion, so as to group the most
- commonly used characters together) into two charset objects
- (`big5-1' and `big5-2'), each of size 94x94, and each charset
- object uses a CCL program to convert the modified position codes
- back into standard Big5 indices to retrieve a character from a
- Big5 font.
-
- Most of the above properties can only be set when the charset is
-initialized, and cannot be changed later. *Note Charset Property
-Functions::.
-
-\1f
-File: lispref.info, Node: Basic Charset Functions, Next: Charset Property Functions, Prev: Charset Properties, Up: Charsets
-
-Basic Charset Functions
------------------------
-
- - Function: find-charset charset-or-name
- This function retrieves the charset of the given name. If
- CHARSET-OR-NAME is a charset object, it is simply returned.
- Otherwise, CHARSET-OR-NAME should be a symbol. If there is no
- such charset, `nil' is returned. Otherwise the associated charset
- object is returned.
-
- - Function: get-charset name
- This function retrieves the charset of the given name. Same as
- `find-charset' except an error is signalled if there is no such
- charset instead of returning `nil'.
-
- - Function: charset-list
- This function returns a list of the names of all defined charsets.
-
- - Function: make-charset name doc-string props
- This function defines a new character set. This function is for
- use with MULE support. NAME is a symbol, the name by which the
- character set is normally referred. DOC-STRING is a string
- describing the character set. PROPS is a property list,
- describing the specific nature of the character set. The
- recognized properties are `registry', `dimension', `columns',
- `chars', `final', `graphic', `direction', and `ccl-program', as
- previously described.
-
- - Function: make-reverse-direction-charset charset new-name
- This function makes a charset equivalent to CHARSET but which goes
- in the opposite direction. NEW-NAME is the name of the new
- charset. The new charset is returned.
-
- - Function: charset-from-attributes dimension chars final &optional
- direction
- This function returns a charset with the given DIMENSION, CHARS,
- FINAL, and DIRECTION. If DIRECTION is omitted, both directions
- will be checked (left-to-right will be returned if character sets
- exist for both directions).
-
- - Function: charset-reverse-direction-charset charset
- This function returns the charset (if any) with the same dimension,
- number of characters, and final byte as CHARSET, but which is
- displayed in the opposite direction.
-
-\1f
-File: lispref.info, Node: Charset Property Functions, Next: Predefined Charsets, Prev: Basic Charset Functions, Up: Charsets
-
-Charset Property Functions
---------------------------
-
- All of these functions accept either a charset name or charset
-object.
-
- - Function: charset-property charset prop
- This function returns property PROP of CHARSET. *Note Charset
- Properties::.
-
- Convenience functions are also provided for retrieving individual
-properties of a charset.
-
- - Function: charset-name charset
- This function returns the name of CHARSET. This will be a symbol.
-
- - Function: charset-doc-string charset
- This function returns the doc string of CHARSET.
-
- - Function: charset-registry charset
- This function returns the registry of CHARSET.
-
- - Function: charset-dimension charset
- This function returns the dimension of CHARSET.
-
- - Function: charset-chars charset
- This function returns the number of characters per dimension of
- CHARSET.
-
- - Function: charset-columns charset
- This function returns the number of display columns per character
- (in TTY mode) of CHARSET.
-
- - Function: charset-direction charset
- This function returns the display direction of CHARSET--either
- `l2r' or `r2l'.
-
- - Function: charset-final charset
- This function returns the final byte of the ISO 2022 escape
- sequence designating CHARSET.
-
- - Function: charset-graphic charset
- This function returns either 0 or 1, depending on whether the
- position codes of characters in CHARSET map to the left or right
- half of their font, respectively.
-
- - Function: charset-ccl-program charset
- This function returns the CCL program, if any, for converting
- position codes of characters in CHARSET into font indices.
-
- The only property of a charset that can currently be set after the
-charset has been created is the CCL program.
-
- - Function: set-charset-ccl-program charset ccl-program
- This function sets the `ccl-program' property of CHARSET to
- CCL-PROGRAM.
-
Foundation instead of in the original English.
\1f
+File: lispref.info, Node: Internationalization Terminology, Next: Charsets, Up: MULE
+
+Internationalization Terminology
+================================
+
+ In internationalization terminology, a string of text is divided up
+into "characters", which are the printable units that make up the text.
+A single character is (for example) a capital `A', the number `2', a
+Katakana character, a Hangul character, a Kanji ideograph (an
+"ideograph" is a "picture" character, such as is used in Japanese
+Kanji, Chinese Hanzi, and Korean Hanja; typically there are thousands
+of such ideographs in each language), etc. The basic property of a
+character is that it is the smallest unit of text with semantic
+significance in text processing.
+
+ Human beings normally process text visually, so to a first
+approximation a character may be identified with its shape. Note that
+the same character may be drawn by two different people (or in two
+different fonts) in slightly different ways, although the "basic shape"
+will be the same. But consider the works of Scott Kim; human beings
+can recognize hugely variant shapes as the "same" character.
+Sometimes, especially where characters are extremely complicated to
+write, completely different shapes may be defined as the "same"
+character in national standards. The Taiwanese variant of Hanzi is
+generally the most complicated; over the centuries, the Japanese,
+Koreans, and the People's Republic of China have adopted
+simplifications of the shape, but the line of descent from the original
+shape is recorded, and the meanings and pronunciation of different
+forms of the same character are considered to be identical within each
+language. (Of course, it may take a specialist to recognize the
+related form; the point is that the relations are standardized, despite
+the differing shapes.)
+
+ In some cases, the differences will be significant enough that it is
+actually possible to identify two or more distinct shapes that both
+represent the same character. For example, the lowercase letters `a'
+and `g' each have two distinct possible shapes--the `a' can optionally
+have a curved tail projecting off the top, and the `g' can be formed
+either of two loops, or of one loop and a tail hanging off the bottom.
+Such distinct possible shapes of a character are called "glyphs". The
+important characteristic of two glyphs making up the same character is
+that the choice between one or the other is purely stylistic and has no
+linguistic effect on a word (this is the reason why a capital `A' and
+lowercase `a' are different characters rather than different
+glyphs--e.g. `Aspen' is a city while `aspen' is a kind of tree).
+
+ Note that "character" and "glyph" are used differently here than
+elsewhere in XEmacs.
+
+ A "character set" is essentially a set of related characters. ASCII,
+for example, is a set of 94 characters (or 128, if you count
+non-printing characters). Other character sets are ISO8859-1 (ASCII
+plus various accented characters and other international symbols), JIS
+X 0201 (ASCII, more or less, plus half-width Katakana), JIS X 0208
+(Japanese Kanji), JIS X 0212 (a second set of less-used Japanese Kanji),
+GB2312 (Mainland Chinese Hanzi), etc.
+
+ The definition of a character set will implicitly or explicitly give
+it an "ordering", a way of assigning a number to each character in the
+set. For many character sets, there is a natural ordering, for example
+the "ABC" ordering of the Roman letters. But it is not clear whether
+digits should come before or after the letters, and in fact different
+European languages treat the ordering of accented characters
+differently. It is useful to use the natural order where available, of
+course. The number assigned to any particular character is called the
+character's "code point". (Within a given character set, each
+character has a unique code point. Thus the word "set" is ill-chosen;
+different orderings of the same characters are different character sets.
+Identifying characters is simple enough for alphabetic character sets,
+but the difference in ordering can cause great headaches when the same
+thousands of characters are used by different cultures as in the Hanzi.)
+
+ A code point may be broken into a number of "position codes". The
+number of position codes required to index a particular character in a
+character set is called the "dimension" of the character set. For
+practical purposes, a position code may be thought of as a byte-sized
+index. The printing characters of ASCII, being a relatively small
+character set, is of dimension one, and each character in the set is
+indexed using a single position code, in the range 1 through 94. Use of
+this unusual range, rather than the familiar 33 through 126, is an
+intentional abstraction; to understand the programming issues you must
+break the equation between character sets and encodings.
+
+ JIS X 0208, i.e. Japanese Kanji, has thousands of characters, and is
+of dimension two - every character is indexed by two position codes,
+each in the range 1 through 94. (This number "94" is not a
+coincidence; we shall see that the JIS position codes were chosen so
+that JIS kanji could be encoded without using codes that in ASCII are
+associated with device control functions.) Note that the choice of the
+range here is somewhat arbitrary. You could just as easily index the
+printing characters in ASCII using numbers in the range 0 through 93, 2
+through 95, 3 through 96, etc. In fact, the standardized _encoding_
+for the ASCII _character set_ uses the range 33 through 126.
+
+ An "encoding" is a way of numerically representing characters from
+one or more character sets into a stream of like-sized numerical values
+called "words"; typically these are 8-bit, 16-bit, or 32-bit
+quantities. If an encoding encompasses only one character set, then the
+position codes for the characters in that character set could be used
+directly. (This is the case with the trivial cipher used by children,
+assigning 1 to `A', 2 to `B', and so on.) However, even with ASCII,
+other considerations intrude. For example, why are the upper- and
+lowercase alphabets separated by 8 characters? Why do the digits start
+with `0' being assigned the code 48? In both cases because semantically
+interesting operations (case conversion and numerical value extraction)
+become convenient masking operations. Other artificial aspects (the
+control characters being assigned to codes 0-31 and 127) are historical
+accidents. (The use of 127 for `DEL' is an artifact of the "punch
+once" nature of paper tape, for example.)
+
+ Naive use of the position code is not possible, however, if more than
+one character set is to be used in the encoding. For example, printed
+Japanese text typically requires characters from multiple character sets
+- ASCII, JIS X 0208, and JIS X 0212, to be specific. Each of these is
+indexed using one or more position codes in the range 1 through 94, so
+the position codes could not be used directly or there would be no way
+to tell which character was meant. Different Japanese encodings handle
+this differently - JIS uses special escape characters to denote
+different character sets; EUC sets the high bit of the position codes
+for JIS X 0208 and JIS X 0212, and puts a special extra byte before each
+JIS X 0212 character; etc. (JIS, EUC, and most of the other encodings
+you will encounter in files are 7-bit or 8-bit encodings. There is one
+common 16-bit encoding, which is Unicode; this strives to represent all
+the world's characters in a single large character set. 32-bit
+encodings are often used internally in programs, such as XEmacs with
+MULE support, to simplify the code that manipulates them; however, they
+are not used externally because they are not very space-efficient.)
+
+ A general method of handling text using multiple character sets
+(whether for multilingual text, or simply text in an extremely
+complicated single language like Japanese) is defined in the
+international standard ISO 2022. ISO 2022 will be discussed in more
+detail later (*note ISO 2022::), but for now suffice it to say that text
+needs control functions (at least spacing), and if escape sequences are
+to be used, an escape sequence introducer. It was decided to make all
+text streams compatible with ASCII in the sense that the codes 0-31
+(and 128-159) would always be control codes, never graphic characters,
+and where defined by the character set the `SPC' character would be
+assigned code 32, and `DEL' would be assigned 127. Thus there are 94
+code points remaining if 7 bits are used. This is the reason that most
+character sets are defined using position codes in the range 1 through
+94. Then ISO 2022 compatible encodings are produced by shifting the
+position codes 1 to 94 into character codes 33 to 126, or (if 8 bit
+codes are available) into character codes 161 to 254.
+
+ Encodings are classified as either "modal" or "non-modal". In a
+"modal encoding", there are multiple states that the encoding can be
+in, and the interpretation of the values in the stream depends on the
+current global state of the encoding. Special values in the encoding,
+called "escape sequences", are used to change the global state. JIS,
+for example, is a modal encoding. The bytes `ESC $ B' indicate that,
+from then on, bytes are to be interpreted as position codes for JIS X
+0208, rather than as ASCII. This effect is cancelled using the bytes
+`ESC ( B', which mean "switch from whatever the current state is to
+ASCII". To switch to JIS X 0212, the escape sequence `ESC $ ( D'.
+(Note that here, as is common, the escape sequences do in fact begin
+with `ESC'. This is not necessarily the case, however. Some encodings
+use control characters called "locking shifts" (effect persists until
+cancelled) to switch character sets.)
+
+ A "non-modal encoding" has no global state that extends past the
+character currently being interpreted. EUC, for example, is a
+non-modal encoding. Characters in JIS X 0208 are encoded by setting
+the high bit of the position codes, and characters in JIS X 0212 are
+encoded by doing the same but also prefixing the character with the
+byte 0x8F.
+
+ The advantage of a modal encoding is that it is generally more
+space-efficient, and is easily extendable because there are essentially
+an arbitrary number of escape sequences that can be created. The
+disadvantage, however, is that it is much more difficult to work with
+if it is not being processed in a sequential manner. In the non-modal
+EUC encoding, for example, the byte 0x41 always refers to the letter
+`A'; whereas in JIS, it could either be the letter `A', or one of the
+two position codes in a JIS X 0208 character, or one of the two
+position codes in a JIS X 0212 character. Determining exactly which
+one is meant could be difficult and time-consuming if the previous
+bytes in the string have not already been processed, or impossible if
+they are drawn from an external stream that cannot be rewound.
+
+ Non-modal encodings are further divided into "fixed-width" and
+"variable-width" formats. A fixed-width encoding always uses the same
+number of words per character, whereas a variable-width encoding does
+not. EUC is a good example of a variable-width encoding: one to three
+bytes are used per character, depending on the character set. 16-bit
+and 32-bit encodings are nearly always fixed-width, and this is in fact
+one of the main reasons for using an encoding with a larger word size.
+The advantages of fixed-width encodings should be obvious. The
+advantages of variable-width encodings are that they are generally more
+space-efficient and allow for compatibility with existing 8-bit
+encodings such as ASCII. (For example, in Unicode ASCII characters are
+simply promoted to a 16-bit representation. That means that every
+ASCII character contains a `NUL' byte; evidently all of the standard
+string manipulation functions will lose badly in a fixed-width Unicode
+environment.)
+
+ The bytes in an 8-bit encoding are often referred to as "octets"
+rather than simply as bytes. This terminology dates back to the days
+before 8-bit bytes were universal, when some computers had 9-bit bytes,
+others had 10-bit bytes, etc.
+
+\1f
+File: lispref.info, Node: Charsets, Next: MULE Characters, Prev: Internationalization Terminology, Up: MULE
+
+Charsets
+========
+
+ A "charset" in MULE is an object that encapsulates a particular
+character set as well as an ordering of those characters. Charsets are
+permanent objects and are named using symbols, like faces.
+
+ - Function: charsetp object
+ This function returns non-`nil' if OBJECT is a charset.
+
+* Menu:
+
+* Charset Properties:: Properties of a charset.
+* Basic Charset Functions:: Functions for working with charsets.
+* Charset Property Functions:: Functions for accessing charset properties.
+* Predefined Charsets:: Predefined charset objects.
+
+\1f
+File: lispref.info, Node: Charset Properties, Next: Basic Charset Functions, Up: Charsets
+
+Charset Properties
+------------------
+
+ Charsets have the following properties:
+
+`name'
+ A symbol naming the charset. Every charset must have a different
+ name; this allows a charset to be referred to using its name
+ rather than the actual charset object.
+
+`doc-string'
+ A documentation string describing the charset.
+
+`registry'
+ A regular expression matching the font registry field for this
+ character set. For example, both the `ascii' and `latin-iso8859-1'
+ charsets use the registry `"ISO8859-1"'. This field is used to
+ choose an appropriate font when the user gives a general font
+ specification such as `-*-courier-medium-r-*-140-*', i.e. a
+ 14-point upright medium-weight Courier font.
+
+`dimension'
+ Number of position codes used to index a character in the
+ character set. XEmacs/MULE can only handle character sets of
+ dimension 1 or 2. This property defaults to 1.
+
+`chars'
+ Number of characters in each dimension. In XEmacs/MULE, the only
+ allowed values are 94 or 96. (There are a couple of pre-defined
+ character sets, such as ASCII, that do not follow this, but you
+ cannot define new ones like this.) Defaults to 94. Note that if
+ the dimension is 2, the character set thus described is 94x94 or
+ 96x96.
+
+`columns'
+ Number of columns used to display a character in this charset.
+ Only used in TTY mode. (Under X, the actual width of a character
+ can be derived from the font used to display the characters.) If
+ unspecified, defaults to the dimension. (This is almost always the
+ correct value, because character sets with dimension 2 are usually
+ ideograph character sets, which need two columns to display the
+ intricate ideographs.)
+
+`direction'
+ A symbol, either `l2r' (left-to-right) or `r2l' (right-to-left).
+ Defaults to `l2r'. This specifies the direction that the text
+ should be displayed in, and will be left-to-right for most
+ charsets but right-to-left for Hebrew and Arabic. (Right-to-left
+ display is not currently implemented.)
+
+`final'
+ Final byte of the standard ISO 2022 escape sequence designating
+ this charset. Must be supplied. Each combination of (DIMENSION,
+ CHARS) defines a separate namespace for final bytes, and each
+ charset within a particular namespace must have a different final
+ byte. Note that ISO 2022 restricts the final byte to the range
+ 0x30 - 0x7E if dimension == 1, and 0x30 - 0x5F if dimension == 2.
+ Note also that final bytes in the range 0x30 - 0x3F are reserved
+ for user-defined (not official) character sets. For more
+ information on ISO 2022, see *Note Coding Systems::.
+
+`graphic'
+ 0 (use left half of font on output) or 1 (use right half of font on
+ output). Defaults to 0. This specifies how to convert the
+ position codes that index a character in a character set into an
+ index into the font used to display the character set. With
+ `graphic' set to 0, position codes 33 through 126 map to font
+ indices 33 through 126; with it set to 1, position codes 33
+ through 126 map to font indices 161 through 254 (i.e. the same
+ number but with the high bit set). For example, for a font whose
+ registry is ISO8859-1, the left half of the font (octets 0x20 -
+ 0x7F) is the `ascii' charset, while the right half (octets 0xA0 -
+ 0xFF) is the `latin-iso8859-1' charset.
+
+`ccl-program'
+ A compiled CCL program used to convert a character in this charset
+ into an index into the font. This is in addition to the `graphic'
+ property. If a CCL program is defined, the position codes of a
+ character will first be processed according to `graphic' and then
+ passed through the CCL program, with the resulting values used to
+ index the font.
+
+ This is used, for example, in the Big5 character set (used in
+ Taiwan). This character set is not ISO-2022-compliant, and its
+ size (94x157) does not fit within the maximum 96x96 size of
+ ISO-2022-compliant character sets. As a result, XEmacs/MULE
+ splits it (in a rather complex fashion, so as to group the most
+ commonly used characters together) into two charset objects
+ (`big5-1' and `big5-2'), each of size 94x94, and each charset
+ object uses a CCL program to convert the modified position codes
+ back into standard Big5 indices to retrieve a character from a
+ Big5 font.
+
+ Most of the above properties can only be set when the charset is
+initialized, and cannot be changed later. *Note Charset Property
+Functions::.
+
+\1f
+File: lispref.info, Node: Basic Charset Functions, Next: Charset Property Functions, Prev: Charset Properties, Up: Charsets
+
+Basic Charset Functions
+-----------------------
+
+ - Function: find-charset charset-or-name
+ This function retrieves the charset of the given name. If
+ CHARSET-OR-NAME is a charset object, it is simply returned.
+ Otherwise, CHARSET-OR-NAME should be a symbol. If there is no
+ such charset, `nil' is returned. Otherwise the associated charset
+ object is returned.
+
+ - Function: get-charset name
+ This function retrieves the charset of the given name. Same as
+ `find-charset' except an error is signalled if there is no such
+ charset instead of returning `nil'.
+
+ - Function: charset-list
+ This function returns a list of the names of all defined charsets.
+
+ - Function: make-charset name doc-string props
+ This function defines a new character set. This function is for
+ use with MULE support. NAME is a symbol, the name by which the
+ character set is normally referred. DOC-STRING is a string
+ describing the character set. PROPS is a property list,
+ describing the specific nature of the character set. The
+ recognized properties are `registry', `dimension', `columns',
+ `chars', `final', `graphic', `direction', and `ccl-program', as
+ previously described.
+
+ - Function: make-reverse-direction-charset charset new-name
+ This function makes a charset equivalent to CHARSET but which goes
+ in the opposite direction. NEW-NAME is the name of the new
+ charset. The new charset is returned.
+
+ - Function: charset-from-attributes dimension chars final &optional
+ direction
+ This function returns a charset with the given DIMENSION, CHARS,
+ FINAL, and DIRECTION. If DIRECTION is omitted, both directions
+ will be checked (left-to-right will be returned if character sets
+ exist for both directions).
+
+ - Function: charset-reverse-direction-charset charset
+ This function returns the charset (if any) with the same dimension,
+ number of characters, and final byte as CHARSET, but which is
+ displayed in the opposite direction.
+
+\1f
+File: lispref.info, Node: Charset Property Functions, Next: Predefined Charsets, Prev: Basic Charset Functions, Up: Charsets
+
+Charset Property Functions
+--------------------------
+
+ All of these functions accept either a charset name or charset
+object.
+
+ - Function: charset-property charset prop
+ This function returns property PROP of CHARSET. *Note Charset
+ Properties::.
+
+ Convenience functions are also provided for retrieving individual
+properties of a charset.
+
+ - Function: charset-name charset
+ This function returns the name of CHARSET. This will be a symbol.
+
+ - Function: charset-doc-string charset
+ This function returns the doc string of CHARSET.
+
+ - Function: charset-registry charset
+ This function returns the registry of CHARSET.
+
+ - Function: charset-dimension charset
+ This function returns the dimension of CHARSET.
+
+ - Function: charset-chars charset
+ This function returns the number of characters per dimension of
+ CHARSET.
+
+ - Function: charset-columns charset
+ This function returns the number of display columns per character
+ (in TTY mode) of CHARSET.
+
+ - Function: charset-direction charset
+ This function returns the display direction of CHARSET--either
+ `l2r' or `r2l'.
+
+ - Function: charset-final charset
+ This function returns the final byte of the ISO 2022 escape
+ sequence designating CHARSET.
+
+ - Function: charset-graphic charset
+ This function returns either 0 or 1, depending on whether the
+ position codes of characters in CHARSET map to the left or right
+ half of their font, respectively.
+
+ - Function: charset-ccl-program charset
+ This function returns the CCL program, if any, for converting
+ position codes of characters in CHARSET into font indices.
+
+ The only property of a charset that can currently be set after the
+charset has been created is the CCL program.
+
+ - Function: set-charset-ccl-program charset ccl-program
+ This function sets the `ccl-program' property of CHARSET to
+ CCL-PROGRAM.
+
+\1f
File: lispref.info, Node: Predefined Charsets, Prev: Charset Property Functions, Up: Charsets
Predefined Charsets
subsidiary coding systems. (This value is converted to `nil' when
stored internally, and `coding-system-property' will return `nil'.)
-\1f
-File: lispref.info, Node: Coding System Properties, Next: Basic Coding System Functions, Prev: EOL Conversion, Up: Coding Systems
-
-Coding System Properties
-------------------------
-
-`mnemonic'
- String to be displayed in the modeline when this coding system is
- active.
-
-`eol-type'
- End-of-line conversion to be used. It should be one of the types
- listed in *Note EOL Conversion::.
-
-`eol-lf'
- The coding system which is the same as this one, except that it
- uses the Unix line-breaking convention.
-
-`eol-crlf'
- The coding system which is the same as this one, except that it
- uses the DOS line-breaking convention.
-
-`eol-cr'
- The coding system which is the same as this one, except that it
- uses the Macintosh line-breaking convention.
-
-`post-read-conversion'
- Function called after a file has been read in, to perform the
- decoding. Called with two arguments, BEG and END, denoting a
- region of the current buffer to be decoded.
-
-`pre-write-conversion'
- Function called before a file is written out, to perform the
- encoding. Called with two arguments, BEG and END, denoting a
- region of the current buffer to be encoded.
-
- The following additional properties are recognized if TYPE is
-`iso2022':
-
-`charset-g0'
-`charset-g1'
-`charset-g2'
-`charset-g3'
- The character set initially designated to the G0 - G3 registers.
- The value should be one of
-
- * A charset object (designate that character set)
-
- * `nil' (do not ever use this register)
-
- * `t' (no character set is initially designated to the
- register, but may be later on; this automatically sets the
- corresponding `force-g*-on-output' property)
-
-`force-g0-on-output'
-`force-g1-on-output'
-`force-g2-on-output'
-`force-g3-on-output'
- If non-`nil', send an explicit designation sequence on output
- before using the specified register.
-
-`short'
- If non-`nil', use the short forms `ESC $ @', `ESC $ A', and `ESC $
- B' on output in place of the full designation sequences `ESC $ (
- @', `ESC $ ( A', and `ESC $ ( B'.
-
-`no-ascii-eol'
- If non-`nil', don't designate ASCII to G0 at each end of line on
- output. Setting this to non-`nil' also suppresses other
- state-resetting that normally happens at the end of a line.
-
-`no-ascii-cntl'
- If non-`nil', don't designate ASCII to G0 before control chars on
- output.
-
-`seven'
- If non-`nil', use 7-bit environment on output. Otherwise, use
- 8-bit environment.
-
-`lock-shift'
- If non-`nil', use locking-shift (SO/SI) instead of single-shift or
- designation by escape sequence.
-
-`no-iso6429'
- If non-`nil', don't use ISO6429's direction specification.
-
-`escape-quoted'
- If non-nil, literal control characters that are the same as the
- beginning of a recognized ISO 2022 or ISO 6429 escape sequence (in
- particular, ESC (0x1B), SO (0x0E), SI (0x0F), SS2 (0x8E), SS3
- (0x8F), and CSI (0x9B)) are "quoted" with an escape character so
- that they can be properly distinguished from an escape sequence.
- (Note that doing this results in a non-portable encoding.) This
- encoding flag is used for byte-compiled files. Note that ESC is a
- good choice for a quoting character because there are no escape
- sequences whose second byte is a character from the Control-0 or
- Control-1 character sets; this is explicitly disallowed by the ISO
- 2022 standard.
-
-`input-charset-conversion'
- A list of conversion specifications, specifying conversion of
- characters in one charset to another when decoding is performed.
- Each specification is a list of two elements: the source charset,
- and the destination charset.
-
-`output-charset-conversion'
- A list of conversion specifications, specifying conversion of
- characters in one charset to another when encoding is performed.
- The form of each specification is the same as for
- `input-charset-conversion'.
-
- The following additional properties are recognized (and required) if
-TYPE is `ccl':
-
-`decode'
- CCL program used for decoding (converting to internal format).
-
-`encode'
- CCL program used for encoding (converting to external format).
-
- The following properties are used internally: EOL-CR, EOL-CRLF,
-EOL-LF, and BASE.
-
-\1f
-File: lispref.info, Node: Basic Coding System Functions, Next: Coding System Property Functions, Prev: Coding System Properties, Up: Coding Systems
-
-Basic Coding System Functions
------------------------------
-
- - Function: find-coding-system coding-system-or-name
- This function retrieves the coding system of the given name.
-
- If CODING-SYSTEM-OR-NAME is a coding-system object, it is simply
- returned. Otherwise, CODING-SYSTEM-OR-NAME should be a symbol.
- If there is no such coding system, `nil' is returned. Otherwise
- the associated coding system object is returned.
-
- - Function: get-coding-system name
- This function retrieves the coding system of the given name. Same
- as `find-coding-system' except an error is signalled if there is no
- such coding system instead of returning `nil'.
-
- - Function: coding-system-list
- This function returns a list of the names of all defined coding
- systems.
-
- - Function: coding-system-name coding-system
- This function returns the name of the given coding system.
-
- - Function: coding-system-base coding-system
- Returns the base coding system (undecided EOL convention) coding
- system.
-
- - Function: make-coding-system name type &optional doc-string props
- This function registers symbol NAME as a coding system.
-
- TYPE describes the conversion method used and should be one of the
- types listed in *Note Coding System Types::.
-
- DOC-STRING is a string describing the coding system.
-
- PROPS is a property list, describing the specific nature of the
- character set. Recognized properties are as in *Note Coding
- System Properties::.
-
- - Function: copy-coding-system old-coding-system new-name
- This function copies OLD-CODING-SYSTEM to NEW-NAME. If NEW-NAME
- does not name an existing coding system, a new one will be created.
-
- - Function: subsidiary-coding-system coding-system eol-type
- This function returns the subsidiary coding system of
- CODING-SYSTEM with eol type EOL-TYPE.
-
-\1f
-File: lispref.info, Node: Coding System Property Functions, Next: Encoding and Decoding Text, Prev: Basic Coding System Functions, Up: Coding Systems
-
-Coding System Property Functions
---------------------------------
-
- - Function: coding-system-doc-string coding-system
- This function returns the doc string for CODING-SYSTEM.
-
- - Function: coding-system-type coding-system
- This function returns the type of CODING-SYSTEM.
-
- - Function: coding-system-property coding-system prop
- This function returns the PROP property of CODING-SYSTEM.
-
-\1f
-File: lispref.info, Node: Encoding and Decoding Text, Next: Detection of Textual Encoding, Prev: Coding System Property Functions, Up: Coding Systems
-
-Encoding and Decoding Text
---------------------------
-
- - Function: decode-coding-region start end coding-system &optional
- buffer
- This function decodes the text between START and END which is
- encoded in CODING-SYSTEM. This is useful if you've read in
- encoded text from a file without decoding it (e.g. you read in a
- JIS-formatted file but used the `binary' or `no-conversion' coding
- system, so that it shows up as `^[$B!<!+^[(B'). The length of the
- encoded text is returned. BUFFER defaults to the current buffer
- if unspecified.
-
- - Function: encode-coding-region start end coding-system &optional
- buffer
- This function encodes the text between START and END using
- CODING-SYSTEM. This will, for example, convert Japanese
- characters into stuff such as `^[$B!<!+^[(B' if you use the JIS
- encoding. The length of the encoded text is returned. BUFFER
- defaults to the current buffer if unspecified.
-
-\1f
-File: lispref.info, Node: Detection of Textual Encoding, Next: Big5 and Shift-JIS Functions, Prev: Encoding and Decoding Text, Up: Coding Systems
-
-Detection of Textual Encoding
------------------------------
-
- - Function: coding-category-list
- This function returns a list of all recognized coding categories.
-
- - Function: set-coding-priority-list list
- This function changes the priority order of the coding categories.
- LIST should be a list of coding categories, in descending order of
- priority. Unspecified coding categories will be lower in priority
- than all specified ones, in the same relative order they were in
- previously.
-
- - Function: coding-priority-list
- This function returns a list of coding categories in descending
- order of priority.
-
- - Function: set-coding-category-system coding-category coding-system
- This function changes the coding system associated with a coding
- category.
-
- - Function: coding-category-system coding-category
- This function returns the coding system associated with a coding
- category.
-
- - Function: detect-coding-region start end &optional buffer
- This function detects coding system of the text in the region
- between START and END. Returned value is a list of possible coding
- systems ordered by priority. If only ASCII characters are found,
- it returns `autodetect' or one of its subsidiary coding systems
- according to a detected end-of-line type. Optional arg BUFFER
- defaults to the current buffer.
-
-\1f
-File: lispref.info, Node: Big5 and Shift-JIS Functions, Next: Predefined Coding Systems, Prev: Detection of Textual Encoding, Up: Coding Systems
-
-Big5 and Shift-JIS Functions
-----------------------------
-
- These are special functions for working with the non-standard
-Shift-JIS and Big5 encodings.
-
- - Function: decode-shift-jis-char code
- This function decodes a JIS X 0208 character of Shift-JIS
- coding-system. CODE is the character code in Shift-JIS as a cons
- of type bytes. The corresponding character is returned.
-
- - Function: encode-shift-jis-char ch
- This function encodes a JIS X 0208 character CH to SHIFT-JIS
- coding-system. The corresponding character code in SHIFT-JIS is
- returned as a cons of two bytes.
-
- - Function: decode-big5-char code
- This function decodes a Big5 character CODE of BIG5 coding-system.
- CODE is the character code in BIG5. The corresponding character
- is returned.
-
- - Function: encode-big5-char ch
- This function encodes the Big5 character CHAR to BIG5
- coding-system. The corresponding character code in Big5 is
- returned.
-
-\1f
-File: lispref.info, Node: Predefined Coding Systems, Prev: Big5 and Shift-JIS Functions, Up: Coding Systems
-
-Coding Systems Implemented
---------------------------
-
- MULE initializes most of the commonly used coding systems at XEmacs's
-startup. A few others are initialized only when the relevant language
-environment is selected and support libraries are loaded. (NB: The
-following list is based on XEmacs 21.2.19, the development branch at the
-time of writing. The list may be somewhat different for other
-versions. Recent versions of GNU Emacs 20 implement a few more rare
-coding systems; work is being done to port these to XEmacs.)
-
- Unfortunately, there is not a consistent naming convention for
-character sets, and for practical purposes coding systems often take
-their name from their principal character sets (ASCII, KOI8-R, Shift
-JIS). Others take their names from the coding system (ISO-2022-JP,
-EUC-KR), and a few from their non-text usages (internal, binary). To
-provide for this, and for the fact that many coding systems have
-several common names, an aliasing system is provided. Finally, some
-effort has been made to use names that are registered as MIME charsets
-(this is why the name 'shift_jis contains that un-Lisp-y underscore).
-
- There is a systematic naming convention regarding end-of-line (EOL)
-conventions for different systems. A coding system whose name ends in
-"-unix" forces the assumptions that lines are broken by newlines (0x0A).
-A coding system whose name ends in "-mac" forces the assumptions that
-lines are broken by ASCII CRs (0x0D). A coding system whose name ends
-in "-dos" forces the assumptions that lines are broken by CRLF sequences
-(0x0D 0x0A). These subsidiary coding systems are automatically derived
-from a base coding system. Use of the base coding system implies
-autodetection of the text file convention. (The fact that the -unix,
--mac, and -dos are derived from a base system results in them showing up
-as "aliases" in `list-coding-systems'.) These subsidiaries have a
-consistent modeline indicator as well. "-dos" coding systems have ":T"
-appended to their modeline indicator, while "-mac" coding systems have
-":t" appended (eg, "ISO8:t" for iso-2022-8-mac).
-
- In the following table, each coding system is given with its mode
-line indicator in parentheses. Non-textual coding systems are listed
-first, followed by textual coding systems and their aliases. (The
-coding system subsidiary modeline indicators ":T" and ":t" will be
-omitted from the table of coding systems.)
-
- ### SJT 1999-08-23 Maybe should order these by language? Definitely
-need language usage for the ISO-8859 family.
-
- Note that although true coding system aliases have been implemented
-for XEmacs 21.2, the coding system initialization has not yet been
-converted as of 21.2.19. So coding systems described as aliases have
-the same properties as the aliased coding system, but will not be equal
-as Lisp objects.
-
-`automatic-conversion'
-`undecided'
-`undecided-dos'
-`undecided-mac'
-`undecided-unix'
- Modeline indicator: `Auto'. A type `undecided' coding system.
- Attempts to determine an appropriate coding system from file
- contents or the environment.
-
-`raw-text'
-`no-conversion'
-`raw-text-dos'
-`raw-text-mac'
-`raw-text-unix'
-`no-conversion-dos'
-`no-conversion-mac'
-`no-conversion-unix'
- Modeline indicator: `Raw'. A type `no-conversion' coding system,
- which converts only line-break-codes. An implementation quirk
- means that this coding system is also used for ISO8859-1.
-
-`binary'
- Modeline indicator: `Binary'. A type `no-conversion' coding
- system which does no character coding or EOL conversions. An
- alias for `raw-text-unix'.
-
-`alternativnyj'
-`alternativnyj-dos'
-`alternativnyj-mac'
-`alternativnyj-unix'
- Modeline indicator: `Cy.Alt'. A type `ccl' coding system used for
- Alternativnyj, an encoding of the Cyrillic alphabet.
-
-`big5'
-`big5-dos'
-`big5-mac'
-`big5-unix'
- Modeline indicator: `Zh/Big5'. A type `big5' coding system used
- for BIG5, the most common encoding of traditional Chinese as used
- in Taiwan.
-
-`cn-gb-2312'
-`cn-gb-2312-dos'
-`cn-gb-2312-mac'
-`cn-gb-2312-unix'
- Modeline indicator: `Zh-GB/EUC'. A type `iso2022' coding system
- used for simplified Chinese (as used in the People's Republic of
- China), with the `ascii' (G0), `chinese-gb2312' (G1), and `sisheng'
- (G2) character sets initially designated. Chinese EUC (Extended
- Unix Code).
-
-`ctext-hebrew'
-`ctext-hebrew-dos'
-`ctext-hebrew-mac'
-`ctext-hebrew-unix'
- Modeline indicator: `CText/Hbrw'. A type `iso2022' coding system
- with the `ascii' (G0) and `hebrew-iso8859-8' (G1) character sets
- initially designated for Hebrew.
-
-`ctext'
-`ctext-dos'
-`ctext-mac'
-`ctext-unix'
- Modeline indicator: `CText'. A type `iso2022' 8-bit coding system
- with the `ascii' (G0) and `latin-iso8859-1' (G1) character sets
- initially designated. X11 Compound Text Encoding. Often
- mistakenly recognized instead of EUC encodings; usual cause is
- inappropriate setting of `coding-priority-list'.
-
-`escape-quoted'
- Modeline indicator: `ESC/Quot'. A type `iso2022' 8-bit coding
- system with the `ascii' (G0) and `latin-iso8859-1' (G1) character
- sets initially designated and escape quoting. Unix EOL conversion
- (ie, no conversion). It is used for .ELC files.
-
-`euc-jp'
-`euc-jp-dos'
-`euc-jp-mac'
-`euc-jp-unix'
- Modeline indicator: `Ja/EUC'. A type `iso2022' 8-bit coding system
- with `ascii' (G0), `japanese-jisx0208' (G1), `katakana-jisx0201'
- (G2), and `japanese-jisx0212' (G3) initially designated. Japanese
- EUC (Extended Unix Code).
-
-`euc-kr'
-`euc-kr-dos'
-`euc-kr-mac'
-`euc-kr-unix'
- Modeline indicator: `ko/EUC'. A type `iso2022' 8-bit coding system
- with `ascii' (G0) and `korean-ksc5601' (G1) initially designated.
- Korean EUC (Extended Unix Code).
-
-`hz-gb-2312'
- Modeline indicator: `Zh-GB/Hz'. A type `no-conversion' coding
- system with Unix EOL convention (ie, no conversion) using
- post-read-decode and pre-write-encode functions to translate the
- Hz/ZW coding system used for Chinese.
-
-`iso-2022-7bit'
-`iso-2022-7bit-unix'
-`iso-2022-7bit-dos'
-`iso-2022-7bit-mac'
-`iso-2022-7'
- Modeline indicator: `ISO7'. A type `iso2022' 7-bit coding system
- with `ascii' (G0) initially designated. Other character sets must
- be explicitly designated to be used.
-
-`iso-2022-7bit-ss2'
-`iso-2022-7bit-ss2-dos'
-`iso-2022-7bit-ss2-mac'
-`iso-2022-7bit-ss2-unix'
- Modeline indicator: `ISO7/SS'. A type `iso2022' 7-bit coding
- system with `ascii' (G0) initially designated. Other character
- sets must be explicitly designated to be used. SS2 is used to
- invoke a 96-charset, one character at a time.
-
-`iso-2022-8'
-`iso-2022-8-dos'
-`iso-2022-8-mac'
-`iso-2022-8-unix'
- Modeline indicator: `ISO8'. A type `iso2022' 8-bit coding system
- with `ascii' (G0) and `latin-iso8859-1' (G1) initially designated.
- Other character sets must be explicitly designated to be used.
- No single-shift or locking-shift.
-
-`iso-2022-8bit-ss2'
-`iso-2022-8bit-ss2-dos'
-`iso-2022-8bit-ss2-mac'
-`iso-2022-8bit-ss2-unix'
- Modeline indicator: `ISO8/SS'. A type `iso2022' 8-bit coding
- system with `ascii' (G0) and `latin-iso8859-1' (G1) initially
- designated. Other character sets must be explicitly designated to
- be used. SS2 is used to invoke a 96-charset, one character at a
- time.
-
-`iso-2022-int-1'
-`iso-2022-int-1-dos'
-`iso-2022-int-1-mac'
-`iso-2022-int-1-unix'
- Modeline indicator: `INT-1'. A type `iso2022' 7-bit coding system
- with `ascii' (G0) and `korean-ksc5601' (G1) initially designated.
- ISO-2022-INT-1.
-
-`iso-2022-jp-1978-irv'
-`iso-2022-jp-1978-irv-dos'
-`iso-2022-jp-1978-irv-mac'
-`iso-2022-jp-1978-irv-unix'
- Modeline indicator: `Ja-78/7bit'. A type `iso2022' 7-bit coding
- system. For compatibility with old Japanese terminals; if you
- need to know, look at the source.
-
-`iso-2022-jp'
-`iso-2022-jp-2 (ISO7/SS)'
-`iso-2022-jp-dos'
-`iso-2022-jp-mac'
-`iso-2022-jp-unix'
-`iso-2022-jp-2-dos'
-`iso-2022-jp-2-mac'
-`iso-2022-jp-2-unix'
- Modeline indicator: `MULE/7bit'. A type `iso2022' 7-bit coding
- system with `ascii' (G0) initially designated, and complex
- specifications to insure backward compatibility with old Japanese
- systems. Used for communication with mail and news in Japan. The
- "-2" versions also use SS2 to invoke a 96-charset one character at
- a time.
-
-`iso-2022-kr'
- Modeline indicator: `Ko/7bit' A type `iso2022' 7-bit coding
- system with `ascii' (G0) and `korean-ksc5601' (G1) initially
- designated. Used for e-mail in Korea.
-
-`iso-2022-lock'
-`iso-2022-lock-dos'
-`iso-2022-lock-mac'
-`iso-2022-lock-unix'
- Modeline indicator: `ISO7/Lock'. A type `iso2022' 7-bit coding
- system with `ascii' (G0) initially designated, using Locking-Shift
- to invoke a 96-charset.
-
-`iso-8859-1'
-`iso-8859-1-dos'
-`iso-8859-1-mac'
-`iso-8859-1-unix'
- Due to implementation, this is not a type `iso2022' coding system,
- but rather an alias for the `raw-text' coding system.
-
-`iso-8859-2'
-`iso-8859-2-dos'
-`iso-8859-2-mac'
-`iso-8859-2-unix'
- Modeline indicator: `MIME/Ltn-2'. A type `iso2022' coding system
- with `ascii' (G0) and `latin-iso8859-2' (G1) initially invoked.
-
-`iso-8859-3'
-`iso-8859-3-dos'
-`iso-8859-3-mac'
-`iso-8859-3-unix'
- Modeline indicator: `MIME/Ltn-3'. A type `iso2022' coding system
- with `ascii' (G0) and `latin-iso8859-3' (G1) initially invoked.
-
-`iso-8859-4'
-`iso-8859-4-dos'
-`iso-8859-4-mac'
-`iso-8859-4-unix'
- Modeline indicator: `MIME/Ltn-4'. A type `iso2022' coding system
- with `ascii' (G0) and `latin-iso8859-4' (G1) initially invoked.
-
-`iso-8859-5'
-`iso-8859-5-dos'
-`iso-8859-5-mac'
-`iso-8859-5-unix'
- Modeline indicator: `ISO8/Cyr'. A type `iso2022' coding system
- with `ascii' (G0) and `cyrillic-iso8859-5' (G1) initially invoked.
-
-`iso-8859-7'
-`iso-8859-7-dos'
-`iso-8859-7-mac'
-`iso-8859-7-unix'
- Modeline indicator: `Grk'. A type `iso2022' coding system with
- `ascii' (G0) and `greek-iso8859-7' (G1) initially invoked.
-
-`iso-8859-8'
-`iso-8859-8-dos'
-`iso-8859-8-mac'
-`iso-8859-8-unix'
- Modeline indicator: `MIME/Hbrw'. A type `iso2022' coding system
- with `ascii' (G0) and `hebrew-iso8859-8' (G1) initially invoked.
-
-`iso-8859-9'
-`iso-8859-9-dos'
-`iso-8859-9-mac'
-`iso-8859-9-unix'
- Modeline indicator: `MIME/Ltn-5'. A type `iso2022' coding system
- with `ascii' (G0) and `latin-iso8859-9' (G1) initially invoked.
-
-`koi8-r'
-`koi8-r-dos'
-`koi8-r-mac'
-`koi8-r-unix'
- Modeline indicator: `KOI8'. A type `ccl' coding-system used for
- KOI8-R, an encoding of the Cyrillic alphabet.
-
-`shift_jis'
-`shift_jis-dos'
-`shift_jis-mac'
-`shift_jis-unix'
- Modeline indicator: `Ja/SJIS'. A type `shift-jis' coding-system
- implementing the Shift-JIS encoding for Japanese. The underscore
- is to conform to the MIME charset implementing this encoding.
-
-`tis-620'
-`tis-620-dos'
-`tis-620-mac'
-`tis-620-unix'
- Modeline indicator: `TIS620'. A type `ccl' encoding for Thai. The
- external encoding is defined by TIS620, the internal encoding is
- peculiar to MULE, and called `thai-xtis'.
-
-`viqr'
- Modeline indicator: `VIQR'. A type `no-conversion' coding system
- with Unix EOL convention (ie, no conversion) using
- post-read-decode and pre-write-encode functions to translate the
- VIQR coding system for Vietnamese.
-
-`viscii'
-`viscii-dos'
-`viscii-mac'
-`viscii-unix'
- Modeline indicator: `VISCII'. A type `ccl' coding-system used for
- VISCII 1.1 for Vietnamese. Differs slightly from VSCII; VISCII is
- given priority by XEmacs.
-
-`vscii'
-`vscii-dos'
-`vscii-mac'
-`vscii-unix'
- Modeline indicator: `VSCII'. A type `ccl' coding-system used for
- VSCII 1.1 for Vietnamese. Differs slightly from VISCII, which is
- given priority by XEmacs. Use `(prefer-coding-system
- 'vietnamese-vscii)' to give priority to VSCII.
-
Foundation instead of in the original English.
\1f
+File: lispref.info, Node: Coding System Properties, Next: Basic Coding System Functions, Prev: EOL Conversion, Up: Coding Systems
+
+Coding System Properties
+------------------------
+
+`mnemonic'
+ String to be displayed in the modeline when this coding system is
+ active.
+
+`eol-type'
+ End-of-line conversion to be used. It should be one of the types
+ listed in *Note EOL Conversion::.
+
+`eol-lf'
+ The coding system which is the same as this one, except that it
+ uses the Unix line-breaking convention.
+
+`eol-crlf'
+ The coding system which is the same as this one, except that it
+ uses the DOS line-breaking convention.
+
+`eol-cr'
+ The coding system which is the same as this one, except that it
+ uses the Macintosh line-breaking convention.
+
+`post-read-conversion'
+ Function called after a file has been read in, to perform the
+ decoding. Called with two arguments, BEG and END, denoting a
+ region of the current buffer to be decoded.
+
+`pre-write-conversion'
+ Function called before a file is written out, to perform the
+ encoding. Called with two arguments, BEG and END, denoting a
+ region of the current buffer to be encoded.
+
+ The following additional properties are recognized if TYPE is
+`iso2022':
+
+`charset-g0'
+`charset-g1'
+`charset-g2'
+`charset-g3'
+ The character set initially designated to the G0 - G3 registers.
+ The value should be one of
+
+ * A charset object (designate that character set)
+
+ * `nil' (do not ever use this register)
+
+ * `t' (no character set is initially designated to the
+ register, but may be later on; this automatically sets the
+ corresponding `force-g*-on-output' property)
+
+`force-g0-on-output'
+`force-g1-on-output'
+`force-g2-on-output'
+`force-g3-on-output'
+ If non-`nil', send an explicit designation sequence on output
+ before using the specified register.
+
+`short'
+ If non-`nil', use the short forms `ESC $ @', `ESC $ A', and `ESC $
+ B' on output in place of the full designation sequences `ESC $ (
+ @', `ESC $ ( A', and `ESC $ ( B'.
+
+`no-ascii-eol'
+ If non-`nil', don't designate ASCII to G0 at each end of line on
+ output. Setting this to non-`nil' also suppresses other
+ state-resetting that normally happens at the end of a line.
+
+`no-ascii-cntl'
+ If non-`nil', don't designate ASCII to G0 before control chars on
+ output.
+
+`seven'
+ If non-`nil', use 7-bit environment on output. Otherwise, use
+ 8-bit environment.
+
+`lock-shift'
+ If non-`nil', use locking-shift (SO/SI) instead of single-shift or
+ designation by escape sequence.
+
+`no-iso6429'
+ If non-`nil', don't use ISO6429's direction specification.
+
+`escape-quoted'
+ If non-nil, literal control characters that are the same as the
+ beginning of a recognized ISO 2022 or ISO 6429 escape sequence (in
+ particular, ESC (0x1B), SO (0x0E), SI (0x0F), SS2 (0x8E), SS3
+ (0x8F), and CSI (0x9B)) are "quoted" with an escape character so
+ that they can be properly distinguished from an escape sequence.
+ (Note that doing this results in a non-portable encoding.) This
+ encoding flag is used for byte-compiled files. Note that ESC is a
+ good choice for a quoting character because there are no escape
+ sequences whose second byte is a character from the Control-0 or
+ Control-1 character sets; this is explicitly disallowed by the ISO
+ 2022 standard.
+
+`input-charset-conversion'
+ A list of conversion specifications, specifying conversion of
+ characters in one charset to another when decoding is performed.
+ Each specification is a list of two elements: the source charset,
+ and the destination charset.
+
+`output-charset-conversion'
+ A list of conversion specifications, specifying conversion of
+ characters in one charset to another when encoding is performed.
+ The form of each specification is the same as for
+ `input-charset-conversion'.
+
+ The following additional properties are recognized (and required) if
+TYPE is `ccl':
+
+`decode'
+ CCL program used for decoding (converting to internal format).
+
+`encode'
+ CCL program used for encoding (converting to external format).
+
+ The following properties are used internally: EOL-CR, EOL-CRLF,
+EOL-LF, and BASE.
+
+\1f
+File: lispref.info, Node: Basic Coding System Functions, Next: Coding System Property Functions, Prev: Coding System Properties, Up: Coding Systems
+
+Basic Coding System Functions
+-----------------------------
+
+ - Function: find-coding-system coding-system-or-name
+ This function retrieves the coding system of the given name.
+
+ If CODING-SYSTEM-OR-NAME is a coding-system object, it is simply
+ returned. Otherwise, CODING-SYSTEM-OR-NAME should be a symbol.
+ If there is no such coding system, `nil' is returned. Otherwise
+ the associated coding system object is returned.
+
+ - Function: get-coding-system name
+ This function retrieves the coding system of the given name. Same
+ as `find-coding-system' except an error is signalled if there is no
+ such coding system instead of returning `nil'.
+
+ - Function: coding-system-list
+ This function returns a list of the names of all defined coding
+ systems.
+
+ - Function: coding-system-name coding-system
+ This function returns the name of the given coding system.
+
+ - Function: coding-system-base coding-system
+ Returns the base coding system (undecided EOL convention) coding
+ system.
+
+ - Function: make-coding-system name type &optional doc-string props
+ This function registers symbol NAME as a coding system.
+
+ TYPE describes the conversion method used and should be one of the
+ types listed in *Note Coding System Types::.
+
+ DOC-STRING is a string describing the coding system.
+
+ PROPS is a property list, describing the specific nature of the
+ character set. Recognized properties are as in *Note Coding
+ System Properties::.
+
+ - Function: copy-coding-system old-coding-system new-name
+ This function copies OLD-CODING-SYSTEM to NEW-NAME. If NEW-NAME
+ does not name an existing coding system, a new one will be created.
+
+ - Function: subsidiary-coding-system coding-system eol-type
+ This function returns the subsidiary coding system of
+ CODING-SYSTEM with eol type EOL-TYPE.
+
+\1f
+File: lispref.info, Node: Coding System Property Functions, Next: Encoding and Decoding Text, Prev: Basic Coding System Functions, Up: Coding Systems
+
+Coding System Property Functions
+--------------------------------
+
+ - Function: coding-system-doc-string coding-system
+ This function returns the doc string for CODING-SYSTEM.
+
+ - Function: coding-system-type coding-system
+ This function returns the type of CODING-SYSTEM.
+
+ - Function: coding-system-property coding-system prop
+ This function returns the PROP property of CODING-SYSTEM.
+
+\1f
+File: lispref.info, Node: Encoding and Decoding Text, Next: Detection of Textual Encoding, Prev: Coding System Property Functions, Up: Coding Systems
+
+Encoding and Decoding Text
+--------------------------
+
+ - Function: decode-coding-region start end coding-system &optional
+ buffer
+ This function decodes the text between START and END which is
+ encoded in CODING-SYSTEM. This is useful if you've read in
+ encoded text from a file without decoding it (e.g. you read in a
+ JIS-formatted file but used the `binary' or `no-conversion' coding
+ system, so that it shows up as `^[$B!<!+^[(B'). The length of the
+ encoded text is returned. BUFFER defaults to the current buffer
+ if unspecified.
+
+ - Function: encode-coding-region start end coding-system &optional
+ buffer
+ This function encodes the text between START and END using
+ CODING-SYSTEM. This will, for example, convert Japanese
+ characters into stuff such as `^[$B!<!+^[(B' if you use the JIS
+ encoding. The length of the encoded text is returned. BUFFER
+ defaults to the current buffer if unspecified.
+
+\1f
+File: lispref.info, Node: Detection of Textual Encoding, Next: Big5 and Shift-JIS Functions, Prev: Encoding and Decoding Text, Up: Coding Systems
+
+Detection of Textual Encoding
+-----------------------------
+
+ - Function: coding-category-list
+ This function returns a list of all recognized coding categories.
+
+ - Function: set-coding-priority-list list
+ This function changes the priority order of the coding categories.
+ LIST should be a list of coding categories, in descending order of
+ priority. Unspecified coding categories will be lower in priority
+ than all specified ones, in the same relative order they were in
+ previously.
+
+ - Function: coding-priority-list
+ This function returns a list of coding categories in descending
+ order of priority.
+
+ - Function: set-coding-category-system coding-category coding-system
+ This function changes the coding system associated with a coding
+ category.
+
+ - Function: coding-category-system coding-category
+ This function returns the coding system associated with a coding
+ category.
+
+ - Function: detect-coding-region start end &optional buffer
+ This function detects coding system of the text in the region
+ between START and END. Returned value is a list of possible coding
+ systems ordered by priority. If only ASCII characters are found,
+ it returns `autodetect' or one of its subsidiary coding systems
+ according to a detected end-of-line type. Optional arg BUFFER
+ defaults to the current buffer.
+
+\1f
+File: lispref.info, Node: Big5 and Shift-JIS Functions, Next: Predefined Coding Systems, Prev: Detection of Textual Encoding, Up: Coding Systems
+
+Big5 and Shift-JIS Functions
+----------------------------
+
+ These are special functions for working with the non-standard
+Shift-JIS and Big5 encodings.
+
+ - Function: decode-shift-jis-char code
+ This function decodes a JIS X 0208 character of Shift-JIS
+ coding-system. CODE is the character code in Shift-JIS as a cons
+ of type bytes. The corresponding character is returned.
+
+ - Function: encode-shift-jis-char ch
+ This function encodes a JIS X 0208 character CH to SHIFT-JIS
+ coding-system. The corresponding character code in SHIFT-JIS is
+ returned as a cons of two bytes.
+
+ - Function: decode-big5-char code
+ This function decodes a Big5 character CODE of BIG5 coding-system.
+ CODE is the character code in BIG5. The corresponding character
+ is returned.
+
+ - Function: encode-big5-char ch
+ This function encodes the Big5 character CHAR to BIG5
+ coding-system. The corresponding character code in Big5 is
+ returned.
+
+\1f
+File: lispref.info, Node: Predefined Coding Systems, Prev: Big5 and Shift-JIS Functions, Up: Coding Systems
+
+Coding Systems Implemented
+--------------------------
+
+ MULE initializes most of the commonly used coding systems at XEmacs's
+startup. A few others are initialized only when the relevant language
+environment is selected and support libraries are loaded. (NB: The
+following list is based on XEmacs 21.2.19, the development branch at the
+time of writing. The list may be somewhat different for other
+versions. Recent versions of GNU Emacs 20 implement a few more rare
+coding systems; work is being done to port these to XEmacs.)
+
+ Unfortunately, there is not a consistent naming convention for
+character sets, and for practical purposes coding systems often take
+their name from their principal character sets (ASCII, KOI8-R, Shift
+JIS). Others take their names from the coding system (ISO-2022-JP,
+EUC-KR), and a few from their non-text usages (internal, binary). To
+provide for this, and for the fact that many coding systems have
+several common names, an aliasing system is provided. Finally, some
+effort has been made to use names that are registered as MIME charsets
+(this is why the name 'shift_jis contains that un-Lisp-y underscore).
+
+ There is a systematic naming convention regarding end-of-line (EOL)
+conventions for different systems. A coding system whose name ends in
+"-unix" forces the assumptions that lines are broken by newlines (0x0A).
+A coding system whose name ends in "-mac" forces the assumptions that
+lines are broken by ASCII CRs (0x0D). A coding system whose name ends
+in "-dos" forces the assumptions that lines are broken by CRLF sequences
+(0x0D 0x0A). These subsidiary coding systems are automatically derived
+from a base coding system. Use of the base coding system implies
+autodetection of the text file convention. (The fact that the -unix,
+-mac, and -dos are derived from a base system results in them showing up
+as "aliases" in `list-coding-systems'.) These subsidiaries have a
+consistent modeline indicator as well. "-dos" coding systems have ":T"
+appended to their modeline indicator, while "-mac" coding systems have
+":t" appended (eg, "ISO8:t" for iso-2022-8-mac).
+
+ In the following table, each coding system is given with its mode
+line indicator in parentheses. Non-textual coding systems are listed
+first, followed by textual coding systems and their aliases. (The
+coding system subsidiary modeline indicators ":T" and ":t" will be
+omitted from the table of coding systems.)
+
+ ### SJT 1999-08-23 Maybe should order these by language? Definitely
+need language usage for the ISO-8859 family.
+
+ Note that although true coding system aliases have been implemented
+for XEmacs 21.2, the coding system initialization has not yet been
+converted as of 21.2.19. So coding systems described as aliases have
+the same properties as the aliased coding system, but will not be equal
+as Lisp objects.
+
+`automatic-conversion'
+`undecided'
+`undecided-dos'
+`undecided-mac'
+`undecided-unix'
+ Modeline indicator: `Auto'. A type `undecided' coding system.
+ Attempts to determine an appropriate coding system from file
+ contents or the environment.
+
+`raw-text'
+`no-conversion'
+`raw-text-dos'
+`raw-text-mac'
+`raw-text-unix'
+`no-conversion-dos'
+`no-conversion-mac'
+`no-conversion-unix'
+ Modeline indicator: `Raw'. A type `no-conversion' coding system,
+ which converts only line-break-codes. An implementation quirk
+ means that this coding system is also used for ISO8859-1.
+
+`binary'
+ Modeline indicator: `Binary'. A type `no-conversion' coding
+ system which does no character coding or EOL conversions. An
+ alias for `raw-text-unix'.
+
+`alternativnyj'
+`alternativnyj-dos'
+`alternativnyj-mac'
+`alternativnyj-unix'
+ Modeline indicator: `Cy.Alt'. A type `ccl' coding system used for
+ Alternativnyj, an encoding of the Cyrillic alphabet.
+
+`big5'
+`big5-dos'
+`big5-mac'
+`big5-unix'
+ Modeline indicator: `Zh/Big5'. A type `big5' coding system used
+ for BIG5, the most common encoding of traditional Chinese as used
+ in Taiwan.
+
+`cn-gb-2312'
+`cn-gb-2312-dos'
+`cn-gb-2312-mac'
+`cn-gb-2312-unix'
+ Modeline indicator: `Zh-GB/EUC'. A type `iso2022' coding system
+ used for simplified Chinese (as used in the People's Republic of
+ China), with the `ascii' (G0), `chinese-gb2312' (G1), and `sisheng'
+ (G2) character sets initially designated. Chinese EUC (Extended
+ Unix Code).
+
+`ctext-hebrew'
+`ctext-hebrew-dos'
+`ctext-hebrew-mac'
+`ctext-hebrew-unix'
+ Modeline indicator: `CText/Hbrw'. A type `iso2022' coding system
+ with the `ascii' (G0) and `hebrew-iso8859-8' (G1) character sets
+ initially designated for Hebrew.
+
+`ctext'
+`ctext-dos'
+`ctext-mac'
+`ctext-unix'
+ Modeline indicator: `CText'. A type `iso2022' 8-bit coding system
+ with the `ascii' (G0) and `latin-iso8859-1' (G1) character sets
+ initially designated. X11 Compound Text Encoding. Often
+ mistakenly recognized instead of EUC encodings; usual cause is
+ inappropriate setting of `coding-priority-list'.
+
+`escape-quoted'
+ Modeline indicator: `ESC/Quot'. A type `iso2022' 8-bit coding
+ system with the `ascii' (G0) and `latin-iso8859-1' (G1) character
+ sets initially designated and escape quoting. Unix EOL conversion
+ (ie, no conversion). It is used for .ELC files.
+
+`euc-jp'
+`euc-jp-dos'
+`euc-jp-mac'
+`euc-jp-unix'
+ Modeline indicator: `Ja/EUC'. A type `iso2022' 8-bit coding system
+ with `ascii' (G0), `japanese-jisx0208' (G1), `katakana-jisx0201'
+ (G2), and `japanese-jisx0212' (G3) initially designated. Japanese
+ EUC (Extended Unix Code).
+
+`euc-kr'
+`euc-kr-dos'
+`euc-kr-mac'
+`euc-kr-unix'
+ Modeline indicator: `ko/EUC'. A type `iso2022' 8-bit coding system
+ with `ascii' (G0) and `korean-ksc5601' (G1) initially designated.
+ Korean EUC (Extended Unix Code).
+
+`hz-gb-2312'
+ Modeline indicator: `Zh-GB/Hz'. A type `no-conversion' coding
+ system with Unix EOL convention (ie, no conversion) using
+ post-read-decode and pre-write-encode functions to translate the
+ Hz/ZW coding system used for Chinese.
+
+`iso-2022-7bit'
+`iso-2022-7bit-unix'
+`iso-2022-7bit-dos'
+`iso-2022-7bit-mac'
+`iso-2022-7'
+ Modeline indicator: `ISO7'. A type `iso2022' 7-bit coding system
+ with `ascii' (G0) initially designated. Other character sets must
+ be explicitly designated to be used.
+
+`iso-2022-7bit-ss2'
+`iso-2022-7bit-ss2-dos'
+`iso-2022-7bit-ss2-mac'
+`iso-2022-7bit-ss2-unix'
+ Modeline indicator: `ISO7/SS'. A type `iso2022' 7-bit coding
+ system with `ascii' (G0) initially designated. Other character
+ sets must be explicitly designated to be used. SS2 is used to
+ invoke a 96-charset, one character at a time.
+
+`iso-2022-8'
+`iso-2022-8-dos'
+`iso-2022-8-mac'
+`iso-2022-8-unix'
+ Modeline indicator: `ISO8'. A type `iso2022' 8-bit coding system
+ with `ascii' (G0) and `latin-iso8859-1' (G1) initially designated.
+ Other character sets must be explicitly designated to be used.
+ No single-shift or locking-shift.
+
+`iso-2022-8bit-ss2'
+`iso-2022-8bit-ss2-dos'
+`iso-2022-8bit-ss2-mac'
+`iso-2022-8bit-ss2-unix'
+ Modeline indicator: `ISO8/SS'. A type `iso2022' 8-bit coding
+ system with `ascii' (G0) and `latin-iso8859-1' (G1) initially
+ designated. Other character sets must be explicitly designated to
+ be used. SS2 is used to invoke a 96-charset, one character at a
+ time.
+
+`iso-2022-int-1'
+`iso-2022-int-1-dos'
+`iso-2022-int-1-mac'
+`iso-2022-int-1-unix'
+ Modeline indicator: `INT-1'. A type `iso2022' 7-bit coding system
+ with `ascii' (G0) and `korean-ksc5601' (G1) initially designated.
+ ISO-2022-INT-1.
+
+`iso-2022-jp-1978-irv'
+`iso-2022-jp-1978-irv-dos'
+`iso-2022-jp-1978-irv-mac'
+`iso-2022-jp-1978-irv-unix'
+ Modeline indicator: `Ja-78/7bit'. A type `iso2022' 7-bit coding
+ system. For compatibility with old Japanese terminals; if you
+ need to know, look at the source.
+
+`iso-2022-jp'
+`iso-2022-jp-2 (ISO7/SS)'
+`iso-2022-jp-dos'
+`iso-2022-jp-mac'
+`iso-2022-jp-unix'
+`iso-2022-jp-2-dos'
+`iso-2022-jp-2-mac'
+`iso-2022-jp-2-unix'
+ Modeline indicator: `MULE/7bit'. A type `iso2022' 7-bit coding
+ system with `ascii' (G0) initially designated, and complex
+ specifications to insure backward compatibility with old Japanese
+ systems. Used for communication with mail and news in Japan. The
+ "-2" versions also use SS2 to invoke a 96-charset one character at
+ a time.
+
+`iso-2022-kr'
+ Modeline indicator: `Ko/7bit' A type `iso2022' 7-bit coding
+ system with `ascii' (G0) and `korean-ksc5601' (G1) initially
+ designated. Used for e-mail in Korea.
+
+`iso-2022-lock'
+`iso-2022-lock-dos'
+`iso-2022-lock-mac'
+`iso-2022-lock-unix'
+ Modeline indicator: `ISO7/Lock'. A type `iso2022' 7-bit coding
+ system with `ascii' (G0) initially designated, using Locking-Shift
+ to invoke a 96-charset.
+
+`iso-8859-1'
+`iso-8859-1-dos'
+`iso-8859-1-mac'
+`iso-8859-1-unix'
+ Due to implementation, this is not a type `iso2022' coding system,
+ but rather an alias for the `raw-text' coding system.
+
+`iso-8859-2'
+`iso-8859-2-dos'
+`iso-8859-2-mac'
+`iso-8859-2-unix'
+ Modeline indicator: `MIME/Ltn-2'. A type `iso2022' coding system
+ with `ascii' (G0) and `latin-iso8859-2' (G1) initially invoked.
+
+`iso-8859-3'
+`iso-8859-3-dos'
+`iso-8859-3-mac'
+`iso-8859-3-unix'
+ Modeline indicator: `MIME/Ltn-3'. A type `iso2022' coding system
+ with `ascii' (G0) and `latin-iso8859-3' (G1) initially invoked.
+
+`iso-8859-4'
+`iso-8859-4-dos'
+`iso-8859-4-mac'
+`iso-8859-4-unix'
+ Modeline indicator: `MIME/Ltn-4'. A type `iso2022' coding system
+ with `ascii' (G0) and `latin-iso8859-4' (G1) initially invoked.
+
+`iso-8859-5'
+`iso-8859-5-dos'
+`iso-8859-5-mac'
+`iso-8859-5-unix'
+ Modeline indicator: `ISO8/Cyr'. A type `iso2022' coding system
+ with `ascii' (G0) and `cyrillic-iso8859-5' (G1) initially invoked.
+
+`iso-8859-7'
+`iso-8859-7-dos'
+`iso-8859-7-mac'
+`iso-8859-7-unix'
+ Modeline indicator: `Grk'. A type `iso2022' coding system with
+ `ascii' (G0) and `greek-iso8859-7' (G1) initially invoked.
+
+`iso-8859-8'
+`iso-8859-8-dos'
+`iso-8859-8-mac'
+`iso-8859-8-unix'
+ Modeline indicator: `MIME/Hbrw'. A type `iso2022' coding system
+ with `ascii' (G0) and `hebrew-iso8859-8' (G1) initially invoked.
+
+`iso-8859-9'
+`iso-8859-9-dos'
+`iso-8859-9-mac'
+`iso-8859-9-unix'
+ Modeline indicator: `MIME/Ltn-5'. A type `iso2022' coding system
+ with `ascii' (G0) and `latin-iso8859-9' (G1) initially invoked.
+
+`koi8-r'
+`koi8-r-dos'
+`koi8-r-mac'
+`koi8-r-unix'
+ Modeline indicator: `KOI8'. A type `ccl' coding-system used for
+ KOI8-R, an encoding of the Cyrillic alphabet.
+
+`shift_jis'
+`shift_jis-dos'
+`shift_jis-mac'
+`shift_jis-unix'
+ Modeline indicator: `Ja/SJIS'. A type `shift-jis' coding-system
+ implementing the Shift-JIS encoding for Japanese. The underscore
+ is to conform to the MIME charset implementing this encoding.
+
+`tis-620'
+`tis-620-dos'
+`tis-620-mac'
+`tis-620-unix'
+ Modeline indicator: `TIS620'. A type `ccl' encoding for Thai. The
+ external encoding is defined by TIS620, the internal encoding is
+ peculiar to MULE, and called `thai-xtis'.
+
+`viqr'
+ Modeline indicator: `VIQR'. A type `no-conversion' coding system
+ with Unix EOL convention (ie, no conversion) using
+ post-read-decode and pre-write-encode functions to translate the
+ VIQR coding system for Vietnamese.
+
+`viscii'
+`viscii-dos'
+`viscii-mac'
+`viscii-unix'
+ Modeline indicator: `VISCII'. A type `ccl' coding-system used for
+ VISCII 1.1 for Vietnamese. Differs slightly from VSCII; VISCII is
+ given priority by XEmacs.
+
+`vscii'
+`vscii-dos'
+`vscii-mac'
+`vscii-unix'
+ Modeline indicator: `VSCII'. A type `ccl' coding-system used for
+ VSCII 1.1 for Vietnamese. Differs slightly from VISCII, which is
+ given priority by XEmacs. Use `(prefer-coding-system
+ 'vietnamese-vscii)' to give priority to VSCII.
+
+\1f
File: lispref.info, Node: CCL, Next: Category Tables, Prev: Coding Systems, Up: MULE
CCL
* Comment Tips:: Conventions for writing comments.
* Library Headers:: Standard headers for library packages.
-\1f
-File: lispref.info, Node: Style Tips, Next: Compilation Tips, Up: Tips
-
-Writing Clean Lisp Programs
-===========================
-
- Here are some tips for avoiding common errors in writing Lisp code
-intended for widespread use:
-
- * Since all global variables share the same name space, and all
- functions share another name space, you should choose a short word
- to distinguish your program from other Lisp programs. Then take
- care to begin the 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 XEmacs Lisp--even to `cadr'.
- Believe it or not, there is more than one plausible way to define
- `cadr'. Play it safe; append your name prefix to produce a name
- like `foo-cadr' or `mylib-cadr' instead.
-
- If you write a function that you think ought to be added to Emacs
- under a certain name, such as `twiddle-files', don't call it by
- that name in your program. Call it `mylib-twiddle-files' in your
- program, and send mail to `bug-gnu-emacs@prep.ai.mit.edu'
- suggesting we add it to Emacs. If and when we do, we can change
- the name easily enough.
-
- If one prefix is insufficient, your package may use two or three
- alternative common prefixes, so long as they make sense.
-
- Separate the prefix from the rest of the symbol name with a hyphen,
- `-'. This will be consistent with XEmacs itself and with most
- Emacs Lisp programs.
-
- * It is often useful to put a call to `provide' in each separate
- library program, at least if there is more than one entry point to
- the program.
-
- * If a file requires certain other library programs to be loaded
- beforehand, then the comments at the beginning of the file should
- say so. Also, use `require' to make sure they are loaded.
-
- * If one file FOO uses a macro defined in another file BAR, FOO
- should contain this expression before the first use of the macro:
-
- (eval-when-compile (require 'BAR))
-
- (And BAR should contain `(provide 'BAR)', to make the `require'
- work.) This will cause BAR to be loaded when you byte-compile
- FOO. Otherwise, you risk compiling FOO without the necessary
- macro loaded, and that would produce compiled code that won't work
- right. *Note Compiling Macros::.
-
- Using `eval-when-compile' avoids loading BAR when the compiled
- version of FOO is _used_.
-
- * If you define a major mode, make sure to run a hook variable using
- `run-hooks', just as the existing major modes do. *Note Hooks::.
-
- * If the purpose of a function is to tell you whether a certain
- condition is true or false, give the function a name that ends in
- `p'. If the name is one word, add just `p'; if the name is
- multiple words, add `-p'. Examples are `framep' and
- `frame-live-p'.
-
- * If a user option variable records a true-or-false condition, give
- it a name that ends in `-flag'.
-
- * Please do not define `C-c LETTER' as a key in your major modes.
- These sequences are reserved for users; they are the *only*
- sequences reserved for users, so we cannot do without them.
-
- Instead, define sequences consisting of `C-c' followed by a
- non-letter. 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.
-
- * Sequences consisting of `C-c' followed by `{', `}', `<', `>', `:'
- or `;' are also reserved for major modes.
-
- * Sequences consisting of `C-c' followed by any other punctuation
- character are allocated for minor modes. Using them in a major
- mode is not absolutely prohibited, but if you do that, the major
- mode binding may be shadowed from time to time by minor modes.
-
- * You should not bind `C-h' following any prefix character (including
- `C-c'). If you don't bind `C-h', it is automatically available as
- a help character for listing the subcommands of the prefix
- character.
-
- * You should not bind a key sequence ending in <ESC> except following
- another <ESC>. (That is, it is ok to bind a sequence ending in
- `<ESC> <ESC>'.)
-
- The reason for this rule is that a non-prefix binding for <ESC> in
- any context prevents recognition of escape sequences as function
- keys in that context.
-
- * Applications should not bind mouse events based on button 1 with
- the shift key held down. These events include `S-mouse-1',
- `M-S-mouse-1', `C-S-mouse-1', and so on. They are reserved for
- users.
-
- * Modes should redefine `mouse-2' as a command to follow some sort of
- reference in the text of a buffer, if users usually would not want
- to alter the text in that buffer by hand. Modes such as Dired,
- Info, Compilation, and Occur redefine it in this way.
-
- * When a package provides a modification of ordinary Emacs behavior,
- it is good to include a command to enable and disable the feature,
- Provide a command named `WHATEVER-mode' which turns the feature on
- or off, and make it autoload (*note Autoload::). Design the
- package so that simply loading it has no visible effect--that
- should not enable the feature. Users will request the feature by
- invoking the command.
-
- * It is a bad idea to define aliases for the Emacs primitives. Use
- the standard names instead.
-
- * Redefining an Emacs primitive is an even worse idea. It may do
- the right thing for a particular program, but there is no telling
- what other programs might break as a result.
-
- * If a file does replace any of the functions or library programs of
- standard XEmacs, prominent comments at the beginning of the file
- should say which functions are replaced, and how the behavior of
- the replacements differs from that of the originals.
-
- * Please keep the names of your XEmacs Lisp source files to 13
- characters or less. This way, if the files are compiled, the
- compiled files' names will be 14 characters or less, which is
- short enough to fit on all kinds of Unix systems.
-
- * Don't use `next-line' or `previous-line' in programs; nearly
- always, `forward-line' is more convenient as well as more
- predictable and robust. *Note Text Lines::.
-
- * Don't call functions that set the mark, unless setting the mark is
- one of the intended features of your program. The mark is a
- user-level feature, so it is incorrect to change the mark except
- to supply a value for the user's benefit. *Note The Mark::.
-
- In particular, don't use these functions:
-
- * `beginning-of-buffer', `end-of-buffer'
-
- * `replace-string', `replace-regexp'
-
- If you just want to move point, or replace a certain string,
- without any of the other features intended for interactive users,
- you can replace these functions with one or two lines of simple
- Lisp code.
-
- * Use lists rather than vectors, except when there is a particular
- reason to use a vector. Lisp has more facilities for manipulating
- lists than for vectors, and working with lists is usually more
- convenient.
-
- Vectors are advantageous for tables that are substantial in size
- and are accessed in random order (not searched front to back),
- provided there is no need to insert or delete elements (only lists
- allow that).
-
- * The recommended way to print a message in the echo area is with
- the `message' function, not `princ'. *Note The Echo Area::.
-
- * When you encounter an error condition, call the function `error'
- (or `signal'). The function `error' does not return. *Note
- Signaling Errors::.
-
- Do not use `message', `throw', `sleep-for', or `beep' to report
- errors.
-
- * An error message should start with a capital letter but should not
- end with a period.
-
- * Try to avoid using recursive edits. Instead, do what the Rmail `e'
- command does: use a new local keymap that contains one command
- defined to switch back to the old local keymap. Or do what the
- `edit-options' command does: switch to another buffer and let the
- user switch back at will. *Note Recursive Editing::.
-
- * In some other systems there is a convention of choosing variable
- names that begin and end with `*'. 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 coherent if all libraries use the same
- conventions.
-
- * Indent each function with `C-M-q' (`indent-sexp') using the
- 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.
-
- * Please put a copyright notice on the file if you give copies to
- anyone. Use the same lines that appear at the top of the Lisp
- files in XEmacs itself. If you have not signed papers to assign
- the copyright to the Foundation, then place your name in the
- copyright notice in place of the Foundation's name.
-
-\1f
-File: lispref.info, Node: Compilation Tips, Next: Documentation Tips, Prev: Style Tips, Up: Tips
-
-Tips for Making Compiled Code Fast
-==================================
-
- Here are ways of improving the execution speed of byte-compiled Lisp
-programs.
-
- * Use the `profile' library to profile your program. See the file
- `profile.el' for instructions.
-
- * Use iteration rather than recursion whenever possible. Function
- calls are slow in XEmacs Lisp even when a compiled function is
- calling another compiled function.
-
- * Using the primitive list-searching functions `memq', `member',
- `assq', or `assoc' is even faster than explicit iteration. It may
- be worth rearranging a data structure so that one of these
- primitive search functions can be used.
-
- * Certain built-in functions are handled specially in byte-compiled
- code, avoiding the need for an ordinary function call. It is a
- good idea to use these functions rather than alternatives. To see
- whether a function is handled specially by the compiler, examine
- its `byte-compile' property. If the property is non-`nil', then
- the function is handled specially.
-
- For example, the following input will show you that `aref' is
- compiled specially (*note Array Functions::) while `elt' is not
- (*note Sequence Functions::):
-
- (get 'aref 'byte-compile)
- => byte-compile-two-args
-
- (get 'elt 'byte-compile)
- => nil
-
- * If calling a small function accounts for a substantial part of
- your program's running time, make the function inline. This
- eliminates the function call overhead. Since making a function
- inline reduces the flexibility of changing the program, don't do
- it unless it gives a noticeable speedup in something slow enough
- that users care about the speed. *Note Inline Functions::.
-
-\1f
-File: lispref.info, Node: Documentation Tips, Next: Comment Tips, Prev: Compilation Tips, Up: Tips
-
-Tips for Documentation Strings
-==============================
-
- Here are some tips for the writing of documentation strings.
-
- * Every command, function, or variable intended for users to know
- about should have a documentation string.
-
- * An internal variable or subroutine of a Lisp program might as well
- have a documentation string. In earlier Emacs versions, you could
- save space by using a comment instead of a documentation string,
- but that is no longer the case.
-
- * The first line of the documentation string should consist of one
- or two complete sentences that stand on their own as a summary.
- `M-x apropos' displays just the first line, and if it doesn't
- stand on its own, the result looks bad. In particular, start the
- first line with a capital letter and end with a period.
-
- The documentation string can have additional lines that expand on
- the details of how to use the function or variable. The
- additional lines should be made up of complete sentences also, but
- they may be filled if that looks good.
-
- * For consistency, phrase the verb in the first sentence of a
- documentation string as an infinitive with "to" omitted. For
- instance, use "Return the cons of A and B." in preference to
- "Returns the cons of A and B." Usually it looks good to do
- likewise for the rest of the first paragraph. Subsequent
- paragraphs usually look better if they have proper subjects.
-
- * Write documentation strings in the active voice, not the passive,
- and in the present tense, not the future. For instance, use
- "Return a list containing A and B." instead of "A list containing
- A and B will be returned."
-
- * Avoid using the word "cause" (or its equivalents) unnecessarily.
- Instead of, "Cause Emacs to display text in boldface," write just
- "Display text in boldface."
-
- * Do not start or end a documentation string with whitespace.
-
- * Format the documentation string so that it fits in an Emacs window
- on an 80-column screen. It is a good idea for most lines to be no
- wider than 60 characters. The first line can be wider if
- necessary to fit the information that ought to be there.
-
- However, rather than simply filling the entire documentation
- string, you can make it much more readable by choosing line breaks
- with care. Use blank lines between topics if the documentation
- string is long.
-
- * *Do not* indent subsequent lines of a documentation string so that
- the text is lined up in the source code with the text of the first
- line. This looks nice in the source code, but looks bizarre when
- users view the documentation. Remember that the indentation
- before the starting double-quote is not part of the string!
-
- * A variable's documentation string should start with `*' if the
- variable is one that users would often want to set interactively.
- If the value is a long list, or a function, or if the variable
- would be set only in init files, then don't start the
- documentation string with `*'. *Note Defining Variables::.
-
- * The documentation string for a variable that is a yes-or-no flag
- should start with words such as "Non-nil means...", to make it
- clear that all non-`nil' values are equivalent and indicate
- explicitly what `nil' and non-`nil' mean.
-
- * When a function's documentation string mentions the value of an
- argument of the function, use the argument name in capital letters
- as if it were a name for that value. Thus, the documentation
- string of the function `/' refers to its second argument as
- `DIVISOR', because the actual argument name is `divisor'.
-
- Also use all caps for meta-syntactic variables, such as when you
- show the decomposition of a list or vector into subunits, some of
- which may vary.
-
- * 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: `lambda'. There are two
- exceptions: write t and nil without single-quotes. (In this
- manual, we normally do use single-quotes for those symbols.)
-
- * Don't write key sequences directly in documentation strings.
- Instead, use the `\\[...]' construct to stand for them. For
- example, instead of writing `C-f', write `\\[forward-char]'. When
- Emacs displays the documentation string, it substitutes whatever
- key is currently bound to `forward-char'. (This is normally `C-f',
- but it may be some other character if the user has moved key
- bindings.) *Note Keys in Documentation::.
-
- * In documentation strings for a major mode, you will want to refer
- to the key bindings of that mode's local map, rather than global
- ones. Therefore, use the construct `\\<...>' once in the
- documentation string to specify which key map to use. Do this
- before the first use of `\\[...]'. The text inside the `\\<...>'
- should be the name of the variable containing the local keymap for
- the major mode.
-
- It is not practical to use `\\[...]' very many times, because
- display of the documentation string will become slow. So use this
- to describe the most important commands in your major mode, and
- then use `\\{...}' to display the rest of the mode's keymap.
-
-\1f
-File: lispref.info, Node: Comment Tips, Next: Library Headers, Prev: Documentation Tips, Up: Tips
-
-Tips on Writing Comments
-========================
-
- We recommend these conventions for where to put comments and how to
-indent them:
-
-`;'
- Comments that start with a single semicolon, `;', should all be
- aligned to the same column on the right of the source code. Such
- comments usually explain how the code on the same line does its
- job. In Lisp mode and related modes, the `M-;'
- (`indent-for-comment') command automatically inserts such a `;' in
- the right place, or aligns such a comment if it is already present.
-
- This and following examples are taken from the Emacs sources.
-
- (setq base-version-list ; there was a base
- (assoc (substring fn 0 start-vn) ; version to which
- file-version-assoc-list)) ; this looks like
- ; a subversion
-
-`;;'
- Comments that start with two semicolons, `;;', should be aligned to
- the same level of indentation as the code. Such comments usually
- describe the purpose of the following lines or the state of the
- program at that point. For example:
-
- (prog1 (setq auto-fill-function
- ...
- ...
- ;; update modeline
- (redraw-modeline)))
-
- 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.
-
-`;;;'
- Comments that start with three semicolons, `;;;', should start at
- the left margin. Such comments are used outside function
- definitions to make general statements explaining the design
- principles of the program. For example:
-
- ;;; This Lisp code is run in XEmacs
- ;;; when it is to operate as a server
- ;;; for other processes.
-
- Another use for triple-semicolon comments is for commenting out
- lines within a function. We use triple-semicolons for this
- precisely so that they remain at the left margin.
-
- (defun foo (a)
- ;;; This is no longer necessary.
- ;;; (force-mode-line-update)
- (message "Finished with %s" a))
-
-`;;;;'
- Comments that start with four semicolons, `;;;;', should be aligned
- to the left margin and are used for headings of major sections of a
- program. For example:
-
- ;;;; The kill ring
-
-The indentation commands of the Lisp modes in XEmacs, such as `M-;'
-(`indent-for-comment') and <TAB> (`lisp-indent-line') automatically
-indent comments according to these conventions, depending on the number
-of semicolons. *Note Manipulating Comments: (emacs)Comments.
-
-\1f
-File: lispref.info, Node: Library Headers, Prev: Comment Tips, Up: Tips
-
-Conventional Headers for XEmacs Libraries
-=========================================
-
- XEmacs has conventions for using special comments in Lisp libraries
-to divide them into sections and give information such as who wrote
-them. This section explains these conventions. First, an example:
-
- ;;; lisp-mnt.el --- minor mode for Emacs Lisp maintainers
-
- ;; Copyright (C) 1992 Free Software Foundation, Inc.
-
- ;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
- ;; Maintainer: Eric S. Raymond <esr@snark.thyrsus.com>
- ;; Created: 14 Jul 1992
- ;; Version: 1.2
- ;; Keywords: docs
-
- ;; This file is part of XEmacs.
- COPYING PERMISSIONS...
-
- The very first line should have this format:
-
- ;;; FILENAME --- DESCRIPTION
-
-The description should be complete in one line.
-
- After the copyright notice come several "header comment" lines, each
-beginning with `;; HEADER-NAME:'. Here is a table of the conventional
-possibilities for HEADER-NAME:
-
-`Author'
- This line states the name and net address of at least the principal
- author of the library.
-
- If there are multiple authors, you can list them on continuation
- lines led by `;;' and a tab character, like this:
-
- ;; Author: Ashwin Ram <Ram-Ashwin@cs.yale.edu>
- ;; Dave Sill <de5@ornl.gov>
- ;; Dave Brennan <brennan@hal.com>
- ;; Eric Raymond <esr@snark.thyrsus.com>
-
-`Maintainer'
- This line should contain a single name/address as in the Author
- line, or an address only, or the string `FSF'. If there is no
- maintainer line, the person(s) in the Author field are presumed to
- be the maintainers. The example above is mildly bogus because the
- maintainer line is redundant.
-
- The idea behind the `Author' and `Maintainer' lines is to make
- possible a Lisp function to "send mail to the maintainer" without
- having to mine the name out by hand.
-
- Be sure to surround the network address with `<...>' if you
- include the person's full name as well as the network address.
-
-`Created'
- This optional line gives the original creation date of the file.
- For historical interest only.
-
-`Version'
- If you wish to record version numbers for the individual Lisp
- program, put them in this line.
-
-`Adapted-By'
- In this header line, place the name of the person who adapted the
- library for installation (to make it fit the style conventions, for
- example).
-
-`Keywords'
- This line lists keywords for the `finder-by-keyword' help command.
- This field is important; it's how people will find your package
- when they're looking for things by topic area. To separate the
- keywords, you can use spaces, commas, or both.
-
- Just about every Lisp library ought to have the `Author' and
-`Keywords' header comment lines. Use the others if they are
-appropriate. You can also put in header lines with other header
-names--they have no standard meanings, so they can't do any harm.
-
- We use additional stylized comments to subdivide the contents of the
-library file. Here is a table of them:
-
-`;;; Commentary:'
- This begins introductory comments that explain how the library
- works. It should come right after the copying permissions.
-
-`;;; Change log:'
- This begins change log information stored in the library file (if
- you store the change history there). For most of the Lisp files
- distributed with XEmacs, the change history is kept in the file
- `ChangeLog' and not in the source file at all; these files do not
- have a `;;; Change log:' line.
-
-`;;; Code:'
- This begins the actual code of the program.
-
-`;;; FILENAME ends here'
- This is the "footer line"; it appears at the very end of the file.
- Its purpose is to enable people to detect truncated versions of
- the file from the lack of a footer line.
-
-\1f
-File: lispref.info, Node: Building XEmacs and Object Allocation, Next: Standard Errors, Prev: Tips, Up: Top
-
-Building XEmacs; Allocation of Objects
-**************************************
-
- This chapter describes how the runnable XEmacs executable is dumped
-with the preloaded Lisp libraries in it and how storage is allocated.
-
- There is an entire separate document, the `XEmacs Internals Manual',
-devoted to the internals of XEmacs from the perspective of the C
-programmer. It contains much more detailed information about the build
-process, the allocation and garbage-collection process, and other
-aspects related to the internals of XEmacs.
-
-* Menu:
-
-* Building XEmacs:: How to preload Lisp libraries into XEmacs.
-* Pure Storage:: A kludge to make preloaded Lisp functions sharable.
-* Garbage Collection:: Reclaiming space for Lisp objects no longer used.
-
-\1f
-File: lispref.info, Node: Building XEmacs, Next: Pure Storage, Up: Building XEmacs and Object Allocation
-
-Building XEmacs
-===============
-
- This section explains the steps involved in building the XEmacs
-executable. You don't have to know this material to build and install
-XEmacs, since the makefiles do all these things automatically. This
-information is pertinent to XEmacs maintenance.
-
- The `XEmacs Internals Manual' contains more information about this.
-
- Compilation of the C source files in the `src' directory produces an
-executable file called `temacs', also called a "bare impure XEmacs".
-It contains the XEmacs Lisp interpreter and I/O routines, but not the
-editing commands.
-
- Before XEmacs is actually usable, a number of Lisp files need to be
-loaded. These define all the editing commands, plus most of the startup
-code and many very basic Lisp primitives. This is accomplished by
-loading the file `loadup.el', which in turn loads all of the other
-standardly-loaded Lisp files.
-
- It takes a substantial time to load the standard Lisp files.
-Luckily, you don't have to do this each time you run XEmacs; `temacs'
-can dump out an executable program called `xemacs' that has these files
-preloaded. `xemacs' starts more quickly because it does not need to
-load the files. This is the XEmacs executable that is normally
-installed.
-
- To create `xemacs', use the command `temacs -batch -l loadup dump'.
-The purpose of `-batch' here is to tell `temacs' to run in
-non-interactive, command-line mode. (`temacs' can _only_ run in this
-fashion. Part of the code required to initialize frames and faces is
-in Lisp, and must be loaded before XEmacs is able to create any frames.)
-The argument `dump' tells `loadup.el' to dump a new executable named
-`xemacs'.
-
- The dumping process is highly system-specific, and some operating
-systems don't support dumping. On those systems, you must start XEmacs
-with the `temacs -batch -l loadup run-temacs' command each time you 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. (In older versions of Emacs, you started
-Emacs from `temacs' using `temacs -l loadup'.)
-
- You are free to start XEmacs directly from `temacs' if you want,
-even if there is already a dumped `xemacs'. Normally you wouldn't want
-to do that; but the Makefiles do this when you rebuild XEmacs using
-`make all-elc', which builds XEmacs and simultaneously compiles any
-out-of-date Lisp files. (You need `xemacs' in order to compile Lisp
-files. However, you also need the compiled Lisp files in order to dump
-out `xemacs'. If both of these are missing or corrupted, you are out
-of luck unless you're able to bootstrap `xemacs' from `temacs'. Note
-that `make all-elc' actually loads the alternative loadup file
-`loadup-el.el', which works like `loadup.el' but disables the
-pure-copying process and forces XEmacs to ignore any compiled Lisp
-files even if they exist.)
-
- You can specify additional files to preload by writing a library
-named `site-load.el' that loads them. You may need to increase the
-value of `PURESIZE', in `src/puresize.h', to make room for the
-additional files. You should _not_ modify this file directly, however;
-instead, use the `--puresize' configuration option. (If you run out of
-pure space while dumping `xemacs', you will be told how much pure space
-you actually will need.) However, the advantage of preloading
-additional files decreases as machines get faster. On modern machines,
-it is often not advisable, especially if the Lisp code is on a file
-system local to the machine running XEmacs.
-
- You can specify other Lisp expressions to execute just before dumping
-by putting them in a library named `site-init.el'. However, if they
-might alter the behavior that users expect from an ordinary unmodified
-XEmacs, it is better to put them in `default.el', so that users can
-override them if they wish. *Note Start-up Summary::.
-
- Before `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
-`Snarf-documentation' (*note Accessing Documentation::). These strings
-were moved out of the `xemacs' executable to make it smaller. *Note
-Documentation Basics::.
-
- - Function: dump-emacs to-file from-file
- This function dumps the current state of XEmacs into an executable
- file TO-FILE. It takes symbols from FROM-FILE (this is normally
- the executable file `temacs').
-
- If you use this function in an XEmacs that was already dumped, you
- must set `command-line-processed' to `nil' first for good results.
- *Note Command Line Arguments::.
-
- - Function: run-emacs-from-temacs &rest args
- This is the function that implements the `run-temacs' command-line
- argument. It is called from `loadup.el' as appropriate. You
- should most emphatically _not_ call this yourself; it will
- reinitialize your XEmacs process and you'll be sorry.
-
- - Command: emacs-version
- This function returns a string describing the version of XEmacs
- that is running. It is useful to include this string in bug
- reports.
-
- (emacs-version)
- => "XEmacs 20.1 [Lucid] (i586-unknown-linux2.0.29)
- of Mon Apr 7 1997 on altair.xemacs.org"
-
- Called interactively, the function prints the same information in
- the echo area.
-
- - Variable: emacs-build-time
- The value of this variable is the time at which XEmacs was built
- at the local site.
-
- emacs-build-time "Mon Apr 7 20:28:52 1997"
- =>
-
- - Variable: emacs-version
- The value of this variable is the version of Emacs being run. It
- is a string, e.g. `"20.1 XEmacs Lucid"'.
-
- The following two variables did not exist before FSF GNU Emacs
-version 19.23 and XEmacs version 19.10, which reduces their usefulness
-at present, but we hope they will be convenient in the future.
-
- - Variable: emacs-major-version
- The major version number of Emacs, as an integer. For XEmacs
- version 20.1, the value is 20.
-
- - Variable: emacs-minor-version
- The minor version number of Emacs, as an integer. For XEmacs
- version 20.1, the value is 1.
-
Foundation instead of in the original English.
\1f
+File: lispref.info, Node: Style Tips, Next: Compilation Tips, Up: Tips
+
+Writing Clean Lisp Programs
+===========================
+
+ Here are some tips for avoiding common errors in writing Lisp code
+intended for widespread use:
+
+ * Since all global variables share the same name space, and all
+ functions share another name space, you should choose a short word
+ to distinguish your program from other Lisp programs. Then take
+ care to begin the 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 XEmacs Lisp--even to `cadr'.
+ Believe it or not, there is more than one plausible way to define
+ `cadr'. Play it safe; append your name prefix to produce a name
+ like `foo-cadr' or `mylib-cadr' instead.
+
+ If you write a function that you think ought to be added to Emacs
+ under a certain name, such as `twiddle-files', don't call it by
+ that name in your program. Call it `mylib-twiddle-files' in your
+ program, and send mail to `bug-gnu-emacs@prep.ai.mit.edu'
+ suggesting we add it to Emacs. If and when we do, we can change
+ the name easily enough.
+
+ If one prefix is insufficient, your package may use two or three
+ alternative common prefixes, so long as they make sense.
+
+ Separate the prefix from the rest of the symbol name with a hyphen,
+ `-'. This will be consistent with XEmacs itself and with most
+ Emacs Lisp programs.
+
+ * It is often useful to put a call to `provide' in each separate
+ library program, at least if there is more than one entry point to
+ the program.
+
+ * If a file requires certain other library programs to be loaded
+ beforehand, then the comments at the beginning of the file should
+ say so. Also, use `require' to make sure they are loaded.
+
+ * If one file FOO uses a macro defined in another file BAR, FOO
+ should contain this expression before the first use of the macro:
+
+ (eval-when-compile (require 'BAR))
+
+ (And BAR should contain `(provide 'BAR)', to make the `require'
+ work.) This will cause BAR to be loaded when you byte-compile
+ FOO. Otherwise, you risk compiling FOO without the necessary
+ macro loaded, and that would produce compiled code that won't work
+ right. *Note Compiling Macros::.
+
+ Using `eval-when-compile' avoids loading BAR when the compiled
+ version of FOO is _used_.
+
+ * If you define a major mode, make sure to run a hook variable using
+ `run-hooks', just as the existing major modes do. *Note Hooks::.
+
+ * If the purpose of a function is to tell you whether a certain
+ condition is true or false, give the function a name that ends in
+ `p'. If the name is one word, add just `p'; if the name is
+ multiple words, add `-p'. Examples are `framep' and
+ `frame-live-p'.
+
+ * If a user option variable records a true-or-false condition, give
+ it a name that ends in `-flag'.
+
+ * Please do not define `C-c LETTER' as a key in your major modes.
+ These sequences are reserved for users; they are the *only*
+ sequences reserved for users, so we cannot do without them.
+
+ Instead, define sequences consisting of `C-c' followed by a
+ non-letter. 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.
+
+ * Sequences consisting of `C-c' followed by `{', `}', `<', `>', `:'
+ or `;' are also reserved for major modes.
+
+ * Sequences consisting of `C-c' followed by any other punctuation
+ character are allocated for minor modes. Using them in a major
+ mode is not absolutely prohibited, but if you do that, the major
+ mode binding may be shadowed from time to time by minor modes.
+
+ * You should not bind `C-h' following any prefix character (including
+ `C-c'). If you don't bind `C-h', it is automatically available as
+ a help character for listing the subcommands of the prefix
+ character.
+
+ * You should not bind a key sequence ending in <ESC> except following
+ another <ESC>. (That is, it is ok to bind a sequence ending in
+ `<ESC> <ESC>'.)
+
+ The reason for this rule is that a non-prefix binding for <ESC> in
+ any context prevents recognition of escape sequences as function
+ keys in that context.
+
+ * Applications should not bind mouse events based on button 1 with
+ the shift key held down. These events include `S-mouse-1',
+ `M-S-mouse-1', `C-S-mouse-1', and so on. They are reserved for
+ users.
+
+ * Modes should redefine `mouse-2' as a command to follow some sort of
+ reference in the text of a buffer, if users usually would not want
+ to alter the text in that buffer by hand. Modes such as Dired,
+ Info, Compilation, and Occur redefine it in this way.
+
+ * When a package provides a modification of ordinary Emacs behavior,
+ it is good to include a command to enable and disable the feature,
+ Provide a command named `WHATEVER-mode' which turns the feature on
+ or off, and make it autoload (*note Autoload::). Design the
+ package so that simply loading it has no visible effect--that
+ should not enable the feature. Users will request the feature by
+ invoking the command.
+
+ * It is a bad idea to define aliases for the Emacs primitives. Use
+ the standard names instead.
+
+ * Redefining an Emacs primitive is an even worse idea. It may do
+ the right thing for a particular program, but there is no telling
+ what other programs might break as a result.
+
+ * If a file does replace any of the functions or library programs of
+ standard XEmacs, prominent comments at the beginning of the file
+ should say which functions are replaced, and how the behavior of
+ the replacements differs from that of the originals.
+
+ * Please keep the names of your XEmacs Lisp source files to 13
+ characters or less. This way, if the files are compiled, the
+ compiled files' names will be 14 characters or less, which is
+ short enough to fit on all kinds of Unix systems.
+
+ * Don't use `next-line' or `previous-line' in programs; nearly
+ always, `forward-line' is more convenient as well as more
+ predictable and robust. *Note Text Lines::.
+
+ * Don't call functions that set the mark, unless setting the mark is
+ one of the intended features of your program. The mark is a
+ user-level feature, so it is incorrect to change the mark except
+ to supply a value for the user's benefit. *Note The Mark::.
+
+ In particular, don't use these functions:
+
+ * `beginning-of-buffer', `end-of-buffer'
+
+ * `replace-string', `replace-regexp'
+
+ If you just want to move point, or replace a certain string,
+ without any of the other features intended for interactive users,
+ you can replace these functions with one or two lines of simple
+ Lisp code.
+
+ * Use lists rather than vectors, except when there is a particular
+ reason to use a vector. Lisp has more facilities for manipulating
+ lists than for vectors, and working with lists is usually more
+ convenient.
+
+ Vectors are advantageous for tables that are substantial in size
+ and are accessed in random order (not searched front to back),
+ provided there is no need to insert or delete elements (only lists
+ allow that).
+
+ * The recommended way to print a message in the echo area is with
+ the `message' function, not `princ'. *Note The Echo Area::.
+
+ * When you encounter an error condition, call the function `error'
+ (or `signal'). The function `error' does not return. *Note
+ Signaling Errors::.
+
+ Do not use `message', `throw', `sleep-for', or `beep' to report
+ errors.
+
+ * An error message should start with a capital letter but should not
+ end with a period.
+
+ * Try to avoid using recursive edits. Instead, do what the Rmail `e'
+ command does: use a new local keymap that contains one command
+ defined to switch back to the old local keymap. Or do what the
+ `edit-options' command does: switch to another buffer and let the
+ user switch back at will. *Note Recursive Editing::.
+
+ * In some other systems there is a convention of choosing variable
+ names that begin and end with `*'. 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 coherent if all libraries use the same
+ conventions.
+
+ * Indent each function with `C-M-q' (`indent-sexp') using the
+ 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.
+
+ * Please put a copyright notice on the file if you give copies to
+ anyone. Use the same lines that appear at the top of the Lisp
+ files in XEmacs itself. If you have not signed papers to assign
+ the copyright to the Foundation, then place your name in the
+ copyright notice in place of the Foundation's name.
+
+\1f
+File: lispref.info, Node: Compilation Tips, Next: Documentation Tips, Prev: Style Tips, Up: Tips
+
+Tips for Making Compiled Code Fast
+==================================
+
+ Here are ways of improving the execution speed of byte-compiled Lisp
+programs.
+
+ * Use the `profile' library to profile your program. See the file
+ `profile.el' for instructions.
+
+ * Use iteration rather than recursion whenever possible. Function
+ calls are slow in XEmacs Lisp even when a compiled function is
+ calling another compiled function.
+
+ * Using the primitive list-searching functions `memq', `member',
+ `assq', or `assoc' is even faster than explicit iteration. It may
+ be worth rearranging a data structure so that one of these
+ primitive search functions can be used.
+
+ * Certain built-in functions are handled specially in byte-compiled
+ code, avoiding the need for an ordinary function call. It is a
+ good idea to use these functions rather than alternatives. To see
+ whether a function is handled specially by the compiler, examine
+ its `byte-compile' property. If the property is non-`nil', then
+ the function is handled specially.
+
+ For example, the following input will show you that `aref' is
+ compiled specially (*note Array Functions::) while `elt' is not
+ (*note Sequence Functions::):
+
+ (get 'aref 'byte-compile)
+ => byte-compile-two-args
+
+ (get 'elt 'byte-compile)
+ => nil
+
+ * If calling a small function accounts for a substantial part of
+ your program's running time, make the function inline. This
+ eliminates the function call overhead. Since making a function
+ inline reduces the flexibility of changing the program, don't do
+ it unless it gives a noticeable speedup in something slow enough
+ that users care about the speed. *Note Inline Functions::.
+
+\1f
+File: lispref.info, Node: Documentation Tips, Next: Comment Tips, Prev: Compilation Tips, Up: Tips
+
+Tips for Documentation Strings
+==============================
+
+ Here are some tips for the writing of documentation strings.
+
+ * Every command, function, or variable intended for users to know
+ about should have a documentation string.
+
+ * An internal variable or subroutine of a Lisp program might as well
+ have a documentation string. In earlier Emacs versions, you could
+ save space by using a comment instead of a documentation string,
+ but that is no longer the case.
+
+ * The first line of the documentation string should consist of one
+ or two complete sentences that stand on their own as a summary.
+ `M-x apropos' displays just the first line, and if it doesn't
+ stand on its own, the result looks bad. In particular, start the
+ first line with a capital letter and end with a period.
+
+ The documentation string can have additional lines that expand on
+ the details of how to use the function or variable. The
+ additional lines should be made up of complete sentences also, but
+ they may be filled if that looks good.
+
+ * For consistency, phrase the verb in the first sentence of a
+ documentation string as an infinitive with "to" omitted. For
+ instance, use "Return the cons of A and B." in preference to
+ "Returns the cons of A and B." Usually it looks good to do
+ likewise for the rest of the first paragraph. Subsequent
+ paragraphs usually look better if they have proper subjects.
+
+ * Write documentation strings in the active voice, not the passive,
+ and in the present tense, not the future. For instance, use
+ "Return a list containing A and B." instead of "A list containing
+ A and B will be returned."
+
+ * Avoid using the word "cause" (or its equivalents) unnecessarily.
+ Instead of, "Cause Emacs to display text in boldface," write just
+ "Display text in boldface."
+
+ * Do not start or end a documentation string with whitespace.
+
+ * Format the documentation string so that it fits in an Emacs window
+ on an 80-column screen. It is a good idea for most lines to be no
+ wider than 60 characters. The first line can be wider if
+ necessary to fit the information that ought to be there.
+
+ However, rather than simply filling the entire documentation
+ string, you can make it much more readable by choosing line breaks
+ with care. Use blank lines between topics if the documentation
+ string is long.
+
+ * *Do not* indent subsequent lines of a documentation string so that
+ the text is lined up in the source code with the text of the first
+ line. This looks nice in the source code, but looks bizarre when
+ users view the documentation. Remember that the indentation
+ before the starting double-quote is not part of the string!
+
+ * A variable's documentation string should start with `*' if the
+ variable is one that users would often want to set interactively.
+ If the value is a long list, or a function, or if the variable
+ would be set only in init files, then don't start the
+ documentation string with `*'. *Note Defining Variables::.
+
+ * The documentation string for a variable that is a yes-or-no flag
+ should start with words such as "Non-nil means...", to make it
+ clear that all non-`nil' values are equivalent and indicate
+ explicitly what `nil' and non-`nil' mean.
+
+ * When a function's documentation string mentions the value of an
+ argument of the function, use the argument name in capital letters
+ as if it were a name for that value. Thus, the documentation
+ string of the function `/' refers to its second argument as
+ `DIVISOR', because the actual argument name is `divisor'.
+
+ Also use all caps for meta-syntactic variables, such as when you
+ show the decomposition of a list or vector into subunits, some of
+ which may vary.
+
+ * 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: `lambda'. There are two
+ exceptions: write t and nil without single-quotes. (In this
+ manual, we normally do use single-quotes for those symbols.)
+
+ * Don't write key sequences directly in documentation strings.
+ Instead, use the `\\[...]' construct to stand for them. For
+ example, instead of writing `C-f', write `\\[forward-char]'. When
+ Emacs displays the documentation string, it substitutes whatever
+ key is currently bound to `forward-char'. (This is normally `C-f',
+ but it may be some other character if the user has moved key
+ bindings.) *Note Keys in Documentation::.
+
+ * In documentation strings for a major mode, you will want to refer
+ to the key bindings of that mode's local map, rather than global
+ ones. Therefore, use the construct `\\<...>' once in the
+ documentation string to specify which key map to use. Do this
+ before the first use of `\\[...]'. The text inside the `\\<...>'
+ should be the name of the variable containing the local keymap for
+ the major mode.
+
+ It is not practical to use `\\[...]' very many times, because
+ display of the documentation string will become slow. So use this
+ to describe the most important commands in your major mode, and
+ then use `\\{...}' to display the rest of the mode's keymap.
+
+\1f
+File: lispref.info, Node: Comment Tips, Next: Library Headers, Prev: Documentation Tips, Up: Tips
+
+Tips on Writing Comments
+========================
+
+ We recommend these conventions for where to put comments and how to
+indent them:
+
+`;'
+ Comments that start with a single semicolon, `;', should all be
+ aligned to the same column on the right of the source code. Such
+ comments usually explain how the code on the same line does its
+ job. In Lisp mode and related modes, the `M-;'
+ (`indent-for-comment') command automatically inserts such a `;' in
+ the right place, or aligns such a comment if it is already present.
+
+ This and following examples are taken from the Emacs sources.
+
+ (setq base-version-list ; there was a base
+ (assoc (substring fn 0 start-vn) ; version to which
+ file-version-assoc-list)) ; this looks like
+ ; a subversion
+
+`;;'
+ Comments that start with two semicolons, `;;', should be aligned to
+ the same level of indentation as the code. Such comments usually
+ describe the purpose of the following lines or the state of the
+ program at that point. For example:
+
+ (prog1 (setq auto-fill-function
+ ...
+ ...
+ ;; update modeline
+ (redraw-modeline)))
+
+ 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.
+
+`;;;'
+ Comments that start with three semicolons, `;;;', should start at
+ the left margin. Such comments are used outside function
+ definitions to make general statements explaining the design
+ principles of the program. For example:
+
+ ;;; This Lisp code is run in XEmacs
+ ;;; when it is to operate as a server
+ ;;; for other processes.
+
+ Another use for triple-semicolon comments is for commenting out
+ lines within a function. We use triple-semicolons for this
+ precisely so that they remain at the left margin.
+
+ (defun foo (a)
+ ;;; This is no longer necessary.
+ ;;; (force-mode-line-update)
+ (message "Finished with %s" a))
+
+`;;;;'
+ Comments that start with four semicolons, `;;;;', should be aligned
+ to the left margin and are used for headings of major sections of a
+ program. For example:
+
+ ;;;; The kill ring
+
+The indentation commands of the Lisp modes in XEmacs, such as `M-;'
+(`indent-for-comment') and <TAB> (`lisp-indent-line') automatically
+indent comments according to these conventions, depending on the number
+of semicolons. *Note Manipulating Comments: (emacs)Comments.
+
+\1f
+File: lispref.info, Node: Library Headers, Prev: Comment Tips, Up: Tips
+
+Conventional Headers for XEmacs Libraries
+=========================================
+
+ XEmacs has conventions for using special comments in Lisp libraries
+to divide them into sections and give information such as who wrote
+them. This section explains these conventions. First, an example:
+
+ ;;; lisp-mnt.el --- minor mode for Emacs Lisp maintainers
+
+ ;; Copyright (C) 1992 Free Software Foundation, Inc.
+
+ ;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
+ ;; Maintainer: Eric S. Raymond <esr@snark.thyrsus.com>
+ ;; Created: 14 Jul 1992
+ ;; Version: 1.2
+ ;; Keywords: docs
+
+ ;; This file is part of XEmacs.
+ COPYING PERMISSIONS...
+
+ The very first line should have this format:
+
+ ;;; FILENAME --- DESCRIPTION
+
+The description should be complete in one line.
+
+ After the copyright notice come several "header comment" lines, each
+beginning with `;; HEADER-NAME:'. Here is a table of the conventional
+possibilities for HEADER-NAME:
+
+`Author'
+ This line states the name and net address of at least the principal
+ author of the library.
+
+ If there are multiple authors, you can list them on continuation
+ lines led by `;;' and a tab character, like this:
+
+ ;; Author: Ashwin Ram <Ram-Ashwin@cs.yale.edu>
+ ;; Dave Sill <de5@ornl.gov>
+ ;; Dave Brennan <brennan@hal.com>
+ ;; Eric Raymond <esr@snark.thyrsus.com>
+
+`Maintainer'
+ This line should contain a single name/address as in the Author
+ line, or an address only, or the string `FSF'. If there is no
+ maintainer line, the person(s) in the Author field are presumed to
+ be the maintainers. The example above is mildly bogus because the
+ maintainer line is redundant.
+
+ The idea behind the `Author' and `Maintainer' lines is to make
+ possible a Lisp function to "send mail to the maintainer" without
+ having to mine the name out by hand.
+
+ Be sure to surround the network address with `<...>' if you
+ include the person's full name as well as the network address.
+
+`Created'
+ This optional line gives the original creation date of the file.
+ For historical interest only.
+
+`Version'
+ If you wish to record version numbers for the individual Lisp
+ program, put them in this line.
+
+`Adapted-By'
+ In this header line, place the name of the person who adapted the
+ library for installation (to make it fit the style conventions, for
+ example).
+
+`Keywords'
+ This line lists keywords for the `finder-by-keyword' help command.
+ This field is important; it's how people will find your package
+ when they're looking for things by topic area. To separate the
+ keywords, you can use spaces, commas, or both.
+
+ Just about every Lisp library ought to have the `Author' and
+`Keywords' header comment lines. Use the others if they are
+appropriate. You can also put in header lines with other header
+names--they have no standard meanings, so they can't do any harm.
+
+ We use additional stylized comments to subdivide the contents of the
+library file. Here is a table of them:
+
+`;;; Commentary:'
+ This begins introductory comments that explain how the library
+ works. It should come right after the copying permissions.
+
+`;;; Change log:'
+ This begins change log information stored in the library file (if
+ you store the change history there). For most of the Lisp files
+ distributed with XEmacs, the change history is kept in the file
+ `ChangeLog' and not in the source file at all; these files do not
+ have a `;;; Change log:' line.
+
+`;;; Code:'
+ This begins the actual code of the program.
+
+`;;; FILENAME ends here'
+ This is the "footer line"; it appears at the very end of the file.
+ Its purpose is to enable people to detect truncated versions of
+ the file from the lack of a footer line.
+
+\1f
+File: lispref.info, Node: Building XEmacs and Object Allocation, Next: Standard Errors, Prev: Tips, Up: Top
+
+Building XEmacs; Allocation of Objects
+**************************************
+
+ This chapter describes how the runnable XEmacs executable is dumped
+with the preloaded Lisp libraries in it and how storage is allocated.
+
+ There is an entire separate document, the `XEmacs Internals Manual',
+devoted to the internals of XEmacs from the perspective of the C
+programmer. It contains much more detailed information about the build
+process, the allocation and garbage-collection process, and other
+aspects related to the internals of XEmacs.
+
+* Menu:
+
+* Building XEmacs:: How to preload Lisp libraries into XEmacs.
+* Pure Storage:: A kludge to make preloaded Lisp functions sharable.
+* Garbage Collection:: Reclaiming space for Lisp objects no longer used.
+
+\1f
+File: lispref.info, Node: Building XEmacs, Next: Pure Storage, Up: Building XEmacs and Object Allocation
+
+Building XEmacs
+===============
+
+ This section explains the steps involved in building the XEmacs
+executable. You don't have to know this material to build and install
+XEmacs, since the makefiles do all these things automatically. This
+information is pertinent to XEmacs maintenance.
+
+ The `XEmacs Internals Manual' contains more information about this.
+
+ Compilation of the C source files in the `src' directory produces an
+executable file called `temacs', also called a "bare impure XEmacs".
+It contains the XEmacs Lisp interpreter and I/O routines, but not the
+editing commands.
+
+ Before XEmacs is actually usable, a number of Lisp files need to be
+loaded. These define all the editing commands, plus most of the startup
+code and many very basic Lisp primitives. This is accomplished by
+loading the file `loadup.el', which in turn loads all of the other
+standardly-loaded Lisp files.
+
+ It takes a substantial time to load the standard Lisp files.
+Luckily, you don't have to do this each time you run XEmacs; `temacs'
+can dump out an executable program called `xemacs' that has these files
+preloaded. `xemacs' starts more quickly because it does not need to
+load the files. This is the XEmacs executable that is normally
+installed.
+
+ To create `xemacs', use the command `temacs -batch -l loadup dump'.
+The purpose of `-batch' here is to tell `temacs' to run in
+non-interactive, command-line mode. (`temacs' can _only_ run in this
+fashion. Part of the code required to initialize frames and faces is
+in Lisp, and must be loaded before XEmacs is able to create any frames.)
+The argument `dump' tells `loadup.el' to dump a new executable named
+`xemacs'.
+
+ The dumping process is highly system-specific, and some operating
+systems don't support dumping. On those systems, you must start XEmacs
+with the `temacs -batch -l loadup run-temacs' command each time you 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. (In older versions of Emacs, you started
+Emacs from `temacs' using `temacs -l loadup'.)
+
+ You are free to start XEmacs directly from `temacs' if you want,
+even if there is already a dumped `xemacs'. Normally you wouldn't want
+to do that; but the Makefiles do this when you rebuild XEmacs using
+`make all-elc', which builds XEmacs and simultaneously compiles any
+out-of-date Lisp files. (You need `xemacs' in order to compile Lisp
+files. However, you also need the compiled Lisp files in order to dump
+out `xemacs'. If both of these are missing or corrupted, you are out
+of luck unless you're able to bootstrap `xemacs' from `temacs'. Note
+that `make all-elc' actually loads the alternative loadup file
+`loadup-el.el', which works like `loadup.el' but disables the
+pure-copying process and forces XEmacs to ignore any compiled Lisp
+files even if they exist.)
+
+ You can specify additional files to preload by writing a library
+named `site-load.el' that loads them. You may need to increase the
+value of `PURESIZE', in `src/puresize.h', to make room for the
+additional files. You should _not_ modify this file directly, however;
+instead, use the `--puresize' configuration option. (If you run out of
+pure space while dumping `xemacs', you will be told how much pure space
+you actually will need.) However, the advantage of preloading
+additional files decreases as machines get faster. On modern machines,
+it is often not advisable, especially if the Lisp code is on a file
+system local to the machine running XEmacs.
+
+ You can specify other Lisp expressions to execute just before dumping
+by putting them in a library named `site-init.el'. However, if they
+might alter the behavior that users expect from an ordinary unmodified
+XEmacs, it is better to put them in `default.el', so that users can
+override them if they wish. *Note Start-up Summary::.
+
+ Before `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
+`Snarf-documentation' (*note Accessing Documentation::). These strings
+were moved out of the `xemacs' executable to make it smaller. *Note
+Documentation Basics::.
+
+ - Function: dump-emacs to-file from-file
+ This function dumps the current state of XEmacs into an executable
+ file TO-FILE. It takes symbols from FROM-FILE (this is normally
+ the executable file `temacs').
+
+ If you use this function in an XEmacs that was already dumped, you
+ must set `command-line-processed' to `nil' first for good results.
+ *Note Command Line Arguments::.
+
+ - Function: run-emacs-from-temacs &rest args
+ This is the function that implements the `run-temacs' command-line
+ argument. It is called from `loadup.el' as appropriate. You
+ should most emphatically _not_ call this yourself; it will
+ reinitialize your XEmacs process and you'll be sorry.
+
+ - Command: emacs-version
+ This function returns a string describing the version of XEmacs
+ that is running. It is useful to include this string in bug
+ reports.
+
+ (emacs-version)
+ => "XEmacs 20.1 [Lucid] (i586-unknown-linux2.0.29)
+ of Mon Apr 7 1997 on altair.xemacs.org"
+
+ Called interactively, the function prints the same information in
+ the echo area.
+
+ - Variable: emacs-build-time
+ The value of this variable is the time at which XEmacs was built
+ at the local site.
+
+ emacs-build-time "Mon Apr 7 20:28:52 1997"
+ =>
+
+ - Variable: emacs-version
+ The value of this variable is the version of Emacs being run. It
+ is a string, e.g. `"20.1 XEmacs Lucid"'.
+
+ The following two variables did not exist before FSF GNU Emacs
+version 19.23 and XEmacs version 19.10, which reduces their usefulness
+at present, but we hope they will be convenient in the future.
+
+ - Variable: emacs-major-version
+ The major version number of Emacs, as an integer. For XEmacs
+ version 20.1, the value is 20.
+
+ - Variable: emacs-minor-version
+ The minor version number of Emacs, as an integer. For XEmacs
+ version 20.1, the value is 1.
+
+\1f
File: lispref.info, Node: Pure Storage, Next: Garbage Collection, Prev: Building XEmacs, Up: Building XEmacs and Object Allocation
Pure Storage
`"Arithmetic underflow error"'
*Note Math Functions::.
-\1f
-File: lispref.info, Node: Standard Buffer-Local Variables, Next: Standard Keymaps, Prev: Standard Errors, Up: Top
-
-Buffer-Local Variables
-**********************
-
- 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.
-
-`abbrev-mode'
- *note Abbrevs::
-
-`auto-fill-function'
- *note Auto Filling::
-
-`buffer-auto-save-file-name'
- *note Auto-Saving::
-
-`buffer-backed-up'
- *note Backup Files::
-
-`buffer-display-table'
- *note Display Tables::
-
-`buffer-file-format'
- *note Format Conversion::
-
-`buffer-file-name'
- *note Buffer File Name::
-
-`buffer-file-number'
- *note Buffer File Name::
-
-`buffer-file-truename'
- *note Buffer File Name::
-
-`buffer-file-type'
- *note Files and MS-DOS::
-
-`buffer-invisibility-spec'
- *note Invisible Text::
-
-`buffer-offer-save'
- *note Saving Buffers::
-
-`buffer-read-only'
- *note Read Only Buffers::
-
-`buffer-saved-size'
- *note Point::
-
-`buffer-undo-list'
- *note Undo::
-
-`cache-long-line-scans'
- *note Text Lines::
-
-`case-fold-search'
- *note Searching and Case::
-
-`ctl-arrow'
- *note Usual Display::
-
-`comment-column'
- *note Comments: (emacs)Comments.
-
-`default-directory'
- *note System Environment::
-
-`defun-prompt-regexp'
- *note List Motion::
-
-`fill-column'
- *note Auto Filling::
-
-`goal-column'
- *note Moving Point: (emacs)Moving Point.
-
-`left-margin'
- *note Indentation::
-
-`local-abbrev-table'
- *note Abbrevs::
-
-`local-write-file-hooks'
- *note Saving Buffers::
-
-`major-mode'
- *note Mode Help::
-
-`mark-active'
- *note The Mark::
-
-`mark-ring'
- *note The Mark::
-
-`minor-modes'
- *note Minor Modes::
-
-`modeline-format'
- *note Modeline Data::
-
-`modeline-buffer-identification'
- *note Modeline Variables::
-
-`modeline-format'
- *note Modeline Data::
-
-`modeline-modified'
- *note Modeline Variables::
-
-`modeline-process'
- *note Modeline Variables::
-
-`mode-name'
- *note Modeline Variables::
-
-`overwrite-mode'
- *note Insertion::
-
-`paragraph-separate'
- *note Standard Regexps::
-
-`paragraph-start'
- *note Standard Regexps::
-
-`point-before-scroll'
- Used for communication between mouse commands and scroll-bar
- commands.
-
-`require-final-newline'
- *note Insertion::
-
-`selective-display'
- *note Selective Display::
-
-`selective-display-ellipses'
- *note Selective Display::
-
-`tab-width'
- *note Usual Display::
-
-`truncate-lines'
- *note Truncation::
-
-`vc-mode'
- *note Modeline Variables::
-
-\1f
-File: lispref.info, Node: Standard Keymaps, Next: Standard Hooks, Prev: Standard Buffer-Local Variables, Up: Top
-
-Standard Keymaps
-****************
-
- The following symbols are used as the names for various keymaps.
-Some of these exist when XEmacs is first started, others are loaded
-only when their respective mode is used. This is not an exhaustive
-list.
-
- Almost all of these maps are used as local maps. Indeed, of the
-modes that presently exist, only Vip mode and Terminal mode ever change
-the global keymap.
-
-`bookmark-map'
- A keymap containing bindings to bookmark functions.
-
-`Buffer-menu-mode-map'
- A keymap used by Buffer Menu mode.
-
-`c++-mode-map'
- A keymap used by C++ mode.
-
-`c-mode-map'
- A keymap used by C mode. A sparse keymap used by C mode.
-
-`command-history-map'
- A keymap used by Command History mode.
-
-`ctl-x-4-map'
- A keymap for subcommands of the prefix `C-x 4'.
-
-`ctl-x-5-map'
- A keymap for subcommands of the prefix `C-x 5'.
-
-`ctl-x-map'
- A keymap for `C-x' commands.
-
-`debugger-mode-map'
- A keymap used by Debugger mode.
-
-`dired-mode-map'
- A keymap for `dired-mode' buffers.
-
-`edit-abbrevs-map'
- A keymap used in `edit-abbrevs'.
-
-`edit-tab-stops-map'
- A keymap used in `edit-tab-stops'.
-
-`electric-buffer-menu-mode-map'
- A keymap used by Electric Buffer Menu mode.
-
-`electric-history-map'
- A keymap used by Electric Command History mode.
-
-`emacs-lisp-mode-map'
- A keymap used by Emacs Lisp mode.
-
-`help-map'
- A keymap for characters following the Help key.
-
-`Helper-help-map'
- A keymap used by the help utility package.
- It has the same keymap in its value cell and in its function cell.
-
-`Info-edit-map'
- A keymap used by the `e' command of Info.
-
-`Info-mode-map'
- A keymap containing Info commands.
-
-`isearch-mode-map'
- A keymap that defines the characters you can type within
- incremental search.
-
-`itimer-edit-map'
- A keymap used when in Itimer Edit mode.
-
-`lisp-interaction-mode-map'
- A keymap used by Lisp mode.
-
-`lisp-mode-map'
- A keymap used by Lisp mode.
-
- A keymap for minibuffer input with completion.
-
-`minibuffer-local-isearch-map'
- A keymap for editing isearch strings in the minibuffer.
-
-`minibuffer-local-map'
- Default keymap to use when reading from the minibuffer.
-
-`minibuffer-local-must-match-map'
- A keymap for minibuffer input with completion, for exact match.
-
-`mode-specific-map'
- The keymap for characters following `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 `C-h b'
- (`display-bindings'), where it describes the main use of the `C-c'
- prefix key.
-
-`modeline-map'
- The keymap consulted for mouse-clicks on the modeline of a window.
-
-`objc-mode-map'
- A keymap used in Objective C mode as a local map.
-
-`occur-mode-map'
- A local keymap used by Occur mode.
-
-`overriding-local-map'
- A keymap that overrides all other local keymaps.
-
-`query-replace-map'
- A local keymap used for responses in `query-replace' and related
- commands; also for `y-or-n-p' and `map-y-or-n-p'. The functions
- that use this map do not support prefix keys; they look up one
- event at a time.
-
-`read-expression-map'
- The minibuffer keymap used for reading Lisp expressions.
-
-`read-shell-command-map'
- The minibuffer keymap used by shell-command and related commands.
-
-`shared-lisp-mode-map'
- A keymap for commands shared by all sorts of Lisp modes.
-
-`text-mode-map'
- A keymap used by Text mode.
-
-`toolbar-map'
- The keymap consulted for mouse-clicks over a toolbar.
-
-`view-mode-map'
- A keymap used by View mode.
-
-\1f
-File: lispref.info, Node: Standard Hooks, Next: Index, Prev: Standard Keymaps, Up: Top
-
-Standard Hooks
-**************
-
- The following is a list of hook variables that let you provide
-functions to be called from within Emacs on suitable occasions.
-
- Most of these variables have names ending with `-hook'. They are
-"normal hooks", run by means of `run-hooks'. The value of such a hook
-is a list of functions. The recommended way to put a new function on
-such a hook is to call `add-hook'. *Note Hooks::, for more information
-about using hooks.
-
- The variables whose names end in `-function' have single functions
-as their values. Usually there is a specific reason why the variable is
-not a normal hook, such as the need to pass arguments to the function.
-(In older Emacs versions, some of these variables had names ending in
-`-hook' even though they were not normal hooks.)
-
- The variables whose names end in `-hooks' or `-functions' have lists
-of functions as their values, but these functions are called in a
-special way (they are passed arguments, or else their values are used).
-
-`activate-menubar-hook'
-
-`activate-popup-menu-hook'
-
-`ad-definition-hooks'
-
-`adaptive-fill-function'
-
-`add-log-current-defun-function'
-
-`after-change-functions'
-
-`after-delete-annotation-hook'
-
-`after-init-hook'
-
-`after-insert-file-functions'
-
-`after-revert-hook'
-
-`after-save-hook'
-
-`after-set-visited-file-name-hooks'
-
-`after-write-file-hooks'
-
-`auto-fill-function'
-
-`auto-save-hook'
-
-`before-change-functions'
-
-`before-delete-annotation-hook'
-
-`before-init-hook'
-
-`before-revert-hook'
-
-`blink-paren-function'
-
-`buffers-menu-switch-to-buffer-function'
-
-`c++-mode-hook'
-
-`c-delete-function'
-
-`c-mode-common-hook'
-
-`c-mode-hook'
-
-`c-special-indent-hook'
-
-`calendar-load-hook'
-
-`change-major-mode-hook'
-
-`command-history-hook'
-
-`comment-indent-function'
-
-`compilation-buffer-name-function'
-
-`compilation-exit-message-function'
-
-`compilation-finish-function'
-
-`compilation-parse-errors-function'
-
-`compilation-mode-hook'
-
-`create-console-hook'
-
-`create-device-hook'
-
-`create-frame-hook'
-
-`dabbrev-friend-buffer-function'
-
-`dabbrev-select-buffers-function'
-
-`delete-console-hook'
-
-`delete-device-hook'
-
-`delete-frame-hook'
-
-`deselect-frame-hook'
-
-`diary-display-hook'
-
-`diary-hook'
-
-`dired-after-readin-hook'
-
-`dired-before-readin-hook'
-
-`dired-load-hook'
-
-`dired-mode-hook'
-
-`disabled-command-hook'
-
-`display-buffer-function'
-
-`ediff-after-setup-control-frame-hook'
-
-`ediff-after-setup-windows-hook'
-
-`ediff-before-setup-control-frame-hook'
-
-`ediff-before-setup-windows-hook'
-
-`ediff-brief-help-message-function'
-
-`ediff-cleanup-hook'
-
-`ediff-control-frame-position-function'
-
-`ediff-display-help-hook'
-
-`ediff-focus-on-regexp-matches-function'
-
-`ediff-forward-word-function'
-
-`ediff-hide-regexp-matches-function'
-
-`ediff-keymap-setup-hook'
-
-`ediff-load-hook'
-
-`ediff-long-help-message-function'
-
-`ediff-make-wide-display-function'
-
-`ediff-merge-split-window-function'
-
-`ediff-meta-action-function'
-
-`ediff-meta-redraw-function'
-
-`ediff-mode-hook'
-
-`ediff-prepare-buffer-hook'
-
-`ediff-quit-hook'
-
-`ediff-registry-setup-hook'
-
-`ediff-select-hook'
-
-`ediff-session-action-function'
-
-`ediff-session-group-setup-hook'
-
-`ediff-setup-diff-regions-function'
-
-`ediff-show-registry-hook'
-
-`ediff-show-session-group-hook'
-
-`ediff-skip-diff-region-function'
-
-`ediff-split-window-function'
-
-`ediff-startup-hook'
-
-`ediff-suspend-hook'
-
-`ediff-toggle-read-only-function'
-
-`ediff-unselect-hook'
-
-`ediff-window-setup-function'
-
-`edit-picture-hook'
-
-`electric-buffer-menu-mode-hook'
-
-`electric-command-history-hook'
-
-`electric-help-mode-hook'
-
-`emacs-lisp-mode-hook'
-
-`fill-paragraph-function'
-
-`find-file-hooks'
-
-`find-file-not-found-hooks'
-
-`first-change-hook'
-
-`font-lock-after-fontify-buffer-hook'
-
-`font-lock-beginning-of-syntax-function'
-
-`font-lock-mode-hook'
-
-`fume-found-function-hook'
-
-`fume-list-mode-hook'
-
-`fume-rescan-buffer-hook'
-
-`fume-sort-function'
-
-`gnus-startup-hook'
-
-`hack-local-variables-hook'
-
-`highlight-headers-follow-url-function'
-
-`hyper-apropos-mode-hook'
-
-`indent-line-function'
-
-`indent-mim-hook'
-
-`indent-region-function'
-
-`initial-calendar-window-hook'
-
-`isearch-mode-end-hook'
-
-`isearch-mode-hook'
-
-`java-mode-hook'
-
-`kill-buffer-hook'
-
-`kill-buffer-query-functions'
-
-`kill-emacs-hook'
-
-`kill-emacs-query-functions'
-
-`kill-hooks'
-
-`LaTeX-mode-hook'
-
-`latex-mode-hook'
-
-`ledit-mode-hook'
-
-`lisp-indent-function'
-
-`lisp-interaction-mode-hook'
-
-`lisp-mode-hook'
-
-`list-diary-entries-hook'
-
-`load-read-function'
-
-`log-message-filter-function'
-
-`m2-mode-hook'
-
-`mail-citation-hook'
-
-`mail-mode-hook'
-
-`mail-setup-hook'
-
-`make-annotation-hook'
-
-`makefile-mode-hook'
-
-`map-frame-hook'
-
-`mark-diary-entries-hook'
-
-`medit-mode-hook'
-
-`menu-no-selection-hook'
-
-`mh-compose-letter-hook'
-
-`mh-folder-mode-hook'
-
-`mh-letter-mode-hook'
-
-`mim-mode-hook'
-
-`minibuffer-exit-hook'
-
-`minibuffer-setup-hook'
-
-`mode-motion-hook'
-
-`mouse-enter-frame-hook'
-
-`mouse-leave-frame-hook'
-
-`mouse-track-cleanup-hook'
-
-`mouse-track-click-hook'
-
-`mouse-track-down-hook'
-
-`mouse-track-drag-hook'
-
-`mouse-track-drag-up-hook'
-
-`mouse-track-up-hook'
-
-`mouse-yank-function'
-
-`news-mode-hook'
-
-`news-reply-mode-hook'
-
-`news-setup-hook'
-
-`nongregorian-diary-listing-hook'
-
-`nongregorian-diary-marking-hook'
-
-`nroff-mode-hook'
-
-`objc-mode-hook'
-
-`outline-mode-hook'
-
-`perl-mode-hook'
-
-`plain-TeX-mode-hook'
-
-`post-command-hook'
-
-`post-gc-hook'
-
-`pre-abbrev-expand-hook'
-
-`pre-command-hook'
-
-`pre-display-buffer-function'
-
-`pre-gc-hook'
-
-`pre-idle-hook'
-
-`print-diary-entries-hook'
-
-`prolog-mode-hook'
-
-`protect-innocence-hook'
-
-`remove-message-hook'
-
-`revert-buffer-function'
-
-`revert-buffer-insert-contents-function'
-
-`rmail-edit-mode-hook'
-
-`rmail-mode-hook'
-
-`rmail-retry-setup-hook'
-
-`rmail-summary-mode-hook'
-
-`scheme-indent-hook'
-
-`scheme-mode-hook'
-
-`scribe-mode-hook'
-
-`select-frame-hook'
-
-`send-mail-function'
-
-`shell-mode-hook'
-
-`shell-set-directory-error-hook'
-
-`special-display-function'
-
-`suspend-hook'
-
-`suspend-resume-hook'
-
-`temp-buffer-show-function'
-
-`term-setup-hook'
-
-`terminal-mode-hook'
-
-`terminal-mode-break-hook'
-
-`TeX-mode-hook'
-
-`tex-mode-hook'
-
-`text-mode-hook'
-
-`today-visible-calendar-hook'
-
-`today-invisible-calendar-hook'
-
-`tooltalk-message-handler-hook'
-
-`tooltalk-pattern-handler-hook'
-
-`tooltalk-unprocessed-message-hook'
-
-`unmap-frame-hook'
-
-`vc-checkin-hook'
-
-`vc-checkout-writable-buffer-hook'
-
-`vc-log-after-operation-hook'
-
-`vc-make-buffer-writable-hook'
-
-`view-hook'
-
-`vm-arrived-message-hook'
-
-`vm-arrived-messages-hook'
-
-`vm-chop-full-name-function'
-
-`vm-display-buffer-hook'
-
-`vm-edit-message-hook'
-
-`vm-forward-message-hook'
-
-`vm-iconify-frame-hook'
-
-`vm-inhibit-write-file-hook'
-
-`vm-key-functions'
-
-`vm-mail-hook'
-
-`vm-mail-mode-hook'
-
-`vm-menu-setup-hook'
-
-`vm-mode-hook'
-
-`vm-quit-hook'
-
-`vm-rename-current-buffer-function'
-
-`vm-reply-hook'
-
-`vm-resend-bounced-message-hook'
-
-`vm-resend-message-hook'
-
-`vm-retrieved-spooled-mail-hook'
-
-`vm-select-message-hook'
-
-`vm-select-new-message-hook'
-
-`vm-select-unread-message-hook'
-
-`vm-send-digest-hook'
-
-`vm-summary-mode-hook'
-
-`vm-summary-pointer-update-hook'
-
-`vm-summary-redo-hook'
-
-`vm-summary-update-hook'
-
-`vm-undisplay-buffer-hook'
-
-`vm-visit-folder-hook'
-
-`window-setup-hook'
-
-`write-contents-hooks'
-
-`write-file-data-hooks'
-
-`write-file-hooks'
-
-`write-region-annotate-functions'
-
-`x-lost-selection-hooks'
-
-`x-sent-selection-hooks'
-
-`zmacs-activate-region-hook'
-
-`zmacs-deactivate-region-hook'
-
-`zmacs-update-region-hook'
Foundation instead of in the original English.
\1f
-File: lispref.info, Node: Index, Prev: Standard Hooks, Up: Top
-
-Index
-*****
-
-* Menu:
-
-* " in printing: Output Functions.
-* " in strings: String Type.
-* #$: Docs and Compilation.
-* #@COUNT: Docs and Compilation.
-* $ in display: Truncation.
-* $ in regexp: Syntax of Regexps.
-* %: Arithmetic Operations.
-* % in format: Formatting Strings.
-* & in replacement: Replacing Match.
-* &define (Edebug): Specification List.
-* ¬ (Edebug): Specification List.
-* &optional: Argument List.
-* &optional (Edebug): Specification List.
-* &or (Edebug): Specification List.
-* &rest: Argument List.
-* &rest (Edebug): Specification List.
-* ' for quoting: Quoting.
-* ( in regexp: Syntax of Regexps.
-* (...) in lists: Cons Cell Type.
-* ) in regexp: Syntax of Regexps.
-* *: Arithmetic Operations.
-* * in interactive: Using Interactive.
-* * in regexp: Syntax of Regexps.
-* *? in regexp: Syntax of Regexps.
-* *PQfn: Unimplemented libpq Functions.
-* *PQoidStatus: Unimplemented libpq Functions.
-* *PQsetdb: Unimplemented libpq Functions.
-* *PQsetdbLogin: Unimplemented libpq Functions.
-* *scratch*: Auto Major Mode.
-* +: Arithmetic Operations.
-* + in regexp: Syntax of Regexps.
-* +? in regexp: Syntax of Regexps.
-* , (with Backquote): Backquote.
-* ,@ (with Backquote): Backquote.
-* -: Arithmetic Operations.
-* . in lists: Dotted Pair Notation.
-* . in regexp: Syntax of Regexps.
-* .emacs: Init File.
-* .emacs customization: Major Mode Conventions.
-* /: Arithmetic Operations.
-* /=: Comparison of Numbers.
-* 1+: Arithmetic Operations.
-* 1-: Arithmetic Operations.
-* ; in comment: Comments.
-* <: Comparison of Numbers.
-* <=: Comparison of Numbers.
-* <ESC>: Functions for Key Lookup.
-* =: Comparison of Numbers.
-* >: Comparison of Numbers.
-* >=: Comparison of Numbers.
-* ? in character constant: Character Type.
-* ? in regexp: Syntax of Regexps.
-* @ in interactive: Using Interactive.
-* [ in regexp: Syntax of Regexps.
-* [...] (Edebug): Specification List.
-* \ in character constant: Character Type.
-* \ in display: Truncation.
-* \ in printing: Output Functions.
-* \ in regexp: Syntax of Regexps.
-* \ in replacement: Replacing Match.
-* \ in strings: String Type.
-* \ in symbols: Symbol Type.
-* \' in regexp: Syntax of Regexps.
-* \(?: in regexp: Syntax of Regexps.
-* \< in regexp: Syntax of Regexps.
-* \= in regexp: Syntax of Regexps.
-* \> in regexp: Syntax of Regexps.
-* \` in regexp: Syntax of Regexps.
-* \a: Character Type.
-* \b: Character Type.
-* \B in regexp: Syntax of Regexps.
-* \b in regexp: Syntax of Regexps.
-* \e: Character Type.
-* \f: Character Type.
-* \n: Character Type.
-* \n in print: Output Variables.
-* \N in replacement: Replacing Match.
-* \r: Character Type.
-* \S in regexp: Syntax of Regexps.
-* \s in regexp: Syntax of Regexps.
-* \t: Character Type.
-* \v: Character Type.
-* \W in regexp: Syntax of Regexps.
-* \w in regexp: Syntax of Regexps.
-* \{n,m\} in regexp: Syntax of Regexps.
-* ] in regexp: Syntax of Regexps.
-* ^ in regexp: Syntax of Regexps.
-* _ in interactive: Using Interactive.
-* `: Backquote.
-* ` (Edebug): Debugging Backquote.
-* ` (list substitution): Backquote.
-* abbrev: Abbrevs.
-* abbrev table: Abbrevs.
-* abbrev tables in modes: Major Mode Conventions.
-* abbrev-all-caps: Abbrev Expansion.
-* abbrev-expansion: Abbrev Expansion.
-* abbrev-file-name: Abbrev Files.
-* abbrev-mode: Abbrev Mode.
-* abbrev-prefix-mark: Abbrev Expansion.
-* abbrev-start-location: Abbrev Expansion.
-* abbrev-start-location-buffer: Abbrev Expansion.
-* abbrev-symbol: Abbrev Expansion.
-* abbrev-table-name-list: Abbrev Tables.
-* abbreviate-file-name: Directory Names.
-* abbrevs-changed: Abbrev Files.
-* abort-recursive-edit: Recursive Editing.
-* aborting: Recursive Editing.
-* abs: Arithmetic Operations.
-* absolute file name: Relative File Names.
-* accelerate-menu: Menu Accelerator Functions.
-* accept-process-output: Accepting Output.
-* accessibility of a file: Testing Accessibility.
-* accessible portion (of a buffer): Narrowing.
-* accessible-keymaps: Scanning Keymaps.
-* acos: Math Functions.
-* acosh: Math Functions.
-* activate-menubar-hook: Menubar.
-* activate-popup-menu-hook: Pop-Up Menus.
-* active display table: Active Display Table.
-* active keymap: Active Keymaps.
-* active-minibuffer-window: Minibuffer Misc.
-* add-abbrev: Defining Abbrevs.
-* add-hook: Hooks.
-* add-menu: Modifying Menus.
-* add-menu-button: Modifying Menus.
-* add-menu-item: Modifying Menus.
-* add-name-to-file: Changing File Attributes.
-* add-spec-list-to-specifier: Adding Specifications.
-* add-spec-to-specifier: Adding Specifications.
-* add-submenu: Modifying Menus.
-* add-text-properties: Changing Properties.
-* add-timeout: Timers.
-* add-to-list: Setting Variables.
-* add-tooltalk-message-arg: Elisp Interface for Sending Messages.
-* add-tooltalk-pattern-arg: Elisp Interface for Receiving Messages.
-* add-tooltalk-pattern-attribute: Elisp Interface for Receiving Messages.
-* address field of register: Cons Cell Type.
-* after-change-function: Change Hooks.
-* after-change-functions: Change Hooks.
-* after-find-file: Subroutines of Visiting.
-* after-init-hook: Init File.
-* after-insert-file-functions: Saving Properties.
-* after-load-alist: Hooks for Loading.
-* after-revert-hook: Reverting.
-* after-save-hook: Saving Buffers.
-* aliases, for variables: Variable Aliases.
-* alist: Association Lists.
-* alist-to-plist: Converting Plists To/From Alists.
-* all-annotations: Locating Annotations.
-* all-completions: Basic Completion.
-* and: Combining Conditions.
-* annotation: Annotations.
-* annotation hooks: Annotation Hooks.
-* annotation-action: Annotation Properties.
-* annotation-data: Annotation Properties.
-* annotation-down-glyph: Annotation Properties.
-* annotation-face: Annotation Properties.
-* annotation-glyph: Annotation Properties.
-* annotation-layout: Annotation Properties.
-* annotation-list: Locating Annotations.
-* annotation-menu: Annotation Properties.
-* annotation-side: Annotation Properties.
-* annotation-visible: Annotation Properties.
-* annotation-width: Annotation Properties.
-* annotationp: Annotation Primitives.
-* annotations-at: Locating Annotations.
-* annotations-in-region: Locating Annotations.
-* anonymous function: Anonymous Functions.
-* anonymous lambda expressions (Edebug): Instrumenting.
-* apostrophe for quoting: Quoting.
-* append: Building Lists.
-* append-to-file: Writing to Files.
-* apply: Calling Functions.
-* apply, and debugging: Internals of Debugger.
-* apropos: Help Functions.
-* aref: Array Functions.
-* argument binding: Argument List.
-* argument descriptors: Using Interactive.
-* argument evaluation form: Using Interactive.
-* argument prompt: Using Interactive.
-* arguments, reading: Minibuffers.
-* arith-error example: Handling Errors.
-* arith-error in division: Arithmetic Operations.
-* arithmetic shift: Bitwise Operations.
-* array: Arrays.
-* array elements: Array Functions.
-* arrayp: Array Functions.
-* ASCII character codes: Character Type.
-* aset: Array Functions.
-* ash: Bitwise Operations.
-* asin: Math Functions.
-* asinh: Math Functions.
-* ask-user-about-lock: File Locks.
-* ask-user-about-supersession-threat: Modification Time.
-* asking the user questions: Yes-or-No Queries.
-* assoc: Association Lists.
-* association list: Association Lists.
-* assq: Association Lists.
-* asynchronous subprocess: Asynchronous Processes.
-* atan: Math Functions.
-* atanh: Math Functions.
-* atom <1>: List-related Predicates.
-* atom: Cons Cell Type.
-* atomic extent: Atomic Extents.
-* atoms: List-related Predicates.
-* attributes of text: Text Properties.
-* Auto Fill mode: Auto Filling.
-* auto-fill-function: Auto Filling.
-* auto-lower-frame: Raising and Lowering.
-* auto-mode-alist: Auto Major Mode.
-* auto-raise-frame: Raising and Lowering.
-* auto-save-default: Auto-Saving.
-* auto-save-file-format: Format Conversion.
-* auto-save-file-name-p: Auto-Saving.
-* auto-save-hook: Auto-Saving.
-* auto-save-interval: Auto-Saving.
-* auto-save-list-file-name: Auto-Saving.
-* auto-save-mode: Auto-Saving.
-* auto-save-timeout: Auto-Saving.
-* auto-save-visited-file-name: Auto-Saving.
-* auto-saving: Auto-Saving.
-* autoload <1>: Domain Specification.
-* autoload: Autoload.
-* autoload errors: Autoload.
-* automatically buffer-local: Intro to Buffer-Local.
-* available fonts: Font Instance Names.
-* back-to-indentation: Motion by Indent.
-* background pixmap: Merging Faces.
-* backquote (Edebug): Debugging Backquote.
-* backquote (list substitution): Backquote.
-* backslash in character constant: Character Type.
-* backslash in strings: String Type.
-* backslash in symbols: Symbol Type.
-* backspace: Character Type.
-* backtrace: Internals of Debugger.
-* backtrace-debug: Internals of Debugger.
-* backtrace-frame: Internals of Debugger.
-* backtracking: Backtracking.
-* backup file: Backup Files.
-* backup files, how to make them: Rename or Copy.
-* backup-buffer: Making Backups.
-* backup-by-copying: Rename or Copy.
-* backup-by-copying-when-linked: Rename or Copy.
-* backup-by-copying-when-mismatch: Rename or Copy.
-* backup-enable-predicate: Making Backups.
-* backup-file-name-p: Backup Names.
-* backup-inhibited: Making Backups.
-* backward-char: Character Motion.
-* backward-delete-char-untabify: Deletion.
-* backward-list: List Motion.
-* backward-prefix-chars: Motion and Syntax.
-* backward-sexp: List Motion.
-* backward-to-indentation: Motion by Indent.
-* backward-word: Word Motion.
-* balancing parentheses: Blinking.
-* barf-if-buffer-read-only: Read Only Buffers.
-* base buffer: Indirect Buffers.
-* base64: Transformations.
-* base64-decode-region: Transformations.
-* base64-decode-string: Transformations.
-* base64-encode-region: Transformations.
-* base64-encode-string: Transformations.
-* batch mode: Batch Mode.
-* batch-byte-compile: Compilation Functions.
-* batch-byte-recompile-directory: Compilation Functions.
-* beep: Beeping.
-* beeping: Beeping.
-* before point, insertion: Insertion.
-* before-change-function: Change Hooks.
-* before-change-functions: Change Hooks.
-* before-init-hook: Init File.
-* before-revert-hook: Reverting.
-* beginning of line: Text Lines.
-* beginning of line in regexp: Syntax of Regexps.
-* beginning-of-buffer: Buffer End Motion.
-* beginning-of-defun: List Motion.
-* beginning-of-line: Text Lines.
-* bell: Beeping.
-* bell character: Character Type.
-* bell-volume: Beeping.
-* binary files and text files: Files and MS-DOS.
-* binary-process-input: MS-DOS Subprocesses.
-* binary-process-output: MS-DOS Subprocesses.
-* bind-text-domain: Level 3 Primitives.
-* binding arguments: Argument List.
-* binding local variables: Local Variables.
-* binding of a key: Keymap Terminology.
-* bit vector: Bit Vectors.
-* bit vector length: Sequence Functions.
-* bit-vector: Bit Vector Functions.
-* bit-vector-p: Bit Vector Functions.
-* bitp: Bit Vector Functions.
-* bitwise and: Bitwise Operations.
-* bitwise exclusive or: Bitwise Operations.
-* bitwise not: Bitwise Operations.
-* bitwise or: Bitwise Operations.
-* blink-matching-open: Blinking.
-* blink-matching-paren: Blinking.
-* blink-matching-paren-delay: Blinking.
-* blink-matching-paren-distance: Blinking.
-* blink-paren-function: Blinking.
-* blink-paren-hook: Blinking.
-* blinking: Blinking.
-* bobp: Near Point.
-* body of function: Lambda Components.
-* bold: Font Instance Characteristics.
-* bolp: Near Point.
-* bookmark-map: Standard Keymaps.
-* boolean: nil and t.
-* boolean-specifier-p: Specifier Types.
-* bootstrapping XEmacs from temacs: Building XEmacs.
-* bottom-gutter: Specifying a Gutter.
-* bottom-gutter-height: Other Gutter Variables.
-* bottom-gutter-visible-p: Other Gutter Variables.
-* bottom-toolbar: Specifying the Toolbar.
-* bottom-toolbar-height: Other Toolbar Variables.
-* bottom-toolbar-visible-p: Other Toolbar Variables.
-* boundp: Void Variables.
-* box diagrams, for lists: Cons Cell Type.
-* box representation for lists: Lists as Boxes.
-* break: Debugger.
-* breakpoints: Breakpoints.
-* bucket (in obarray): Creating Symbols.
-* buffer: Buffers.
-* buffer contents: Text.
-* buffer file name: Buffer File Name.
-* buffer input stream: Input Streams.
-* buffer list: The Buffer List.
-* buffer modification: Buffer Modification.
-* buffer names: Buffer Names.
-* buffer output stream: Output Streams.
-* buffer text notation: Buffer Text Notation.
-* buffer, read-only: Read Only Buffers.
-* buffer-auto-save-file-name: Auto-Saving.
-* buffer-backed-up: Making Backups.
-* buffer-base-buffer: Indirect Buffers.
-* buffer-disable-undo: Maintaining Undo.
-* buffer-enable-undo: Maintaining Undo.
-* buffer-end: Point.
-* buffer-file-format: Format Conversion.
-* buffer-file-name: Buffer File Name.
-* buffer-file-number: Buffer File Name.
-* buffer-file-truename: Buffer File Name.
-* buffer-file-type: Files and MS-DOS.
-* buffer-flush-undo: Maintaining Undo.
-* buffer-glyph-p: Glyph Types.
-* buffer-indirect-children: Indirect Buffers.
-* buffer-invisibility-spec: Invisible Text.
-* buffer-list: The Buffer List.
-* buffer-live-p: Killing Buffers.
-* buffer-local variables: Buffer-Local Variables.
-* buffer-local variables in modes: Major Mode Conventions.
-* buffer-local-variables: Creating Buffer-Local.
-* Buffer-menu-mode-map: Standard Keymaps.
-* buffer-modified-p: Buffer Modification.
-* buffer-modified-tick: Buffer Modification.
-* buffer-name: Buffer Names.
-* buffer-offer-save <1>: Killing Buffers.
-* buffer-offer-save: Saving Buffers.
-* buffer-read-only: Read Only Buffers.
-* buffer-saved-size <1>: Point.
-* buffer-saved-size: Auto-Saving.
-* buffer-size: Point.
-* buffer-string: Buffer Contents.
-* buffer-substring: Buffer Contents.
-* buffer-undo-list: Undo.
-* bufferp: Buffer Basics.
-* buffers menu: Buffers Menu.
-* buffers, controlled in windows: Buffers and Windows.
-* buffers, creating: Creating Buffers.
-* buffers, killing: Killing Buffers.
-* buffers-menu-filter: Menu Filters.
-* buffers-menu-max-size: Buffers Menu.
-* buffers-menu-switch-to-buffer-function: Buffers Menu.
-* building lists: Building Lists.
-* building XEmacs: Building XEmacs.
-* built-in function: What Is a Function.
-* bury-buffer: The Buffer List.
-* busy-pointer-glyph: Mouse Pointer.
-* button-event-p: Event Predicates.
-* button-press-event-p: Event Predicates.
-* button-release-event-p: Event Predicates.
-* bvconcat: Bit Vector Functions.
-* byte-code <1>: Compilation Functions.
-* byte-code: Byte Compilation.
-* byte-code function: Compiled-Function Objects.
-* byte-code interpreter: Compilation Functions.
-* byte-compile: Compilation Functions.
-* byte-compile-dynamic: Dynamic Loading.
-* byte-compile-dynamic-docstrings: Docs and Compilation.
-* byte-compile-file: Compilation Functions.
-* byte-compiling macros: Compiling Macros.
-* byte-compiling require: Named Features.
-* byte-recompile-directory: Compilation Functions.
-* byte-recompile-directory-ignore-errors-p: Compilation Functions.
-* bytes: Strings and Characters.
-* c++-mode-map: Standard Keymaps.
-* C-c: Prefix Keys.
-* C-g: Quitting.
-* C-h: Prefix Keys.
-* C-M-x: Instrumenting.
-* c-mode-abbrev-table: Standard Abbrev Tables.
-* c-mode-map: Standard Keymaps.
-* c-mode-syntax-table: Standard Syntax Tables.
-* C-q: Flow Control.
-* C-s: Flow Control.
-* C-x: Prefix Keys.
-* C-x 4: Prefix Keys.
-* C-x 5: Prefix Keys.
-* C-x a: Prefix Keys.
-* C-x n: Prefix Keys.
-* C-x r: Prefix Keys.
-* caaaar: List Elements.
-* caaadr: List Elements.
-* caaar: List Elements.
-* caadar: List Elements.
-* caaddr: List Elements.
-* caadr: List Elements.
-* caar: List Elements.
-* cadaar: List Elements.
-* cadadr: List Elements.
-* cadar: List Elements.
-* caddar: List Elements.
-* cadddr: List Elements.
-* caddr: List Elements.
-* cadr: List Elements.
-* call stack: Internals of Debugger.
-* call-interactively: Interactive Call.
-* call-process: Synchronous Processes.
-* call-process-region: Synchronous Processes.
-* calling a function: Calling Functions.
-* cancel-debug-on-entry: Function Debugging.
-* canonicalize-inst-list: Adding Specifications.
-* canonicalize-inst-pair: Adding Specifications.
-* canonicalize-lax-plist: Working With Lax Plists.
-* canonicalize-plist: Working With Normal Plists.
-* canonicalize-spec: Adding Specifications.
-* canonicalize-spec-list: Adding Specifications.
-* canonicalize-tag-set: Specifier Tag Functions.
-* capitalization: Character Case.
-* capitalize: Character Case.
-* capitalize-region: Case Changes.
-* capitalize-word: Case Changes.
-* car: List Elements.
-* car-safe: List Elements.
-* case changes: Case Changes.
-* case in replacements: Replacing Match.
-* case-fold-search: Searching and Case.
-* case-replace: Searching and Case.
-* case-table-p: Case Tables.
-* catch: Catch and Throw.
-* category-designator-p: Category Tables.
-* category-table: Category Tables.
-* category-table-p: Category Tables.
-* category-table-value-p: Category Tables.
-* CBREAK: Flow Control.
-* ccl-elapsed-time: Calling CCL.
-* ccl-execute: Calling CCL.
-* ccl-execute-on-string: Calling CCL.
-* ccl-reset-elapsed-time: Calling CCL.
-* cdaaar: List Elements.
-* cdaadr: List Elements.
-* cdaar: List Elements.
-* cdadar: List Elements.
-* cdaddr: List Elements.
-* cdadr: List Elements.
-* cdar: List Elements.
-* cddaar: List Elements.
-* cddadr: List Elements.
-* cddar: List Elements.
-* cdddar: List Elements.
-* cddddr: List Elements.
-* cdddr: List Elements.
-* cddr: List Elements.
-* CDE dt: CDE dt.
-* cdr: List Elements.
-* cdr-safe: List Elements.
-* ceiling: Numeric Conversions.
-* centering point: Vertical Scrolling.
-* cerror: Signaling Errors.
-* change hooks: Change Hooks.
-* change-major-mode-hook: Major Mode Conventions.
-* changing key bindings: Changing Key Bindings.
-* changing to another buffer: Current Buffer.
-* changing window size: Resizing Windows.
-* char table type: Char Table Type.
-* char-after: Near Point.
-* char-before: Near Point.
-* char-charset: MULE Characters.
-* char-equal: Text Comparison.
-* char-int: Character Codes.
-* char-int confoundance disease: Character Type.
-* char-int-p: Character Codes.
-* char-octet: MULE Characters.
-* char-or-char-int-p: Character Codes.
-* char-or-string-p: Predicates for Strings.
-* char-syntax: Syntax Table Functions.
-* char-table-p: Char Tables.
-* char-table-type: Char Table Types.
-* char-table-type-list: Char Table Types.
-* char-to-string: String Conversion.
-* char=: Text Comparison.
-* character arrays: Strings and Characters.
-* character case: Character Case.
-* character descriptor: Character Descriptors.
-* character insertion: Commands for Insertion.
-* character printing: Describing Characters.
-* character set (in regexp): Syntax of Regexps.
-* character to string: String Conversion.
-* character-to-event: Converting Events.
-* characteristics of font instances: Font Instance Characteristics.
-* characterp: Predicates for Characters.
-* characters: Strings and Characters.
-* characters for interactive codes: Interactive Codes.
-* character quote: Syntax Class Table.
-* charset type: Charset Type.
-* charset-ccl-program: Charset Property Functions.
-* charset-chars: Charset Property Functions.
-* charset-columns: Charset Property Functions.
-* charset-dimension: Charset Property Functions.
-* charset-direction: Charset Property Functions.
-* charset-doc-string: Charset Property Functions.
-* charset-final: Charset Property Functions.
-* charset-from-attributes: Basic Charset Functions.
-* charset-graphic: Charset Property Functions.
-* charset-list: Basic Charset Functions.
-* charset-name: Charset Property Functions.
-* charset-property: Charset Property Functions.
-* charset-registry: Charset Property Functions.
-* charset-reverse-direction-charset: Basic Charset Functions.
-* charsetp: Charsets.
-* check-argument-type: Signaling Errors.
-* check-gutter-button-syntax: Gutter Descriptor Format.
-* check-toolbar-button-syntax: Toolbar Descriptor Format.
-* check-valid-char-table-value: Working With Char Tables.
-* check-valid-inst-list: Specifier Validation Functions.
-* check-valid-instantiator: Specifier Validation Functions.
-* check-valid-plist: Property Lists.
-* check-valid-spec-list: Specifier Validation Functions.
-* child process: Processes.
-* children, of extent: Extent Parents.
-* CL note--allocate more storage: Garbage Collection.
-* CL note--case of letters: Symbol Type.
-* CL note--default optional arg: Argument List.
-* CL note--integers vrs eq: Comparison of Numbers.
-* CL note--lack union, set: Sets And Lists.
-* CL note--only throw in Emacs: Catch and Throw.
-* CL note--rplaca vrs setcar: Modifying Lists.
-* CL note--set local: Setting Variables.
-* CL note--special forms compared: Special Forms.
-* CL note--special variables: Variable Scoping.
-* CL note--symbol in obarrays: Creating Symbols.
-* cl-read: Reading in Edebug.
-* cl-specs.el: Instrumenting.
-* cl.el (Edebug): Instrumenting.
-* cleanup forms: Cleanups.
-* clear-abbrev-table: Abbrev Tables.
-* clear-message: The Echo Area.
-* clear-range-table: Working With Range Tables.
-* clear-visited-file-modtime: Modification Time.
-* close parenthesis: Blinking.
-* close-database: Connecting to a Database.
-* close parenthesis character: Syntax Class Table.
-* closures not available: Extent.
-* clrhash: Working With Hash Tables.
-* codes, interactive, description of: Interactive Codes.
-* coding standards: Tips.
-* coding system type: Coding System Type.
-* coding-category-list: Detection of Textual Encoding.
-* coding-category-system: Detection of Textual Encoding.
-* coding-priority-list: Detection of Textual Encoding.
-* coding-system-base: Basic Coding System Functions.
-* coding-system-doc-string: Coding System Property Functions.
-* coding-system-list: Basic Coding System Functions.
-* coding-system-name: Basic Coding System Functions.
-* coding-system-p: Coding Systems.
-* coding-system-property: Coding System Property Functions.
-* coding-system-type: Coding System Property Functions.
-* color instance type: Color Instance Type.
-* color instances: Color Instances.
-* color-instance-name: Color Instance Properties.
-* color-instance-p: Color Instances.
-* color-instance-rgb-components: Color Instance Properties.
-* color-name: Color Convenience Functions.
-* color-pixmap-image-instance-p: Image Instance Types.
-* color-rgb-components: Color Convenience Functions.
-* color-specifier-p <1>: Color Specifiers.
-* color-specifier-p: Specifier Types.
-* colorize-image-instance: Image Instance Functions.
-* colors: Colors.
-* columns: Columns.
-* command: What Is a Function.
-* command descriptions: A Sample Function Description.
-* command history: Command History.
-* command in keymap: Key Lookup.
-* command line arguments: Command Line Arguments.
-* command line options: Command Line Arguments.
-* command loop: Command Loop.
-* command loop, recursive: Recursive Editing.
-* command-debug-status: Internals of Debugger.
-* command-execute: Interactive Call.
-* command-history: Command History.
-* command-history-map: Standard Keymaps.
-* command-line: Command Line Arguments.
-* command-line-args: Command Line Arguments.
-* command-line-functions: Command Line Arguments.
-* command-line-processed: Command Line Arguments.
-* command-switch-alist: Command Line Arguments.
-* commandp: Interactive Call.
-* commandp example: High-Level Completion.
-* commands, defining: Defining Commands.
-* comment syntax: Syntax Class Table.
-* comments: Comments.
-* comment ender: Syntax Class Table.
-* comment starter: Syntax Class Table.
-* Common Lisp: Lisp History.
-* Common Lisp (Edebug): Instrumenting.
-* compare-buffer-substrings: Comparing Text.
-* comparing buffer text: Comparing Text.
-* comparison of modification time: Modification Time.
-* compilation: Byte Compilation.
-* compilation functions: Compilation Functions.
-* compile-defun: Compilation Functions.
-* compiled function: Compiled-Function Objects.
-* compiled-function-arglist: Compiled-Function Objects.
-* compiled-function-constants: Compiled-Function Objects.
-* compiled-function-doc-string: Compiled-Function Objects.
-* compiled-function-domain: Compiled-Function Objects.
-* compiled-function-instructions: Compiled-Function Objects.
-* compiled-function-interactive: Compiled-Function Objects.
-* compiled-function-p: What Is a Function.
-* compiled-function-stack-size: Compiled-Function Objects.
-* complete key: Keymap Terminology.
-* completing-read: Minibuffer Completion.
-* completion: Completion.
-* completion, file name: File Name Completion.
-* completion, user name: User Name Completion.
-* completion-auto-help: Completion Commands.
-* completion-ignore-case: Basic Completion.
-* completion-ignored-extensions: File Name Completion.
-* complex arguments: Minibuffers.
-* complex command: Command History.
-* complex-buffers-menu-p: Buffers Menu.
-* compose-region: Composite Characters.
-* composite-char-string: Composite Characters.
-* concat: Creating Strings.
-* concatenating lists: Rearrangement.
-* concatenating strings: Creating Strings.
-* cond: Conditionals.
-* condition name: Error Symbols.
-* condition-case: Handling Errors.
-* conditional evaluation: Conditionals.
-* cons: Building Lists.
-* cons cell as box: Lists as Boxes.
-* cons cells: Building Lists.
-* consing: Building Lists.
-* console-device-list: Basic Console Functions.
-* console-disable-input: Console and Device I/O.
-* console-enable-input: Console and Device I/O.
-* console-list: Basic Console Functions.
-* console-live-p: Connecting to a Console or Device.
-* console-type-image-conversion-list: Image Instantiator Conversion.
-* consolep: Consoles and Devices.
-* consoles: Consoles and Devices.
-* consp: List-related Predicates.
-* continuation lines: Truncation.
-* continuation-glyph: Redisplay Glyphs.
-* continue-process: Signals to Processes.
-* control character printing: Describing Characters.
-* control characters: Character Type.
-* control characters in display: Usual Display.
-* control characters, reading: Quoted Character Input.
-* control structures: Control Structures.
-* control-arrow-glyph: Redisplay Glyphs.
-* Control-X-prefix: Prefix Keys.
-* conventions for writing minor modes: Minor Mode Conventions.
-* conversion of image instantiators: Image Instantiator Conversion.
-* conversion of strings: String Conversion.
-* copy-alist: Association Lists.
-* copy-category-table: Category Tables.
-* copy-coding-system: Basic Coding System Functions.
-* copy-event: Working With Events.
-* copy-extent: Detached Extents.
-* copy-face: Basic Face Functions.
-* copy-file: Changing File Attributes.
-* copy-hash-table: Introduction to Hash Tables.
-* copy-keymap: Creating Keymaps.
-* copy-marker: Creating Markers.
-* copy-range-table: Introduction to Range Tables.
-* copy-region-as-kill: Kill Functions.
-* copy-sequence: Sequence Functions.
-* copy-specifier: Other Specification Functions.
-* copy-syntax-table: Syntax Table Functions.
-* copying alists: Association Lists.
-* copying bit vectors: Bit Vector Functions.
-* copying files: Changing File Attributes.
-* copying lists: Building Lists.
-* copying sequences: Sequence Functions.
-* copying strings: Creating Strings.
-* copying vectors: Vector Functions.
-* cos: Math Functions.
-* cosh: Math Functions.
-* count-lines: Text Lines.
-* count-loop: A Sample Function Description.
-* counting columns: Columns.
-* coverage testing: Coverage Testing.
-* create-device-hook: Connecting to a Console or Device.
-* create-file-buffer: Subroutines of Visiting.
-* create-frame-hook: Frame Hooks.
-* create-tooltalk-message: Elisp Interface for Sending Messages.
-* create-tooltalk-pattern: Elisp Interface for Receiving Messages.
-* creating buffers: Creating Buffers.
-* creating keymaps: Creating Keymaps.
-* ctl-arrow: Usual Display.
-* ctl-x-4-map <1>: Standard Keymaps.
-* ctl-x-4-map: Prefix Keys.
-* ctl-x-5-map <1>: Standard Keymaps.
-* ctl-x-5-map: Prefix Keys.
-* ctl-x-map <1>: Standard Keymaps.
-* ctl-x-map: Prefix Keys.
-* cube-root: Math Functions.
-* current binding: Local Variables.
-* current buffer: Current Buffer.
-* current buffer excursion: Excursions.
-* current buffer mark: The Mark.
-* current buffer point and mark (Edebug): Edebug Display Update.
-* current buffer position: Point.
-* current command: Command Loop Info.
-* current stack frame: Using Debugger.
-* current-buffer: Current Buffer.
-* current-case-table: Case Tables.
-* current-column: Columns.
-* current-fill-column: Margins.
-* current-frame-configuration: Frame Configurations.
-* current-global-map: Active Keymaps.
-* current-indentation: Primitive Indent.
-* current-input-mode: Input Modes.
-* current-justification: Filling.
-* current-keymaps: Active Keymaps.
-* current-kill: Low-Level Kill Ring.
-* current-left-margin: Margins.
-* current-local-map: Active Keymaps.
-* current-menubar: Menubar.
-* current-message: The Echo Area.
-* current-minor-mode-maps: Active Keymaps.
-* current-mouse-event: Command Loop Info.
-* current-prefix-arg: Prefix Command Arguments.
-* current-time: Time of Day.
-* current-time-string: Time of Day.
-* current-time-zone: Time of Day.
-* current-window-configuration: Window Configurations.
-* cursor (mouse): Mouse Pointer.
-* cursor-in-echo-area: The Echo Area.
-* cust-print: Printing in Edebug.
-* cut buffer: X Selections.
-* cyclic ordering of windows: Cyclic Window Ordering.
-* data type: Lisp Data Types.
-* data-directory: Accessing Documentation.
-* database: Databases.
-* database type: Database Type.
-* database-file-name: Other Database Functions.
-* database-last-error: Other Database Functions.
-* database-live-p: Connecting to a Database.
-* database-subtype: Other Database Functions.
-* database-type: Other Database Functions.
-* databasep: Databases.
-* deallocate-event: Working With Events.
-* debug: Invoking the Debugger.
-* debug-allocation: Garbage Collection.
-* debug-allocation-backtrace: Garbage Collection.
-* debug-ignored-errors: Error Debugging.
-* debug-on-entry: Function Debugging.
-* debug-on-error: Error Debugging.
-* debug-on-error use: Processing of Errors.
-* debug-on-next-call: Internals of Debugger.
-* debug-on-quit: Infinite Loops.
-* debug-on-signal: Error Debugging.
-* debug-on-signal use: Handling Errors.
-* debugger <1>: Internals of Debugger.
-* debugger: Debugger.
-* debugger command list: Debugger Commands.
-* debugger-mode-map: Standard Keymaps.
-* debugging errors: Error Debugging.
-* debugging specific functions: Function Debugging.
-* decode-big5-char: Big5 and Shift-JIS Functions.
-* decode-coding-region: Encoding and Decoding Text.
-* decode-shift-jis-char: Big5 and Shift-JIS Functions.
-* decode-time: Time Conversion.
-* decoding file formats: Format Conversion.
-* decompose-region: Composite Characters.
-* decrement field of register: Cons Cell Type.
-* dedicated window: Choosing Window.
-* deep binding: Impl of Scope.
-* def-edebug-spec: Instrumenting Macro Calls.
-* defalias: Defining Functions.
-* default argument string: Interactive Codes.
-* default init file: Init File.
-* default value: Default Value.
-* default-abbrev-mode: Abbrev Mode.
-* default-boundp: Default Value.
-* default-buffer-file-type: Files and MS-DOS.
-* default-case-fold-search: Searching and Case.
-* default-ctl-arrow: Usual Display.
-* default-deselect-frame-hook: Raising and Lowering.
-* default-directory: File Name Expansion.
-* default-file-modes: Changing File Attributes.
-* default-fill-column: Margins.
-* default-frame-name: Frame Name.
-* default-frame-plist: Initial Properties.
-* default-gutter: Specifying a Gutter.
-* default-gutter-height: Other Gutter Variables.
-* default-gutter-position: Specifying a Gutter.
-* default-gutter-visible-p: Other Gutter Variables.
-* default-gutter-width: Other Gutter Variables.
-* default-justification: Filling.
-* default-major-mode: Auto Major Mode.
-* default-menubar: Menubar.
-* default-minibuffer-frame: Minibuffers and Frames.
-* default-modeline-format: Modeline Variables.
-* default-popup-menu: Pop-Up Menus.
-* default-select-frame-hook: Raising and Lowering.
-* default-text-properties: Examining Properties.
-* default-toolbar: Specifying the Toolbar.
-* default-toolbar-height: Other Toolbar Variables.
-* default-toolbar-position: Specifying the Toolbar.
-* default-toolbar-visible-p: Other Toolbar Variables.
-* default-toolbar-width: Other Toolbar Variables.
-* default-truncate-lines: Truncation.
-* default-value: Default Value.
-* default-x-device: Resources.
-* default.el: Start-up Summary.
-* defconst <1>: Domain Specification.
-* defconst: Defining Variables.
-* defcustom: Variable Definitions.
-* defgroup: Group Definitions.
-* define-abbrev: Defining Abbrevs.
-* define-abbrev-table: Abbrev Tables.
-* define-derived-mode: Derived Modes.
-* define-error: Error Symbols.
-* define-function: Defining Functions.
-* define-key: Changing Key Bindings.
-* define-logical-name: Changing File Attributes.
-* define-obsolete-function-alias: Obsoleteness.
-* define-obsolete-variable-alias: Obsoleteness.
-* define-prefix-command: Prefix Keys.
-* define-specifier-tag: Specifier Tag Functions.
-* defining a function: Defining Functions.
-* defining commands: Defining Commands.
-* defining-kbd-macro: Keyboard Macros.
-* definition of a symbol: Definitions.
-* defmacro: Defining Macros.
-* defsubst: Inline Functions.
-* defun: Defining Functions.
-* defun-prompt-regexp: List Motion.
-* defvar <1>: Domain Specification.
-* defvar: Defining Variables.
-* defvaralias: Variable Aliases.
-* deiconify-frame: Visibility of Frames.
-* delete: Sets And Lists.
-* delete previous char: Deletion.
-* delete-annotation: Annotation Primitives.
-* delete-auto-save-file-if-necessary: Auto-Saving.
-* delete-auto-save-files: Auto-Saving.
-* delete-backward-char: Deletion.
-* delete-blank-lines: User-Level Deletion.
-* delete-char: Deletion.
-* delete-device: Connecting to a Console or Device.
-* delete-device-hook: Connecting to a Console or Device.
-* delete-directory: Create/Delete Dirs.
-* delete-exited-processes: Deleting Processes.
-* delete-extent: Creating and Modifying Extents.
-* delete-file: Changing File Attributes.
-* delete-frame: Deleting Frames.
-* delete-frame-hook: Frame Hooks.
-* delete-horizontal-space: User-Level Deletion.
-* delete-indentation: User-Level Deletion.
-* delete-menu-item: Modifying Menus.
-* delete-old-versions: Numbered Backups.
-* delete-other-windows: Deleting Windows.
-* delete-process: Deleting Processes.
-* delete-region: Deletion.
-* delete-to-left-margin: Margins.
-* delete-window: Deleting Windows.
-* delete-windows-on: Deleting Windows.
-* deleting files: Changing File Attributes.
-* deleting processes: Deleting Processes.
-* deleting whitespace: User-Level Deletion.
-* deleting windows: Deleting Windows.
-* deletion of elements: Sets And Lists.
-* deletion of frames: Deleting Frames.
-* deletion vs killing: Deletion.
-* delq: Sets And Lists.
-* demibold: Font Instance Characteristics.
-* describe-bindings: Scanning Keymaps.
-* describe-bindings-internal: Scanning Keymaps.
-* describe-buffer-case-table: Case Tables.
-* describe-mode: Mode Help.
-* describe-prefix-bindings: Help Functions.
-* describe-tooltalk-message: Elisp Interface for Receiving Messages.
-* description for interactive codes: Interactive Codes.
-* description format: Format of Descriptions.
-* deselect-frame-hook: Frame Hooks.
-* destroy-tooltalk-message: Elisp Interface for Sending Messages.
-* destroy-tooltalk-pattern: Elisp Interface for Receiving Messages.
-* destructive-alist-to-plist: Converting Plists To/From Alists.
-* destructive-plist-to-alist: Converting Plists To/From Alists.
-* detach-extent: Detached Extents.
-* detached extent: Detached Extents.
-* detect-coding-region: Detection of Textual Encoding.
-* device-baud-rate <1>: Terminal Output.
-* device-baud-rate: Console and Device I/O.
-* device-class: Console Types and Device Classes.
-* device-frame-list <1>: Basic Device Functions.
-* device-frame-list: Finding All Frames.
-* device-list: Basic Device Functions.
-* device-live-p: Connecting to a Console or Device.
-* device-matches-specifier-tag-set-p: Specifier Tag Functions.
-* device-matching-specifier-tag-list: Specifier Tag Functions.
-* device-or-frame-p: Basic Device Functions.
-* device-or-frame-type: Console Types and Device Classes.
-* device-type: Console Types and Device Classes.
-* device-x-display: Connecting to a Console or Device.
-* devicep: Consoles and Devices.
-* devices: Consoles and Devices.
-* dgettext: Level 3 Primitives.
-* diagrams, boxed, for lists: Cons Cell Type.
-* dialog box: Dialog Boxes.
-* digit-argument: Prefix Command Arguments.
-* ding: Beeping.
-* directory name: Directory Names.
-* directory name abbreviation: Directory Names.
-* directory part (of file name): File Name Components.
-* directory-abbrev-alist: Directory Names.
-* directory-file-name: Directory Names.
-* directory-files: Contents of Directories.
-* directory-oriented functions: Contents of Directories.
-* dired-kept-versions: Numbered Backups.
-* dired-mode-map: Standard Keymaps.
-* disable undo: Maintaining Undo.
-* disable-command: Disabling Commands.
-* disable-menu-item: Modifying Menus.
-* disable-timeout: Timers.
-* disabled: Disabling Commands.
-* disabled command: Disabling Commands.
-* disabled-command-hook: Disabling Commands.
-* disassemble: Disassembly.
-* disassembled byte-code: Disassembly.
-* discard input: Peeking and Discarding.
-* discard-input: Peeking and Discarding.
-* dispatch-event: Dispatching an Event.
-* dispatching an event: Dispatching an Event.
-* display columns: Size and Position.
-* display lines: Size and Position.
-* display order: Extent Endpoints.
-* display table: Display Tables.
-* display update: Refresh Screen.
-* display-buffer: Choosing Window.
-* display-buffer-function: Choosing Window.
-* display-completion-list: Completion Commands.
-* display-error: Processing of Errors.
-* display-message: The Echo Area.
-* display-warning: Warnings.
-* display-warning-minimum-level: Warnings.
-* display-warning-suppressed-classes: Warnings.
-* displaying a buffer: Displaying Buffers.
-* do-auto-save: Auto-Saving.
-* DOC (documentation) file: Documentation Basics.
-* doc-directory: Accessing Documentation.
-* documentation: Accessing Documentation.
-* documentation conventions: Documentation Basics.
-* documentation for major mode: Mode Help.
-* documentation notation: Evaluation Notation.
-* documentation of function: Function Documentation.
-* documentation strings: Documentation.
-* documentation, keys in: Keys in Documentation.
-* documentation-property: Accessing Documentation.
-* domain: Level 3 Primitives.
-* domain (in a specifier): Specifiers In-Depth.
-* domain-of: Level 3 Primitives.
-* dotted lists (Edebug): Specification List.
-* dotted pair notation: Dotted Pair Notation.
-* double-quote in strings: String Type.
-* down-list: List Motion.
-* downcase: Character Case.
-* downcase-region: Case Changes.
-* downcase-word: Case Changes.
-* downcasing in lookup-key: Key Sequence Input.
-* drag: Drag Interface.
-* drag and drop: Drag and Drop.
-* Drag API: Drag Interface.
-* dribble file: Recording Input.
-* drop: Drop Interface.
-* Drop API: Drop Interface.
-* dump-emacs: Building XEmacs.
-* duplicable extent: Duplicable Extents.
-* dynamic loading of documentation: Docs and Compilation.
-* dynamic loading of functions: Dynamic Loading.
-* dynamic scoping: Variable Scoping.
-* echo area: The Echo Area.
-* echo-keystrokes <1>: The Echo Area.
-* echo-keystrokes: Command Loop Info.
-* edebug: Embedded Breakpoints.
-* Edebug: Edebug.
-* Edebug execution modes: Edebug Execution Modes.
-* Edebug mode: Edebug.
-* Edebug specification list: Specification List.
-* edebug-`: Debugging Backquote.
-* edebug-all-defs <1>: Edebug Options.
-* edebug-all-defs: Instrumenting.
-* edebug-all-forms <1>: Edebug Options.
-* edebug-all-forms: Instrumenting.
-* edebug-continue-kbd-macro: Edebug Options.
-* edebug-display-freq-count: Coverage Testing.
-* edebug-eval-top-level-form: Instrumenting.
-* edebug-global-break-condition <1>: Edebug Options.
-* edebug-global-break-condition: Global Break Condition.
-* edebug-initial-mode: Edebug Options.
-* edebug-on-error <1>: Edebug Options.
-* edebug-on-error: Trapping Errors.
-* edebug-on-quit <1>: Edebug Options.
-* edebug-on-quit: Trapping Errors.
-* edebug-print-circle <1>: Edebug Options.
-* edebug-print-circle: Printing in Edebug.
-* edebug-print-length <1>: Edebug Options.
-* edebug-print-length: Printing in Edebug.
-* edebug-print-level <1>: Edebug Options.
-* edebug-print-level: Printing in Edebug.
-* edebug-print-trace-after <1>: Edebug Options.
-* edebug-print-trace-after: Tracing.
-* edebug-print-trace-before <1>: Edebug Options.
-* edebug-print-trace-before: Tracing.
-* edebug-save-displayed-buffer-points <1>: Edebug Options.
-* edebug-save-displayed-buffer-points: Edebug Display Update.
-* edebug-save-windows <1>: Edebug Options.
-* edebug-save-windows: Edebug Display Update.
-* edebug-set-global-break-condition: Global Break Condition.
-* edebug-setup-hook: Edebug Options.
-* edebug-test-coverage: Edebug Options.
-* edebug-trace <1>: Edebug Options.
-* edebug-trace: Tracing.
-* edebug-tracing: Tracing.
-* edebug-unwrap: Specification List.
-* edebug-unwrap-results <1>: Edebug Options.
-* edebug-unwrap-results: Debugging Backquote.
-* edit-abbrevs-map: Standard Keymaps.
-* edit-and-eval-command: Object from Minibuffer.
-* edit-menu-filter: Menu Filters.
-* edit-tab-stops-map: Standard Keymaps.
-* editing types: Editing Types.
-* editor command loop: Command Loop.
-* eighth: List Elements.
-* electric-buffer-menu-mode-map: Standard Keymaps.
-* electric-future-map: A Sample Variable Description.
-* electric-history-map: Standard Keymaps.
-* element (of list): Lists.
-* elements of sequences: Sequence Functions.
-* elt: Sequence Functions.
-* emacs-build-time: Building XEmacs.
-* emacs-lisp-mode-map: Standard Keymaps.
-* emacs-lisp-mode-syntax-table: Standard Syntax Tables.
-* emacs-major-version: Building XEmacs.
-* emacs-minor-version: Building XEmacs.
-* emacs-pid: System Environment.
-* emacs-version: Building XEmacs.
-* EMACSLOADPATH environment variable: How Programs Do Loading.
-* embedded breakpoints: Embedded Breakpoints.
-* empty list: Cons Cell Type.
-* enable-command: Disabling Commands.
-* enable-flow-control: Flow Control.
-* enable-flow-control-on: Flow Control.
-* enable-local-eval: Auto Major Mode.
-* enable-local-variables: Auto Major Mode.
-* enable-menu-item: Modifying Menus.
-* enable-recursive-minibuffers: Minibuffer Misc.
-* encode-big5-char: Big5 and Shift-JIS Functions.
-* encode-coding-region: Encoding and Decoding Text.
-* encode-shift-jis-char: Big5 and Shift-JIS Functions.
-* encode-time: Time Conversion.
-* encoding file formats: Format Conversion.
-* end of buffer marker: Creating Markers.
-* end-of-buffer: Buffer End Motion.
-* end-of-defun: List Motion.
-* end-of-file: Input Functions.
-* end-of-line: Text Lines.
-* enlarge-window: Resizing Windows.
-* enlarge-window-horizontally: Resizing Windows.
-* enlarge-window-pixels: Resizing Windows.
-* enqueue-eval-event: Reading One Event.
-* environment: Intro Eval.
-* environment variable access: System Environment.
-* environment variables, subprocesses: Subprocess Creation.
-* eobp: Near Point.
-* eolp: Near Point.
-* eq: Equality Predicates.
-* equal: Equality Predicates.
-* equality: Equality Predicates.
-* erase-buffer: Deletion.
-* error: Signaling Errors.
-* error cleanup: Cleanups.
-* error debugging: Error Debugging.
-* error display: The Echo Area.
-* error handler: Handling Errors.
-* error in debug: Invoking the Debugger.
-* error message notation: Error Messages.
-* error name: Error Symbols.
-* error symbol: Error Symbols.
-* error-conditions: Error Symbols.
-* error-message-string: Processing of Errors.
-* errors: Errors.
-* esc-map: Prefix Keys.
-* ESC-prefix: Prefix Keys.
-* escape <1>: Syntax Class Table.
-* escape: Character Type.
-* escape characters: Output Variables.
-* escape characters in printing: Output Functions.
-* escape sequence: Character Type.
-* eval: Eval.
-* eval, and debugging: Internals of Debugger.
-* eval-and-compile: Eval During Compile.
-* eval-buffer: Eval.
-* eval-current-buffer (Edebug): Instrumenting.
-* eval-defun (Edebug): Instrumenting.
-* eval-event-p: Event Predicates.
-* eval-expression (Edebug): Instrumenting.
-* eval-minibuffer: Object from Minibuffer.
-* eval-region: Eval.
-* eval-region (Edebug): Instrumenting.
-* eval-when-compile: Eval During Compile.
-* evaluated expression argument: Interactive Codes.
-* evaluation: Evaluation.
-* evaluation error: Local Variables.
-* evaluation list (Edebug): Eval List.
-* evaluation notation: Evaluation Notation.
-* evaluation of buffer contents: Eval.
-* event printing: Describing Characters.
-* event-buffer: Window-Level Event Position Info.
-* event-button: Accessing Other Event Info.
-* event-closest-point: Event Text Position Info.
-* event-device: Accessing Other Event Info.
-* event-frame: Frame-Level Event Position Info.
-* event-function: Accessing Other Event Info.
-* event-glyph-extent: Event Glyph Position Info.
-* event-glyph-x-pixel: Event Glyph Position Info.
-* event-glyph-y-pixel: Event Glyph Position Info.
-* event-key: Accessing Other Event Info.
-* event-live-p: Event Predicates.
-* event-matches-key-specifier-p: Key Sequences.
-* event-modifier-bits: Accessing Other Event Info.
-* event-modifiers: Accessing Other Event Info.
-* event-object: Accessing Other Event Info.
-* event-over-border-p: Other Event Position Info.
-* event-over-glyph-p: Event Glyph Position Info.
-* event-over-modeline-p: Event Text Position Info.
-* event-over-text-area-p: Event Text Position Info.
-* event-over-toolbar-p: Event Toolbar Position Info.
-* event-point: Event Text Position Info.
-* event-process: Accessing Other Event Info.
-* event-timestamp: Accessing Other Event Info.
-* event-to-character: Converting Events.
-* event-toolbar-button: Event Toolbar Position Info.
-* event-type: Event Contents.
-* event-window: Window-Level Event Position Info.
-* event-window-x-pixel: Window-Level Event Position Info.
-* event-window-y-pixel: Window-Level Event Position Info.
-* event-x: Event Text Position Info.
-* event-x-pixel: Frame-Level Event Position Info.
-* event-y: Event Text Position Info.
-* event-y-pixel: Frame-Level Event Position Info.
-* eventp: Events.
-* events: Events.
-* events-to-keys: Converting Events.
-* examining windows: Buffers and Windows.
-* examples of using interactive: Interactive Examples.
-* exchange-point-and-mark: The Mark.
-* excursion: Excursions.
-* exec-directory: Subprocess Creation.
-* exec-path: Subprocess Creation.
-* execute program: Subprocess Creation.
-* execute with prefix argument: Interactive Call.
-* execute-extended-command: Interactive Call.
-* execute-kbd-macro: Keyboard Macros.
-* executing-macro: Keyboard Macros.
-* execution speed: Compilation Tips.
-* exit: Recursive Editing.
-* exit recursive editing: Recursive Editing.
-* exit-minibuffer: Minibuffer Misc.
-* exit-recursive-edit: Recursive Editing.
-* exiting XEmacs: Getting Out.
-* exp: Math Functions.
-* expand-abbrev: Abbrev Expansion.
-* expand-file-name: File Name Expansion.
-* expansion of file names: File Name Expansion.
-* expansion of macros: Expansion.
-* expression: Intro Eval.
-* expression prefix: Syntax Class Table.
-* expt: Math Functions.
-* extended-command-history: Minibuffer History.
-* extent <1>: Extents.
-* extent: Variable Scoping.
-* extent children: Extent Parents.
-* extent end position: Extent Endpoints.
-* extent endpoint: Extent Endpoints.
-* extent order: Extent Endpoints.
-* extent parent: Extent Parents.
-* extent priority: Intro to Extents.
-* extent property: Extent Properties.
-* extent replica: Duplicable Extents.
-* extent start position: Extent Endpoints.
-* extent, duplicable: Duplicable Extents.
-* extent, unique: Duplicable Extents.
-* extent-at: Finding Extents.
-* extent-begin-glyph: Extent Properties.
-* extent-begin-glyph-layout: Extent Properties.
-* extent-children: Extent Parents.
-* extent-descendants: Extent Parents.
-* extent-detached-p: Detached Extents.
-* extent-end-glyph: Extent Properties.
-* extent-end-glyph-layout: Extent Properties.
-* extent-end-position: Extent Endpoints.
-* extent-face: Extent Properties.
-* extent-in-region-p: Mapping Over Extents.
-* extent-keymap: Extent Properties.
-* extent-length: Extent Endpoints.
-* extent-list: Finding Extents.
-* extent-live-p: Creating and Modifying Extents.
-* extent-mouse-face: Extent Properties.
-* extent-object: Creating and Modifying Extents.
-* extent-parent: Extent Parents.
-* extent-priority: Extent Properties.
-* extent-properties: Extent Properties.
-* extent-property: Extent Properties.
-* extent-start-position: Extent Endpoints.
-* extentp: Extents.
-* extents, locating: Finding Extents.
-* extents, mapping: Mapping Over Extents.
-* face type: Face Type.
-* face-background: Face Convenience Functions.
-* face-background-instance: Face Convenience Functions.
-* face-background-pixmap: Face Convenience Functions.
-* face-background-pixmap-instance: Face Convenience Functions.
-* face-boolean-specifier-p: Specifier Types.
-* face-differs-from-default-p: Other Face Display Functions.
-* face-equal: Other Face Display Functions.
-* face-font: Face Convenience Functions.
-* face-font-instance: Face Convenience Functions.
-* face-font-name: Face Convenience Functions.
-* face-foreground: Face Convenience Functions.
-* face-foreground-instance: Face Convenience Functions.
-* face-list: Basic Face Functions.
-* face-property: Face Properties.
-* face-property-instance: Face Properties.
-* face-underline-p: Face Convenience Functions.
-* facep: Basic Face Functions.
-* faces: Faces and Window-System Objects.
-* fallback (in a specifier): Specifier Instancing.
-* false: nil and t.
-* fboundp: Function Cells.
-* fceiling: Rounding Operations.
-* featurep: Named Features.
-* features: Named Features.
-* fetch-bytecode: Dynamic Loading.
-* ffloor: Rounding Operations.
-* field width: Formatting Strings.
-* fifth: List Elements.
-* file accessibility: Testing Accessibility.
-* file age: Testing Accessibility.
-* file attributes: File Attributes.
-* file format conversion: Format Conversion.
-* file hard link: Changing File Attributes.
-* file locks: File Locks.
-* file mode specification error: Auto Major Mode.
-* file modes and MS-DOS: Changing File Attributes.
-* file modification time: Testing Accessibility.
-* file name completion subroutines: File Name Completion.
-* file name of buffer: Buffer File Name.
-* file name of directory: Directory Names.
-* file names: File Names.
-* file names in directory: Contents of Directories.
-* file open error: Subroutines of Visiting.
-* file symbolic links: Kinds of Files.
-* file types on MS-DOS: Files and MS-DOS.
-* file with multiple names: Changing File Attributes.
-* file-accessible-directory-p: Testing Accessibility.
-* file-already-exists: Changing File Attributes.
-* file-attributes: File Attributes.
-* file-directory-p: Kinds of Files.
-* file-error: How Programs Do Loading.
-* file-executable-p: Testing Accessibility.
-* file-exists-p: Testing Accessibility.
-* file-local-copy: Magic File Names.
-* file-locked: File Locks.
-* file-locked-p: File Locks.
-* file-menu-filter: Menu Filters.
-* file-modes: File Attributes.
-* file-name-absolute-p: Relative File Names.
-* file-name-all-completions: File Name Completion.
-* file-name-as-directory: Directory Names.
-* file-name-buffer-file-type-alist: Files and MS-DOS.
-* file-name-completion: File Name Completion.
-* file-name-directory: File Name Components.
-* file-name-history: Minibuffer History.
-* file-name-nondirectory: File Name Components.
-* file-name-sans-extension: File Name Components.
-* file-name-sans-versions: File Name Components.
-* file-newer-than-file-p: Testing Accessibility.
-* file-newest-backup: Backup Names.
-* file-nlinks: File Attributes.
-* file-ownership-preserved-p: Testing Accessibility.
-* file-precious-flag: Saving Buffers.
-* file-readable-p: Testing Accessibility.
-* file-regular-p: Kinds of Files.
-* file-relative-name: File Name Expansion.
-* file-supersession: Modification Time.
-* file-symlink-p: Kinds of Files.
-* file-truename: Truenames.
-* file-writable-p: Testing Accessibility.
-* fill-column: Margins.
-* fill-individual-paragraphs: Filling.
-* fill-individual-varying-indent: Filling.
-* fill-paragraph: Filling.
-* fill-paragraph-function: Filling.
-* fill-prefix: Margins.
-* fill-region: Filling.
-* fill-region-as-paragraph: Filling.
-* fillarray: Array Functions.
-* filling a paragraph: Filling.
-* filling, automatic: Auto Filling.
-* filling, explicit: Filling.
-* filter function: Filter Functions.
-* find-backup-file-name: Backup Names.
-* find-buffer-file-type: Files and MS-DOS.
-* find-charset: Basic Charset Functions.
-* find-charset-region: MULE Characters.
-* find-charset-string: MULE Characters.
-* find-coding-system: Basic Coding System Functions.
-* find-file: Visiting Functions.
-* find-file-binary: Files and MS-DOS.
-* find-file-hooks: Visiting Functions.
-* find-file-name-handler: Magic File Names.
-* find-file-noselect: Visiting Functions.
-* find-file-not-found-hooks: Visiting Functions.
-* find-file-other-window: Visiting Functions.
-* find-file-read-only: Visiting Functions.
-* find-file-text: Files and MS-DOS.
-* find-menu-item: Modifying Menus.
-* finding files: Visiting Files.
-* finding windows: Selecting Windows.
-* first: List Elements.
-* first-change-hook: Change Hooks.
-* fixup-whitespace: User-Level Deletion.
-* float: Numeric Conversions.
-* float-output-format: Output Variables.
-* floating-point numbers, printing: Output Variables.
-* floatp: Predicates on Numbers.
-* floor: Numeric Conversions.
-* flow control characters: Flow Control.
-* flush input: Peeking and Discarding.
-* fmakunbound: Function Cells.
-* focus-frame: Input Focus.
-* following-char: Near Point.
-* font instance characteristics: Font Instance Characteristics.
-* font instance name: Font Instance Names.
-* font instance size: Font Instance Size.
-* font instance type: Font Instance Type.
-* font-instance-name: Font Instance Names.
-* font-instance-p: Font Instances.
-* font-instance-properties: Font Instance Characteristics.
-* font-instance-truename: Font Instance Names.
-* font-name: Font Convenience Functions.
-* font-properties: Font Convenience Functions.
-* font-specifier-p <1>: Font Specifiers.
-* font-specifier-p: Specifier Types.
-* font-truename: Font Convenience Functions.
-* fonts <1>: Fonts.
-* fonts: Some Terms.
-* fonts available: Font Instance Names.
-* foo: A Sample Function Description.
-* for: Argument Evaluation.
-* force-cursor-redisplay: Refresh Screen.
-* force-highlight-extent: Extents and Events.
-* forcing redisplay: Waiting.
-* format: Formatting Strings.
-* format definition: Format Conversion.
-* format of keymaps: Format of Keymaps.
-* format of menus: Menu Format.
-* format of the menubar: Menubar Format.
-* format precision: Formatting Strings.
-* format specification: Formatting Strings.
-* format-alist: Format Conversion.
-* format-buffers-menu-line: Buffers Menu.
-* format-find-file: Format Conversion.
-* format-insert-file: Format Conversion.
-* format-time-string: Time Conversion.
-* format-write-file: Format Conversion.
-* formatting strings: Formatting Strings.
-* formfeed: Character Type.
-* forms: Intro Eval.
-* forward-char: Character Motion.
-* forward-comment: Parsing Expressions.
-* forward-line: Text Lines.
-* forward-list: List Motion.
-* forward-sexp: List Motion.
-* forward-to-indentation: Motion by Indent.
-* forward-word: Word Motion.
-* fourth: List Elements.
-* frame: Frames.
-* frame configuration: Frame Configurations.
-* frame hooks: Frame Hooks.
-* frame name: Frame Name.
-* frame of terminal: Basic Windows.
-* frame position: Size and Position.
-* frame size: Size and Position.
-* frame visibility: Visibility of Frames.
-* frame-device: Basic Device Functions.
-* frame-height: Size and Position.
-* frame-icon-title-format: Frame Titles.
-* frame-iconified-p: Visibility of Frames.
-* frame-list: Finding All Frames.
-* frame-live-p: Deleting Frames.
-* frame-name: Frame Name.
-* frame-pixel-height: Size and Position.
-* frame-pixel-width: Size and Position.
-* frame-properties: Property Access.
-* frame-property: Property Access.
-* frame-root-window: Frames and Windows.
-* frame-selected-window: Frames and Windows.
-* frame-title-format: Frame Titles.
-* frame-top-window: Frames and Windows.
-* frame-totally-visible-p: Visibility of Frames.
-* frame-visible-p: Visibility of Frames.
-* frame-width: Size and Position.
-* framep: Frames.
-* free list: Garbage Collection.
-* frequency counts: Coverage Testing.
-* fround: Rounding Operations.
-* fset: Function Cells.
-* ftp-login: Cleanups.
-* ftruncate: Rounding Operations.
-* funcall: Calling Functions.
-* funcall, and debugging: Internals of Debugger.
-* function <1>: Anonymous Functions.
-* function: What Is a Function.
-* function call: Function Forms.
-* function call debugging: Function Debugging.
-* function cell: Symbol Components.
-* function cell in autoload: Autoload.
-* function definition: Function Names.
-* function descriptions: A Sample Function Description.
-* function form evaluation: Function Forms.
-* function input stream: Input Streams.
-* function invocation: Calling Functions.
-* function name: Function Names.
-* function output stream: Output Streams.
-* function quoting: Anonymous Functions.
-* function-interactive: Using Interactive.
-* function-key-map: Translating Input.
-* function-obsoleteness-doc: Obsoleteness.
-* functionals: Calling Functions.
-* functions in modes: Major Mode Conventions.
-* functions, making them interactive: Defining Commands.
-* Fundamental mode: Major Modes.
-* fundamental-mode: Auto Major Mode.
-* fundamental-mode-abbrev-table: Standard Abbrev Tables.
-* garbage collector: Garbage Collection.
-* garbage-collect: Garbage Collection.
-* gc-cons-threshold: Garbage Collection.
-* gc-message: Garbage Collection.
-* gc-pointer-glyph <1>: Garbage Collection.
-* gc-pointer-glyph: Mouse Pointer.
-* generate-new-buffer: Creating Buffers.
-* generate-new-buffer-name: Buffer Names.
-* generic-specifier-p: Specifier Types.
-* get: Object Plists.
-* get-buffer: Buffer Names.
-* get-buffer-create: Creating Buffers.
-* get-buffer-process: Process Buffers.
-* get-buffer-window: Buffers and Windows.
-* get-char-property: Examining Properties.
-* get-char-table: Working With Char Tables.
-* get-charset: Basic Charset Functions.
-* get-coding-system: Basic Coding System Functions.
-* get-database: Working With a Database.
-* get-file-buffer: Buffer File Name.
-* get-largest-window: Selecting Windows.
-* get-lru-window: Selecting Windows.
-* get-process: Process Information.
-* get-range-char-table: Working With Char Tables.
-* get-range-table: Working With Range Tables.
-* get-register: Registers.
-* get-text-property: Examining Properties.
-* get-tooltalk-message-attribute: Elisp Interface for Sending Messages.
-* getenv: System Environment.
-* getf: Other Plists.
-* gethash: Working With Hash Tables.
-* gettext: Level 3 Primitives.
-* global binding: Local Variables.
-* global break condition: Global Break Condition.
-* global keymap: Active Keymaps.
-* global mark ring: The Mark.
-* global variable: Global Variables.
-* global-abbrev-table: Standard Abbrev Tables.
-* global-key-binding: Functions for Key Lookup.
-* global-map: Active Keymaps.
-* global-mark-ring: The Mark.
-* global-mode-string: Modeline Variables.
-* global-popup-menu: Pop-Up Menus.
-* global-set-key: Key Binding Commands.
-* global-unset-key: Key Binding Commands.
-* glyph type: Glyph Type.
-* glyph-ascent: Glyph Dimensions.
-* glyph-baseline: Glyph Convenience Functions.
-* glyph-baseline-instance: Glyph Convenience Functions.
-* glyph-contrib-p: Glyph Convenience Functions.
-* glyph-contrib-p-instance: Glyph Convenience Functions.
-* glyph-descent: Glyph Dimensions.
-* glyph-face: Glyph Convenience Functions.
-* glyph-height: Glyph Dimensions.
-* glyph-image: Glyph Convenience Functions.
-* glyph-image-instance: Glyph Convenience Functions.
-* glyph-property: Glyph Properties.
-* glyph-property-instance: Glyph Properties.
-* glyph-type: Glyph Types.
-* glyph-type-list: Glyph Types.
-* glyph-width: Glyph Dimensions.
-* glyphp: Glyphs.
-* glyphs: Glyphs.
-* goto-char: Character Motion.
-* goto-line: Text Lines.
-* gutter: Gutter.
-* gutter-buttons-captioned-p: Other Gutter Variables.
-* gutter-make-button-list: Gutter Descriptor Format.
-* gutter-specifier-p: Specifying a Gutter.
-* hack-local-variables: Auto Major Mode.
-* handling errors: Handling Errors.
-* hash notation: Printed Representation.
-* hash table: Hash Tables.
-* hash table type: Hash Table Type.
-* hash table, weak: Weak Hash Tables.
-* hash-table-count: Introduction to Hash Tables.
-* hash-table-p: Hash Tables.
-* hash-table-rehash-size: Introduction to Hash Tables.
-* hash-table-rehash-threshold: Introduction to Hash Tables.
-* hash-table-size: Introduction to Hash Tables.
-* hash-table-test: Introduction to Hash Tables.
-* hash-table-weakness: Introduction to Hash Tables.
-* hashing: Creating Symbols.
-* header comments: Library Headers.
-* help for major mode: Mode Help.
-* help-char: Help Functions.
-* help-command: Help Functions.
-* help-form: Help Functions.
-* help-map <1>: Standard Keymaps.
-* help-map: Help Functions.
-* Helper-describe-bindings: Help Functions.
-* Helper-help: Help Functions.
-* Helper-help-map: Standard Keymaps.
-* hide-annotation: Annotation Properties.
-* highlight-extent: Extents and Events.
-* history list: Minibuffer History.
-* history of commands: Command History.
-* HOME environment variable: Subprocess Creation.
-* hooks: Hooks.
-* hooks for loading: Hooks for Loading.
-* hooks for text changes: Change Hooks.
-* horizontal position: Columns.
-* horizontal scrolling: Horizontal Scrolling.
-* hscroll-glyph: Redisplay Glyphs.
-* icon-glyph-p: Glyph Types.
-* iconified frame: Visibility of Frames.
-* iconify-frame: Visibility of Frames.
-* identity: Calling Functions.
-* IEEE floating point: Float Basics.
-* if: Conditionals.
-* ignore: Calling Functions.
-* ignored-local-variables: Auto Major Mode.
-* image instance type: Image Instance Type.
-* image instance types: Image Instance Types.
-* image instances: Image Instances.
-* image instantiator conversion: Image Instantiator Conversion.
-* image specifiers: Image Specifiers.
-* image-instance-background: Image Instance Functions.
-* image-instance-depth: Image Instance Functions.
-* image-instance-file-name: Image Instance Functions.
-* image-instance-foreground: Image Instance Functions.
-* image-instance-height: Image Instance Functions.
-* image-instance-hotspot-x: Image Instance Functions.
-* image-instance-hotspot-y: Image Instance Functions.
-* image-instance-mask-file-name: Image Instance Functions.
-* image-instance-name: Image Instance Functions.
-* image-instance-p: Image Instances.
-* image-instance-string: Image Instance Functions.
-* image-instance-type: Image Instance Types.
-* image-instance-type-list: Image Instance Types.
-* image-instance-width: Image Instance Functions.
-* image-instantiator-format-list: Image Specifiers.
-* image-specifier-p <1>: Image Specifiers.
-* image-specifier-p: Specifier Types.
-* implicit progn: Sequencing.
-* inc: Simple Macro.
-* indent-according-to-mode: Mode-Specific Indent.
-* indent-code-rigidly: Region Indent.
-* indent-for-tab-command: Mode-Specific Indent.
-* indent-line-function: Mode-Specific Indent.
-* indent-region: Region Indent.
-* indent-region-function: Region Indent.
-* indent-relative: Relative Indent.
-* indent-relative-maybe: Relative Indent.
-* indent-rigidly: Region Indent.
-* indent-tabs-mode: Primitive Indent.
-* indent-to: Primitive Indent.
-* indent-to-left-margin: Margins.
-* indentation: Indentation.
-* indenting with parentheses: Parsing Expressions.
-* indirect buffers: Indirect Buffers.
-* indirect specifications: Specification List.
-* indirect variables: Variable Aliases.
-* indirect-function: Function Indirection.
-* indirect-variable: Variable Aliases.
-* indirection: Function Indirection.
-* infinite loops: Infinite Loops.
-* infinite recursion: Local Variables.
-* infinity: Float Basics.
-* Info-edit-map: Standard Keymaps.
-* Info-minibuffer-history: Minibuffer History.
-* Info-mode-map: Standard Keymaps.
-* inherit: Syntax Class Table.
-* inheriting a keymap's bindings: Inheritance and Keymaps.
-* inhibit-default-init: Init File.
-* inhibit-file-name-handlers: Magic File Names.
-* inhibit-file-name-operation: Magic File Names.
-* inhibit-quit: Quitting.
-* inhibit-read-only: Read Only Buffers.
-* inhibit-startup-echo-area-message: Start-up Summary.
-* inhibit-startup-message: Start-up Summary.
-* init file: Init File.
-* initial-frame-plist: Initial Properties.
-* initial-gutter-spec: Other Gutter Variables.
-* initial-major-mode: Auto Major Mode.
-* initial-toolbar-spec: Other Toolbar Variables.
-* initialization: Start-up Summary.
-* inline functions: Inline Functions.
-* innermost containing parentheses: Parsing Expressions.
-* input events: Events.
-* input focus: Input Focus.
-* input modes: Input Modes.
-* input stream: Input Streams.
-* input-pending-p: Peeking and Discarding.
-* insert: Insertion.
-* insert-abbrev-table-description: Abbrev Tables.
-* insert-before-markers: Insertion.
-* insert-buffer: Commands for Insertion.
-* insert-buffer-substring: Insertion.
-* insert-char: Insertion.
-* insert-default-directory: Reading File Names.
-* insert-directory: Contents of Directories.
-* insert-directory-program: Contents of Directories.
-* insert-extent: Detached Extents.
-* insert-file-contents: Reading from Files.
-* insert-register: Registers.
-* insert-string: Insertion.
-* inserting killed text: Yank Commands.
-* insertion before point: Insertion.
-* insertion of text: Insertion.
-* inside comment: Parsing Expressions.
-* inside margin: Annotation Basics.
-* inside string: Parsing Expressions.
-* inst-list (in a specifier): Specifiers In-Depth.
-* inst-pair (in a specifier): Specifiers In-Depth.
-* installation-directory: System Environment.
-* instance (in a specifier): Specifiers In-Depth.
-* instancing (in a specifier): Specifiers In-Depth.
-* instantiator (in a specifier): Specifiers In-Depth.
-* int-char: Character Codes.
-* int-to-string: String Conversion.
-* integer to decimal: String Conversion.
-* integer to hexadecimal: Formatting Strings.
-* integer to octal: Formatting Strings.
-* integer to string: String Conversion.
-* integer-char-or-marker-p: Predicates on Markers.
-* integer-or-char-p: Predicates for Characters.
-* integer-or-marker-p: Predicates on Markers.
-* integer-specifier-p: Specifier Types.
-* integerp: Predicates on Numbers.
-* integers: Numbers.
-* interactive: Using Interactive.
-* interactive call: Interactive Call.
-* interactive code description: Interactive Codes.
-* interactive commands (Edebug): Instrumenting.
-* interactive completion: Interactive Codes.
-* interactive function: Defining Commands.
-* interactive, examples of using: Interactive Examples.
-* interactive-p: Interactive Call.
-* intern: Creating Symbols.
-* intern-soft: Creating Symbols.
-* internal-doc-file-name: Accessing Documentation.
-* interning: Creating Symbols.
-* interpreter: Evaluation.
-* interpreter-mode-alist: Auto Major Mode.
-* interprogram-cut-function: Low-Level Kill Ring.
-* interprogram-paste-function: Low-Level Kill Ring.
-* interrupt-process: Signals to Processes.
-* invalid function: Function Indirection.
-* invalid prefix key error: Changing Key Bindings.
-* invalid-function: Function Indirection.
-* invalid-read-syntax: Printed Representation.
-* invalid-regexp: Syntax of Regexps.
-* invert-face: Other Face Display Functions.
-* invisible frame: Visibility of Frames.
-* invisible text: Invisible Text.
-* invisible-text-glyph: Redisplay Glyphs.
-* invocation-directory: System Environment.
-* invocation-name: System Environment.
-* isearch-mode-map: Standard Keymaps.
-* ISO Latin 1: Case Tables.
-* ISO Latin-1 characters (input): Translating Input.
-* iso-syntax: Case Tables.
-* iso-transl: Translating Input.
-* italic: Font Instance Characteristics.
-* iteration: Iteration.
-* itimer-edit-map: Standard Keymaps.
-* joining lists: Rearrangement.
-* just-one-space: User-Level Deletion.
-* justify-current-line: Filling.
-* kept-new-versions: Numbered Backups.
-* kept-old-versions: Numbered Backups.
-* key: Keymap Terminology.
-* key binding: Keymap Terminology.
-* key lookup: Key Lookup.
-* key sequence: Key Sequence Input.
-* key sequence error: Changing Key Bindings.
-* key sequence input: Key Sequence Input.
-* key sequences: Key Sequences.
-* key translation function: Translating Input.
-* key-binding: Functions for Key Lookup.
-* key-description: Describing Characters.
-* key-press-event-p: Event Predicates.
-* key-translation-map: Translating Input.
-* keyboard macro execution: Interactive Call.
-* keyboard macro termination: Beeping.
-* keyboard macros: Keyboard Macros.
-* keyboard macros (Edebug): Edebug Execution Modes.
-* keyboard menu accelerators: Menu Accelerators.
-* keyboard-quit: Quitting.
-* keymap: Keymaps.
-* keymap entry: Key Lookup.
-* keymap format: Format of Keymaps.
-* keymap in keymap: Key Lookup.
-* keymap inheritance: Inheritance and Keymaps.
-* keymap parent: Inheritance and Keymaps.
-* keymap-default-binding: Inheritance and Keymaps.
-* keymap-fullness: Scanning Keymaps.
-* keymap-name: Creating Keymaps.
-* keymap-parents: Inheritance and Keymaps.
-* keymap-prompt: Other Keymap Functions.
-* keymapp: Format of Keymaps.
-* keymaps in modes: Major Mode Conventions.
-* keys in documentation strings: Keys in Documentation.
-* keystroke: Keymap Terminology.
-* keystroke command: What Is a Function.
-* keywordp: Specification List.
-* kill command repetition: Command Loop Info.
-* kill ring: The Kill Ring.
-* kill-all-local-variables: Creating Buffer-Local.
-* kill-append: Low-Level Kill Ring.
-* kill-buffer: Killing Buffers.
-* kill-buffer-hook: Killing Buffers.
-* kill-buffer-query-functions: Killing Buffers.
-* kill-emacs: Killing XEmacs.
-* kill-emacs-hook: Killing XEmacs.
-* kill-emacs-query-functions: Killing XEmacs.
-* kill-local-variable: Creating Buffer-Local.
-* kill-new: Low-Level Kill Ring.
-* kill-process: Signals to Processes.
-* kill-region: Kill Functions.
-* kill-ring: Internals of Kill Ring.
-* kill-ring-max: Internals of Kill Ring.
-* kill-ring-yank-pointer: Internals of Kill Ring.
-* killing buffers: Killing Buffers.
-* killing XEmacs: Killing XEmacs.
-* lambda expression: Lambda Expressions.
-* lambda expression in hook: Hooks.
-* lambda in debug: Invoking the Debugger.
-* lambda in keymap: Key Lookup.
-* lambda list: Lambda Components.
-* lambda-list (Edebug): Specification List.
-* lambda-list-keywordp: Specification List.
-* last-abbrev: Abbrev Expansion.
-* last-abbrev-location: Abbrev Expansion.
-* last-abbrev-text: Abbrev Expansion.
-* last-command: Command Loop Info.
-* last-command-char: Command Loop Info.
-* last-command-event: Command Loop Info.
-* last-input-char: Peeking and Discarding.
-* last-input-event: Peeking and Discarding.
-* last-kbd-macro: Keyboard Macros.
-* Latin-1 character set (input): Translating Input.
-* lax-plist-get: Working With Lax Plists.
-* lax-plist-member: Working With Lax Plists.
-* lax-plist-put: Working With Lax Plists.
-* lax-plist-remprop: Working With Lax Plists.
-* lax-plists-eq: Working With Lax Plists.
-* lax-plists-equal: Working With Lax Plists.
-* layout policy: Annotation Basics.
-* layout types: Annotation Basics.
-* lazy loading: Dynamic Loading.
-* LDAP: LDAP Support.
-* ldap-close: Opening and Closing a LDAP Connection.
-* ldap-default-base: LDAP Variables.
-* ldap-default-host: LDAP Variables.
-* ldap-default-port: LDAP Variables.
-* ldap-host: The LDAP Lisp Object.
-* ldap-host-parameters-alist: LDAP Variables.
-* ldap-live-p: The LDAP Lisp Object.
-* ldap-open: Opening and Closing a LDAP Connection.
-* ldap-search: The High-Level LDAP API.
-* ldap-search-internal: Searching on a LDAP Server (Low-level).
-* ldapp: The LDAP Lisp Object.
-* left-gutter: Specifying a Gutter.
-* left-gutter-visible-p: Other Gutter Variables.
-* left-gutter-width: Other Gutter Variables.
-* left-margin: Margins.
-* left-margin-width: Margin Primitives.
-* left-toolbar: Specifying the Toolbar.
-* left-toolbar-visible-p: Other Toolbar Variables.
-* left-toolbar-width: Other Toolbar Variables.
-* length: Sequence Functions.
-* let: Local Variables.
-* let*: Local Variables.
-* let-specifier: Adding Specifications.
-* lexical binding (Edebug): Edebug Eval.
-* lexical comparison: Text Comparison.
-* library: Loading.
-* library compilation: Compilation Functions.
-* library header comments: Library Headers.
-* line wrapping: Truncation.
-* lines: Text Lines.
-* lines in region: Text Lines.
-* linking files: Changing File Attributes.
-* Lisp debugger: Debugger.
-* Lisp expression motion: List Motion.
-* Lisp history: Lisp History.
-* Lisp library: Loading.
-* Lisp nesting error: Eval.
-* Lisp object: Lisp Data Types.
-* Lisp printer: Output Functions.
-* Lisp reader: Streams Intro.
-* lisp-interaction-mode-map: Standard Keymaps.
-* lisp-mode-abbrev-table: Standard Abbrev Tables.
-* lisp-mode-map: Standard Keymaps.
-* lisp-mode.el: Example Major Modes.
-* list <1>: Building Lists.
-* list: Lists.
-* list elements: List Elements.
-* list form evaluation: Classifying Lists.
-* list in keymap: Key Lookup.
-* list length: Sequence Functions.
-* list motion: List Motion.
-* list structure: Cons Cells.
-* list-buffers: The Buffer List.
-* list-buffers-directory: Buffer File Name.
-* list-fonts: Font Instance Names.
-* list-processes: Process Information.
-* listp: List-related Predicates.
-* lists and cons cells: Cons Cells.
-* lists as sets: Sets And Lists.
-* lists represented as boxes: Lists as Boxes.
-* literal evaluation: Self-Evaluating Forms.
-* lmessage: The Echo Area.
-* ln: Changing File Attributes.
-* load: How Programs Do Loading.
-* load error with require: Named Features.
-* load errors: How Programs Do Loading.
-* load-average: System Environment.
-* load-default-sounds: Beeping.
-* load-history: Unloading.
-* load-ignore-elc-files: How Programs Do Loading.
-* load-in-progress: How Programs Do Loading.
-* load-path: How Programs Do Loading.
-* load-read-function: How Programs Do Loading.
-* load-sound-file: Beeping.
-* load-warn-when-source-newer: How Programs Do Loading.
-* load-warn-when-source-only: How Programs Do Loading.
-* loading: Loading.
-* loading hooks: Hooks for Loading.
-* loadup.el: Building XEmacs.
-* local binding: Local Variables.
-* local keymap: Active Keymaps.
-* local variables: Local Variables.
-* local-abbrev-table: Standard Abbrev Tables.
-* local-key-binding: Functions for Key Lookup.
-* local-set-key: Key Binding Commands.
-* local-unset-key: Key Binding Commands.
-* local-variable-p: Creating Buffer-Local.
-* local-write-file-hooks: Saving Buffers.
-* locale (in a specifier): Specifiers In-Depth.
-* locate-file: How Programs Do Loading.
-* locate-file-clear-hashing: How Programs Do Loading.
-* lock-buffer: File Locks.
-* log: Math Functions.
-* log-message-ignore-labels: The Echo Area.
-* log-message-ignore-regexps: The Echo Area.
-* log-message-max-size: The Echo Area.
-* log-warning-minimum-level: Warnings.
-* log-warning-suppressed-classes: Warnings.
-* log10: Math Functions.
-* logand: Bitwise Operations.
-* logb: Float Basics.
-* logical and: Bitwise Operations.
-* logical exclusive or: Bitwise Operations.
-* logical inclusive or: Bitwise Operations.
-* logical not: Bitwise Operations.
-* logical shift: Bitwise Operations.
-* logior: Bitwise Operations.
-* lognot: Bitwise Operations.
-* logxor: Bitwise Operations.
-* looking-at: Regexp Search.
-* lookup-key: Functions for Key Lookup.
-* loops, infinite: Infinite Loops.
-* lower case: Character Case.
-* lower-frame: Raising and Lowering.
-* lowering a frame: Raising and Lowering.
-* lsh: Bitwise Operations.
-* lwarn: Warnings.
-* M-x: Interactive Call.
-* Maclisp: Lisp History.
-* macro: What Is a Function.
-* macro argument evaluation: Argument Evaluation.
-* macro call: Expansion.
-* macro call evaluation: Macro Forms.
-* macro compilation: Compilation Functions.
-* macro descriptions: A Sample Function Description.
-* macro expansion: Expansion.
-* macroexpand: Expansion.
-* macros: Macros.
-* magic file names: Magic File Names.
-* mail-host-address: System Environment.
-* major mode: Major Modes.
-* major mode hook: Major Mode Conventions.
-* major mode keymap: Active Keymaps.
-* major-mode: Mode Help.
-* make-abbrev-table: Abbrev Tables.
-* make-annotation: Annotation Primitives.
-* make-auto-save-file-name: Auto-Saving.
-* make-backup-file-name: Backup Names.
-* make-backup-files: Making Backups.
-* make-bit-vector: Bit Vector Functions.
-* make-byte-code: Compiled-Function Objects.
-* make-char: MULE Characters.
-* make-char-table: Working With Char Tables.
-* make-charset: Basic Charset Functions.
-* make-coding-system: Basic Coding System Functions.
-* make-composite-char: Composite Characters.
-* make-device: Connecting to a Console or Device.
-* make-directory: Create/Delete Dirs.
-* make-display-table: Display Table Format.
-* make-event: Working With Events.
-* make-extent: Creating and Modifying Extents.
-* make-face: Basic Face Functions.
-* make-file-part: Creating a Partial File.
-* make-font-instance: Font Instances.
-* make-frame: Creating Frames.
-* make-frame-invisible: Visibility of Frames.
-* make-frame-visible: Visibility of Frames.
-* make-glyph: Creating Glyphs.
-* make-glyph-internal: Creating Glyphs.
-* make-hash-table: Introduction to Hash Tables.
-* make-icon-glyph: Creating Glyphs.
-* make-image-instance: Image Instance Functions.
-* make-image-specifier: Image Specifiers.
-* make-indirect-buffer: Indirect Buffers.
-* make-keymap: Creating Keymaps.
-* make-list: Building Lists.
-* make-local-hook: Hooks.
-* make-local-variable: Creating Buffer-Local.
-* make-marker: Creating Markers.
-* make-obsolete: Obsoleteness.
-* make-obsolete-variable: Obsoleteness.
-* make-pointer-glyph: Creating Glyphs.
-* make-range-table: Introduction to Range Tables.
-* make-reverse-direction-charset: Basic Charset Functions.
-* make-sparse-keymap: Creating Keymaps.
-* make-specifier: Creating Specifiers.
-* make-specifier-and-init: Creating Specifiers.
-* make-string: Creating Strings.
-* make-symbol: Creating Symbols.
-* make-symbolic-link: Changing File Attributes.
-* make-syntax-table: Syntax Table Functions.
-* make-temp-name: Unique File Names.
-* make-tooltalk-message: Elisp Interface for Sending Messages.
-* make-tooltalk-pattern: Elisp Interface for Receiving Messages.
-* make-tty-device: Connecting to a Console or Device.
-* make-variable-buffer-local: Creating Buffer-Local.
-* make-vector: Vector Functions.
-* make-weak-list: Weak Lists.
-* make-x-device: Connecting to a Console or Device.
-* makunbound: Void Variables.
-* Manual-page-minibuffer-history: Minibuffer History.
-* map-char-table: Working With Char Tables.
-* map-database: Working With a Database.
-* map-extent-children: Mapping Over Extents.
-* map-extents: Mapping Over Extents.
-* map-frame-hook: Frame Hooks.
-* map-keymap: Scanning Keymaps.
-* map-range-table: Working With Range Tables.
-* map-specifier: Other Specification Functions.
-* map-y-or-n-p: Multiple Queries.
-* mapatoms: Creating Symbols.
-* mapcar: Mapping Functions.
-* mapcar-extents: Mapping Over Extents.
-* mapconcat: Mapping Functions.
-* maphash: Working With Hash Tables.
-* mapping functions: Mapping Functions.
-* margin: Annotation Basics.
-* margin width: Margin Primitives.
-* mark: The Mark.
-* mark excursion: Excursions.
-* mark ring: The Mark.
-* mark, the: The Mark.
-* mark-marker: The Mark.
-* mark-ring: The Mark.
-* mark-ring-max: The Mark.
-* marker argument: Interactive Codes.
-* marker garbage collection: Overview of Markers.
-* marker input stream: Input Streams.
-* marker output stream: Output Streams.
-* marker relocation: Overview of Markers.
-* marker-buffer: Information from Markers.
-* marker-position: Information from Markers.
-* markerp: Predicates on Markers.
-* markers: Markers.
-* markers as numbers: Overview of Markers.
-* markers vs. extents: Overview of Markers.
-* match data: Match Data.
-* match-beginning: Simple Match Data.
-* match-data: Entire Match Data.
-* match-end: Simple Match Data.
-* match-string: Simple Match Data.
-* mathematical functions: Math Functions.
-* max: Comparison of Numbers.
-* max-lisp-eval-depth: Eval.
-* max-specpdl-size: Local Variables.
-* md5: Transformations.
-* MD5 digests: Transformations.
-* member: Sets And Lists.
-* membership in a list: Sets And Lists.
-* memory allocation: Garbage Collection.
-* memory-limit: Garbage Collection.
-* memq: Sets And Lists.
-* menu: Menus.
-* menu accelerators: Menu Accelerators.
-* menu filters: Menu Filters.
-* menu format: Menu Format.
-* menu-accelerator-enabled: Menu Accelerator Functions.
-* menu-accelerator-map: Menu Accelerator Functions.
-* menu-accelerator-modifiers: Menu Accelerator Functions.
-* menu-accelerator-prefix: Menu Accelerator Functions.
-* menu-no-selection-hook: Menubar.
-* menubar: Menubar.
-* menubar format: Menubar Format.
-* menubar-configuration: Menu Format.
-* menubar-pointer-glyph: Mouse Pointer.
-* menubar-show-keybindings: Menubar.
-* message: The Echo Area.
-* meta character printing: Describing Characters.
-* meta-prefix-char: Functions for Key Lookup.
-* min: Comparison of Numbers.
-* minibuffer: Minibuffers.
-* minibuffer history: Minibuffer History.
-* minibuffer input: Recursive Editing.
-* minibuffer window: Cyclic Window Ordering.
-* minibuffer-complete: Completion Commands.
-* minibuffer-complete-and-exit: Completion Commands.
-* minibuffer-complete-word: Completion Commands.
-* minibuffer-completion-confirm: Completion Commands.
-* minibuffer-completion-help: Completion Commands.
-* minibuffer-completion-predicate: Completion Commands.
-* minibuffer-completion-table: Completion Commands.
-* minibuffer-depth: Minibuffer Misc.
-* minibuffer-exit-hook: Minibuffer Misc.
-* minibuffer-frame-plist: Initial Properties.
-* minibuffer-help-form: Minibuffer Misc.
-* minibuffer-history: Minibuffer History.
-* minibuffer-local-completion-map <1>: Standard Keymaps.
-* minibuffer-local-completion-map: Completion Commands.
-* minibuffer-local-isearch-map: Standard Keymaps.
-* minibuffer-local-map <1>: Standard Keymaps.
-* minibuffer-local-map: Text from Minibuffer.
-* minibuffer-local-must-match-map <1>: Standard Keymaps.
-* minibuffer-local-must-match-map: Completion Commands.
-* minibuffer-prompt: Minibuffer Misc.
-* minibuffer-prompt-width: Minibuffer Misc.
-* minibuffer-scroll-window: Minibuffer Misc.
-* minibuffer-setup-hook: Minibuffer Misc.
-* minibuffer-window: Minibuffer Misc.
-* minibuffer-window-active-p: Minibuffer Misc.
-* minimum window size: Resizing Windows.
-* minor mode: Minor Modes.
-* minor mode conventions: Minor Mode Conventions.
-* minor-mode-alist: Modeline Variables.
-* minor-mode-key-binding: Functions for Key Lookup.
-* minor-mode-map-alist: Active Keymaps.
-* misc-user-event-p: Event Predicates.
-* mod: Arithmetic Operations.
-* mode: Modes.
-* mode help: Mode Help.
-* mode hook: Major Mode Conventions.
-* mode loading: Major Mode Conventions.
-* mode variable: Minor Mode Conventions.
-* mode-class property: Major Mode Conventions.
-* mode-name: Modeline Variables.
-* mode-popup-menu: Pop-Up Menus.
-* mode-specific-map <1>: Standard Keymaps.
-* mode-specific-map: Prefix Keys.
-* modeline: Modeline Format.
-* modeline construct: Modeline Data.
-* modeline-buffer-identification: Modeline Variables.
-* modeline-format: Modeline Data.
-* modeline-map <1>: Standard Keymaps.
-* modeline-map: Active Keymaps.
-* modeline-modified: Modeline Variables.
-* modeline-pointer-glyph: Mouse Pointer.
-* modeline-process: Modeline Variables.
-* modification flag (of buffer): Buffer Modification.
-* modification of lists: Rearrangement.
-* modification time, comparison of: Modification Time.
-* modify-syntax-entry: Syntax Table Functions.
-* modulus: Arithmetic Operations.
-* momentary-string-display: Temporary Displays.
-* mono-pixmap-image-instance-p: Image Instance Types.
-* motion-event-p: Event Predicates.
-* mouse cursor: Mouse Pointer.
-* mouse pointer: Mouse Pointer.
-* mouse-event-p: Event Predicates.
-* mouse-grabbed-buffer: Active Keymaps.
-* mouse-highlight-priority: Extents and Events.
-* move-marker: Changing Markers.
-* move-to-column: Columns.
-* move-to-left-margin: Margins.
-* move-to-window-line: Screen Lines.
-* MS-DOS and file modes: Changing File Attributes.
-* MS-DOS file types: Files and MS-DOS.
-* MSWindows OLE: MSWindows OLE.
-* multilingual string formatting: Formatting Strings.
-* multiple windows: Basic Windows.
-* named function: Function Names.
-* NaN: Float Basics.
-* narrow-to-page: Narrowing.
-* narrow-to-region: Narrowing.
-* narrowing: Narrowing.
-* natnum-specifier-p: Specifier Types.
-* natnump: Predicates on Numbers.
-* natural numbers: Predicates on Numbers.
-* nconc: Rearrangement.
-* negative infinity: Float Basics.
-* negative-argument: Prefix Command Arguments.
-* network connection: Network.
-* new file message: Subroutines of Visiting.
-* newline <1>: Commands for Insertion.
-* newline: Character Type.
-* newline and Auto Fill mode: Commands for Insertion.
-* newline in print: Output Functions.
-* newline in strings: String Type.
-* newline-and-indent: Mode-Specific Indent.
-* next input: Peeking and Discarding.
-* next-command-event: Reading One Event.
-* next-event: Reading One Event.
-* next-extent: Finding Extents.
-* next-frame: Finding All Frames.
-* next-history-element: Minibuffer Misc.
-* next-matching-history-element: Minibuffer Misc.
-* next-property-change: Property Search.
-* next-screen-context-lines: Vertical Scrolling.
-* next-single-property-change: Property Search.
-* next-window: Cyclic Window Ordering.
-* nil: Constant Variables.
-* nil and lists: Cons Cells.
-* nil in keymap: Key Lookup.
-* nil in lists: Cons Cell Type.
-* nil input stream: Input Streams.
-* nil output stream: Output Streams.
-* nil, uses of: nil and t.
-* ninth: List Elements.
-* nlistp: List-related Predicates.
-* no-catch: Catch and Throw.
-* no-redraw-on-reenter: Refresh Screen.
-* nondirectory part (of file name): File Name Components.
-* noninteractive: Batch Mode.
-* noninteractive use: Batch Mode.
-* nonlocal exits: Nonlocal Exits.
-* nonprinting characters, reading: Quoted Character Input.
-* nontext-pointer-glyph: Mouse Pointer.
-* normal-mode: Auto Major Mode.
-* not: Combining Conditions.
-* not-modified: Buffer Modification.
-* nothing-image-instance-p: Image Instance Types.
-* nreverse: Rearrangement.
-* nth: List Elements.
-* nthcdr: List Elements.
-* null: List-related Predicates.
-* number equality: Comparison of Numbers.
-* number-char-or-marker-p: Predicates on Markers.
-* number-or-marker-p: Predicates on Markers.
-* number-to-string: String Conversion.
-* numberp: Predicates on Numbers.
-* numbers: Numbers.
-* numeric prefix: Formatting Strings.
-* numeric prefix argument: Prefix Command Arguments.
-* numeric prefix argument usage: Interactive Codes.
-* obarray: Creating Symbols.
-* obarray in completion: Basic Completion.
-* objc-mode-map: Standard Keymaps.
-* object: Lisp Data Types.
-* object to string: Output Functions.
-* object-plist: Object Plists.
-* oblique: Font Instance Characteristics.
-* obsolete buffer: Modification Time.
-* occur-mode-map: Standard Keymaps.
-* octal character code: Character Type.
-* octal character input: Quoted Character Input.
-* octal-escape-glyph: Redisplay Glyphs.
-* OffiX DND: OffiX DND.
-* old-eq: Equality Predicates.
-* one-window-p: Splitting Windows.
-* only-global-abbrevs: Defining Abbrevs.
-* open-database: Connecting to a Database.
-* open-dribble-file: Recording Input.
-* open-network-stream: Network.
-* open-termscript: Terminal Output.
-* open parenthesis character: Syntax Class Table.
-* operating system environment: System Environment.
-* option descriptions: A Sample Variable Description.
-* optional arguments: Argument List.
-* options on command line: Command Line Arguments.
-* or: Combining Conditions.
-* order of extents: Extent Endpoints.
-* ordering of windows, cyclic: Cyclic Window Ordering.
-* other-buffer: The Buffer List.
-* other-window: Cyclic Window Ordering.
-* other-window-scroll-buffer: Vertical Scrolling.
-* Outline mode: Substitution.
-* output from processes: Output from Processes.
-* output stream: Output Streams.
-* outside margin: Annotation Basics.
-* overflow: Integer Basics.
-* overlay arrow: Overlay Arrow.
-* overlay-arrow-position: Overlay Arrow.
-* overlay-arrow-string: Overlay Arrow.
-* overriding-local-map <1>: Standard Keymaps.
-* overriding-local-map: Active Keymaps.
-* overriding-terminal-local-map: Active Keymaps.
-* overwrite-mode: Commands for Insertion.
-* padding: Formatting Strings.
-* page-delimiter: Standard Regexps.
-* paired delimiter: Syntax Class Table.
-* paragraph-separate: Standard Regexps.
-* paragraph-start: Standard Regexps.
-* parent of a keymap: Inheritance and Keymaps.
-* parent process: Processes.
-* parent, of extent: Extent Parents.
-* parenthesis: Cons Cell Type.
-* parenthesis depth: Parsing Expressions.
-* parenthesis matching: Blinking.
-* parenthesis syntax: Syntax Class Table.
-* parse state: Parsing Expressions.
-* parse-partial-sexp: Parsing Expressions.
-* parse-sexp-ignore-comments: Parsing Expressions.
-* parsing: Syntax Tables.
-* partial files: Partial Files.
-* passwd-echo: Reading a Password.
-* passwd-invert-frame-when-keyboard-grabbed: Reading a Password.
-* passwords, reading: Reading a Password.
-* PATH environment variable: Subprocess Creation.
-* path-separator: System Environment.
-* pausing: Waiting.
-* peeking at input: Peeking and Discarding.
-* percent symbol in modeline: Modeline Data.
-* perform-replace: Search and Replace.
-* performance analysis: Coverage Testing.
-* permanent local variable: Creating Buffer-Local.
-* permission: File Attributes.
-* pg-coding-system: libpq Lisp Variables.
-* pg:authtype: libpq Lisp Variables.
-* pg:client-encoding: libpq Lisp Variables.
-* pg:cost-heap: libpq Lisp Variables.
-* pg:cost-index: libpq Lisp Variables.
-* pg:database: libpq Lisp Variables.
-* pg:date-style: libpq Lisp Variables.
-* pg:geqo: libpq Lisp Variables.
-* pg:host: libpq Lisp Variables.
-* pg:options: libpq Lisp Variables.
-* pg:port: libpq Lisp Variables.
-* pg:realm: libpq Lisp Variables.
-* pg:tty: libpq Lisp Variables.
-* pg:tz: libpq Lisp Variables.
-* pg:user: libpq Lisp Variables.
-* pgres::polling-active: libpq Lisp Symbols and DataTypes.
-* pgres::polling-failed: libpq Lisp Symbols and DataTypes.
-* pgres::polling-ok: libpq Lisp Symbols and DataTypes.
-* pgres::polling-reading: libpq Lisp Symbols and DataTypes.
-* pgres::polling-writing: libpq Lisp Symbols and DataTypes.
-* pipes: Asynchronous Processes.
-* play-sound: Beeping.
-* play-sound-file: Beeping.
-* plist: Property Lists.
-* plist, symbol: Symbol Properties.
-* plist-get: Working With Normal Plists.
-* plist-member: Working With Normal Plists.
-* plist-put: Working With Normal Plists.
-* plist-remprop: Working With Normal Plists.
-* plist-to-alist: Converting Plists To/From Alists.
-* plists-eq <1>: Other Plists.
-* plists-eq: Working With Normal Plists.
-* plists-equal <1>: Other Plists.
-* plists-equal: Working With Normal Plists.
-* point: Point.
-* point excursion: Excursions.
-* point in window: Window Point.
-* point with narrowing: Point.
-* point-marker: Creating Markers.
-* point-max: Point.
-* point-max-marker: Creating Markers.
-* point-min: Point.
-* point-min-marker: Creating Markers.
-* pointer (mouse): Mouse Pointer.
-* pointer-glyph-p: Glyph Types.
-* pointer-image-instance-p: Image Instance Types.
-* pop-global-mark: The Mark.
-* pop-mark: The Mark.
-* pop-to-buffer: Displaying Buffers.
-* pop-up menu: Pop-Up Menus.
-* pop-up-frame-function: Choosing Window.
-* pop-up-frame-plist: Choosing Window.
-* pop-up-frames: Choosing Window.
-* pop-up-windows: Choosing Window.
-* popup-buffer-menu: Pop-Up Menus.
-* popup-dialog-box: Dialog Box Functions.
-* popup-menu: Pop-Up Menus.
-* popup-menu-titles: Pop-Up Menus.
-* popup-menu-up-p: Pop-Up Menus.
-* popup-menubar-menu: Pop-Up Menus.
-* popup-mode-menu: Pop-Up Menus.
-* pos-visible-in-window-p: Window Start.
-* position (in buffer): Positions.
-* position argument: Interactive Codes.
-* position in window: Window Point.
-* position of frame: Size and Position.
-* position of window: Position of Window.
-* positive infinity: Float Basics.
-* posix-looking-at: POSIX Regexps.
-* posix-search-backward: POSIX Regexps.
-* posix-search-forward: POSIX Regexps.
-* posix-string-match: POSIX Regexps.
-* post-command-hook: Command Overview.
-* post-gc-hook: Garbage Collection.
-* PostgreSQL: PostgreSQL Support.
-* pq-binary-tuples: libpq Lisp Symbols and DataTypes.
-* pq-clear: Other libpq Functions.
-* pq-client-encoding: Other libpq Functions.
-* pq-cmd-status: libpq Lisp Symbols and DataTypes.
-* pq-cmd-tuples: libpq Lisp Symbols and DataTypes.
-* pq-conn-defaults: Other libpq Functions.
-* pq-connect-poll: Asynchronous Interface Functions.
-* pq-connect-start: Asynchronous Interface Functions.
-* pq-connectdb: Synchronous Interface Functions.
-* pq-consume-input: Asynchronous Interface Functions.
-* pq-env-2-encoding: Other libpq Functions.
-* pq-exec: Synchronous Interface Functions.
-* pq-finish: Other libpq Functions.
-* pq-flush: Asynchronous Interface Functions.
-* pq-fmod: libpq Lisp Symbols and DataTypes.
-* pq-fname: libpq Lisp Symbols and DataTypes.
-* pq-fnumber: libpq Lisp Symbols and DataTypes.
-* pq-fsize: libpq Lisp Symbols and DataTypes.
-* pq-ftype: libpq Lisp Symbols and DataTypes.
-* pq-get-is-null: libpq Lisp Symbols and DataTypes.
-* pq-get-length: libpq Lisp Symbols and DataTypes.
-* pq-get-result: Asynchronous Interface Functions.
-* pq-get-value: libpq Lisp Symbols and DataTypes.
-* pq-is-busy: Asynchronous Interface Functions.
-* pq-is-nonblocking: Asynchronous Interface Functions.
-* pq-lo-close: Unimplemented libpq Functions.
-* pq-lo-creat: Unimplemented libpq Functions.
-* pq-lo-export: Large Object Support.
-* pq-lo-import: Large Object Support.
-* pq-lo-lseek: Unimplemented libpq Functions.
-* pq-lo-open: Unimplemented libpq Functions.
-* pq-lo-read: Unimplemented libpq Functions.
-* pq-lo-tell: Unimplemented libpq Functions.
-* pq-lo-unlink: Unimplemented libpq Functions.
-* pq-lo-write: Unimplemented libpq Functions.
-* pq-make-empty-pgresult: libpq Lisp Symbols and DataTypes.
-* pq-nfields: libpq Lisp Symbols and DataTypes.
-* pq-notifies: Synchronous Interface Functions.
-* pq-ntuples: libpq Lisp Symbols and DataTypes.
-* pq-oid-value: libpq Lisp Symbols and DataTypes.
-* pq-pgconn: libpq Lisp Symbols and DataTypes.
-* pq-res-status: libpq Lisp Symbols and DataTypes.
-* pq-reset: Synchronous Interface Functions.
-* pq-reset-cancel: Asynchronous Interface Functions.
-* pq-reset-poll: Asynchronous Interface Functions.
-* pq-reset-start: Asynchronous Interface Functions.
-* pq-result-error-message: libpq Lisp Symbols and DataTypes.
-* pq-result-status: libpq Lisp Symbols and DataTypes.
-* pq-send-query: Asynchronous Interface Functions.
-* pq-set-client-encoding: Other libpq Functions.
-* pq-set-nonblocking: Asynchronous Interface Functions.
-* PQdisplayTuples: Unimplemented libpq Functions.
-* PQmblen: Unimplemented libpq Functions.
-* PQprint: Unimplemented libpq Functions.
-* PQprintTuples: Unimplemented libpq Functions.
-* PQsetenv: Synchronous Interface Functions.
-* PQsetenvAbort: Asynchronous Interface Functions.
-* PQsetenvPoll: Asynchronous Interface Functions.
-* PQsetenvStart: Asynchronous Interface Functions.
-* PQsocket: Unimplemented libpq Functions.
-* PQtrace: Unimplemented libpq Functions.
-* PQuntrace: Unimplemented libpq Functions.
-* pre-abbrev-expand-hook: Abbrev Expansion.
-* pre-command-hook: Command Overview.
-* pre-gc-hook: Garbage Collection.
-* preceding-char: Near Point.
-* precision of formatted numbers: Formatting Strings.
-* predicates: Type Predicates.
-* prefix argument: Prefix Command Arguments.
-* prefix argument unreading: Peeking and Discarding.
-* prefix command: Prefix Keys.
-* prefix key: Prefix Keys.
-* prefix-arg: Prefix Command Arguments.
-* prefix-help-command: Help Functions.
-* prefix-numeric-value: Prefix Command Arguments.
-* preventing backtracking: Specification List.
-* preventing prefix key: Key Lookup.
-* previous complete subexpression: Parsing Expressions.
-* previous-extent: Finding Extents.
-* previous-frame: Finding All Frames.
-* previous-history-element: Minibuffer Misc.
-* previous-matching-history-element: Minibuffer Misc.
-* previous-property-change: Property Search.
-* previous-single-property-change: Property Search.
-* previous-window: Cyclic Window Ordering.
-* primitive: What Is a Function.
-* primitive type: Lisp Data Types.
-* primitive types: Primitive Types.
-* primitive-undo: Undo.
-* prin1: Output Functions.
-* prin1-to-string: Output Functions.
-* princ: Output Functions.
-* print: Output Functions.
-* print example: Output Streams.
-* print name cell: Symbol Components.
-* print-escape-newlines: Output Variables.
-* print-gensym: Output Variables.
-* print-help-return-message: Help Functions.
-* print-length: Output Variables.
-* print-level: Output Variables.
-* print-readably <1>: Output Variables.
-* print-readably: Printing in Edebug.
-* print-string-length: Output Variables.
-* printed representation: Printed Representation.
-* printed representation for characters: Character Type.
-* printing: Streams Intro.
-* printing (Edebug): Printing in Edebug.
-* printing circular structures: Printing in Edebug.
-* printing floating-point numbers: Output Variables.
-* printing limits: Output Variables.
-* printing notation: Printing Notation.
-* printing readably: Output Variables.
-* printing uninterned symbols: Output Variables.
-* priority of an extent: Intro to Extents.
-* process: Processes.
-* process filter: Filter Functions.
-* process input: Input to Processes.
-* process output: Output from Processes.
-* process sentinel: Sentinels.
-* process signals: Signals to Processes.
-* process window size: Process Window Size.
-* process-buffer: Process Buffers.
-* process-command: Process Information.
-* process-connection-type: Asynchronous Processes.
-* process-environment: System Environment.
-* process-event-p: Event Predicates.
-* process-exit-status: Process Information.
-* process-filter: Filter Functions.
-* process-id: Process Information.
-* process-kill-without-query: Deleting Processes.
-* process-kill-without-query-p: Process Information.
-* process-list: Process Information.
-* process-mark: Process Buffers.
-* process-name: Process Information.
-* process-send-eof: Input to Processes.
-* process-send-region: Input to Processes.
-* process-send-string: Input to Processes.
-* process-sentinel: Sentinels.
-* process-status: Process Information.
-* process-tty-name: Process Information.
-* processp: Processes.
-* profile.el: Compilation Tips.
-* profiling: Compilation Tips.
-* prog1: Sequencing.
-* prog2: Sequencing.
-* progn: Sequencing.
-* program arguments: Subprocess Creation.
-* program directories: Subprocess Creation.
-* programmed completion: Programmed Completion.
-* programming types: Programming Types.
-* properties of strings: String Properties.
-* properties of text: Text Properties.
-* property list: Property Lists.
-* property list cell (symbol): Symbol Components.
-* property list, symbol: Symbol Properties.
-* property lists vs association lists: Plists and Alists.
-* property of an extent: Extent Properties.
-* protected forms: Cleanups.
-* provide: Named Features.
-* providing features: Named Features.
-* PTYs: Asynchronous Processes.
-* punctuation character: Syntax Class Table.
-* pure storage: Pure Storage.
-* pure-bytes-used: Pure Storage.
-* purecopy: Pure Storage.
-* purify-flag: Pure Storage.
-* push-mark: The Mark.
-* put: Object Plists.
-* put-char-table: Working With Char Tables.
-* put-database: Working With a Database.
-* put-range-table: Working With Range Tables.
-* put-text-property: Changing Properties.
-* putf: Other Plists.
-* puthash: Working With Hash Tables.
-* query-replace-history: Minibuffer History.
-* query-replace-map <1>: Standard Keymaps.
-* query-replace-map: Search and Replace.
-* querying the user: Yes-or-No Queries.
-* question mark in character constant: Character Type.
-* quietly-read-abbrev-file: Abbrev Files.
-* quit-flag: Quitting.
-* quit-process: Signals to Processes.
-* quitting: Quitting.
-* quitting from infinite loop: Infinite Loops.
-* quote: Quoting.
-* quote character: Parsing Expressions.
-* quoted character input: Quoted Character Input.
-* quoted-insert suppression: Changing Key Bindings.
-* quoting: Quoting.
-* quoting characters in printing: Output Functions.
-* quoting using apostrophe: Quoting.
-* raise-frame: Raising and Lowering.
-* raising a frame: Raising and Lowering.
-* random: Random Numbers.
-* random numbers: Random Numbers.
-* range table type: Range Table Type.
-* Range Tables: Range Tables.
-* range-table-p: Range Tables.
-* rassoc: Association Lists.
-* rassq: Association Lists.
-* raw prefix argument: Prefix Command Arguments.
-* raw prefix argument usage: Interactive Codes.
-* re-search-backward: Regexp Search.
-* re-search-forward: Regexp Search.
-* read: Input Functions.
-* read command name: Interactive Call.
-* read syntax: Printed Representation.
-* read syntax for characters: Character Type.
-* read-buffer: High-Level Completion.
-* read-char: Reading One Event.
-* read-command: High-Level Completion.
-* read-expression: Object from Minibuffer.
-* read-expression-history: Minibuffer History.
-* read-expression-map: Standard Keymaps.
-* read-file-name: Reading File Names.
-* read-from-minibuffer: Text from Minibuffer.
-* read-from-string: Input Functions.
-* read-key-sequence: Key Sequence Input.
-* read-minibuffer: Object from Minibuffer.
-* read-only buffer: Read Only Buffers.
-* read-only buffers in interactive: Using Interactive.
-* read-passwd: Reading a Password.
-* read-quoted-char: Quoted Character Input.
-* read-quoted-char quitting: Quitting.
-* read-shell-command-map: Standard Keymaps.
-* read-string: Text from Minibuffer.
-* read-variable: High-Level Completion.
-* reading: Streams Intro.
-* reading (Edebug): Reading in Edebug.
-* reading interactive arguments: Interactive Codes.
-* reading symbols: Creating Symbols.
-* rearrangement of lists: Rearrangement.
-* rebinding: Changing Key Bindings.
-* receiving ToolTalk messages: Receiving Messages.
-* recent-auto-save-p: Auto-Saving.
-* recent-keys: Recording Input.
-* recent-keys-ring-size: Recording Input.
-* recenter: Vertical Scrolling.
-* record command history: Interactive Call.
-* recursion: Iteration.
-* recursion-depth: Recursive Editing.
-* recursive command loop: Recursive Editing.
-* recursive editing level: Recursive Editing.
-* recursive evaluation: Intro Eval.
-* recursive-edit: Recursive Editing.
-* redo: Undo.
-* redraw-display: Refresh Screen.
-* redraw-frame: Refresh Screen.
-* redraw-modeline: Modeline Format.
-* refresh display: Refresh Screen.
-* regexp: Regular Expressions.
-* regexp alternative: Syntax of Regexps.
-* regexp grouping: Syntax of Regexps.
-* regexp searching: Regexp Search.
-* regexp-history: Minibuffer History.
-* regexp-quote: Syntax of Regexps.
-* regexps used standardly in editing: Standard Regexps.
-* region argument: Interactive Codes.
-* region, the: The Region.
-* region-active-p: The Region.
-* region-beginning: The Region.
-* region-end: The Region.
-* region-exists-p: The Region.
-* register-alist: Registers.
-* register-ccl-program: Calling CCL.
-* register-tooltalk-pattern: Elisp Interface for Receiving Messages.
-* registers: Registers.
-* regular expression: Regular Expressions.
-* regular expression searching: Regexp Search.
-* reindent-then-newline-and-indent: Mode-Specific Indent.
-* relabel-menu-item: Modifying Menus.
-* relative file name: Relative File Names.
-* remainder: Arithmetic Operations.
-* remassoc: Association Lists.
-* remassq: Association Lists.
-* remhash: Working With Hash Tables.
-* remove-database: Working With a Database.
-* remove-face-property: Face Properties.
-* remove-glyph-property: Glyph Properties.
-* remove-hook: Hooks.
-* remove-range-table: Working With Range Tables.
-* remove-specifier: Other Specification Functions.
-* remove-text-properties: Changing Properties.
-* remprop: Object Plists.
-* remrassoc: Association Lists.
-* remrassq: Association Lists.
-* rename-auto-save-file: Auto-Saving.
-* rename-buffer: Buffer Names.
-* rename-file: Changing File Attributes.
-* renaming files: Changing File Attributes.
-* repeated loading: Repeated Loading.
-* replace bindings: Changing Key Bindings.
-* replace characters: Substitution.
-* replace-buffer-in-windows: Displaying Buffers.
-* replace-match: Replacing Match.
-* replacement: Search and Replace.
-* repositioning format arguments: Formatting Strings.
-* require: Named Features.
-* require-final-newline: Saving Buffers.
-* requiring features: Named Features.
-* reset-char-table: Working With Char Tables.
-* resize redisplay: Size and Position.
-* rest arguments: Argument List.
-* restriction (in a buffer): Narrowing.
-* resume (cf. no-redraw-on-reenter): Refresh Screen.
-* return: Character Type.
-* return-tooltalk-message: Elisp Interface for Sending Messages.
-* reveal-annotation: Annotation Properties.
-* reverse: Building Lists.
-* reversing a list: Rearrangement.
-* revert-buffer: Reverting.
-* revert-buffer-function: Reverting.
-* revert-buffer-insert-file-contents-function: Reverting.
-* right-gutter: Specifying a Gutter.
-* right-gutter-visible-p: Other Gutter Variables.
-* right-gutter-width: Other Gutter Variables.
-* right-margin-width: Margin Primitives.
-* right-toolbar: Specifying the Toolbar.
-* right-toolbar-visible-p: Other Toolbar Variables.
-* right-toolbar-width: Other Toolbar Variables.
-* rm: Changing File Attributes.
-* round: Numeric Conversions.
-* rounding in conversions: Numeric Conversions.
-* rounding without conversion: Rounding Operations.
-* rplaca: Modifying Lists.
-* rplacd: Modifying Lists.
-* run time stack: Internals of Debugger.
-* run-emacs-from-temacs: Building XEmacs.
-* run-hooks: Hooks.
-* runnable temacs: Building XEmacs.
-* same-window-buffer-names: Choosing Window.
-* same-window-regexps: Choosing Window.
-* save-abbrevs: Abbrev Files.
-* save-buffer: Saving Buffers.
-* save-current-buffer: Excursions.
-* save-excursion: Excursions.
-* save-excursion (Edebug): Edebug Display Update.
-* save-match-data: Saving Match Data.
-* save-restriction: Narrowing.
-* save-selected-frame: Input Focus.
-* save-selected-window <1>: Excursions.
-* save-selected-window: Selecting Windows.
-* save-some-buffers: Saving Buffers.
-* save-window-excursion: Window Configurations.
-* saving text properties: Saving Properties.
-* saving window information: Window Configurations.
-* scan-lists: Parsing Expressions.
-* scan-sexps: Parsing Expressions.
-* scope: Variable Scoping.
-* screen layout: Window Configuration Type.
-* scroll-conservatively: Vertical Scrolling.
-* scroll-down: Vertical Scrolling.
-* scroll-left: Horizontal Scrolling.
-* scroll-other-window: Vertical Scrolling.
-* scroll-right: Horizontal Scrolling.
-* scroll-step: Vertical Scrolling.
-* scroll-up: Vertical Scrolling.
-* scrollbar-pointer-glyph: Mouse Pointer.
-* scrollbars: Scrollbars.
-* scrolling vertically: Vertical Scrolling.
-* search-backward: String Search.
-* search-failed: String Search.
-* search-forward: String Search.
-* searching: Searching and Matching.
-* searching and case: Searching and Case.
-* searching for regexp: Regexp Search.
-* second: List Elements.
-* select-console: The Selected Console and Device.
-* select-device: The Selected Console and Device.
-* select-frame: Input Focus.
-* select-frame-hook: Frame Hooks.
-* select-window: Selecting Windows.
-* selected frame: Input Focus.
-* selected window: Basic Windows.
-* selected-console: The Selected Console and Device.
-* selected-device: The Selected Console and Device.
-* selected-frame: Input Focus.
-* selected-window: Selecting Windows.
-* selecting a buffer: Current Buffer.
-* selecting windows: Selecting Windows.
-* selection (for X windows): X Selections.
-* selection-pointer-glyph: Mouse Pointer.
-* selective display: Selective Display.
-* selective-display: Selective Display.
-* selective-display-ellipses: Selective Display.
-* self-evaluating form: Self-Evaluating Forms.
-* self-insert-and-exit: Minibuffer Misc.
-* self-insert-command: Commands for Insertion.
-* self-insert-command override: Changing Key Bindings.
-* self-insert-command, minor modes: Keymaps and Minor Modes.
-* self-insertion: Commands for Insertion.
-* send-string-to-terminal: Terminal Output.
-* send-tooltalk-message: Elisp Interface for Sending Messages.
-* sending signals: Signals to Processes.
-* sending ToolTalk messages: Sending Messages.
-* sentence-end: Standard Regexps.
-* sentinel: Sentinels.
-* sequence: Sequences Arrays Vectors.
-* sequence length: Sequence Functions.
-* sequencep: Sequence Functions.
-* set: Setting Variables.
-* set-annotation-action: Annotation Properties.
-* set-annotation-data: Annotation Properties.
-* set-annotation-down-glyph: Annotation Properties.
-* set-annotation-face: Annotation Properties.
-* set-annotation-glyph: Annotation Properties.
-* set-annotation-layout: Annotation Properties.
-* set-annotation-menu: Annotation Properties.
-* set-auto-mode: Auto Major Mode.
-* set-buffer: Current Buffer.
-* set-buffer-auto-saved: Auto-Saving.
-* set-buffer-major-mode: Auto Major Mode.
-* set-buffer-menubar: Menubar.
-* set-buffer-modified-p: Buffer Modification.
-* set-case-syntax: Case Tables.
-* set-case-syntax-delims: Case Tables.
-* set-case-syntax-pair: Case Tables.
-* set-case-table: Case Tables.
-* set-category-table: Category Tables.
-* set-charset-ccl-program: Charset Property Functions.
-* set-coding-category-system: Detection of Textual Encoding.
-* set-coding-priority-list: Detection of Textual Encoding.
-* set-console-type-image-conversion-list: Image Instantiator Conversion.
-* set-default: Default Value.
-* set-default-file-modes: Changing File Attributes.
-* set-default-gutter-position: Specifying a Gutter.
-* set-default-toolbar-position: Specifying the Toolbar.
-* set-device-baud-rate <1>: Terminal Output.
-* set-device-baud-rate: Console and Device I/O.
-* set-extent-begin-glyph: Extent Properties.
-* set-extent-begin-glyph-layout: Extent Properties.
-* set-extent-end-glyph: Extent Properties.
-* set-extent-end-glyph-layout: Extent Properties.
-* set-extent-endpoints: Extent Endpoints.
-* set-extent-face: Extent Properties.
-* set-extent-initial-redisplay-function: Extent Properties.
-* set-extent-keymap: Extent Properties.
-* set-extent-mouse-face: Extent Properties.
-* set-extent-parent: Extent Parents.
-* set-extent-priority: Extent Properties.
-* set-extent-properties: Extent Properties.
-* set-extent-property: Extent Properties.
-* set-face-background: Face Convenience Functions.
-* set-face-background-pixmap: Face Convenience Functions.
-* set-face-font: Face Convenience Functions.
-* set-face-foreground: Face Convenience Functions.
-* set-face-property: Face Properties.
-* set-face-underline-p: Face Convenience Functions.
-* set-file-modes: Changing File Attributes.
-* set-frame-configuration: Frame Configurations.
-* set-frame-pointer: Mouse Pointer.
-* set-frame-position: Size and Position.
-* set-frame-properties: Property Access.
-* set-frame-property: Property Access.
-* set-frame-size: Size and Position.
-* set-glyph-baseline: Glyph Convenience Functions.
-* set-glyph-contrib-p: Glyph Convenience Functions.
-* set-glyph-face: Glyph Convenience Functions.
-* set-glyph-image: Glyph Convenience Functions.
-* set-glyph-property: Glyph Properties.
-* set-input-mode: Input Modes.
-* set-keymap-default-binding: Inheritance and Keymaps.
-* set-keymap-name: Creating Keymaps.
-* set-keymap-parents: Inheritance and Keymaps.
-* set-keymap-prompt: Other Keymap Functions.
-* set-left-margin: Margins.
-* set-mark: The Mark.
-* set-marker: Changing Markers.
-* set-match-data: Entire Match Data.
-* set-menubar: Menubar.
-* set-menubar-dirty-flag: Menubar.
-* set-process-buffer: Process Buffers.
-* set-process-filter: Filter Functions.
-* set-process-sentinel: Sentinels.
-* set-process-window-size: Process Window Size.
-* set-recent-keys-ring-size: Recording Input.
-* set-register: Registers.
-* set-right-margin: Margins.
-* set-specifier: Adding Specifications.
-* set-standard-case-table: Case Tables.
-* set-syntax-table: Syntax Table Functions.
-* set-text-properties: Changing Properties.
-* set-tooltalk-message-attribute: Elisp Interface for Sending Messages.
-* set-visited-file-modtime: Modification Time.
-* set-visited-file-name: Buffer File Name.
-* set-weak-list-list: Weak Lists.
-* set-window-buffer: Buffers and Windows.
-* set-window-buffer-dedicated: Choosing Window.
-* set-window-configuration: Window Configurations.
-* set-window-dedicated-p: Choosing Window.
-* set-window-hscroll: Horizontal Scrolling.
-* set-window-point: Window Point.
-* set-window-start: Window Start.
-* setcar: Setcar.
-* setcdr: Setcdr.
-* setenv: System Environment.
-* setplist: Object Plists.
-* setprv: System Environment.
-* setq: Setting Variables.
-* setq-default: Default Value.
-* sets: Sets And Lists.
-* setting modes of files: Changing File Attributes.
-* setting-constant: Constant Variables.
-* seventh: List Elements.
-* sexp motion: List Motion.
-* shadowing of variables: Local Variables.
-* shallow binding: Impl of Scope.
-* shared-lisp-mode-map: Standard Keymaps.
-* Shell mode modeline-format: Modeline Data.
-* shell-command-history: Minibuffer History.
-* shrink-window: Resizing Windows.
-* shrink-window-horizontally: Resizing Windows.
-* shrink-window-pixels: Resizing Windows.
-* side effect: Intro Eval.
-* signal: Signaling Errors.
-* signal-error: Signaling Errors.
-* signal-process: Signals to Processes.
-* signaling errors: Signaling Errors.
-* signals: Signals to Processes.
-* sin: Math Functions.
-* single-key-description: Describing Characters.
-* sinh: Math Functions.
-* sit-for: Waiting.
-* site-init.el: Building XEmacs.
-* site-load.el: Building XEmacs.
-* site-run-file: Init File.
-* site-start.el: Start-up Summary.
-* sixth: List Elements.
-* size of frame: Size and Position.
-* size of window: Size of Window.
-* skip-chars-backward: Skipping Characters.
-* skip-chars-forward: Skipping Characters.
-* skip-syntax-backward: Motion and Syntax.
-* skip-syntax-forward: Motion and Syntax.
-* skipping characters: Skipping Characters.
-* skipping comments: Parsing Expressions.
-* sleep-for: Waiting.
-* Snarf-documentation: Accessing Documentation.
-* sort: Rearrangement.
-* sort-columns: Sorting.
-* sort-fields: Sorting.
-* sort-lines: Sorting.
-* sort-numeric-fields: Sorting.
-* sort-pages: Sorting.
-* sort-paragraphs: Sorting.
-* sort-regexp-fields: Sorting.
-* sort-subr: Sorting.
-* sorting lists: Rearrangement.
-* sorting text: Sorting.
-* sound: Beeping.
-* sound-alist: Beeping.
-* special: Major Mode Conventions.
-* special form descriptions: A Sample Function Description.
-* special form evaluation: Special Forms.
-* special forms: Primitive Function Type.
-* special forms (Edebug): Instrumenting.
-* special forms for control structures: Control Structures.
-* special-display-buffer-names: Choosing Window.
-* special-display-frame-plist: Choosing Window.
-* special-display-function: Choosing Window.
-* special-display-popup-frame: Choosing Window.
-* special-display-regexps: Choosing Window.
-* specification (in a specifier): Specifiers In-Depth.
-* specifier: Specifiers.
-* specifier type: Specifier Type.
-* specifier, domain: Specifiers In-Depth.
-* specifier, fallback: Specifier Instancing.
-* specifier, inst-list: Specifiers In-Depth.
-* specifier, inst-pair: Specifiers In-Depth.
-* specifier, instance: Specifiers In-Depth.
-* specifier, instancing: Specifiers In-Depth.
-* specifier, instantiator: Specifiers In-Depth.
-* specifier, locale: Specifiers In-Depth.
-* specifier, specification: Specifiers In-Depth.
-* specifier, tag: Specifiers In-Depth.
-* specifier, tag set: Specifiers In-Depth.
-* specifier-fallback: Retrieving Specifications.
-* specifier-instance: Specifier Instancing Functions.
-* specifier-instance-from-inst-list: Specifier Instancing Functions.
-* specifier-locale-type-from-locale: Other Specification Functions.
-* specifier-spec-list: Retrieving Specifications.
-* specifier-specs: Retrieving Specifications.
-* specifier-tag-list: Specifier Tag Functions.
-* specifier-tag-predicate: Specifier Tag Functions.
-* specifier-type: Specifier Types.
-* specifierp: Specifiers.
-* speedups: Compilation Tips.
-* splicing (with backquote): Backquote.
-* split-height-threshold: Choosing Window.
-* split-line: Commands for Insertion.
-* split-path: Regexp Search.
-* split-string: Regexp Search.
-* split-window: Splitting Windows.
-* split-window-horizontally: Splitting Windows.
-* split-window-vertically: Splitting Windows.
-* splitting windows: Splitting Windows.
-* sqrt: Math Functions.
-* stable sort: Rearrangement.
-* standard regexps used in editing: Standard Regexps.
-* standard-case-table: Case Tables.
-* standard-category-table: Category Tables.
-* standard-input: Input Functions.
-* standard-output: Output Variables.
-* standard-syntax-table: Standard Syntax Tables.
-* standards of coding style: Tips.
-* start up of XEmacs: Start-up Summary.
-* start-process: Asynchronous Processes.
-* start-process-shell-command: Asynchronous Processes.
-* startup.el: Start-up Summary.
-* stop points: Using Edebug.
-* stop-process: Signals to Processes.
-* stopping an infinite loop: Infinite Loops.
-* stopping on events: Global Break Condition.
-* store-match-data: Entire Match Data.
-* stream (for printing): Output Streams.
-* stream (for reading): Input Streams.
-* string: Creating Strings.
-* string equality: Text Comparison.
-* string in keymap: Key Lookup.
-* string input stream: Input Streams.
-* string length: Sequence Functions.
-* string length, maximum when printing: Output Variables.
-* string properties: String Properties.
-* string search: String Search.
-* string to character: String Conversion.
-* string to number: String Conversion.
-* string to object: Input Functions.
-* string, writing a doc string: Documentation Basics.
-* string-equal: Text Comparison.
-* string-lessp: Text Comparison.
-* string-match: Regexp Search.
-* string-modified-tick: Modifying Strings.
-* string-to-char: String Conversion.
-* string-to-int: String Conversion.
-* string-to-number: String Conversion.
-* string<: Text Comparison.
-* string=: Text Comparison.
-* stringp: Predicates for Strings.
-* strings: Strings and Characters.
-* strings, formatting them: Formatting Strings.
-* strings, modifying: Modifying Strings.
-* string quote: Syntax Class Table.
-* subprocess: Processes.
-* subr: What Is a Function.
-* subrp: What Is a Function.
-* subsidiary-coding-system: Basic Coding System Functions.
-* subst-char-in-region: Substitution.
-* substitute-command-keys: Keys in Documentation.
-* substitute-in-file-name: File Name Expansion.
-* substitute-key-definition: Changing Key Bindings.
-* substituting keys in documentation: Keys in Documentation.
-* substring: Creating Strings.
-* subwindow type: Subwindow Type.
-* subwindow-image-instance-p: Image Instance Types.
-* subwindowp: Subwindows.
-* suppress-keymap: Changing Key Bindings.
-* suspend (cf. no-redraw-on-reenter): Refresh Screen.
-* suspend evaluation: Recursive Editing.
-* suspend-emacs: Suspending XEmacs.
-* suspend-hook: Suspending XEmacs.
-* suspend-resume-hook: Suspending XEmacs.
-* suspending XEmacs: Suspending XEmacs.
-* switch-to-buffer: Displaying Buffers.
-* switch-to-buffer-other-window: Displaying Buffers.
-* switches on command line: Command Line Arguments.
-* switching to a buffer: Displaying Buffers.
-* symbol: Symbols.
-* symbol components: Symbol Components.
-* symbol equality: Creating Symbols.
-* symbol evaluation: Symbol Forms.
-* symbol function indirection: Function Indirection.
-* symbol in keymap: Key Lookup.
-* symbol name hashing: Creating Symbols.
-* symbol-function: Function Cells.
-* symbol-name: Creating Symbols.
-* symbol-plist: Object Plists.
-* symbol-value: Accessing Variables.
-* symbolp: Symbols.
-* symbol constituent: Syntax Class Table.
-* synchronous subprocess: Synchronous Processes.
-* syntax classes: Syntax Descriptors.
-* syntax descriptor: Syntax Descriptors.
-* syntax error (Edebug): Backtracking.
-* syntax flags: Syntax Flags.
-* syntax for characters: Character Type.
-* syntax table: Syntax Tables.
-* syntax table example: Example Major Modes.
-* syntax table internals: Syntax Table Internals.
-* syntax tables in modes: Major Mode Conventions.
-* syntax-table: Syntax Table Functions.
-* syntax-table-p: Syntax Basics.
-* system-configuration: System Environment.
-* system-name: System Environment.
-* system-type: System Environment.
-* t: Constant Variables.
-* t and truth: nil and t.
-* t input stream: Input Streams.
-* t output stream: Output Streams.
-* tab: Character Type.
-* tab deletion: Deletion.
-* tab-stop-list: Indent Tabs.
-* tab-to-tab-stop: Indent Tabs.
-* tab-width: Usual Display.
-* tabs stops for indentation: Indent Tabs.
-* tag (in a specifier): Specifiers In-Depth.
-* tag on run time stack: Catch and Throw.
-* tag set (in a specifier): Specifiers In-Depth.
-* tan: Math Functions.
-* tanh: Math Functions.
-* TCP: Network.
-* temacs: Building XEmacs.
-* temp-buffer-show-function: Temporary Displays.
-* temp-directory: Unique File Names.
-* tenth: List Elements.
-* TERM environment variable: Terminal-Specific.
-* term-file-prefix: Terminal-Specific.
-* term-setup-hook: Terminal-Specific.
-* Termcap: Terminal-Specific.
-* terminal frame <1>: Frames.
-* terminal frame: Basic Windows.
-* terminal input: Terminal Input.
-* terminal input modes: Input Modes.
-* terminal output: Terminal Output.
-* terminal-device: Console Types and Device Classes.
-* terminal-specific initialization: Terminal-Specific.
-* terminate keyboard macro: Peeking and Discarding.
-* termscript file: Terminal Output.
-* terpri: Output Functions.
-* testing types: Type Predicates.
-* text: Text.
-* text files and binary files: Files and MS-DOS.
-* text insertion: Insertion.
-* text parsing: Syntax Tables.
-* text properties: Text Properties.
-* text properties in files: Saving Properties.
-* text-char-description: Describing Characters.
-* text-image-instance-p: Image Instance Types.
-* text-mode-abbrev-table: Standard Abbrev Tables.
-* text-mode-map: Standard Keymaps.
-* text-mode-syntax-table: Standard Syntax Tables.
-* text-pointer-glyph: Mouse Pointer.
-* text-properties-at: Examining Properties.
-* text-property-any: Property Search.
-* text-property-not-all: Property Search.
-* third: List Elements.
-* this-command: Command Loop Info.
-* this-command-keys: Command Loop Info.
-* throw: Catch and Throw.
-* throw example: Recursive Editing.
-* tiled windows: Basic Windows.
-* timeout-event-p: Event Predicates.
-* timing programs: Compilation Tips.
-* tips: Tips.
-* toggle-read-only: Read Only Buffers.
-* toolbar: Toolbar.
-* toolbar button type: Toolbar Button Type.
-* toolbar-buttons-captioned-p: Other Toolbar Variables.
-* toolbar-make-button-list: Toolbar Descriptor Format.
-* toolbar-map <1>: Standard Keymaps.
-* toolbar-map: Active Keymaps.
-* toolbar-pointer-glyph: Mouse Pointer.
-* toolbar-specifier-p <1>: Specifier Types.
-* toolbar-specifier-p: Specifying the Toolbar.
-* ToolTalk: ToolTalk Support.
-* ToolTalk message: Sending Messages.
-* ToolTalk pattern: Receiving Messages.
-* top-gutter: Specifying a Gutter.
-* top-gutter-height: Other Gutter Variables.
-* top-gutter-visible-p: Other Gutter Variables.
-* top-level: Recursive Editing.
-* top-level form: Loading.
-* top-toolbar: Specifying the Toolbar.
-* top-toolbar-height: Other Toolbar Variables.
-* top-toolbar-visible-p: Other Toolbar Variables.
-* tq-close: Transaction Queues.
-* tq-create: Transaction Queues.
-* tq-enqueue: Transaction Queues.
-* tracing: Tracing.
-* transaction queue: Transaction Queues.
-* transcendental functions: Math Functions.
-* translate-region: Substitution.
-* translating input events: Translating Input.
-* transpose-regions: Transposition.
-* true: nil and t.
-* truename (of file): Truenames.
-* truncate: Numeric Conversions.
-* truncate-lines: Truncation.
-* truncate-partial-width-windows: Truncation.
-* truncation-glyph: Redisplay Glyphs.
-* truth value: nil and t.
-* try-completion: Basic Completion.
-* two's complement: Integer Basics.
-* type: Lisp Data Types.
-* type checking: Type Predicates.
-* type predicates: Type Predicates.
-* type-of: Type Predicates.
-* unbinding keys: Key Binding Commands.
-* undefined: Functions for Key Lookup.
-* undefined in keymap: Key Lookup.
-* undefined key: Keymap Terminology.
-* undo avoidance: Substitution.
-* undo-boundary: Undo.
-* undo-limit: Maintaining Undo.
-* undo-strong-limit: Maintaining Undo.
-* unexec: Building XEmacs.
-* unhandled-file-name-directory: Magic File Names.
-* unintern: Creating Symbols.
-* uninterned symbol: Creating Symbols.
-* uninterned symbols, printing: Output Variables.
-* unique extents: Duplicable Extents.
-* universal-argument: Prefix Command Arguments.
-* unload-feature: Unloading.
-* unloading: Unloading.
-* unlock-buffer: File Locks.
-* unmap-frame-hook: Frame Hooks.
-* unread-command-event: Peeking and Discarding.
-* unread-command-events: Peeking and Discarding.
-* unreading: Input Streams.
-* unregister-tooltalk-pattern: Elisp Interface for Receiving Messages.
-* unwind-protect: Cleanups.
-* unwinding: Cleanups.
-* up-list: List Motion.
-* upcase: Character Case.
-* upcase-region: Case Changes.
-* upcase-word: Case Changes.
-* update display: Refresh Screen.
-* update-directory-autoloads: Autoload.
-* update-file-autoloads: Autoload.
-* upper case: Character Case.
-* upper case key sequence: Key Sequence Input.
-* use-global-map: Active Keymaps.
-* use-hard-newlines: Filling.
-* use-left-overflow: Margin Primitives.
-* use-local-map: Active Keymaps.
-* use-right-overflow: Margin Primitives.
-* user name completion subroutines: User Name Completion.
-* user option: Defining Variables.
-* user-defined error: Error Symbols.
-* user-full-name: User Identification.
-* user-home-directory: User Identification.
-* user-login-name: User Identification.
-* user-mail-address: User Identification.
-* user-name-all-completions: User Name Completion.
-* user-name-completion: User Name Completion.
-* user-name-completion-1: User Name Completion.
-* user-real-login-name: User Identification.
-* user-real-uid: User Identification.
-* user-uid: User Identification.
-* user-variable-p: Defining Variables.
-* user-variable-p example: High-Level Completion.
-* valid-char-table-type-p: Char Table Types.
-* valid-char-table-value-p: Working With Char Tables.
-* valid-device-class-p: Console Types and Device Classes.
-* valid-device-type-p: Console Types and Device Classes.
-* valid-glyph-type-p: Glyph Types.
-* valid-image-instance-type-p: Image Instance Types.
-* valid-image-instantiator-format-p: Image Specifiers.
-* valid-inst-list-p: Specifier Validation Functions.
-* valid-instantiator-p: Specifier Validation Functions.
-* valid-plist-p: Property Lists.
-* valid-spec-list-p: Specifier Validation Functions.
-* valid-specifier-domain-p: Specifier Validation Functions.
-* valid-specifier-locale-p: Specifier Validation Functions.
-* valid-specifier-locale-type-p: Specifier Validation Functions.
-* valid-specifier-tag-p <1>: Specifier Validation Functions.
-* valid-specifier-tag-p: Specifier Tag Functions.
-* valid-specifier-tag-set-p: Specifier Tag Functions.
-* valid-specifier-type-p: Specifier Validation Functions.
-* value cell: Symbol Components.
-* value of expression: Evaluation.
-* values: Eval.
-* variable: Variables.
-* variable aliases: Variable Aliases.
-* variable definition: Defining Variables.
-* variable descriptions: A Sample Variable Description.
-* variable limit error: Local Variables.
-* variable-alias: Variable Aliases.
-* variable-documentation: Documentation Basics.
-* variable-obsoleteness-doc: Obsoleteness.
-* variables, buffer-local: Buffer-Local Variables.
-* variables, indirect: Variable Aliases.
-* vc-mode: Modeline Variables.
-* vconcat: Vector Functions.
-* vector <1>: Vector Functions.
-* vector: Vectors.
-* vector evaluation: Self-Evaluating Forms.
-* vector length: Sequence Functions.
-* vectorp: Vector Functions.
-* verify-visited-file-modtime: Modification Time.
-* version number (in file name): File Name Components.
-* version-control: Numbered Backups.
-* vertical scrolling: Vertical Scrolling.
-* vertical tab: Character Type.
-* vertical-motion: Screen Lines.
-* vertical-motion-pixels: Screen Lines.
-* view-file: Visiting Functions.
-* view-mode-map: Standard Keymaps.
-* view-register: Registers.
-* visible frame: Visibility of Frames.
-* visible-bell: Beeping.
-* visible-frame-list: Finding All Frames.
-* visited file: Buffer File Name.
-* visited file mode: Auto Major Mode.
-* visited-file-modtime: Modification Time.
-* visiting files: Visiting Files.
-* void function: Function Indirection.
-* void function cell: Function Cells.
-* void variable: Void Variables.
-* void-function: Function Cells.
-* void-variable: Void Variables.
-* waiting: Waiting.
-* waiting for command key input: Peeking and Discarding.
-* waiting-for-user-input-p: Sentinels.
-* wakeup: Subprocess Creation.
-* walk-windows: Cyclic Window Ordering.
-* weak hash table: Weak Hash Tables.
-* weak list: Weak Lists.
-* weak list type: Weak List Type.
-* weak-list-list: Weak Lists.
-* weak-list-p: Weak Lists.
-* weak-list-type: Weak Lists.
-* where-is-internal: Scanning Keymaps.
-* while: Iteration.
-* whitespace: Character Type.
-* whitespace character: Syntax Class Table.
-* widen: Narrowing.
-* widening: Narrowing.
-* window: Basic Windows.
-* window configuration (Edebug): Edebug Display Update.
-* window configurations: Window Configurations.
-* window excursions: Excursions.
-* window ordering, cyclic: Cyclic Window Ordering.
-* window point: Window Point.
-* window position <1>: Position of Window.
-* window position: Window Point.
-* window resizing: Resizing Windows.
-* window size: Size of Window.
-* window size, changing: Resizing Windows.
-* window splitting: Splitting Windows.
-* window system types: Window-System Types.
-* window top line: Window Start.
-* window-buffer: Buffers and Windows.
-* window-configuration-p: Window Configurations.
-* window-dedicated-p: Choosing Window.
-* window-displayed-text-pixel-height: Size of Window.
-* window-end: Window Start.
-* window-frame: Frames and Windows.
-* window-height: Size of Window.
-* window-highest-p: Position of Window.
-* window-hscroll: Horizontal Scrolling.
-* window-left-margin-pixel-width: Margin Primitives.
-* window-live-p: Deleting Windows.
-* window-lowest-p: Position of Window.
-* window-min-height: Resizing Windows.
-* window-min-width: Resizing Windows.
-* window-minibuffer-p: Minibuffer Misc.
-* window-pixel-edges: Position of Window.
-* window-pixel-height: Size of Window.
-* window-pixel-width: Size of Window.
-* window-point: Window Point.
-* window-right-margin-pixel-width: Margin Primitives.
-* window-setup-hook: Terminal-Specific.
-* window-size-change-functions: Resizing Windows.
-* window-start: Window Start.
-* window-system objects: Faces and Window-System Objects.
-* window-text-area-pixel-edges: Position of Window.
-* window-text-area-pixel-height: Size of Window.
-* window-text-area-pixel-width: Size of Window.
-* window-width: Size of Window.
-* windowp: Basic Windows.
-* windows, controlling precisely: Buffers and Windows.
-* with-current-buffer: Excursions.
-* with-output-to-temp-buffer: Temporary Displays.
-* with-selected-frame: Input Focus.
-* with-temp-file: Excursions.
-* word search: String Search.
-* word-search-backward: String Search.
-* word-search-forward: String Search.
-* words-include-escapes: Word Motion.
-* word constituent: Syntax Class Table.
-* write-abbrev-file: Abbrev Files.
-* write-char: Output Functions.
-* write-contents-hooks: Saving Buffers.
-* write-file: Saving Buffers.
-* write-file-hooks: Saving Buffers.
-* write-region: Writing to Files.
-* write-region-annotate-functions: Saving Properties.
-* writing a documentation string: Documentation Basics.
-* wrong-number-of-arguments: Argument List.
-* wrong-type-argument: Type Predicates.
-* X: X-Windows.
-* X resource type: X Resource Type.
-* X window frame: Frames.
-* x-allow-sendevents: X Miscellaneous.
-* x-bitmap-file-path <1>: X Miscellaneous.
-* x-bitmap-file-path: Image Specifiers.
-* x-debug-events: X Miscellaneous.
-* x-debug-mode: X Miscellaneous.
-* x-disown-selection: X Selections.
-* x-display-visual-class: Server Data.
-* x-emacs-application-class: Resources.
-* x-find-larger-font: Font Instance Size.
-* x-find-smaller-font: Font Instance Size.
-* x-font-size: Font Instance Size.
-* x-get-cutbuffer: X Selections.
-* x-get-resource: Resources.
-* x-get-selection: X Selections.
-* x-grab-keyboard: Grabs.
-* x-grab-pointer: Grabs.
-* x-library-search-path: X Miscellaneous.
-* x-make-font-bold: Font Instance Characteristics.
-* x-make-font-bold-italic: Font Instance Characteristics.
-* x-make-font-italic: Font Instance Characteristics.
-* x-make-font-unbold: Font Instance Characteristics.
-* x-make-font-unitalic: Font Instance Characteristics.
-* x-own-selection: X Selections.
-* x-put-resource: Resources.
-* x-server-vendor: Server Data.
-* x-server-version: Server Data.
-* x-set-frame-icon-pixmap: Frame Titles.
-* x-store-cutbuffer: X Selections.
-* x-ungrab-keyboard: Grabs.
-* x-ungrab-pointer: Grabs.
-* x-valid-keysym-name-p: X Miscellaneous.
-* x-window-id: X Miscellaneous.
-* X-Windows: X-Windows.
-* XEmacs event standard notation: Describing Characters.
-* xpm-color-symbols: Image Specifiers.
-* y-or-n-p: Yes-or-No Queries.
-* y-or-n-p-maybe-dialog-box: Yes-or-No Queries.
-* yank: Yank Commands.
-* yank suppression: Changing Key Bindings.
-* yank-pop: Yank Commands.
-* yes-or-no questions: Yes-or-No Queries.
-* yes-or-no-p: Yes-or-No Queries.
-* yes-or-no-p-dialog-box: Yes-or-No Queries.
-* yes-or-no-p-maybe-dialog-box: Yes-or-No Queries.
-* zero-length extent: Extent Endpoints.
-* zerop: Predicates on Numbers.
-* zmacs-activate-region: The Region.
-* zmacs-activate-region-hook: The Region.
-* zmacs-deactivate-region: The Region.
-* zmacs-deactivate-region-hook: The Region.
-* zmacs-region-stays: The Region.
-* zmacs-regions: The Region.
-* zmacs-update-region: The Region.
-* zmacs-update-region-hook: The Region.
-* | in regexp: Syntax of Regexps.
+File: lispref.info, Node: Standard Buffer-Local Variables, Next: Standard Keymaps, Prev: Standard Errors, Up: Top
+Buffer-Local Variables
+**********************
+ 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.
+
+`abbrev-mode'
+ *note Abbrevs::
+
+`auto-fill-function'
+ *note Auto Filling::
+
+`buffer-auto-save-file-name'
+ *note Auto-Saving::
+
+`buffer-backed-up'
+ *note Backup Files::
+
+`buffer-display-table'
+ *note Display Tables::
+
+`buffer-file-format'
+ *note Format Conversion::
+
+`buffer-file-name'
+ *note Buffer File Name::
+
+`buffer-file-number'
+ *note Buffer File Name::
+
+`buffer-file-truename'
+ *note Buffer File Name::
+
+`buffer-file-type'
+ *note Files and MS-DOS::
+
+`buffer-invisibility-spec'
+ *note Invisible Text::
+
+`buffer-offer-save'
+ *note Saving Buffers::
+
+`buffer-read-only'
+ *note Read Only Buffers::
+
+`buffer-saved-size'
+ *note Point::
+
+`buffer-undo-list'
+ *note Undo::
+
+`cache-long-line-scans'
+ *note Text Lines::
+
+`case-fold-search'
+ *note Searching and Case::
+
+`ctl-arrow'
+ *note Usual Display::
+
+`comment-column'
+ *note Comments: (emacs)Comments.
+
+`default-directory'
+ *note System Environment::
+
+`defun-prompt-regexp'
+ *note List Motion::
+
+`fill-column'
+ *note Auto Filling::
+
+`goal-column'
+ *note Moving Point: (emacs)Moving Point.
+
+`left-margin'
+ *note Indentation::
+
+`local-abbrev-table'
+ *note Abbrevs::
+
+`local-write-file-hooks'
+ *note Saving Buffers::
+
+`major-mode'
+ *note Mode Help::
+
+`mark-active'
+ *note The Mark::
+
+`mark-ring'
+ *note The Mark::
+
+`minor-modes'
+ *note Minor Modes::
+
+`modeline-format'
+ *note Modeline Data::
+
+`modeline-buffer-identification'
+ *note Modeline Variables::
+
+`modeline-format'
+ *note Modeline Data::
+
+`modeline-modified'
+ *note Modeline Variables::
+
+`modeline-process'
+ *note Modeline Variables::
+
+`mode-name'
+ *note Modeline Variables::
+
+`overwrite-mode'
+ *note Insertion::
+
+`paragraph-separate'
+ *note Standard Regexps::
+
+`paragraph-start'
+ *note Standard Regexps::
+
+`point-before-scroll'
+ Used for communication between mouse commands and scroll-bar
+ commands.
+
+`require-final-newline'
+ *note Insertion::
+
+`selective-display'
+ *note Selective Display::
+
+`selective-display-ellipses'
+ *note Selective Display::
+
+`tab-width'
+ *note Usual Display::
+
+`truncate-lines'
+ *note Truncation::
+
+`vc-mode'
+ *note Modeline Variables::
+
+\1f
+File: lispref.info, Node: Standard Keymaps, Next: Standard Hooks, Prev: Standard Buffer-Local Variables, Up: Top
+
+Standard Keymaps
+****************
+
+ The following symbols are used as the names for various keymaps.
+Some of these exist when XEmacs is first started, others are loaded
+only when their respective mode is used. This is not an exhaustive
+list.
+
+ Almost all of these maps are used as local maps. Indeed, of the
+modes that presently exist, only Vip mode and Terminal mode ever change
+the global keymap.
+
+`bookmark-map'
+ A keymap containing bindings to bookmark functions.
+
+`Buffer-menu-mode-map'
+ A keymap used by Buffer Menu mode.
+
+`c++-mode-map'
+ A keymap used by C++ mode.
+
+`c-mode-map'
+ A keymap used by C mode. A sparse keymap used by C mode.
+
+`command-history-map'
+ A keymap used by Command History mode.
+
+`ctl-x-4-map'
+ A keymap for subcommands of the prefix `C-x 4'.
+
+`ctl-x-5-map'
+ A keymap for subcommands of the prefix `C-x 5'.
+
+`ctl-x-map'
+ A keymap for `C-x' commands.
+
+`debugger-mode-map'
+ A keymap used by Debugger mode.
+
+`dired-mode-map'
+ A keymap for `dired-mode' buffers.
+
+`edit-abbrevs-map'
+ A keymap used in `edit-abbrevs'.
+
+`edit-tab-stops-map'
+ A keymap used in `edit-tab-stops'.
+
+`electric-buffer-menu-mode-map'
+ A keymap used by Electric Buffer Menu mode.
+
+`electric-history-map'
+ A keymap used by Electric Command History mode.
+
+`emacs-lisp-mode-map'
+ A keymap used by Emacs Lisp mode.
+
+`help-map'
+ A keymap for characters following the Help key.
+
+`Helper-help-map'
+ A keymap used by the help utility package.
+ It has the same keymap in its value cell and in its function cell.
+
+`Info-edit-map'
+ A keymap used by the `e' command of Info.
+
+`Info-mode-map'
+ A keymap containing Info commands.
+
+`isearch-mode-map'
+ A keymap that defines the characters you can type within
+ incremental search.
+
+`itimer-edit-map'
+ A keymap used when in Itimer Edit mode.
+
+`lisp-interaction-mode-map'
+ A keymap used by Lisp mode.
+
+`lisp-mode-map'
+ A keymap used by Lisp mode.
+
+ A keymap for minibuffer input with completion.
+
+`minibuffer-local-isearch-map'
+ A keymap for editing isearch strings in the minibuffer.
+
+`minibuffer-local-map'
+ Default keymap to use when reading from the minibuffer.
+
+`minibuffer-local-must-match-map'
+ A keymap for minibuffer input with completion, for exact match.
+
+`mode-specific-map'
+ The keymap for characters following `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 `C-h b'
+ (`display-bindings'), where it describes the main use of the `C-c'
+ prefix key.
+
+`modeline-map'
+ The keymap consulted for mouse-clicks on the modeline of a window.
+
+`objc-mode-map'
+ A keymap used in Objective C mode as a local map.
+
+`occur-mode-map'
+ A local keymap used by Occur mode.
+
+`overriding-local-map'
+ A keymap that overrides all other local keymaps.
+
+`query-replace-map'
+ A local keymap used for responses in `query-replace' and related
+ commands; also for `y-or-n-p' and `map-y-or-n-p'. The functions
+ that use this map do not support prefix keys; they look up one
+ event at a time.
+
+`read-expression-map'
+ The minibuffer keymap used for reading Lisp expressions.
+
+`read-shell-command-map'
+ The minibuffer keymap used by shell-command and related commands.
+
+`shared-lisp-mode-map'
+ A keymap for commands shared by all sorts of Lisp modes.
+
+`text-mode-map'
+ A keymap used by Text mode.
+
+`toolbar-map'
+ The keymap consulted for mouse-clicks over a toolbar.
+
+`view-mode-map'
+ A keymap used by View mode.
+
+\1f
+File: lispref.info, Node: Standard Hooks, Next: Index, Prev: Standard Keymaps, Up: Top
+
+Standard Hooks
+**************
+
+ The following is a list of hook variables that let you provide
+functions to be called from within Emacs on suitable occasions.
+
+ Most of these variables have names ending with `-hook'. They are
+"normal hooks", run by means of `run-hooks'. The value of such a hook
+is a list of functions. The recommended way to put a new function on
+such a hook is to call `add-hook'. *Note Hooks::, for more information
+about using hooks.
+
+ The variables whose names end in `-function' have single functions
+as their values. Usually there is a specific reason why the variable is
+not a normal hook, such as the need to pass arguments to the function.
+(In older Emacs versions, some of these variables had names ending in
+`-hook' even though they were not normal hooks.)
+
+ The variables whose names end in `-hooks' or `-functions' have lists
+of functions as their values, but these functions are called in a
+special way (they are passed arguments, or else their values are used).
+
+`activate-menubar-hook'
+
+`activate-popup-menu-hook'
+
+`ad-definition-hooks'
+
+`adaptive-fill-function'
+
+`add-log-current-defun-function'
+
+`after-change-functions'
+
+`after-delete-annotation-hook'
+
+`after-init-hook'
+
+`after-insert-file-functions'
+
+`after-revert-hook'
+
+`after-save-hook'
+
+`after-set-visited-file-name-hooks'
+
+`after-write-file-hooks'
+
+`auto-fill-function'
+
+`auto-save-hook'
+
+`before-change-functions'
+
+`before-delete-annotation-hook'
+
+`before-init-hook'
+
+`before-revert-hook'
+
+`blink-paren-function'
+
+`buffers-menu-switch-to-buffer-function'
+
+`c++-mode-hook'
+
+`c-delete-function'
+
+`c-mode-common-hook'
+
+`c-mode-hook'
+
+`c-special-indent-hook'
+
+`calendar-load-hook'
+
+`change-major-mode-hook'
+
+`command-history-hook'
+
+`comment-indent-function'
+
+`compilation-buffer-name-function'
+
+`compilation-exit-message-function'
+
+`compilation-finish-function'
+
+`compilation-parse-errors-function'
+
+`compilation-mode-hook'
+
+`create-console-hook'
+
+`create-device-hook'
+
+`create-frame-hook'
+
+`dabbrev-friend-buffer-function'
+
+`dabbrev-select-buffers-function'
+
+`delete-console-hook'
+
+`delete-device-hook'
+
+`delete-frame-hook'
+
+`deselect-frame-hook'
+
+`diary-display-hook'
+
+`diary-hook'
+
+`dired-after-readin-hook'
+
+`dired-before-readin-hook'
+
+`dired-load-hook'
+
+`dired-mode-hook'
+
+`disabled-command-hook'
+
+`display-buffer-function'
+
+`ediff-after-setup-control-frame-hook'
+
+`ediff-after-setup-windows-hook'
+
+`ediff-before-setup-control-frame-hook'
+
+`ediff-before-setup-windows-hook'
+
+`ediff-brief-help-message-function'
+
+`ediff-cleanup-hook'
+
+`ediff-control-frame-position-function'
+
+`ediff-display-help-hook'
+
+`ediff-focus-on-regexp-matches-function'
+
+`ediff-forward-word-function'
+
+`ediff-hide-regexp-matches-function'
+
+`ediff-keymap-setup-hook'
+
+`ediff-load-hook'
+
+`ediff-long-help-message-function'
+
+`ediff-make-wide-display-function'
+
+`ediff-merge-split-window-function'
+
+`ediff-meta-action-function'
+
+`ediff-meta-redraw-function'
+
+`ediff-mode-hook'
+
+`ediff-prepare-buffer-hook'
+
+`ediff-quit-hook'
+
+`ediff-registry-setup-hook'
+
+`ediff-select-hook'
+
+`ediff-session-action-function'
+
+`ediff-session-group-setup-hook'
+
+`ediff-setup-diff-regions-function'
+
+`ediff-show-registry-hook'
+
+`ediff-show-session-group-hook'
+
+`ediff-skip-diff-region-function'
+
+`ediff-split-window-function'
+
+`ediff-startup-hook'
+
+`ediff-suspend-hook'
+
+`ediff-toggle-read-only-function'
+
+`ediff-unselect-hook'
+
+`ediff-window-setup-function'
+
+`edit-picture-hook'
+
+`electric-buffer-menu-mode-hook'
+
+`electric-command-history-hook'
+
+`electric-help-mode-hook'
+
+`emacs-lisp-mode-hook'
+
+`fill-paragraph-function'
+
+`find-file-hooks'
+
+`find-file-not-found-hooks'
+
+`first-change-hook'
+
+`font-lock-after-fontify-buffer-hook'
+
+`font-lock-beginning-of-syntax-function'
+
+`font-lock-mode-hook'
+
+`fume-found-function-hook'
+
+`fume-list-mode-hook'
+
+`fume-rescan-buffer-hook'
+
+`fume-sort-function'
+
+`gnus-startup-hook'
+
+`hack-local-variables-hook'
+
+`highlight-headers-follow-url-function'
+
+`hyper-apropos-mode-hook'
+
+`indent-line-function'
+
+`indent-mim-hook'
+
+`indent-region-function'
+
+`initial-calendar-window-hook'
+
+`isearch-mode-end-hook'
+
+`isearch-mode-hook'
+
+`java-mode-hook'
+
+`kill-buffer-hook'
+
+`kill-buffer-query-functions'
+
+`kill-emacs-hook'
+
+`kill-emacs-query-functions'
+
+`kill-hooks'
+
+`LaTeX-mode-hook'
+
+`latex-mode-hook'
+
+`ledit-mode-hook'
+
+`lisp-indent-function'
+
+`lisp-interaction-mode-hook'
+
+`lisp-mode-hook'
+
+`list-diary-entries-hook'
+
+`load-read-function'
+
+`log-message-filter-function'
+
+`m2-mode-hook'
+
+`mail-citation-hook'
+
+`mail-mode-hook'
+
+`mail-setup-hook'
+
+`make-annotation-hook'
+
+`makefile-mode-hook'
+
+`map-frame-hook'
+
+`mark-diary-entries-hook'
+
+`medit-mode-hook'
+
+`menu-no-selection-hook'
+
+`mh-compose-letter-hook'
+
+`mh-folder-mode-hook'
+
+`mh-letter-mode-hook'
+
+`mim-mode-hook'
+
+`minibuffer-exit-hook'
+
+`minibuffer-setup-hook'
+
+`mode-motion-hook'
+
+`mouse-enter-frame-hook'
+
+`mouse-leave-frame-hook'
+
+`mouse-track-cleanup-hook'
+
+`mouse-track-click-hook'
+
+`mouse-track-down-hook'
+
+`mouse-track-drag-hook'
+
+`mouse-track-drag-up-hook'
+
+`mouse-track-up-hook'
+
+`mouse-yank-function'
+
+`news-mode-hook'
+
+`news-reply-mode-hook'
+
+`news-setup-hook'
+
+`nongregorian-diary-listing-hook'
+
+`nongregorian-diary-marking-hook'
+
+`nroff-mode-hook'
+
+`objc-mode-hook'
+
+`outline-mode-hook'
+
+`perl-mode-hook'
+
+`plain-TeX-mode-hook'
+
+`post-command-hook'
+
+`post-gc-hook'
+
+`pre-abbrev-expand-hook'
+
+`pre-command-hook'
+
+`pre-display-buffer-function'
+
+`pre-gc-hook'
+
+`pre-idle-hook'
+
+`print-diary-entries-hook'
+
+`prolog-mode-hook'
+
+`protect-innocence-hook'
+
+`remove-message-hook'
+
+`revert-buffer-function'
+
+`revert-buffer-insert-contents-function'
+
+`rmail-edit-mode-hook'
+
+`rmail-mode-hook'
+
+`rmail-retry-setup-hook'
+
+`rmail-summary-mode-hook'
+
+`scheme-indent-hook'
+
+`scheme-mode-hook'
+
+`scribe-mode-hook'
+
+`select-frame-hook'
+
+`send-mail-function'
+
+`shell-mode-hook'
+
+`shell-set-directory-error-hook'
+
+`special-display-function'
+
+`suspend-hook'
+
+`suspend-resume-hook'
+
+`temp-buffer-show-function'
+
+`term-setup-hook'
+
+`terminal-mode-hook'
+
+`terminal-mode-break-hook'
+
+`TeX-mode-hook'
+
+`tex-mode-hook'
+
+`text-mode-hook'
+
+`today-visible-calendar-hook'
+
+`today-invisible-calendar-hook'
+
+`tooltalk-message-handler-hook'
+
+`tooltalk-pattern-handler-hook'
+
+`tooltalk-unprocessed-message-hook'
+
+`unmap-frame-hook'
+
+`vc-checkin-hook'
+
+`vc-checkout-writable-buffer-hook'
+
+`vc-log-after-operation-hook'
+
+`vc-make-buffer-writable-hook'
+
+`view-hook'
+
+`vm-arrived-message-hook'
+
+`vm-arrived-messages-hook'
+
+`vm-chop-full-name-function'
+
+`vm-display-buffer-hook'
+
+`vm-edit-message-hook'
+
+`vm-forward-message-hook'
+
+`vm-iconify-frame-hook'
+
+`vm-inhibit-write-file-hook'
+
+`vm-key-functions'
+
+`vm-mail-hook'
+
+`vm-mail-mode-hook'
+
+`vm-menu-setup-hook'
+
+`vm-mode-hook'
+
+`vm-quit-hook'
+
+`vm-rename-current-buffer-function'
+
+`vm-reply-hook'
+
+`vm-resend-bounced-message-hook'
+
+`vm-resend-message-hook'
+
+`vm-retrieved-spooled-mail-hook'
+
+`vm-select-message-hook'
+
+`vm-select-new-message-hook'
+
+`vm-select-unread-message-hook'
+
+`vm-send-digest-hook'
+
+`vm-summary-mode-hook'
+
+`vm-summary-pointer-update-hook'
+
+`vm-summary-redo-hook'
+
+`vm-summary-update-hook'
+
+`vm-undisplay-buffer-hook'
+
+`vm-visit-folder-hook'
+
+`window-setup-hook'
+
+`write-contents-hooks'
+
+`write-file-data-hooks'
+
+`write-file-hooks'
+
+`write-region-annotate-functions'
+
+`x-lost-selection-hooks'
+
+`x-sent-selection-hooks'
+
+`zmacs-activate-region-hook'
+
+`zmacs-deactivate-region-hook'
+
+`zmacs-update-region-hook'