Commit 70a9af81 authored by Chong Yidong's avatar Chong Yidong

(Indentation): Replace list with paragraphed text, putting description

of syntax-driven indentation first.  Document new effect of active
regions on tab.
(Tab Stops): Note that editable tab stops affect indentation commands.
parent 5fda2cbd
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
@node Indentation, Text, Major Modes, Top @node Indentation, Text, Major Modes, Top
@chapter Indentation @chapter Indentation
@cindex indentation @cindex indentation
@cindex tabs
@cindex columns (indentation) @cindex columns (indentation)
This chapter describes the Emacs commands that add, remove, or This chapter describes the Emacs commands that add, remove, or
...@@ -12,7 +13,7 @@ adjust indentation. ...@@ -12,7 +13,7 @@ adjust indentation.
@table @kbd @table @kbd
@item @key{TAB} @item @key{TAB}
Indent the current line ``appropriately'' in a mode-dependent fashion. Indent the current line appropriately, in a mode-dependent fashion.
@item @kbd{C-j} @item @kbd{C-j}
Perform @key{RET} followed by @key{TAB} (@code{newline-and-indent}). Perform @key{RET} followed by @key{TAB} (@code{newline-and-indent}).
@item M-^ @item M-^
...@@ -36,47 +37,47 @@ Indent from point to the next prespecified tab stop column ...@@ -36,47 +37,47 @@ Indent from point to the next prespecified tab stop column
Indent from point to under an indentation point in the previous line. Indent from point to under an indentation point in the previous line.
@end table @end table
Emacs supports four general categories of operations that could all In most major modes, the @key{tab} key runs the command
be called `indentation': @code{indent-for-tab-command}, which either performs indentation or
inserts whitespace at point, depending on the situation.
@enumerate
@item In programming modes such as Lisp mode and C mode, @key{tab} indents
Insert a tab character. You can type @kbd{C-q @key{TAB}} to do this. the current line if the region is inactive. If the region is active,
it indents every line in the region (@pxref{Mark}). Indentation means
A tab character is displayed as a stretch of whitespace which extends adding or removing some combination of space and tab characters
to the next display tab stop position, and the default width of a tab (@dfn{whitespace characters}) at the start of the line, in a way that
stop is eight. @xref{Text Display}, for more details. makes sense given the text in the preceding lines. Exactly how
indentation is performed depends on the major mode.
@item
Insert whitespace up to the next tab stop. You can set tab stops at In text modes, @key{tab} inserts some whitespace characters to
your choice of column positions, then type @kbd{M-i} to advance to the advance point to the next tab stop (@pxref{Tab Stops}). For the
next tab stop. The default tab stop settings have a tab stop every purposes of this command, the position of the first non-whitespace
eight columns, which means by default @kbd{M-i} inserts a tab character on the preceding line is treated as an additional tab stop.
character. To set the tab stops, use @kbd{M-x edit-tab-stops}. You can therefore use @key{tab} to ``align'' point with the preceding
line. If the region is active, @key{tab} performs this action on
@item every line in the region.
Align a line with the previous line. More precisely, the command
@kbd{M-x indent-relative} indents the current line under the beginning @vindex tab-width
of some word in the previous line. In Fundamental mode and in Text Indentation is often performed with the help of @dfn{tab characters}
mode, @key{TAB} runs the command @code{indent-relative}. (ASCII code 9), which are displayed as a stretch of empty space
extending to the next @dfn{display tab stop}. By default, there is
@item one display tab stop every eight columns; the number of columns is
The most sophisticated method is @dfn{syntax-driven indentation}. determined by the variable @code{tab-width}. You can insert a single
Most programming languages have an indentation convention. For Lisp tab character by typing @kbd{C-q @key{TAB}}. @xref{Text Display}.
code, lines are indented according to their nesting in parentheses. C
code uses the same general idea, but many details are different. @findex edit-tab-stops
@findex tab-to-tab-stop
@kindex TAB @kindex M-i
Type @key{TAB} to do syntax-driven indentation, in a mode that The command @kbd{M-i} (@code{tab-to-tab-stop}) adjusts the
supports it. It realigns the current line according with the syntax whitespace characters around point, inserting just enough whitespace
of the preceding lines. No matter where in the line you are when you to advance point up to the next tab stop. By default, this involves
type @key{TAB}, it aligns the line as a whole. deleting the existing whitespace and inserting a single tab character.
@end enumerate
Normally, most of these indentation commands insert an optimal mix
Normally, most of the above methods insert an optimal mix of tabs and of tabs and spaces to align to the desired column. @xref{Just
spaces to align to the desired column. @xref{Just Spaces}, for how to Spaces}, for how to disable use of tabs. However, @kbd{C-q @key{TAB}}
disable use of tabs. However, @kbd{C-q @key{TAB}} always inserts a always inserts a tab, even when tabs are disabled for the indentation
tab, even when tabs are disabled for the indentation commands. commands.
@menu @menu
* Indentation Commands:: Various commands and techniques for indentation. * Indentation Commands:: Various commands and techniques for indentation.
...@@ -99,7 +100,7 @@ or else at the end of the line. ...@@ -99,7 +100,7 @@ or else at the end of the line.
@key{TAB}}. To make an indented line after the current line, use @key{TAB}}. To make an indented line after the current line, use
@kbd{C-e C-j}. @kbd{C-e C-j}.
If you just want to insert a tab character in the buffer, you can type If you just want to insert a tab character in the buffer, type
@kbd{C-q @key{TAB}}. @kbd{C-q @key{TAB}}.
@kindex C-M-o @kindex C-M-o
...@@ -182,11 +183,12 @@ next tab stop column. ...@@ -182,11 +183,12 @@ next tab stop column.
@findex edit-tab-stops-note-changes @findex edit-tab-stops-note-changes
@kindex C-c C-c @r{(Edit Tab Stops)} @kindex C-c C-c @r{(Edit Tab Stops)}
@vindex tab-stop-list @vindex tab-stop-list
You can specify the tab stops used by @kbd{M-i}. They are stored in a You can change the tab stops used by @kbd{M-i} and other indentation
variable called @code{tab-stop-list}, as a list of column-numbers in commands, so that they need not be spaced every eight characters, or
increasing order. even regularly spaced. The tab stops are stored in the variable
@code{tab-stop-list}, as a list of column numbers in increasing order.
The convenient way to set the tab stops is with @kbd{M-x A convenient way to set the tab stops is with @kbd{M-x
edit-tab-stops}, which creates and selects a buffer containing a edit-tab-stops}, which creates and selects a buffer containing a
description of the tab stop settings. You can edit this buffer to description of the tab stop settings. You can edit this buffer to
specify different tab stops, and then type @kbd{C-c C-c} to make those specify different tab stops, and then type @kbd{C-c C-c} to make those
...@@ -211,9 +213,12 @@ To install changes, type C-c C-c ...@@ -211,9 +213,12 @@ To install changes, type C-c C-c
The first line contains a colon at each tab stop. The remaining lines The first line contains a colon at each tab stop. The remaining lines
are present just to help you see where the colons are and know what to do. are present just to help you see where the colons are and know what to do.
Note that the tab stops that control @code{tab-to-tab-stop} have nothing Note that the tab stops that control @code{tab-to-tab-stop} have
to do with displaying tab characters in the buffer. @xref{Text Display}, nothing to do with how tab characters are displayed in the buffer.
for more information on that. Tab characters are always displayed as empty spaces extending to the
next display tab stop, which occurs every @code{tab-width} columns
regardless of the contents of @code{tab-stop-list}. @xref{Text
Display}.
@node Just Spaces,, Tab Stops, Indentation @node Just Spaces,, Tab Stops, Indentation
@section Tabs vs. Spaces @section Tabs vs. Spaces
...@@ -227,8 +232,9 @@ but there is a default value which you can change as well. ...@@ -227,8 +232,9 @@ but there is a default value which you can change as well.
@xref{Locals}. @xref{Locals}.
A tab is not always displayed in the same way. By default, tabs are A tab is not always displayed in the same way. By default, tabs are
eight columns wide, but some people like to customize their tools to eight columns wide, but some people like to customize their editors to
use a different tab width. So by using spaces only, you can make sure use a different tab width (e.g., by changing the variable
@code{tab-width} in Emacs). By using spaces only, you can make sure
that your file looks the same regardless of the tab width setting. that your file looks the same regardless of the tab width setting.
@findex tabify @findex tabify
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment