DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T l

⟦484f994be⟧ TextFile

    Length: 54223 (0xd3cf)
    Types: TextFile
    Names: »lispref-16«

Derivation

└─⟦a05ed705a⟧ Bits:30007078 DKUUG GNU 2/12/89
    └─⟦c06c473ab⟧ »./UNRELEASED/lispref.tar.Z« 
        └─⟦1b57a2ffe⟧ 
            └─⟦this⟧ »lispref-16« 

TextFile

Info file: lispref,    -*-Text-*-
produced by texinfo-format-buffer
from file: lispref.texinfo









This file documents GNU Emacs Lisp.

This is Edition 0.1 Beta of the GNU Emacs Lisp Reference Manual, for
Emacs Version 18, with some references to Emacs Version 19.

Please read this document for review purposes.

Published by the Free Software Foundation, 675 Massachusetts Avenue,
Cambridge, MA 02139 USA

Copyright (C) 1989 Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.

Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the
entire resulting derived work is distributed under the terms of a
permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that this permission notice may be stated in a translation
approved by the Foundation.



▶1f◀
File: lispref  Node: Complex Regexp Example, Prev: Regular Expressions, Up: Regular Expressions

Complex Regexp Example
----------------------

  Here is a complicated regexp, used by Emacs to recognize the end of a
sentence together with any whitespace that follows.  It is the value of
the variable `sentence-end'.

First, the regexp is given in Lisp syntax to enable you to distinguish
the spaces from the tab characters.  In Lisp syntax, the string constant
begins and ends with a double-quote.  `\"' stands for a double-quote as
part of the regexp, `\\' for a backslash as part of the regexp, `\t' for
a tab and `\n' for a newline.

     "[.?!][]\"')}]*\\($\\|\t\\|  \\)[\n]*"

In contrast, if you evaluate the variable `sentence-end', you will see
the following:

     sentence-end
     =>
     "[.?!][]\"')}]*\\($\\|  \\|  \\)[       
     ]*"

In this case, the tab and carriage return are the actual characters.

This regular expression contains four parts in succession and can be
decyphered as follows:

