|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T l
Length: 60971 (0xee2b)
Types: TextFile
Names: »lispref-15«
└─⟦a05ed705a⟧ Bits:30007078 DKUUG GNU 2/12/89
└─⟦c06c473ab⟧ »./UNRELEASED/lispref.tar.Z«
└─⟦1b57a2ffe⟧
└─⟦this⟧ »lispref-15«
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: The Kill Ring, Prev: Deletion, Up: Text, Next: Undo
The Kill Ring
=============
Emacs keeps a number of the last sections of text that were deleted by
the user. These sections of text are kept on a list called the
`kill-ring'. Several functions manipulate this list; they treat it as a
ring rather than as a list.
The kill ring and its associated functions help the user move text
around, make it easy to change his or her mind, and help him or her
recover from accidents.
Some people think use of the word `kill' in Emacs is unfortunate,
since it refers to processes which specifically *do not* destroy the
entities `killed'. This is in sharp contrast to ordinary life, in which
death is permanent, and `killed' entities seldom come back to life. A
different metaphor might have been more intuitive. For example, the
term `cut ring' makes sense to people who, in pre-computer days, used
scissors and paste to cut up and rearrange manuscripts. Others most
readily understand a metaphor incorporating concepts of `attic' or
`closet'; and yet others, who think of text as being `clipped' from the
buffer, prefer a term such as `clip ring'.
* Menu:
* Kill Ring Data Structures::
* Kill Functions::
* Yank Commands::
* Kill Ring Internals::
▶1f◀
File: lispref Node: Kill Ring Data Structures, Prev: The Kill Ring, Up: The Kill Ring, Next: Kill Functions
Kill Ring Data Structures
-------------------------
Killed text is kept as strings in a list. A short kill ring, for
example, might look like this:
("some text" "a different piece of text" "yet more text")
Functions which push more text into the list first make a string of
the text in question (using `buffer-substring'), and then look at the
length of the list. If the length is longer than the value of
`kill-ring-max', the last entry in the list is dropped off when the new
entry is put on.
The `kill-ring-yank-pointer' global variable points to the kill ring
entry that a "yank" function will copy. Several functions move this
pointer from one entry to another, and a user can thereby specify which
entry to copy.
Here is a diagram that shows the variable `kill-ring-yank-pointer'
pointing to the second entry in the kill ring `("some text" "a different
piece of text" "yet more text")'.
kill-ring kill-ring-yank-pointer
| |
| ___ ___ | ___ ___ ___ ___
--> | | | ---> | | | | | |
|___|___|------> |___|___|--> |___|___|--> nil
| | |
| | |
| | -->"yet more text"
| |
| --> "a different piece of text"
|
--> "some text"
(This circumstance occurs when `C-y' (`yank') is immediately followed by
`M-y' (`yank-pop').)
Both `kill-ring' and `kill-ring-yank-pointer' are variables like other
Lisp variables. Both are bound to lists. The word `pointer' is used in
the name of the `kill-ring-yank-pointer' variable to tell human readers
that the purpose of the variable is to point to the element of the list
that will be copied to the buffer when the user gives a yank command.
The functions that change the entry to which the
`kill-ring-yank-pointer' points treat the kill ring (which is a list) as
if it were a ring; that is to say, a change that would otherwise cause
the pointer to point to an entry beyond the end of the list (which would
be useless) instead causes the pointer to point to the first entry on
the list. Hence, movement of the `kill-ring-yank-pointer' is called
"rotation".
The `kill-ring-yank-pointer' variable can be moved in the `reverse'
direction from the end of the list to the beginning; but only one step
at a time; and it cannot be moved from the first entry to the last entry
in the `reverse' direction. The ring is a one way rotary.
Kill commands always place their new text in the beginning of
`kill-ring', and they always reset `kill-ring-yank-pointer' to point to
the first entry of `kill-ring'. The first entry will be the new entry;
consequently, the next `yank' command will copy the new entry into a
buffer, as the user expects.
After `kill-ring-yank-pointer' is reset to point to the first entry of
`kill-ring', `kill-ring' and `kill-ring-yank-pointer' are `eq' to each
other.
`kill-region' is the primary function for programs to use that kill
text. Any command that calls this function is a ``kill command'' (and
should contain the word ``kill'' in its name).
When kill commands are interwoven with other commands, the killed
portions of text are put into separate entries in the kill ring. But
when two or more kill commands are executed in sequence, the text killed
by the second (or third, etc.) kill command is appended to the text
killed by the first command so as to make one entry in the kill ring.
The `kill-region' function uses the `last-command' variable to keep
track of whether the previous was a kill command, in which case, it
appends the killed text to the current entry.
▶1f◀
File: lispref Node: Kill Functions, Prev: Kill Ring Data Structures, Up: The Kill Ring, Next: Yank Commands
Entry Points for Killing
------------------------
* Command: kill-region START END
This function kills the text in the region defined by START and
END. The text is deleted but saved in the kill ring.
When called interactively, START and END are point and mark.
* Command: kill-line &optional COUNT
This function kills the rest of the line following point, not
including the newline. If point is directly before a newline, or
if there is only whitespace between point and the newline, then it
kills the whitespace and newline.
If COUNT is supplied, then it kills that many lines (*including*
the newline). (This makes executing `(kill-line 2)' different from
executing `(kill-line)' two times.) If COUNT is negative, then
`kill-line' kills lines backwards.
When called interactively, COUNT is the unprocessed prefix
argument (which then gets processed if non-`nil').
* Command: zap-to-char COUNT CHARACTER
The Emacs Version 19 implementation of this function kills all
text in the region from point up to and including COUNT the next
occurrence of CHARACTER. Thus, if the cursor were at the beginning
of this sentence and the character were `s', `Thus' would be
removed. If the argument were two, `Thus, if the curs' would be
removed, up to and including the `s' in `cursor'.
The Emacs Version 18 implementation of the function removes the
text from point up to *but not including* the specified character.
Thus, in the example shown in the previous paragraph, the `s' would
*not* be removed.
In addition, the Version 18 implementation will kill text to the
end of the buffer if the specified character is not found; but the
Version 19 implementation will simply generate an error (and not
remove any text).
The function zaps backward if COUNT is negative. The killed text
is put in the kill ring.
* Command: copy-region-as-kill START END
This function saves the region defined by START and END on the
kill ring, but does not delete the text from the buffer.
When called interactively, START and END are point and mark.
▶1f◀
File: lispref Node: Yank Commands, Prev: Kill Functions, Up: The Kill Ring, Next: Kill Ring Internals
Entry Points for Yanking
------------------------
* Command: yank &optional ARG
This function inserts the text in the first entry in the kill
ring directly before point. After the yank, the mark is positioned
at the beginning and point is positioned after the end of the
inserted text.
If ARG is a list (which as passed an an interactive argument when
a user types must `C-u'), then `yank' inserts the text as described
above, but puts point in front of the yanked text and the mark at
the end of the yanked text. If ARG is a number, then `yank'
inserts the ARG'th most recently killed text.
* Command: yank-pop ARG
This function replaces the just-yanked text with a different
piece of killed text. This command is allowed only immediately
after a `yank' or a `yank-pop'. At such a time, the region
contains text that was just inserted by the previous `yank'.
`yank-pop' deletes that text and inserts in its place a different
stretch of killed text.
If ARG is `nil', then the previously inserted text in the region
is deleted (and not reinserted into the kill ring since it is
already on the kill ring), and the previous element of the kill
ring is inserted. If ARG is numeric, then the ARG'TH previous kill
is inserted. If ARG is negative, then this is a more recent kill.
The sequence of kills wraps around, so that after the oldest one
comes the newest one. (However, the reverse wrap is not possible;
you can step backward through the list, but not beyond the
beginning.)
▶1f◀
File: lispref Node: Kill Ring Internals, Prev: Yank Commands, Up: The Kill Ring
Internals of the Kill Ring
--------------------------
* Variable: kill-ring
List of killed text sequences.
* Variable: kill-ring-yank-pointer
This global variable is the CDR of the kill ring whose CAR is the
last thing yanked. The `yank-pop' and `rotate-yank-pointer'
commands move this pointer around in the kill ring. A kill always
resets this variable to point the beginning of the kill ring (that
is, to bind the value of the variable to the whole kill ring).
* Command: rotate-yank-pointer COUNT
This function rotates `kill-ring-yank-pointer' COUNT positions in
the kill ring. In other words, it rebinds `kill-ring-yank-pointer'
to a different CDR of the kill ring, or to the whole kill ring.
* User Option: kill-ring-max
The value of this global variable is the maximum length to which
the kill ring can grow, before elements are thrown away on a
first-in, first-out basis. The default value for `kill-ring-max'
is 30.
▶1f◀
File: lispref Node: Undo, Prev: The Kill Ring, Up: Text, Next: Auto Filling
Undo
====
Each buffer has its own private undo stack. Stack size is limited, so
large changes or a large number of changes cannot be undone.
* Command: undo &optional ARG
This function undoes some previous changes. By repeating this
command you can undo more changes. A numeric argument serves as a
repeat count.
* Function: undo-boundary
This function places a boundary between units of undo. Each undo
command stops at such a boundary; and the next undo command will
undo to the previous boundary.
There is an implicit undo boundary between each key-stroke
command, such as `kill-word'. Thus, each undo undoes the effects
of one command.
This function is used inside of `query-replace', between each
replacement, so that individual replacements can be undone one by
one.
* Function: undo-more COUNT
This function is used to undo changes back COUNT boundaries
beyond what was already undone recently.
* Function: undo-start
This function moves the undo-pointer to the beginning of the undo
stack. This means that the next call to `undo-more' will undo the
most recently made change. This function breaks a sequence of
undo's, so a subsequent call to `undo-more' will undo a previous
change that is itself the result of an undo. This is what you use
to undo your undoing (i.e., redo).
To prepare Emacs to undo a recent sequence of changes, call
`undo-start'; then call `undo-more' one or more times to undo them.
* Command: buffer-enable-undo &optional BUFFER-OR-NAME
This function starts keeping undo information for buffer
BUFFER-OR-NAME. If no argument is supplied, then the current
buffer is used. If the buffer is already keeping undo information,
then nothing is changed.
This function returns `nil'.
When called interactively, BUFFER-OR-NAME is the current buffer.
* Function: buffer-flush-undo BUFFER-OR-NAME
This function makes the buffer BUFFER-OR-NAME stop keeping undo
information, and flushes the information it has kept thus far. If
the buffer is not keeping undo information, then nothing is
changed.
This function returns `nil'.
▶1f◀
File: lispref Node: Auto Filling, Prev: Undo, Up: Text, Next: Filling
Auto Filling
============
"Filling" breaks text into lines that are no more than a specified
number of columns wide. Lines end between words, and thus may be
shorter than the maximum length, unless the line is "justified" in which
case, spaces are inserted between words so that the last letter of the
last word on the line is on the last column.
In Auto Fill mode, Emacs fills lines automatically. This section
describes the hook and the two variables used by Auto Fill mode.
For a description of functions that you can call manually to fill and
justify text, *Note Filling::.
As a practical matter, if you are writing text that you hope other
people will read, you should set the value of `fill-column' to no more
than 70. Otherwise the line will be too long for people to read
comfortably; and they will think your writing is clumsy even if it
isn't!
* Variable: auto-fill-hook
The value of this variable should be a function (of no arguments)
to be called after self-inserting a space at a column beyond
`fill-column'. It may be `nil', in which case, nothing special is
done.
The default value for `auto-fill-function' is `do-auto-fill'.
In version 18, `auto-fill-function' is called `auto-fill-hook';
but since `auto-fill-hook' is not called by the `run-hooks'
function, it is being re-named `auto-fill-function' in Version 19.
* User Option: fill-column
This buffer-local variable controls how wide lines are filled.
It should be an integer which is interpreted as a column. If
automatic line-wrapping is turned on, then any text typed beyond
this column is wrapped onto the next line. The command
`fill-paragraph' adjusts the lines the paragraph which point is in
so that it ends at this column.
* Variable: default-fill-column
The value of this variable is the default value for `fill-column'
in buffers that do not override it. This is the same as
`(default-value 'fill-column)'.
The default value for `default-fill-column' is 70.
▶1f◀
File: lispref Node: Filling, Prev: Auto Filling, Up: Text, Next: Sorting
Filling
=======
"Filling" means adjusting the lengths of lines so that line-breaks
occur between rather than within words; and lines have a specified
maximum length. If a line is justified as will as filled, then spaces
are inserted between the words so that the last letter of the last word
on the line is on the specified column. For ease of reading, lines
should be no longer than 70 or so columns.
Emacs has facilities for automatically filling text as you write it,
but changes to existing text may leave it improperly filled. Then you
must fill the text explicitly.
* Command: fill-paragraph JUSTIFY-FLAG
This function fills the paragraph at or after point. If
JUSTIFY-FLAG is non-`nil', each line is justified as well.
* Command: fill-region START END &optional JUSTIFY-FLAG
This function fills each of the paragraphs in the region from
start to end. The function justifies the paragraph if it is called
interactively with a prefix argument, or if it is called from a
program with a non-`nil' JUSTIFY-FLAG.
The function uses the value of `paragraph-separate' to distinguish
paragraphs.
* Command: fill-individual-paragraphs START END &optional JUSTIFYP MAILP
This function fills each paragraph in the region according to its
individual fill prefix. Thus, if the lines of a paragraph are
indented with spaces, the filled paragraph will continue to be
indented in the same fashion.
The first two arguments, START and END, are the beginning and end
of the region that will be filled. The third and fourth arguments,
JUSTIFYP and MAILP, are optional. If JUSTIFYP is non-`nil', the
paragraphs are justified as well as filled. If MAILP is non-`nil',
the function is told that it is operating on a mail message and
that it should not fill the header lines.
* Command: fill-region-as-paragraph START END &optional JUSTIFY-FLAG
This function considers a region of text as paragraph and fills
it. If the region was made up of many paragraphs, the blank lines
between paragraphs are removed. This function justifies the region
when called interactively with a non-`nil' prefix argument, or when
called from a program with a non-`nil' third argument.
* Command: justify-current-line
This function inserts spaces between the words of the line point
is in so that the line ends at `fill-column'.
▶1f◀
File: lispref Node: Sorting, Prev: Filling, Up: Text, Next: Indentation
Sorting
=======
The sorting commands described in this section all rearrange text in a
buffer. In contrast, the function `sort' rearranges the order of the
elements of a list. (*Note Rearrangement::.)
* Command: sort-regexp-fields REVERSE RECORD-REGEXP KEY START END
This command sorts the region between START and END
lexicographically as specified by RECORD-REGEXP and KEY.
`Lexicographic' means that the function compares the first
characters of each field, the second characters, and so on. One
field is less than a second field in the ordering when compared
characters do not match; the firld whose character is less than the
other is the lessor field. One character is considered to be less
than another if its numerical value as a character is less than the
other. Since Emacs uses the ASCII character set, the ordering in
that set determines lexicographic order.
The value of the RECORD-REGEXP argument specifies the textual
units or "records" that should be sorted. For example, to sort
lines, the value of RECORD-REGEXP would be `^.*$', which matches
lines with at least one character besides a newline.
(*Note Regular Expressions::, for a description of the syntax and
meaning of regular expressions.)
The value of the KEY argument specifies what of each record is to
be used for sorting. The KEY could match the whole record, but it
may be just a part of the record. In the latter case, the part of
each record that is not used for sorting has no effect on the sort.
The KEY argument can refer to match-fields within the regular
expression for the record; or it can be a regular expression on its
own.
If KEY is:
`\DIGIT'
The DIGIT'th `\(...\)' match field from RECORD-REGEXP is used
for sorting.
`\&'
The whole record is used for sorting.
a regular-expression
The function searches for a matchfor the regular-expression
within the record. If such a match is found, it is used for
sorting. If a match for KEY is not found within a record then
that record is ignored, which means its position in the buffer
is not changed.
The `sort-regexp-fields' function sorts in reverse order when the
first argument, REVERSE, is negative. Called interactively, it
sorts in reverse order when passed by a negative prefix argument.
For example, if you plan to sort all the lines in the region by
the first word on each line starting with the letter `f', you
should set RECORD-REGEXP to `^.*$' and set KEY to `\<f\w*\>'.
The resulting expression looks like this:
(sort-regexp-fields nil
"^.*$"
"\\<f\\w*\\>"
(region-beginning)
(region-end))
If you call `sort-regexp-fields' interactively, you are prompted
for RECORD-REGEXP and KEY and you can type them in without
enclosing them in quotation marks and without inserting a second
`\' to quote each `\'.
* Command: sort-subr REVERSE NEXTRECFUN ENDRECFUN &optional STARTKEYFUN ENDKEYFUN
This command is the general text sorting routine that divides a
buffer into records and sorts them.
The functions `sort-lines', `sort-paragraphs', `sort-pages',
`sort-fields', and `sort-numeric-fields' all use `sort-subr'.
To understand how `sort-subr' works, consider the whole
accessible portion of the buffer as being divided into disjoint
pieces called "sort records". A portion of each sort record
(perhaps all of it) is designated as the sort key. The records are
rearranged in the buffer in order by their sort keys. The records
may or may not be contiguous.
Usually, the records are rearranged in order of ascending sort
key. If the first argument to the `sort-subr' function, REVERSE,
is non-`nil', the sort records are rearranged in order of
descending sort key.
The next four arguments to `sort-subr' are functions that are
called to move point across a sort record. They are called many
times from within `sort-subr'.
1. NEXTRECFUN is called with point at the end of the previous
record. This function moves point to the start of the next
record. The first record is assumed to start at the position
of point when `sort-subr' is called.
2. ENDRECFUN is called with point within the record. It moves
point to the end of the record.
3. STARTKEYFUN may move point from the start of the record to the
start of the key. This argument is optional. It will either
return a non-nil value that will be used as the key, or it
will return `nil' and the key will be the substring between
the values of point before and after ENDKEYFUN is called.
4. ENDKEYFUN moves point from the start of the sort key to the
end of the sort key. This argument is optional. ENDKEYFUN
may be `nil' if STARTKEYFUN returns a value that will be used
as the key or if the key continues to the end of the record.
For an example of `sort-subr', here is the complete function
definition for `sort-lines':
(defun sort-lines (reverse beg end)
"Sort lines in region alphabetically; argument means descending order.
Called from a program, there are three arguments: REVERSE (non-nil means
reverse order), BEG and END (region to sort)."
(interactive "P\nr")
(save-restriction
(narrow-to-region beg end)
(goto-char (point-min))
(sort-subr reverse 'forward-line 'end-of-line)))
In the `sort-lines' function, `forward-line' moves point to the
start of the next record, and `end-of-line' moves point to the end
of record.
The `sort-paragraphs' function is very much the same, except that
its `sort-subr' call looks like this:
(sort-subr reverse
(function (lambda () (skip-chars-forward "\n \t\f")))
'forward-paragraph)))
* Command: sort-lines REVERSE START END
This command sorts lines in the region between START and END
alphabetically. If REVERSE is non-`nil', the sort is in reverse
order.
* Command: sort-paragraphs REVERSE START END
This command sorts paragraphs in the region between START and END
alphabetically. If REVERSE is non-`nil', the sort is in reverse
order.
* Command: sort-pages REVERSE START END
This command sorts pages in the region between START and END
alphabetically. If REVERSE is non-`nil', the sort is in reverse
order.
* Command: sort-fields FIELD START END
This command sorts lines in the region between START and END
lexicographically by the FIELD'th field of each line. Fields are
separated by whitespace and numbered from `1' up. If `field' is
negative, sorting is by the -FIELD'th field, in reverse order.
This command is useful for sorting tables.
* Command: sort-numeric-fields FIELD START END
This command sorts lines in the region between START and END
numerically by the FIELD'th field of each line. Fields are
separated by whitespace and numbered from `1' up. Specified field
must contain a number in each line of the region. If `field' is
negative, sort by the -FIELD'th field, in reverse order. This
command is useful for sorting tables.
* Command: sort-columns REVERSE &optional BEG END
This command sorts lines in the region between START and END
alphabetically by a certain range of columns. For the purpose of
this command, the region includes the entire line that point is in
and the entire line containing END. The column positions of BEG
and END bound the range of columns to sort on.
If REVERSE is non-`nil', the sort is in reverse order.
Note that `sort-columns' uses the `sort' utility program and
therefore cannot work properly on text containing TAB characters.
(Use `M-x `untabify'' to convert tabs to spaces before sorting.)
The `sort-columns' function cannot work in VMS.
▶1f◀
File: lispref Node: Indentation, Prev: Sorting, Up: Text, Next: Indent Tabs
Indentation
===========
The indentation functions are used to examine, move to, and change
whitespace that is at the beginning of a line. Some of the functions
can also change whitespace elsewhere on a line. Indentation always
counts from zero at the beginning of a line.
* Command: back-to-indentation
This command moves point to the first non-whitespace character in
the the current line (which is the line in which point is located).
* Command: backward-to-indentation ARG
This command moves point backward ARG lines and positions point
at the first nonblank character.
* Function: current-indentation
This function returns the indentation of the current line. This
is the horizontal position of the character following any initial
whitespace.
* Command: forward-to-indentation ARG
This command moves point forward ARG lines and positions it at
the first nonblank character.
* Command: indent-according-to-mode
This command indents the current line in the proper way for the
current major mode. Thus, Lisp mode uses `lisp-indent-line' to
indent the current line, C mode uses `c-indent-line', and Fortran
mode uses `fortran-indent-line'.
* Command: indent-for-tab-command
This command indents the current line in the proper way for the
current major mode, except that if the function for indenting lines
is `indent-to-left-margin', this function calls `insert-tab'.
However, Lisp mode uses `lisp-indent-line' to indent the current
line, and C mode uses `c-indent-line'.
* Variable: indent-line-function
This variable has a value which is the function that will be
called to indent current line. The default value is
`indent-to-left-margin', and in Lisp mode it would be set to
`lisp-indent-line' and in C mode it would be set to
`c-indent-line'.
A command such as `indent-according-to-mode' is no more than a
`funcall' to this function.
* Variable: left-margin
This variable is the column to which the default default
`indent-line-function' will indent. (That function is
`indent-to-left-margin'.) In Fundamental mode, LFD indents to this
column. This variable automatically becomes local when set in any
fashion.
* Function: indent-to-left-margin
This is the default `indent-line-function'. It is used in
Fundamental mode, Text mode, etc.
Its effect is to make the indentation at the beginning of the
current line exactly the amount specified by the variable
`left-margin'. This may involve inserting additional indentation
or deleting extra indentation.
* Command: indent-region START END TO-COLUMN
This command indents each nonblank line starting between START
(inclusive) and END (exclusive). If TO-COLUMN is `nil',
`indent-region' indents each nonblank line according to the
indentation function that is bound to TAB in that mode, such as
`indent-to-left-margin' in Fundamental mode, `lisp-indent-line' in
Lisp Interaction mode, and `c-indent-line' in C mode. If TO-COLUMN
is an integer, this function indents each line to that column.
* Variable: indent-region-function
The value of this variable is a function that can be used by
`indent-region' as a short cut. It ought to produce the same
results as indenting the lines of the region one by one, which is
the definition of `indent-region' with argument `nil'.
If the value is `nil', there is no short cut, and `indent-region'
actually works line by line.
A short cut is useful in modes such as C mode and Lisp mode,
where the `indent-line-function' must scan from the beginning of
the function: applying it to each line would be quadratic in time.
The short cut can update the scan information as it moves through
the lines indenting them; this takes linear time. If indenting a
line individually is fast, there is no need for a short cut.
`indent-region' with a non-`nil' argument has a different
definition and does not use this variable.
* Command: indent-relative &optional UNINDENTED-OK
This function inserts whitespace at point, extending to the same
column as the next "indent point" of the previous nonblank line.
An indent point is a non-whitespace character following whitespace.
If the previous nonblank line has no indent points beyond (that
is, to the right of) the column from which point starts, this
function calls `tab-to-tab-stop'; except that if the optional
argument, UNINDENTED-OK, is non-`nil', then, if the previous
nonblank line has no indent points beyond the column at which point
starts, this function does nothing.
Thus, if point is underneath, but to the right of the last column
of a short line of text, this function moves point to the next tab
stop by inserting whitespace. If point is underneath and to the
left of the first non-blank character of a line of text, point is
moved to that column by inserting whitespace.
In the first example, point is at the beginning of the third
line.
This line is indented twelve spaces.
-!-The quick brown fox jumped over the lazy dog.
Evaluation of the expression `(indent-relative nil)' produces the
following:
This line is indented twelve spaces.
-!-The quick brown fox jumped over the lazy dog.
In the next example, point is between the `m' and `p' of
`jumped':
This line is indented twelve spaces.
The quick brown fox jum-!-ped over the lazy dog.
Evaluation of the expression `(indent-relative nil)' produces the
following:
This line is indented twelve spaces.
The quick brown fox jum -!-ped over the lazy dog.
* Command: indent-relative-maybe
This command indents the line on which point is located like the
previous nonblank line. The function consists of a call to
`indent-relative' with a non-`nil' value passed to the
UNINDENTED-OK optional argument.
If the previous line is not indented, then the line on which
point is located is given no indentation; and if the previous
nonblank line has no indent points beyond the column at which point
starts, this function does not do any indentation.
* Command: indent-rigidly START END COUNT
This command indents all lines starting between START (inclusive)
and END (exclusive) sideways by `count' columns.
Thus, if you wish to indent all lines in a region by 3 spaces,
you execute this command with a COUNT of 3.
In Mail mode, `C-c C-y' (`mail-yank-original') uses
`indent-rigidly' to indent the text copied from the message being
replied to.
This command adds indentation to lines that are already indented;
it `preserves the shape' of the indented region, moving it sideways
as a single unit. Consequently, this command is useful not only
for indenting regions of unindented text, but also for indenting
regions of formatted code.
* User Option: indent-tabs-mode
If this user option is non-`nil', indentation functions can
insert tabs rather than spaces. Setting this variable
automatically makes it local to the current buffer.
* Command: indent-to COL &optional MINIMUM
This function indents from point with tabs and spaces until
COLUMN is reached. It always indents by at least MIN spaces even
if that goes past COLUMN; by default, MIN is zero.
* Command: newline-and-indent
This function inserts a newline, and then indents the new line
according to the major mode.
Indentation is done using the current `indent-line-function'. In
programming language modes, this is the same as TAB. In some text
modes, where TAB inserts a tab, `newline-and-indent' indents to the
specified left-margin column.
* Command: reindent-then-newline-and-indent
This command reindents current line, inserts a newline at point,
and then indents the new line.
Indentation of both lines is done according to the current major
mode; this means that the current value of `indent-line-function'
is called. In programming language modes, this is the same as TAB.
In some text modes, where TAB inserts a tab,
`reindent-then-newline-and-indent' indents to the specified
left-margin column.
▶1f◀
File: lispref Node: Indent Tabs, Prev: Indentation, Up: Text, Next: Columns
Tabs for Indentation
====================
The following tab functions insert indentation in user specified
amounts. They do not simply insert tab characters.
* Function: tab-to-tab-stop
This function inserts spaces or tabs to the next defined
"tab-stop" column. The variable `tab-stop-list' is a list of
columns at which there are tab stops. The distance between tab
stops need not be constant. This feature is convenient if you are
making tables with columns of differing width.
Use `M-x edit-tab-stops' to edit the location of tab stops
interactively.
* User Option: tab-stop-list
This variable is the list of tab stop positions used by
`tab-to-tab-stops'. The tab stop positions need not be equally
spaced.
Note that `tab-stop-list' has nothing to do with the tab
character and is not related to the `tab-width' variable.
▶1f◀
File: lispref Node: Columns, Prev: Indent Tabs, Up: Text, Next: Case Changes
Columns
=======
The column functions do not take into account the width of windows, or
the amount of horizontal scrolling. As a consequence, the value of
COLUMN can be arbitrarily high.
The first (or leftmost) column is numbered `0'.
* Function: current-column
This function returns the horizontal position of point. The
beginning of a line is column 0. The column is calculated by
adding together the widths of all the displayed representations of
the characters between the start of the current line and point.
This means control characters will be counted as occupying 2 or 4
columns, depending upon the value of `ctl-arrow', and tabs will be
counted as occupying a number of columns that depends on the value
of `tab-width'.
The `current-column' function ignores the finite width of the
screen, which means that this function may return values greater
than `(screen-width)'.
* Function: move-to-column COLUMN
This function moves point to COLUMN in the current line. The
calculation of COLUMN takes into account the widths of all the
displayed representations of the characters between the start of
the line and point. Thus control characters are calculated to
occupy 2 or 4 columns, depending upon the setting of `ctl-arrow',
and tabs to occupy a number of columns that depends on the value of
`tab-width'.
The `move-to-column' function may be passed values greater than
the value returned by `(screen-width)'. If the current line is not
that wide, then point is moved to the end of the line. If COLUMN
is negative, point is moved to the beginning of the line. COLUMN
must be an integer.
The result is the column number actually moved to.
▶1f◀
File: lispref Node: Case Changes, Prev: Indent Tabs, Up: Text, Next: Underlining
Case Changes
============
These case change commands work on text in the current buffer. *Note
Character Case::, for case conversion commands that work on strings and
characters.
* Command: capitalize-region START END
This function capitalizes all words in the region defined by
START and END. To `capitalize' means to convert each word's first
character is upper case and convert the rest of each word to lower
case. The function returns `nil'.
When `capitalize-region' is called interactively, START and END
are point and mark, smallest first.
---------- Buffer: foo ----------
This is the contents of the 5th foo.
---------- Buffer: foo ----------
(capitalize-region 1 44)
=> nil
---------- Buffer: foo ----------
This Is The Contents Of The 5th Foo.
---------- Buffer: foo ----------
* Command: downcase-region START END
This function converts all of the words in the region defined by
START and END to lower case. The function returns `nil'.
When `downcase-region' is called interactively, START and END are
point and mark, smallest first.
* Command: upcase-region START END
This function converts all of the words in the region defined by
START and END to upper case. The function returns `nil'.
When `downcase-region' is called interactively, START and END are
point and mark, smallest first.
* Command: capitalize-word COUNT
This function capitalizes COUNT words after point, moving point
over as it does. To `capitalize' means to convert each word's
first character is upper case and convert the rest of each word to
lower case. If COUNT is negative, the function capitalizes the
-COUNT previous words but does not move point.
When `capitalize-word' is called interactively, COUNT is set to
the numeric prefix argument.
* Command: downcase-word COUNT
This function converts the COUNT words after point to all lower
case, moving point over as it does. If COUNT is negative, it
converts the -COUNT previous words but does not move point.
When `downcase-word' is called interactively, COUNT is set to the
numeric prefix argument.
* Command: upcase-word COUNT
This function converts the COUNT words after point to all upper
case, moving point over as it does. If COUNT is negative, it
converts the -COUNT previous words but does not move point.
When `upcase-word' is called interactively, COUNT is set to the
numeric prefix argument.
▶1f◀
File: lispref Node: Underlining, Prev: Case Changes, Up: Text, Next: Registers
Underlining
===========
The underlining commands are somewhat obsolete. The
`underline-region' function actually inserts `_^H' before each
appropriate character in the region. This command provides a minimal
text formatting feature that might work on your printer; but you are
encouraged to use more powerful text formatting facilities instead, such
as Texinfo.
* Command: underline-region START END
This function underlines all nonblank characters in the region
defined by START and END. That is, an underscore character and a
backspace character are inserted just before each non-whitespace
character in the region. However, the backspace characters are
displayed by Emacs as either `\010' or `^H', depending on the
setting of `ctl-arrow'.
* Command: ununderline-region START END
This function removes all underlining (overstruck underscores) in
the region defined by START and END.
▶1f◀
File: lispref Node: Registers, Prev: Underlining, Up: Text
Registers
=========
A register is a user-level variable in emacs that can hold a marker, a
string, or a rectangle. Emacs has 255 accessible registers (`C-g'
cannot be used as the name of one). The registers include the CTL and
META keys; each register is named by a character.
* Variable: register-alist
This variable is an alist of elements in the form `(NAME .
CONTENTS)'. Normally, there is one element for each Emacs register
that has been used. NAME is a character (a number), identifying
the register. CONTENTS is a string, marker, or list. A list
represents a rectangle; its elements are strings.
* Command: view-register REG
This command displays what is contained in the register named
REG. REG is a character.
* Function: get-register REG
This function returns the contents of the register named REG, or
`nil' if it has no contents. The name of the register is a
character.
* Function: set-register REG VALUE
This function sets the contents of the register named REG to
VALUE. A register can be set to any value; however, the various
other register functions know only about strings, markers, and
lists.
* Command: point-to-register REG
This command stores both the current location of point and the
current buffer in a register as a marker. The argument REG must be
a character, which names the register.
* Command: register-to-point REG
This command moves point to the location in the buffer that was
stored in the register named by the argument. The argument must be
a character. Since both the buffer and the location within the
buffer are stored by the `point-to-register' function, this command
can switch you to another buffer.
* Command: insert-register REG &optional BEFOREP
This command inserts contents of register REG into the current
buffer. REG is a character that names the register.
Normally, this command puts point before and mark after the
inserted text. If the optional second argument, BEFOREP is
non-`nil', the command puts mark before and point after. You can
pass a non-`nil' second argument `beforep' to this function
interactively by supplying it with a prefix argument.
* Command: copy-to-register REG START END &optional DELETE-FLAG
This command copies the region from START to END into register
REG. If DELETE-FLAG is non-`nil', this command deletes the region
from the buffer after copying it into the register.
* Command: prepend-to-register REG START END &optional DELETE-FLAG
This command prepends the region from START to END into register
REG. If DELETE-FLAG is non-`nil', this command deletes the region
from the buffer after copying it to the register.
* Command: append-to-register REG START END &optional DELETE-FLAG
This command appends the region from START to END to the text
already in register REG. If DELETE-FLAG is non-`nil', this command
deletes the region from the buffer after copying it to the
register.
* Command: copy-rectangle-to-register REG START END &optional DELETE-FLAG
This command copies a rectangular region from START to END into
register REG. If DELETE-FLAG is non-`nil', this command deletes
the region from the buffer after copying it to the register.
▶1f◀
File: lispref Node: Searching and Matching, Prev: Text, Up: Top, Next: Syntax Tables
Searching and Matching
**********************
GNU Emacs provides two ways to search through a buffer for specified
text: exact string searches and regular expression searches. "Matching"
may be used following a regular expression search to specify the
positions of sub-expressions found by a regular expression search. This
chapter also describes replacement functions.
* Menu:
* Searching for Strings::
* Regular Expressions::
* Regular Expression Searching::
* Replacement::
* Match Data::
* Standard Regexps::
* Searching and Case::
▶1f◀
File: lispref Node: Searching for Strings, Prev: Searching and Matching, Up: Searching and Matching, Next: Regular Expressions
Searching for Strings
=====================
* Command: search-forward STRING &optional LIMIT NOERROR REPEAT
This function searches forward from point for an exact match for
STRING. It sets point to the end of the occurrence found, and
returns `t'.
In this example, point is positioned at the beginning of the
line. Then `(search-forward "fox")' is evaluated in the minibuffer
and point is left after the last letter of `fox':
---------- Buffer: foo ----------
-!-The quick brown fox jumped over the lazy dog.
---------- Buffer: foo ----------
(search-forward "fox")
=> t
---------- Buffer: foo ----------
The quick brown fox-!- jumped over the lazy dog.
---------- Buffer: foo ----------
If LIMIT is non-`nil' (it must be a position in the current
buffer), then it is the upper bound to the search. No match
extending after that position is accepted.
If NOERROR is `nil', then a `search-failed' error is signaled.
If NOERROR is `t', then if the search fails, it just returns `nil',
and doesn't signal an error. If NOERROR is neither `nil' nor `t',
then `search-forward' moves the point to LIMIT and returns `nil'.
If REPEAT is non-`nil', then the search is repeated that many
times, the point being positioned at the end of the last match.
* Command: search-backward STRING &optional LIMIT NOERROR REPEAT
This function searches backward from point for STRING. It is the
exact analog of `search-forward'. It leaves the point at the
beginning of the string matched.
* Command: word-search-forward STRING &optional LIMIT NOERROR REPEAT
This function searchs forward from the point for a ``word'' match
for STRING. It sets the point to the end of the occurrence found,
and returns `t'.
A word search differs from a simple string search in that a word
search *requires* that the words it searches for are separate words
(searching for the word `ball' will not match the word `balls'),
and punctuation and spacing is ignored (searching for `ball boy'
will match `ball. Boy!').
In the example, the point is first placed at the beginning of the
buffer; the search leaves it between the `y' and the `!'.
---------- Buffer: foo ----------
-!-He said ``Please! Find
the ball boy!''
---------- Buffer: foo ----------
(word-search-forward "Please find the ball, boy.")
=> t
---------- Buffer: foo ----------
He said ``Please! Find
the ball boy-!-!''
---------- Buffer: foo ----------
If LIMIT is non-`nil' (it must be a position in the current
buffer), then it is the upper bound to the search. The match found
must not extend after that position.
If NOERROR is `t', then `word-search-forward' returns `nil' when
a search fails, instead of signalling an error. If NOERROR is
neither `nil' nor `t', then `word-search-forward' moves point to
LIMIT and returns `nil'.
If REPEAT is non-`nil', then the search is repeated that many
times, the point being positioned at the end of the last match.
When `word-search-forward' is called interactively, Emacs prompts
you for the search string; LIMIT and NOERROR, are set to `nil', and
REPEAT is set to 1.
* Command: word-search-backward STRING
This function searches backward from the point for a word match
to STRING. This function is the exact analog to
`word-search-forward'.
▶1f◀
File: lispref Node: Regular Expressions, Prev: Searching for Strings, Up: Searching and Matching, Next: Regular Expression Searching
Regular Expression Syntax
=========================
A "regular expression" ("regexp", for short) is a pattern that denotes
a set of strings, possibly an infinite set. Searching for matches for a
regexp is a very powerful operation. In GNU Emacs, you can search for
the next match for a regexp either incrementally or not. Incremental
search commands are described in the `The GNU Emacs User Manual'. *Note
Regular Expression Search: (emacs)Regexp Search.
Also, *Note Major Modes: Major Modes..
* Menu:
* Complex Regexp Example:: Illustrates regular expression syntax.
Regular expressions have a syntax in which a few characters are
special constructs and the rest are "ordinary". An ordinary character
is a simple regular expression which matches that character and nothing
else. The special characters are `$', `^', `.', `*', `+', `?', `[', `]'
and `\'; no new special characters will be defined in the future. Any
other character appearing in a regular expression is ordinary, unless a
`\' precedes it. If a regular expression is malformed, an
`invalid-regexp' error signaled.
For example, `f' is not a special character, so it is ordinary, and
therefore `f' is a regular expression that matches the string `f' and no
other string. (It does *not* match the string `ff'.) Likewise, `o' is
a regular expression that matches only `o'.
Any two regular expressions A and B can be concatenated. The result is
a regular expression which matches a string if A matches some amount of
the beginning of that string and B matches the rest of the string.
As a simple example, we can concatenate the regular expressions `f' and
`o' to get the regular expression `fo', which matches only the string
`fo'. Still trivial. To do something nontrivial, you need to use one
of the special characters. Here is a list of them:
`. (Period)'
is a special character that matches any single character except a
newline. Using concatenation, we can make regular expressions like
`a.b' which matches any three-character string which begins with
`a' and ends with `b'.
`*'
is not a construct by itself; it is a suffix, which means the
preceding regular expression is to be repeated as many times as
possible. In `fo*', the `*' applies to the `o', so `fo*' matches
one `f' followed by any number of `o's. The case of zero `o's is
allowed: `fo*' does match `f'.
`*' always applies to the *smallest* possible preceding expression.
Thus, `fo*' has a repeating `o', not a repeating `fo'.
The matcher processes a `*' construct by matching, immediately, as
many repetitions as can be found. Then it continues with the rest
of the pattern. If that fails, backtracking occurs, discarding
some of the matches of the `*'-modified construct in case that
makes it possible to match the rest of the pattern. For example,
matching `ca*ar' against the string `caaar', the `a*' first tries
to match all three `a's; but the rest of the pattern is `ar' and
there is only `r' left to match, so this try fails. The next
alternative is for `a*' to match only two `a's. With this choice,
the rest of the regexp matches successfully.
`+'
Is a suffix character similar to `*' except that it requires that
the preceding expression be matched at least once. So, for
example, `ca+r' will match the strings `car' and `caaaar' but not
the string `cr', whereas `ca*r' would match all three strings.
`?'
Is a suffix character similar to `*' except that it can match the
preceding expression either once or not at all. For example,
`ca?r' will match `car' or `cr'; nothing else.
`[ ... ]'
`[' begins a "character set", which is terminated by a `]'. In the
simplest case, the characters between the two form the set. Thus,
`[ad]' matches either one `a' or one `d', and `[ad]*' matches any
string composed of just `a's and `d's (including the empty string),
from which it follows that `c[ad]*r' matches `cr', `car', `cdr',
`caddaar', etc.
Character ranges can also be included in a character set, by
writing two characters with a `-' between them. Thus, `[a-z]'
matches any lower-case letter. Ranges may be intermixed freely
with individual characters, as in `[a-z$%.]', which matches any
lower case letter or `$', `%' or period.
Note that the usual special characters are not special any more
inside a character set. A completely different set of special
characters exists inside character sets: `]', `-' and `^'.
To include a `]' in a character set, you must make it the first
character. For example, `[]a]' matches `]' or `a'. To include a
`-', write `---', which is a range containing only `-'. To include
`^', make it other than the first character in the set.
`[^ ... ]'
`[^' begins a "complement character set", which matches any
character except the ones specified. Thus, `[^a-z0-9A-Z]' matches
all characters *except* letters and digits.
`^' is not special in a character set unless it is the first
character. The character following the `^' is treated as if it
were first (`-' and `]' are not special there).
Note that a complement character set can match a newline, unless
newline is mentioned as one of the characters not to match.
`^'
is a special character that matches the empty string, but only if
at the beginning of a line in the text being matched. Otherwise it
fails to match anything. Thus, `^foo' matches a `foo' which occurs
at the beginning of a line.
When matching a string, `^' matches at the beginning of the string
or after a newline character `\n'.
`$'
is similar to `^' but matches only at the end of a line. Thus,
`xx*$' matches a string of one `x' or more at the end of a line.
When matching a string, `^' matches at the end of the string or
before a newline character `\n'.
`\'
has two functions: it quotes the special characters (including
`\'), and it introduces additional special constructs.
Because `\' quotes special characters, `\$' is a regular expression
which matches only `$', and `\[' is a regular expression which
matches only `[', and so on.
Note that `\' also has special meaning inside the read syntax of
Lisp strings (*Note String Type::). Therefore, to build a regular
expression that matches the `\' character, you must preceed each
`\' in `"\\"' with another `\', i.e., `"\\\\"'.
Note: for historical compatibility, special characters are treated as
ordinary ones if they are in contexts where their special meanings make
no sense. For example, `*foo' treats `*' as ordinary since there is no
preceding expression on which the `*' can act. It is poor practice to
depend on this behavior; better to quote the special character anyway,
regardless of where is appears.
For the most part, `\' followed by any character matches only that
character. However, there are several exceptions: characters which,
when preceded by `\', are special constructs. Such characters are
always ordinary when encountered on their own. Here is a table of `\'
constructs.
`\|'
specifies an alternative. Two regular expressions A and B with
`\|' in between form an expression that matches anything that
either A or B will match.
Thus, `foo\|bar' matches either `foo' or `bar' but no other string.
`\|' applies to the largest possible surrounding expressions. Only
a surrounding `\( ... \)' grouping can limit the grouping power of
`\|'.
Full backtracking capability exists to handle multiple uses of
`\|'.
`\( ... \)'
is a grouping construct that serves three purposes:
1. To enclose a set of `\|' alternatives for other operations.
Thus, `\(foo\|bar\)x' matches either `foox' or `barx'.
2. To enclose a complicated expression for the postfix `*' to
operate on. Thus, `ba\(na\)*' matches `bananana', etc., with
any (zero or more) number of `na' strings.
3. To mark a matched substring for future reference.
This last application is not a consequence of the idea of a
parenthetical grouping; it is a separate feature which happens to
be assigned as a second meaning to the same `\( ... \)' construct
because there is no conflict in practice between the two meanings.
Here is an explanation of this feature:
`\DIGIT'
after the end of a `\( ... \)' construct, the matcher remembers the
beginning and end of the text matched by that construct. Then,
later on in the regular expression, you can use `\' followed by
DIGIT to mean ``match the same text matched the DIGIT'th time by
the `\( ... \)' construct.''
The strings matching the first nine `\( ... \)' constructs
appearing in a regular expression are assigned numbers 1 through 9
in order that the open-parentheses appear in the regular
expression. `\1' through `\9' may be used to refer to the text
matched by the corresponding `\( ... \)' construct.
For example, `\(.*\)\1' matches any newline-free string that is
composed of two identical halves. The `\(.*\)' matches the first
half, which may be anything, but the `\1' that follows must match
the same exact text.
`\`'
matches the empty string, provided it is at the beginning of the
buffer.
`\''
matches the empty string, provided it is at the end of the buffer.
`\b'
matches the empty string, provided it is at the beginning or end of
a word. Thus, `\bfoo\b' matches any occurrence of `foo' as a
separate word. `\bballs?\b' matches `ball' or `balls' as a
separate word.
`\B'
matches the empty string, provided it is *not* at the beginning or
end of a word.
`\<'
matches the empty string, provided it is at the beginning of a
word.
`\>'
matches the empty string, provided it is at the end of a word.
`\w'
matches any word-constituent character. The editor syntax table
determines which characters these are.
`\W'
matches any character that is not a word-constituent.
`\sCODE'
matches any character whose syntax is CODE. CODE is a character
which represents a syntax code: thus, `w' for word constituent, `-'
for whitespace, `(' for open-parenthesis, etc. *Note Syntax
Tables::.
`\SCODE'
matches any character whose syntax is not CODE.
▶1f◀