git-for-steve tweaks.
[sxemacs] / info / sxemacs / indent.texi
1 @node Indentation, Text, Major Modes, Top
2 @chapter Indentation
3 @cindex indentation
4
5 @c WideCommands
6 @table @kbd
7 @item @key{TAB}
8 Indent current line ``appropriately'' in a mode-dependent fashion.
9 @item @key{LFD}
10 Perform @key{RET} followed by @key{TAB} (@code{newline-and-indent}).
11 @item M-^
12 Merge two lines (@code{delete-indentation}).  This would cancel out
13 the effect of @key{LFD}.
14 @item C-M-o
15 Split line at point; text on the line after point becomes a new line
16 indented to the same column that it now starts in (@code{split-line}).
17 @item M-m
18 Move (forward or back) to the first non-blank character on the current
19 line (@code{back-to-indentation}).
20 @item C-M-\
21 Indent several lines to same column (@code{indent-region}).
22 @item C-x @key{TAB}
23 Shift block of lines rigidly right or left (@code{indent-rigidly}).
24 @item M-i
25 Indent from point to the next prespecified tab stop column
26 (@code{tab-to-tab-stop}).
27 @item M-x indent-relative
28 Indent from point to under an indentation point in the previous line.
29 @end table
30
31 @kindex TAB
32 @cindex indentation
33   Most programming languages have some indentation convention.  For Lisp
34 code, lines are indented according to their nesting in parentheses.  The
35 same general idea is used for C code, though details differ.
36
37    Use the @key{TAB} command to indent a line whatever the language.
38 Each major mode defines this command to perform indentation appropriate
39 for the particular language.  In Lisp mode, @key{TAB} aligns a line
40 according to its depth in parentheses.  No matter where in the line you
41 are when you type @key{TAB}, it aligns the line as a whole.  In C mode,
42 @key{TAB} implements a subtle and sophisticated indentation style that
43 knows about many aspects of C syntax.
44
45 @kindex TAB
46   In Text mode, @key{TAB} runs the command @code{tab-to-tab-stop}, which
47 indents to the next tab stop column.  You can set the tab stops with
48 @kbd{M-x edit-tab-stops}.
49
50 @menu
51 * Indentation Commands:: Various commands and techniques for indentation.
52 * Tab Stops::            You can set arbitrary "tab stops" and then
53                          indent to the next tab stop when you want to.
54 * Just Spaces::          You can request indentation using just spaces.
55 @end menu
56
57 @node Indentation Commands, Tab Stops, Indentation, Indentation
58 @section Indentation Commands and Techniques
59 @c ??? Explain what Emacs has instead of space-indent-flag.
60
61   If you just want to insert a tab character in the buffer, you can type
62 @kbd{C-q @key{TAB}}.
63
64 @kindex M-m
65 @findex back-to-indentation
66   To move over the indentation on a line, type @kbd{Meta-m}
67 (@code{back-to-indentation}).  This command, given anywhere on a line,
68 positions point at the first non-blank character on the line.
69
70   To insert an indented line before the current line, type @kbd{C-a C-o
71 @key{TAB}}.  To make an indented line after the current line, use
72 @kbd{C-e @key{LFD}}.
73
74 @kindex C-M-o
75 @findex split-line
76   @kbd{C-M-o} (@code{split-line}) moves the text from point to the end of
77 the line vertically down, so that the current line becomes two lines.
78 @kbd{C-M-o} first moves point forward over any spaces and tabs.  Then it
79 inserts after point a newline and enough indentation to reach the same
80 column point is on.  Point remains before the inserted newline; in this
81 regard, @kbd{C-M-o} resembles @kbd{C-o}.
82
83 @kindex M-\
84 @kindex M-^
85 @findex delete-horizontal-space
86 @findex delete-indentation
87   To join two lines cleanly, use the @kbd{Meta-^}
88 (@code{delete-indentation}) command to delete the indentation at the
89 front of the current line, and the line boundary as well.  Empty spaces
90 are replaced by a single space, or by no space if at the beginning of a
91 line, before a close parenthesis, or after an open parenthesis.
92 To delete just the indentation of a line, go to the beginning of the
93 line and use @kbd{Meta-\} (@code{delete-horizontal-space}), which
94 deletes all spaces and tabs around the cursor.
95
96 @kindex C-M-\
97 @kindex C-x TAB
98 @findex indent-region
99 @findex indent-rigidly
100   There are also commands for changing the indentation of several lines at
101 once.  @kbd{Control-Meta-\} (@code{indent-region}) gives each line which
102 begins in the region the ``usual'' indentation by invoking @key{TAB} at the
103 beginning of the line.  A numeric argument specifies the column to indent
104 to.  Each line is shifted left or right so that its first non-blank
105 character appears in that column.  @kbd{C-x @key{TAB}}
106 (@code{indent-rigidly}) moves all the lines in the region right by its
107 argument (left, for negative arguments).  The whole group of lines moves
108 rigidly sideways, which is how the command gets its name.@refill
109
110 @findex indent-relative
111   @kbd{M-x indent-relative} indents at point based on the previous line
112 (actually, the last non-empty line.)  It inserts whitespace at point, moving
113 point, until it is underneath an indentation point in the previous line.
114 An indentation point is the end of a sequence of whitespace or the end of
115 the line.  If point is farther right than any indentation point in the
116 previous line, the whitespace before point is deleted and the first
117 indentation point then applicable is used.  If no indentation point is
118 applicable even then, @code{tab-to-tab-stop} is run (see next section).
119
120   @code{indent-relative} is the definition of @key{TAB} in Indented Text
121 mode.  @xref{Text}.
122
123 @node Tab Stops, Just Spaces, Indentation Commands, Indentation
124 @section Tab Stops
125
126 @kindex M-i
127 @findex tab-to-tab-stop
128   For typing in tables, you can use Text mode's definition of @key{TAB},
129 @code{tab-to-tab-stop}.  This command inserts indentation before point,
130 enough to reach the next tab stop column.  Even if you are not in Text mode,
131 this function is associated with @kbd{M-i} anyway.
132
133 @findex edit-tab-stops
134 @findex edit-tab-stops-note-changes
135 @kindex C-c C-c (Edit Tab Stops)
136 @vindex tab-stop-list
137   You can arbitrarily set the tab stops used by @kbd{M-i}.  They are
138 stored as a list of column-numbers in increasing order in the variable
139 @code{tab-stop-list}.
140
141   The convenient way to set the tab stops is using @kbd{M-x edit-tab-stops},
142 which creates and selects a buffer containing a description of the tab stop
143 settings.  You can edit this buffer to specify different tab stops, and
144 then type @kbd{C-c C-c} to make those new tab stops take effect.  In the
145 tab stop buffer, @kbd{C-c C-c} runs the function
146 @code{edit-tab-stops-note-changes} rather than the default
147 @code{save-buffer}.  @code{edit-tab-stops} records which buffer was current
148 when you invoked it, and stores the tab stops in that buffer.  Normally
149 all buffers share the same tab stops and changing them in one buffer
150 affects all.  If you make @code{tab-stop-list} local in one
151 buffer @code{edit-tab-stops} in that buffer edits only the local
152 settings.
153
154   Below is the text representing ordinary tab stops every eight columns:
155
156 @example
157         :       :       :       :       :       :
158 0         1         2         3         4
159 0123456789012345678901234567890123456789012345678
160 To install changes, type C-c C-c
161 @end example
162
163   The first line contains a colon at each tab stop.  The remaining lines
164 help you see where the colons are and tell you what to do.
165
166   Note that the tab stops that control @code{tab-to-tab-stop} have nothing
167 to do with displaying tab characters in the buffer.  @xref{Display Vars},
168 for more information on that.
169
170 @node Just Spaces,, Tab Stops, Indentation
171 @section Tabs vs. Spaces
172
173 @vindex indent-tabs-mode
174   Emacs normally uses both tabs and spaces to indent lines.  If you prefer,
175 all indentation can be made from spaces only.  To request this, set
176 @code{indent-tabs-mode} to @code{nil}.  This is a per-buffer variable;
177 altering the variable affects only the current buffer, but there is a
178 default value which you can change as well.  @xref{Locals}.
179
180 @findex tabify
181 @findex untabify
182   There are also commands to convert tabs to spaces or vice versa, always
183 preserving the columns of all non-blank text.  @kbd{M-x tabify} scans the
184 region for sequences of spaces, and converts sequences of at least three
185 spaces to tabs if that is possible without changing indentation.  @kbd{M-x
186 untabify} changes all tabs in the region to corresponding numbers of spaces.