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