`[.?!]'
     The first part of the pattern consists of three characters, a
     period, a question mark and an exclamation mark, within square
     brackets.  The match must begin with one or other of these
     characters.

`[]\"')}]*'
     The second part of the pattern is the group of closing braces and
     quotation marks, which can appear zero or more times.  These may
     follow the period, question mark or exclamation mark.  The `\"' is
     Lisp syntax for a double quote in a string.  The asterisk, `*',
     indicates that the items in the previous group (the group
     surrounded by square brackets, `[]') may be repeated zero or more
     times.

`\\($\\|\t\\|  \\)'
     The third part of the pattern is one or other of: either the end of
     a line, or a tab, or two blank spaces.  The double back-slashes are
     used to prevent Emacs from reading the parentheses and vertical
     bars as part of the search pattern; the parentheses are used to
     mark the group and the vertical bars are used to indicated that the
     patterns to either side of them are alternatives.  The dollar sign
     is used to indicate the end of a line.  The TAB character is
     inserted using `\t' and the two spaces are inserted as is.

`[\n]*"'
     Finally, the last part of the pattern indicates that the end of the
     line or the whitespace following the period, question mark or
     exclamation mark may, but need not, be followed by one or more
     carriage returns.

* Function: regexp-quote STRING

       This function returns a regular expression string which matches
     exactly STRING and nothing else.  This allows you to request an
     exact string match when calling a function that wants a regular
     expression.

          (regexp-quote "^The cat$")
               => "\\^The cat\\$"

     One use of `regexp-quote' is to combine an exact string match with
     context described as a regular expression.  For example, this
     searches for the string which is the value of `string', surrounded
     by whitespace:

          (re-search-forward (concat "\\s " (regexp-quote string) "\\s "))

▶1f◀
File: lispref  Node: Regular Expression Searching, Prev: Regular Expressions, Up: Searching and Matching, Next: Replacement

Regular Expression Searching
============================


  A cluster of functions provide various features involved with regular
expression searches.  The primary function is `re-search-forward'.

* Command: re-search-forward REGEXP &optional LIMIT NOERROR REPEAT

       This function searches forward in the current buffer for a string
     of text that is matched by the regular expression REGEXP.  The
     function skips over any amount of text that is not matched by
     REGEXP, and leaves the point at the end of the first string of text
     that does match.

       If the search is successful (i.e., if there is text that is
     matched by REGEXP), then point is left at the end of that text, and
     the function returns `t'.

       If there is no text matched by REGEXP, then a `search-failed'
     error is signaled.  However, if NOERROR is `t', then if the search
     fails, `re-search-forward' returns `nil' without signaling an
     error.

       If LIMIT is supplied (it must be a number or a marker), it will
     be the maximum position in the buffer that the point can be skipped
     to.  Point will be left at or before LIMIT.  Also, the match found
     must not extend after that position.  This means that nothing can
     be found beyond the LIMIT.

       Also, if the search fails and NOERROR is neither `nil' nor `t',
     then point is moved to and left at the LIMIT position; and the
     function returns `nil'.

     If REPEAT is supplied (it must be a positive number), then the
     search is repeated that many times; and point left at the end of
     the last match found.

       When called interactively, Emacs prompts you for REGEXP in the
     minibuffer.

       In the example, point is located directly before the `T'.  After
     evaluating the form, it is located at the end of that line (between
     the `t' of `hat' and before the newline).

          ---------- Buffer: foo ----------
          I read "-!-The cat in the hat
          comes back" twice.
          ---------- Buffer: foo ----------

          (re-search-forward "[a-z]+" nil t 5)
               => t

          ---------- Buffer: foo ----------
          I read "The cat in the hat-!-
          comes back" twice.
          ---------- Buffer: foo ----------

* Command: re-search-backward REGEXP &optional LIMIT NOERROR REPEAT

       This function searches backward in the current buffer for a
     string of text that is matched by the regular expression REGEXP,
     leaving point at the beginning of the first text found.  This
     function is the exact analog of `re-search-forward'.

* Function: string-match REGEXP STRING &optional START

       This function returns the index of the start of the first match
     for the regular expression REGEXP in STRING, or `nil' if there is
     no match.  If START is non-`nil', the search is started at that
     index in STRING.

       For example,

          (string-match "quick" "The quick brown fox jumped quickly.")
               => 4
          (string-match "quick" "The quick brown fox jumped quickly." 8)
               => 27

     The index of the first character of the string is 0, the index of
     the second character is 1, and so on.

       After this function returns, the index of the first character
     beyond the match is available as `(match-end 0)'.

          (string-match "quick" "The quick brown fox jumped quickly." 8)
               => 27

          (match-end 0)
               => 32

       The `match-end' function is described along with
     `match-beginning'; *Note Match Data::.

* Function: looking-at REGEXP

       This function determines whether the text in the current buffer
     directly following the point matches the regular expression REGEXP.
     ``Directly following'' means precisely that: the search is
     ``anchored'' and it must succeed starting with the first character
     following the point.  The result is `t' if so, `nil' otherwise.

       Point is not moved, but the match data is updated and can be used
     with `match-beginning' or `match-end'.

       In the example, the point is located directly before the `T'.  If
     it were anywhere else, the result would have been `nil'.

          ---------- Buffer: foo ----------
          I read "-!-The cat in the hat
          comes back" twice.
          ---------- Buffer: foo ----------

          (looking-at "The cat in the hat$")
               => t


▶1f◀
File: lispref  Node: Replacement, Prev: Regular Expression Searching, Up: Searching and Matching, Next: Match Data

Replacement
===========

  Emacs has several replacement commands for interactive use.  For a
description of these, *Note Replacement Commands: (emacs)Replace..

  The commands include:

`replace-regexp'
     This function replaces every match of REGEXP occurring between
     point and the maximum point by REPLACEMENT, which must be a string.

`replace-string'
     This function replaces occurrences of STRING with REPLACEMENT.

The following function replaces characters, not strings, but is included
here since it involves replacement.

* Function: subst-char-in-region START END OLD-CHAR NEW-CHAR &optional NOUNDO

       This function replaces all occurrences of the character OLD-CHAR
     with the character NEW-CHAR in the region of the current buffer
     defined by START and END.

       If NOUNDO is non-`nil', then `subst-char-in-region' does not
     record the change for undo and does not mark the buffer as
     modified.  This optional argument is used for obscure purposes, for
     example, in Outline mode to change visible lines to invisible lines
     and vice versa.

       `subst-char-in-region' does not move point and returns `nil'.

          ---------- Buffer: foo ----------
          This is the contents of the buffer before.
          ---------- Buffer: foo ----------

          (subst-char-in-region 1 20 ?i ?X)
               => nil

          ---------- Buffer: foo ----------
          ThXs Xs the contents of the buffer before.
          ---------- Buffer: foo ----------


▶1f◀
File: lispref  Node: Match Data, Prev: Replacement, Up: Searching and Matching, Next: Standard Regexps

Match Data
==========

  Emacs keeps track of the positions of the start and end of segments of
text found during a regular expression search.  This means, for example,
that you can search for a complex pattern, such as a date in an rmail
message, and extract different parts of it.

* Function: match-beginning COUNT

       This function returns the position of the start of text matched
     by the last regular expression searched for.  COUNT, a number,
     specifies which subexpression to return the start position of.  If
     COUNT is zero, then it returns the position of the text matched by
     the whole regexp.  If COUNT is greater than zero, then the position
     of the beginning of the text matched by the COUNT'th subexpression
     is returned, regardless of whether it was used in the final match.

     Subexpressions are those expressions grouped inside of parentheses,
     `\(...\)'.  The COUNT'th subexpression is found by counting
     occurances of `\(' from the beginning of the whole regular
     expression.  The first subexpression is 1, the second is 2, and so
     on.

     The `match-end' function is similar to the `match-beginning'
     function except that it returns the position of the end of the
     matched text.

       (In the example, the positions in the text are numbered to make
     the results more apparent.)

          (string-match "\\(qu\\)\\(ick\\)" "The quick brown fox jumped quickly.")
               => 4                         ;^^^^^^^^^^
                                            ;0123456789      

          (match-beginning 1)                            ; The beginning of the match
               => 4                        ; with `qu' is at index 4.

          (match-beginning 2)                            ; The beginning of the match
               => 6                        ; with `ick' is at index 6.

          (match-end 1)                                  ; The end of the match
               => 6                        ; with `qu' is at index 6.

          (match-end 2)                                  ; The end of the match
               => 9                        ; with `ick' is at index 9.

     The `match-end' function is used in functions such as
     `rmail-make-basic-summary-line'.

       Here is another example.  Before the form is evaluated, the point
     is located at the beginning of the line.  After evaluating the
     search form, it is located on the line between the space and the
     word `in'.  The beginning of the entire match is at the 9th
     character of the buffer (`T'), and the beginning of the match for
     the first subexpression is at the 13th character (`c').

          (list
            (re-search-forward "The \\(cat \\)")
            (match-beginning 0)
            (match-beginning 1))
          => (t 9 13)

          ---------- Buffer: foo ----------
          I read "The cat -!-in the hat comes back" twice.
                  ^   ^
                  9  13
          ---------- Buffer: foo ----------

     (Note that in this case, the index returned is a buffer position;
     the first character of the buffer counts as 1.)

       It is essential that `match-beginning' be called after the search
     desired and before any other searches are performed.
     `match-beginning' may not give the desired results if called in a
     separate command from the search.  The example below is the wrong
     way to call `match-beginning'.
          (re-search-forward "The \\(cat \\)")
               => t
          (foo)                   ; Perhaps `foo' does more regexp searching.
          (match-beginning 0)
               => 61              ; Unexpected result!

       See the discussion of `store-match-data' for an example of how to
     save match data and restore the information after an intervening
     search.

* Function: match-end COUNT

       This function returns the position of the end of text matched by
     the last regular expression searched for.  This function is the
     exact analog of `match-beginning'.

* Function: replace-match REPLACEMENT &optional FIXEDCASE LITERAL

       This function replaces the text matched by the last search with
     REPLACEMENT.

       If FIXEDCASE is non-`nil', then the case of the replacement text
     is not changed.  Otherwise the replacement text is converted to a
     different case depending upon the capitalization of the text to be
     replaced.  If the original text is all upper case, then the
     replacement text is converted to upper case, except when all of the
     words in the original text are only one character long.  In that
     event, the replacement text is capitalized.  If *all* of the words
     in the original text are capitalized, then all of the words in the
     replacement text will be capitalized.

       If LITERAL is non-`nil', then REPLACEMENT is inserted exactly as
     it is, the only alterations being a possible change in case.  If it
     is NIL (the default), then the character `\' is treated specially.
     If a `\' appears in REPLACEMENT, then it must be followed by one of
     the following characters:

     `\&'
          `\&' is replaced by the entire original text.

     `\N'
          N is a digit.  `\N' is replaced by the N'th subexpression in
          the original regexp.  Subexpressions are those expressions
          grouped inside of `\(...\)'.

     `\\'
          `\\' is replaced by `\'.

     `replace-match' leaves the point at the end of the replacement
     text, and returns `t'.

* Function: match-data

       This function returns a new list containing all the information
     on what the last search matched.  The zero'th element is the
     beginning of the match for the whole expression; the first element
     is the end of the match for the expression.  The next two elements
     are the beginning and end of the match for the first subexpression.
     In general, the 2N'th element corresponds to `(match-beginning N)';
     and element 2N + 1 corresponds to `(match-end N)'.

     All the elements are markers, or `nil' if there was no match for
     that subexpression.  As with other search commands, there must be
     no possibility of intervening searches between the call to a search
     and the call to `match-data' that is intended to save the
     match-data for that search.

          (match-data)
          =>       (#<marker at 9 in foo> #<marker at 17 in foo>
                    #<marker at 13 in foo> #<marker at 17 in foo>)

* Function: store-match-data MATCH-LIST

       This function sets the internal data structure for the ``last
     search match'' to the elements of MATCH-LIST.  MATCH-LIST should
     have been created by calling `match-data' previously.

     Together with `match-data', `store-match-data' may be used to avoid
     changing the `match-data' if you do a regexp search.  This is
     useful when such searches occur in subroutines whose callers may
     not expect searches to go on.

     The following example illustrates the canonical use of these two
     functions.

          (let ((data (match-data)))
            (unwind-protect
                ... ; May change the original match data.
              (store-match-data data)))

       All asynchronous process functions (filters and sentinels) and
     some modes that use `recursive-edit' should save and restore the
     match data if they do a search or if they let a user make a search.
     Here is a function which will restore the match data if the buffer
     associated with it still exists.

          (defun restore-match-data (data)
            "Restore the match data DATA unless the buffer is missing."
            (catch 'foo
              (let ((d data))
                (while d
                  (and (car d)
                       (null (marker-buffer (car d)))
                       ;; match-data buffer is deleted.
                       (throw 'foo nil))
                  (setq d (cdr d)))
                (store-match-data data)
                )))

▶1f◀
File: lispref  Node: Standard Regexps, Prev: Match Data, Up: Searching and Matching, Next: Searching and Case

Standard Regular Expressions Used in Editing
============================================

* Variable: page-delimiter

     This is the regexp describing line-beginnings that separate pages.
     The default value is `"^\014"' (i.e., `"^^L"' or `"^\C-l"').

* Variable: paragraph-separate

     This is the regular expression for the beginning of a line that
     separates paragraphs.  (If you change this, you may have to change
     `paragraph-start' also.)  The default value is `"^[ \t\f]*$"',
     which is a line that consists entirely of spaces, tabs, and form
     feeds.

* Variable: paragraph-start

     This is the regular expression for the beginning of a line that
     starts *or* separates paragraphs.  The default value is `"^[
     \t\n\f]"', which means any number of spaces, tabs, newlines, and
     form feeds.

* Variable: sentence-end

     This is the regular expression describing the end of a sentence.
     All paragraph boundaries also end sentences, regardless.  Default
     value is `"[.?!][]\"')}]*\\($\\|\t\\| \\)[ \t\n]*"'.  This means a
     period, question mark or exclamation mark, followed by a closing
     brace, followed by tabs, spaces or new lines.

     For a full description of this regular expression, *Note Complex
     Regexp Example::.

▶1f◀
File: lispref  Node: Searching and Case, Prev: Standard Regexps, Up: Searching and Matching

Searching and Case
==================


  By default, searches in Emacs ignore the case of the text they are
searching through; if you specify searching for `FOO', then `Foo' and
`foo' are also considered a match.  Regexps, and in particular character
sets, are included: `[aB]' would match `a' or `A' or `b' or `B'.

  If you do not want this feature, set the variable `case-fold-search'
to `nil'.  Then all letters must match exactly, including case.  This is
a per-buffer-local variable; altering the variable affects only the
current buffer.  (*Note Buffer Local Variables::.)  Alternatively, you
may change the value of `default-case-fold-search', which is the default
value of `case-fold-search' for buffers that do not override it.

* User Option: case-replace

       This variable determines whether `query-replace' should preserve
     case in replacements.  If the variable is `nil', then case need not
     be preserved.

* User Option: case-fold-search

       This buffer-local variable determines whether searches should
     ignore case.  If the variable is `nil' they will not, if it is `t',
     then they will ignore case.

* Variable: default-case-fold-search

       The value of this variable is the default value for
     `case-fold-search' in buffers that do not override it.  This is the
     same as `(default-value 'case-fold-search)'.

▶1f◀
File: lispref  Node: Syntax Tables, Prev: Searching and Matching, Up: Top, Next: Lisp Expressions

Syntax Tables
*************


  A "syntax table" provides Emacs with the information that Emacs needs
to determine the syntatic use of each character in a buffer.  This
information is used by the parsing commands, the complex movement
commands, and others, to determine where words, symbols, and other
syntactic constructs begin and end.



  A syntax table is a vector of 256 elements; it contains one entry for
each of the 256 ASCII characters of an 8-bit byte.  Each element is an
integer which encodes the syntax of the character in question.

  Syntax tables are used only for moving across text, not for the GNU
Emacs Lisp reader.  GNU Emacs Lisp uses built-in C code to read Lisp
expressions and does not use syntax tables.

  Each different buffer may be in a different major mode, and each
different major mode may have a different definition of the syntactic
class of a given character.  For example, in Lisp mode, the character
`;' begins a comment, but in C mode, it terminates a statement.  Syntax
tables are local to each buffer, but a major mode will usually provide
the same syntax table to all buffers that use the mode.  *Note Major
Modes::, for an example of how to set up a syntax table.

* Function: syntax-table-p OBJECT

       This function returns `t' if OBJECT is a vector of length 256
     elements.  This means that the vector may be a syntax table.
     However, according to this test, any vector of length 256 is
     considered to be a syntax table, no matter what its contents.

* Menu:

* Syntax Classes::	
* Syntax Table Functions::	
* Some Standard Syntax Tables::	
* Syntax Table Internals::	

▶1f◀
File: lispref  Node: Syntax Classes, Prev: Syntax Tables, Up: Syntax Tables, Next: Syntax Table Functions

Syntax Classes
==============

  A character belongs to one of twelve "syntax classes".  Often,
different tables put characters into different classes; there does not
need be any relation between the class of a character in one table and
its class in any other.

  Most of the functions that operate on syntax tables use characters to
represent the classes; the character that represents each class is
chosen as a mnemonic.

  Here is a summary of the classes, and the characters that stand for
the classes:

`SPC'
       Whitespace syntax

`w'
       Word constituent

`_'
       Symbol constituent

`.'
       Punctuation

`('
       Open-parenthesis

`)'
       Close-parenthesis

`"'
       String quote

`\'
       Character quote

`$'
       Paired delimiter

``'
       Expression prefix operator

`<'
       Comment starter

`>'
       Comment ender


* Syntax-class: whitespace CHARACTERS

     "Whitespace characters" divide symbols and words from each other.
     Typically, whitespace characters have no other syntactic use and
     multiple whitespace characters are considered as one.  Space, tab,
     newline, formfeed are almost always considered whitespace.

* Syntax-class: word CONSTITUENTS

     "Word constituents" are parts of normal English words and are
     typically used in variable and command names in programs.  All
     upper and lower case letters and the digits are typically word
     constituents.

* Syntax-class: symbol CONSTITUENTS

     "Symbol constituents" are the extra characters, that along with
     word constituents, are used in variable and command names.  The
     symbol constituents class may be used, for example, to allow Lisp
     symbols to include extra characters without changing the notion
     that a word is an element of the English language.  In Lisp, symbol
     constituents are `$&*+-_<>'.  In standard C, the only
     non-word-constituent character that is valid in symbols is
     underscore (`_').

* Syntax-class: punctuation CHARACTERS

     "Punctuation characters" are those characters that are used as
     punctuation in English, or are used in some way in a programming
     languages to separate symbols from one another.  Most programming
     language modes, including Emacs Lisp mode, do not have any
     characters in this class since the few characters that are not
     symbol or word constituents all have other uses.

* Syntax-class: parenthesis CHARACTERS

     Open and close "parenthesis characters" come in pairs of matching
     characters that allow one to surround sentences or expressions.  In
     English text, and in C code, these are `()', `[]', and `{}'.  In
     Lisp, the list and vector delimiting characters (`()' and `[]') are
     parenthesis characters.

     Normally, Emacs shows a matching open parenthesis when you type a
     closing parenthesis.  *Note Blinking::.

* Syntax-class: string QUOTE

     In many programming languages including Lisp, a pair of "string
     quote characters" delimit a string of characters.  English text has
     no string quote characters because it is not a programming
     language.  Emacs Lisp has two string quote characters: double quote
     (`"') and vertical bar (`|'), although there is no use in Emacs
     Lisp of the ``|'' character.  C also has two string quote
     characters: double quote for strings, and single quote (`'') for
     character constants.

* Syntax-class: character QUOTE

     A "character quote character" quotes the following character such
     that it loses its normal syntax meaning.  In regular expressions,
     the backslash (`\') does this.

* Syntax-class: delimiter CHARACTERS

     Paired "delimiter characters" serve a similar purpose to string
     quote characters, but differ in that the same character is used at
     the beginning and end.  Only TeX mode uses paired delimiters
     presently---the `$' that begins and ends math mode.

* Syntax-class: expression PREFIX

     An "expression prefix operator" is used in Lisp for things that go
     next to an expression but aren't part of a symbol if they are next
     to it, such as the apostrophe, `'', used for quoting and the comma,
     `,' used in macros.

* Syntax-class: comment STARTER

     The "comment starter" and "comment ender" characters are used in
     different languages to delimit comments.  English text has no
     comment characters.  In Lisp, the semi-colon (`;') starts a comment
     and a newline or formfeed ends one.

In addition to these classes, entries for characters in a syntax table
can include flags.  At present, there are four possible flags, all of
which are intended to deal with multi-character comment delimiters.  The
four flags (represented by the characters `1', `2', `3', and `4')
indicate that the character for which the entry is being made can *also*
be part of a comment sequence.  Thus an asterisk (used for
multiplication in C) is a punctuation character, *and* the second
character of a start-of-comment sequence (`/*'), *and* the first
character of an end-of-comment sequence (`*/').

The flags for a character C are:

`1'
     means C is the start of a two-character comment start sequence.

`2'
     means C is the second character of such a sequence.

`3'
     means C is the start of a two-character comment end sequence.

`4'
     means C is the second character of such a sequence.

  Thus, the entry for the character ``*'' in the C syntax table is:
`.23' (i.e., punctuation, second character of a comment-starter, first
character of an comment--ender), and the entry for `/' is `.14' (i.e.,
punctuation, first character of a comment-starter, second character of a
comment-ender).

▶1f◀
File: lispref  Node: Syntax Table Functions, Prev: Syntax Classes, Up: Syntax Tables, Next: Some Standard Syntax Tables

Syntax Table Functions
======================

  The syntax table functions all work with strings of characters that
represent a syntax class.  The representative characters are chosen to
be mnemonic.

* Function: make-syntax-table &optional TABLE

       This function constructs a copy of TABLE and returns it.  If
     TABLE is not supplied, it returns a copy of the current syntax
     table.

       It is an error if TABLE is not a syntax table.

* Function: copy-syntax-table &optional TABLE

       This function is identical to `make-syntax-table'.

* Command: modify-syntax-entry CHAR SYNTAX-STRING &optional TABLE

       This function sets the syntax entry for CHAR according to
     SYNTAX-STRING.  The syntax is changed only for TABLE, which
     defaults to the current buffer's syntax table.  The syntax string
     defines the new syntax for the character according to the
     definitions for the representation characters (*Note Syntax
     Classes::).

       The old syntax information in the table for this character is
     completely forgotten.

       This function always returns `nil'.  It is an error if the first
     character of the syntax string is not one of the twelve syntax
     class characters.  It is an error if CHAR is not a character.

       The first example makes the SPC character an element of the class
     of whitespace.  The second example, makes ``$'' an open parenthesis
     character, with ``^'' as its matching close parenthesis character.
     The third example example makes ``^'' a close parenthesis
     character, with ``$'' its matching open parenthesis character.  The
     fourth example makes ``/'' a punctuation character, the first
     character of a start-comment sequence, and the second character of
     an end-comment sequence.

          (modify-syntax-entry ?\  " ")  ; space
               => nil

          (modify-syntax-entry ?$ "(^")
               => nil
          (modify-syntax-entry ?^ ")$")
               => nil

          (modify-syntax-entry ?/ ".13")
               => nil

* Function: char-syntax CHARACTER

       This function returns the syntax class of CHARACTER, represented
     by its mnemonic character.  This *only* returns the class, not any
     matching parentheses, or flags.

       It is an error if CHAR is not a character.

       The first example shows that the syntax class of space is
     whitespace (represented by a space).  The second example shows that
     the syntax of ``/'' is punctuation in C-mode.  This does not show
     the fact that it is also a comment sequence character.  The third
     example shows that open parenthesis is in the class of open
     parentheses.  This does not show the fact that it has a matching
     character, ``)''.

          (char-to-string (char-syntax ? ))
               => " "

          (char-to-string (char-syntax ?/))
               => "."

          (char-to-string (char-syntax ?( ))
               => "("

* Function: set-syntax-table TABLE

       This function makes TABLE the syntax table for the current
     buffer.  It returns TABLE.

* Function: syntax-table

       This function returns the current syntax table.  This is the
     table for the current buffer.

* Function: backward-prefix-chars

       This function moves the point backward over any number of chars
     with syntax PREFIX.  *Note Syntax Tables::, to find out about
     prefix characters.

* command: describe-syntax

       This function describes the syntax specifications of the current
     syntax table.  It makes a listing in the `*Help*' buffer, and then
     pops up a window to view this in.

       It returns `nil'.

     A portion of a description is shown below.
          (describe-syntax)
               => nil

          ---------- Buffer: *Help* ----------
          C-q             \       which means: escape
          C-r .. C-_              which means: whitespace
          !               .       which means: punctuation
          (               ()      which means: open, matches )
          )               )(      which means: close, matches (
          * .. +          _       which means: symbol
          ,               .       which means: punctuation
          -               _       which means: symbol
          .               .       which means: punctuation
          /               . 13    which means: punctuation,
                    is the first character of a comment-start sequence,
                    is the first character of a comment-end sequence
          0 .. 9          w       which means: word
          ---------- Buffer: *Help* ----------

▶1f◀
File: lispref  Node: Some Standard Syntax Tables, Prev: Syntax Table Functions, Up: Syntax Tables, Next: Syntax Table Internals

Some Standard Syntax Tables
===========================

  Each of the major modes in Emacs has its own syntax table.  Here are
several of them:

* Function: standard-syntax-table

       This function returns the standard syntax table.  This is the
     syntax table used in Fundamental mode.

* Variable: text-mode-syntax-table

       The value of this variable is the syntax table used in text mode.

* Variable: c-mode-syntax-table

       The value of this variable is the syntax table in use in C-mode
     buffers.

* Variable: emacs-lisp-mode-syntax-table

       The value of this variable is the syntax table used in Emacs Lisp
     mode by editing commands.  (It has no effect on the Lisp `read'
     function.)

▶1f◀
File: lispref  Node: Syntax Table Internals, Prev: Some Standard Syntax Tables, Up: Syntax Tables

Syntax Table Internals
======================

  Each element of a syntax table is an integer which translates into the
full meaning of the entry: class, possible matching character, and
flags.  However, it is not common for a programmer to work with the
entries directly in this form since the syntax table functions all
expect a string of representative characters.  In such a string, the
first character of the string will always be the class of the character;
the second character will be the matching parenthesis (if it is a
parenthesis character); and the subsequent characters will be the flags,
if any.

    The low 8 bits of each element of a syntax table indicates the
syntax class.

`Integer'
     Class
`0'
     whitespace
`1'
     punctuation
`2'
     word
`3'
     symbol
`4'
     open paren
`5'
     close paren
`6'
     expression prefix
`7'
     string quote
`8'

`9'
     character quote
`10'

`11'
     comment-start
`12'
     comment-end

  The next 8 bits are the matching opposite parenthesis (if the
character has parenthesis syntax); otherwise, they are not meaningful.
The next 4 bits are the flags.
▶1f◀
File: lispref  Node: Lisp Expressions, Prev: Syntax Tables, Up: Top, Next: Abbreviations

Lisp Expressions
****************

  Here are several functions for parsing and scanning Lisp expressions.

* Function: parse-partial-sexp START LIMIT &optional TARGET-DEPTH STOP-BEFORE STATE

       This function parses Lisp syntax in the current buffer starting
     at START and not reading past LIMIT.  It returns the status of the
     parse at LIMIT.  Parsing stops at LIMIT or when certain criteria
     are met described below; point is set to where parsing stops.

       Normally, START is assumed to be the top level of a form to be
     parsed, such as the beginning of a function definition.  If you
     wish to continue a previous parse, you must provide a STATE
     argument, which describes the initial status of parsing.  If STATE
     is omitted (or `nil'), parsing assumes that START is the beginning
     of a new parse at level 0.

       If the third argument TARGET-DEPTH is non-`nil', parsing stops if
     the depth in parentheses becomes equal to TARGET-DEPTH.  The depth
     starts at 0, or at whatever is given in STATE.

       If the fourth argument STOP-BEFORE is non-`nil', parsing stops
     when it comes to any character that starts a sexp.

       The fifth argument STATE is a seven-element list in the same form
     as this function returns, described below.  the return value of one
     call may be used to initialize the state of the parse on another
     call to `parse-partial-sexp'.

       The result is a list of seven elements describing the final state
     of the parse:

       1. Depth in parens, starting at 0.

       2. Character position of the start of the innermost containing
          list; `nil' if none.

       3. Character position of the start of the last complete sexp
          terminated; `nil' if none.

       4. Non-`nil' if inside a string.  (It is the character that will
          terminate the string.)

       5. `t' if inside a comment.

       6. `t' if point is just after a quote character.

       7. The minimum paren-depth encountered during this scan.

       Elements 1, 4, 5, and 6 are significant in the argument STATE.

     This function is used to determine how to indent lines of programs
     that have nested lists.

* Function: scan-lists FROM COUNT DEPTH

       This function scals from character number FROM by COUNT lists.
     It returns the character number of the position thus found.

       If DEPTH is nonzero, parenthesis depth counting begins from that
     value.  Only places where the depth in parentheses becomes zero are
     candidates for stopping; COUNT such places are counted.  Thus, a
     positive value for DEPTH means go out levels of parenthesis.

       Comments are ignored if `parse-sexp-ignore-comments' is
     non-`nil'.

       If the beginning or end of (the accessiblepart of) the buffer is
     reached and the depth is not zero, an `end-of-file' error is
     signaled.  If the depth is zerobut the count is not used up, `nil'
     is returned.

* Function: scan-sexps FROM COUNT

       Scan from character number FROM by COUNT balanced expressions.
     Returns the character number of the position thus found.

       Comments are ignored if `parse-sexp-ignore-comments' is
     non-`nil'.

       If the beginning or end of (the accessible part of) the buffer is
     reached in the middle of a parenthetical grouping, an `end-of-file'
     error is signaled.  If the beginning or end is reached between
     groupings but before count is used up, `nil' is returned.

* Variable: parse-sexp-ignore-comments

       Non-`nil' means `forward-sexp', etc., should treat comments as
     whitespace.  Non-`nil' works only when the comment terminator is
     something like `*/', and appears only when it ends a comment.  If
     comments are terminated by newlines, you must make this variable
     `nil', since not every newline is the end of a comment.  (In
     version 19, this limitation is removed.)
▶1f◀
File: lispref  Node: Abbreviations, Prev: Lisp Expressions, Up: Top, Next: Processes

Abbreviations
*************

  An abbreviation or "abbrev" is a string of characters that may be
expanded to a longer string.  If you type a part of an abbreviation,
Emacs replaces the abbreviation with the full string.  This saves typing
and makes life easier.

  The set of abbrevs currently in effect is recorded in an "abbrev
table".  Each buffer can have its own abbrev table, but normally all
buffers in the same major mode share one abbrev table.

  An abbrev table is represented as an obarray containing non-canonical
symbols, one for each abbreviation.  The symbol's name is the
abbreviation.  Its value is the expression; its function definition is
the hook; its property-list slot contains the number of times the
abbreviation has been expanded.

  Use of all the abbreviation-related commands is described in the GNU
Emacs User Manual *Note Abbrev Mode: (emacs)Abbrev Mode.
* Menu:

* Abbrev Mode::			Setting up Emacs for abbreviation.
* Tables: Abbrev Tables.	Creating and working with abbrev tables.
* Defining Abbrevs::		Specifying what to use as abbreviations.
* Files: Abbrev Files.		Saving abbrevs in files.
* Expansion: Abbrev Expansion.	Controlling expansion; expansion subroutines.
* Standard Abbrev Tables::	Several standard tables.

▶1f◀
File: lispref  Node: Abbrev Mode, Prev: Abbreviations, Up: Abbreviations, Next: Abbrev Tables

Setting Up Abbrev Mode    
==========================

Abbrev mode is a minor mode controlled by the value of the variable
`abbrev-mode'.

* Variable: abbrev-mode

     A non-`nil' value of this variable turns on the automatic expansion
     of abbrevs when their abbreviations are inserted into a buffer.  If
     the value is `nil', abbrevs may be defined, but they are not
     expanded automatically.

     Automatically becomes local when set in any fashion.

* Variable: default-abbrev-mode

     This is the value `abbrev-mode' for buffers that do not override
     it.  This is the same as `(default-value 'abbrev-mode)'.

▶1f◀
File: lispref  Node: Abbrev Tables, Prev: Abbrev Mode, Up: Abbreviations, Next: Defining Abbrevs

Abbrev Tables
=============

* Function: make-abbrev-table

     This function creates a new, empty abbrev table---an obarray with
     no symbols.  It is a vector filled with `nil's.

* Function: clear-abbrev-table TABLE

     This function undefines all the abbrevs in abbrev table TABLE,
     leaving it empty.

* Function: define-abbrev-table TABNAME DEFINITIONS

     This function defines TABNAME (a symbol) as an abbrev table name,
     i.e., as a variable whose value is an abbrev table.  Define abbrevs
     in the table according to DEFINITIONS, a list of elements of the
     form `(ABBREVNAME EXPANSION HOOK USECOUNT)'.

* Variable: abbrev-table-name-list

     This is a list of symbols whose values are abbrev tables.
     `define-abbrev-table' adds the new abbrev table name to this list.

* Function: insert-abbrev-table-description NAME HUMAN

     This function inserts before point a description of the abbrev
     table named NAME.  NAME is a symbol whose value is an abbrev table.

     If HUMAN is non-`nil', a human-oriented description is inserted.
     Otherwise the description is a Lisp expression---a call to
     `define-abbrev-table' which would define NAME exactly as it is
     currently defined.

▶1f◀
File: lispref  Node: Defining Abbrevs, Prev: Abbrev Tables, Up: Abbreviations, Next: Abbrev Files

Defining Abbrevs
================

* Function: add-abbrev TABLE TYPE ARG

     This function adds an abbreviation to abbrev table TABLE.  TYPE is
     a string saying what kind of abbrev this is (global or
     mode-specific, or whatever).  ARG is the number of words in the
     expansion.

* Function: define-abbrev TABLE NAME EXPANSION HOOK

     This function defines an abbrev in TABLE named NAME, to expand to
     EXPANSION, and call HOOK.  NAME and EXPANSION are strings.

     HOOK is a function or `nil'.  If HOOK is non-`nil', then it is
     called with no arguments after the abbrev is replaced with
     EXPANSION; point is located at the end of EXPANSION.

     The use-count of the abbrev is initialized to zero.

     To undefine an abbrev, define it with EXPANSION = `nil'

* User Option: only-global-abbrevs

     If the the value of this variable is `t', it means that the user
     plans to use global abbrevs only.  This makes the commands that
     define mode-specific abbrevs define global ones instead.

* Variable: edit-abbrevs-map

     This is the keymap used in `edit-abbrevs'.

▶1f◀
File: lispref  Node: Abbrev Files, Prev: Defining Abbrevs, Up: Abbreviations, Next: Abbrev Expansion

Saving Abbrevs in Files
=======================

* User Option: abbrev-file-name

     This is the default name of the file to read abbrevs from and to
     save them in.

* Function: quietly-read-abbrev-file FILE

     This function reads abbrev definitions from a file named FILE,
     previously written with `write-abbrev-file'.  If FILE is `nil', the
     file specified in `abbrev-file-name' is used.  `save-abbrevs' is
     set to `t' so that changes will be saved.

     This function does not print anything.

* User Option: save-abbrevs

     A non-`nil' value for `save-abbrev' means that Emacs should save
     word abbrevs when files are saved.  `abbrev-file-name' specifies
     the file to save in.

* Variable: abbrevs-changed

     This variable is set non-`nil' by defining or altering any word
     abbrevs.  This serves as a flag for various Emacs commands to offer
     to save your abbrevs.

* Command: write-abbrev-file FILE

     Save all abbrev definitions, in all abbrev tables, in file FILE as
     a Lisp program which will redefine the abbrevs when it is run.

▶1f◀
File: lispref  Node: Abbrev Expansion, Prev: Abbrev Files, Up: Abbreviations, Next: Standard Abbrev Tables

Looking Up and Expanding Abbreviations
======================================

  Abbrevs are usually expanded by commands for interactive use, or
automatically by `self-insert'.  This section describes the subroutines
used in writing such functions, and the variables they use for
communication.

* Function: abbrev-symbol ABBREV TABLE

     This function returns the symbol representing the abbrev named
     ABBREV.  The value returned is `nil' if that abbrev is not defined.
     The optional second argument TABLE is the abbrev table to look it
     up in.  By default, this function tries the buffer's mode-specific
     abbrev table, and then the global table.

* User Option: abbrev-all-caps

     When this is set non-`nil', Emacs expands multi-word abbrevs using
     all upper case letters if the abbrev was all in upper case.

* Function: abbrev-expansion ABBREV &optional TABLE

     This function returns the string that ABBREV expands into in the
     current buffer.  Optionally specify an abbrev TABLE; then ABBREV is
     looked up in that table only.

* Variable: abbrev-start-location

     This is the buffer position for `expand-abbrev' to use as the start
     of the abbrev to expand.  `nil' means use the word before point as
     the abbrev.  `abbrev-start-location' is set to `nil' each time
     `expand-abbrev' is called.  This variable is set by
     `abbrev-prefix-mark'.

* Variable: abbrev-start-location-buffer

     The value of this variable is the buffer that
     `abbrev-start-location' has been set for.  Trying to expand an
     abbrev in any other buffer clears `abbrev-start-location'.  This
     variable is set by `abbrev-prefix-mark'.

* Variable: last-abbrev

     This is the `abbrev-symbol' of the last abbrev expanded.  This
     contains information left by `expand-abbrev' for the sake of the
     `unexpand-abbrev' command.

* Variable: last-abbrev-location

     This is the location of the last abbrev expanded.  This contains
     information left by `expand-abbrev' for the sake of the
     `unexpand-abbrev' command.

* Variable: last-abbrev-text

     This is the exact expansion text of the last abbrev expanded, as
     results from case conversion.  Its value is `nil' if the abbrev has
     already been unexpanded.  This contains information left by
     `expand-abbrev' for the sake of the `unexpand-abbrev' command.

▶1f◀
File: lispref  Node: Standard Abbrev Tables, Prev: Abbrev Expansion, Up: Abbreviations

Standard Abbrev Tables
======================

* Variable: global-abbrev-table

     This is the abbrev table whose abbrevs affect all buffers.  Each
     buffer may also have a local abbrev table.  If it does, the local
     table overrides the global one for any particular abbrev defined in
     both.

* Variable: local-abbrev-table

     The value of this buffer-local variable is the (mode-specific)
     abbreviation table of the current buffer.

* Variable: fundamental-mode-abbrev-table

     This is the fundamental abbrev table of mode-specific abbrevs for
     Fundamental mode.

* Variable: text-mode-abbrev-table

     This s the local abbrev table used in Text mode.

* Variable: c-mode-abbrev-table

     This is the local abbrev table used in C mode.

* Variable: lisp-mode-abbrev-table

     This is the local abbrev table used in Lisp mode and Emacs Lisp
     mode.

▶1f◀
File: lispref  Node: Processes, Prev: Abbreviations, Up: Top, Next: Operating System Interface

Processes
*********

  A subprocess of Emacs is represented within Emacs by an object called
a "process".  Creating a new (asynchronous) subprocess of Emacs results
in the creation of a process object to represent it for use by Emacs
Lisp.

  Emacs provides functions for manipulating processes in most of the
ways you might desire: you may send signals, obtain information from
processes, and so on.

  I/O for a process can be handled in several different ways by the
operating system.  The standard I/O may be directed though a pipe, or
through a "pseudo terminal" (or ``pty'').

* Menu:

* Functions that Create Subprocesses::	
* Creating a Synchronous Process::	
* Creating an Asynchronous Process::	
* Deleting Processes::	
* Process Information::	
* Sending Input to Processes::	
* Sending Signals to Processes::	
* Receiving Information from Processes::	
* Subprocess Functions for VMS::	
* TCP::	

* Function: processp OBJECT

      This function returns `t' if OBJECT is a process, `nil' otherwise.

▶1f◀
File: lispref  Node: Functions that Create Subprocesses, Prev: Processes, Up: Processes, Next: Creating a Synchronous Process

Functions that Create Subprocesses
==================================

  There are three functions that create a new Unix subprocess in which
to run a program.  The first, `start-process', creates an asynchronous
process and returns a process object.  The other two, `call-process' and
`call-process-region', create a synchronous process and do not return a
process object.  Synchronous and asychonous processes are explained in
following sections.  (*Note Creating an Asynchronous Process::, and
*Note Creating a Synchronous Process::.)  Since the three functions are
all called in a similar fashion, their common arguments are described
here.

  In all cases, the program to be run, named by the function's PROGRAM
argument, is found by following the normal rules for Unix: if an
absolute file name is given for the program, then the program must be
found in the specified place.  If a relative file name is given, then
the program is searched for in each of the directories in `exec-path',
which is set to the user's `PATH' variable on entering Emacs.  The
standard symbols, `~', `.', and `..', are interpreted the same as by
Unix shells.  Environment variables (`HOME', etc.) are not substituted
for.  See `expand-file-name' in *Note Relative File Names::.  It is an
error if the program is not found.

  Each of the subprocess creating functions has a BUFFER-OR-NAME
argument.  This argument specifies where the standard output from the
program will go.  BUFFER-OR-NAME may be either a buffer or the name of
one; the buffer will be created if it does not already exist.  If
BUFFER-OR-NAME is `nil', then the output will be discarded by directing
it to `/dev/null' unless a filter function is specified to handle it.
(*Note Process Filters::, and *Note Streams::.)  Normally, you do not
want more than one process to send output to the same buffer because the
outputs will be intermixed randomly.

  All three of the subprocess creating functions have a `&rest'
argument, ARGS.  The ARGS must all be strings, and they are supplied to
PROGRAM as separate command line arguments.  *Note* that the argument
PROGRAM is only the name of the program; it may not contain any
arguments for the PROGRAM.

  Subprocesses also inherit an environment from Emacs; but you can
specify overrides for it with `process-environment'.

* Variable: process-environment

       This global variable is a list of strings to append to the
     environment of processes that are started.  Each string assigns a
     value to a shell environment variable.  (This applies both to
     asynchronous and synchronous processes.)

          process-environment
          => ("l=/usr/stanford/lib/gnuemacs/lisp"
              "PATH=.:/user/lewis/bin:/usr/class:/nfsusr/local/bin"
              "USER=lewis" 
              "TERM=ibmapa16" 
              "SHELL=/bin/csh"
              "HOME=/user/lewis")

* Variable: exec-directory

       The value of this variable is the name of a directory (a string)
     that contains programs that come with GNU Emacs, which are intended
     for Emacs to invoke.  The program `loadst' is an example of such a
     program; it is used by the `display time' command and prints a
     string of the current time one per minute minute.  We sometimes
     refer to the default value of the `exec-directory' as `emacs/etc'.

* User Option: exec-path

       The value of this variable is a list of directories to search for
     programs to run in subprocesses.  Each element is either the name
     of a directory (i.e., a string), or `nil', which stands for the
     default directory (which is the value of `default-directory').

       ` exec-path' is used by `call-process' or `start-process' when
     its PROGRAM argument does not contain an absolute file name.

▶1f◀