annotate doc/emacs/programs.texi @ 101907:459248f6207e

(Holidays, Displaying the Diary): Update for new marker defaults.
author Glenn Morris <rgm@gnu.org>
date Mon, 09 Feb 2009 07:50:44 +0000
parents cb5d2387102c
children 6813b59a55fa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1 @c This is part of the Emacs manual.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
2 @c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1999, 2000,
100974
cb5d2387102c Add 2009 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 100334
diff changeset
3 @c 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
4 @c See file emacs.texi for copying conditions.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
5 @node Programs, Building, Text, Top
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
6 @chapter Editing Programs
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
7 @cindex Lisp editing
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
8 @cindex C editing
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
9 @cindex program editing
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
10
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
11 Emacs provides many features to facilitate editing programs. Some
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
12 of these features can
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
13
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
14 @itemize @bullet
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
15 @item
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
16 Find or move over top-level definitions (@pxref{Defuns}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
17 @item
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
18 Apply the usual indentation conventions of the language
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
19 (@pxref{Program Indent}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
20 @item
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
21 Balance parentheses (@pxref{Parentheses}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
22 @item
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
23 Insert, kill or align comments (@pxref{Comments}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
24 @item
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
25 Highlight program syntax (@pxref{Font Lock}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
26 @end itemize
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
27
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
28 This chapter describes these features and many more.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
29
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
30 @menu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
31 * Program Modes:: Major modes for editing programs.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
32 * Defuns:: Commands to operate on major top-level parts
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
33 of a program.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
34 * Program Indent:: Adjusting indentation to show the nesting.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
35 * Parentheses:: Commands that operate on parentheses.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
36 * Comments:: Inserting, killing, and aligning comments.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
37 * Documentation:: Getting documentation of functions you plan to call.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
38 * Hideshow:: Displaying blocks selectively.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
39 * Symbol Completion:: Completion on symbol names of your program or language.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
40 * Glasses:: Making identifiersLikeThis more readable.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
41 * Misc for Programs:: Other Emacs features useful for editing programs.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
42 * C Modes:: Special commands of C, C++, Objective-C,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
43 Java, and Pike modes.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
44 * Asm Mode:: Asm mode and its special features.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
45 @ifnottex
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
46 * Fortran:: Fortran mode and its special features.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
47 @end ifnottex
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
48 @end menu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
49
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
50 @node Program Modes
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
51 @section Major Modes for Programming Languages
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
52 @cindex modes for programming languages
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
53
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
54 Emacs has specialized major modes for various programming languages.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
55 @xref{Major Modes}. A programming language major mode typically
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
56 specifies the syntax of expressions, the customary rules for
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
57 indentation, how to do syntax highlighting for the language, and how
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
58 to find the beginning or end of a function definition. It often
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
59 customizes or provides facilities for compiling and debugging programs
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
60 as well.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
61
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
62 Ideally, Emacs should provide a major mode for each programming
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
63 language that you might want to edit; if it doesn't have a mode for
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
64 your favorite language, you can contribute one. But often the mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
65 for one language can serve for other syntactically similar languages.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
66 The major mode for language @var{l} is called @code{@var{l}-mode},
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
67 and you can select it by typing @kbd{M-x @var{l}-mode @key{RET}}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
68 @xref{Choosing Modes}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
69
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
70 @cindex Perl mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
71 @cindex Icon mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
72 @cindex Makefile mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
73 @cindex Tcl mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
74 @cindex CPerl mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
75 @cindex DSSSL mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
76 @cindex Octave mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
77 @cindex Metafont mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
78 @cindex Modula2 mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
79 @cindex Prolog mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
80 @cindex Python mode
100334
2f23225ada6b (Program Modes): Mention Ruby mode.
Chong Yidong <cyd@stupidchicken.com>
parents: 100077
diff changeset
81 @cindex Ruby mode
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
82 @cindex Simula mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
83 @cindex VHDL mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
84 @cindex M4 mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
85 @cindex Shell-script mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
86 @cindex Delphi mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
87 @cindex PostScript mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
88 @cindex Conf mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
89 @cindex DNS mode
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
90 The existing programming language major modes include Lisp, Scheme
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
91 (a variant of Lisp) and the Scheme-based DSSSL expression language,
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
92 Ada, ASM, AWK, C, C++, Delphi (Object Pascal), Fortran, Icon, IDL
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
93 (CORBA), IDLWAVE, Java, Metafont (@TeX{}'s companion for font
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
94 creation), Modula2, Objective-C, Octave, Pascal, Perl, Pike,
100334
2f23225ada6b (Program Modes): Mention Ruby mode.
Chong Yidong <cyd@stupidchicken.com>
parents: 100077
diff changeset
95 PostScript, Prolog, Python, Ruby, Simula, Tcl, and VHDL. An
2f23225ada6b (Program Modes): Mention Ruby mode.
Chong Yidong <cyd@stupidchicken.com>
parents: 100077
diff changeset
96 alternative mode for Perl is called CPerl mode. Modes are available
2f23225ada6b (Program Modes): Mention Ruby mode.
Chong Yidong <cyd@stupidchicken.com>
parents: 100077
diff changeset
97 for the scripting languages of the common GNU and Unix shells, VMS
2f23225ada6b (Program Modes): Mention Ruby mode.
Chong Yidong <cyd@stupidchicken.com>
parents: 100077
diff changeset
98 DCL, and MS-DOS/MS-Windows @samp{BAT} files. There are also major
2f23225ada6b (Program Modes): Mention Ruby mode.
Chong Yidong <cyd@stupidchicken.com>
parents: 100077
diff changeset
99 modes for editing makefiles, DNS master files, and various sorts of
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
100 configuration files.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
101
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
102 @kindex DEL @r{(programming modes)}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
103 @findex c-electric-backspace
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
104 In most programming languages, indentation should vary from line to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
105 line to illustrate the structure of the program. So the major modes
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
106 for programming languages arrange for @key{TAB} to update the
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
107 indentation of the current line (@pxref{Program Indent}). They also
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
108 rebind @key{DEL} to treat a tab as if it were the equivalent number of
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
109 spaces; this lets you delete one column of indentation without
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
110 worrying whether the whitespace consists of spaces or tabs. Use
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
111 @kbd{C-b C-d} to delete a tab character before point, in these modes.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
112
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
113 Separate manuals are available for the modes for Ada (@pxref{Top, , Ada
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
114 Mode, ada-mode, Ada Mode}), C/C++/Objective C/Java/Corba IDL/Pike/AWK
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
115 (@pxref{Top, , CC Mode, ccmode, CC Mode}) and the IDLWAVE modes
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
116 (@pxref{Top, , IDLWAVE, idlwave, IDLWAVE User Manual}). For Fortran
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
117 mode, see
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
118 @iftex
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
119 @ref{Fortran,,, emacs-xtra, Specialized Emacs Features}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
120 @end iftex
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
121 @ifnottex
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
122 @ref{Fortran}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
123 @end ifnottex
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
124
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
125 @cindex mode hook
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
126 @vindex c-mode-hook
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
127 @vindex lisp-mode-hook
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
128 @vindex emacs-lisp-mode-hook
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
129 @vindex lisp-interaction-mode-hook
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
130 @vindex scheme-mode-hook
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
131 Turning on a major mode runs a normal hook called the @dfn{mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
132 hook}, which is the value of a Lisp variable. Each major mode has a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
133 mode hook, and the hook's name is always made from the mode command's
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
134 name by adding @samp{-hook}. For example, turning on C mode runs the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
135 hook @code{c-mode-hook}, while turning on Lisp mode runs the hook
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
136 @code{lisp-mode-hook}. The purpose of the mode hook is to give you a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
137 place to set up customizations for that major mode. @xref{Hooks}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
138
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
139 @node Defuns
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
140 @section Top-Level Definitions, or Defuns
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
141
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
142 In Emacs, a major definition at the top level in the buffer, such as
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
143 a function, is called a @dfn{defun}. The name comes from Lisp, but in
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
144 Emacs we use it for all languages.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
145
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
146 @menu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
147 * Left Margin Paren:: An open-paren or similar opening delimiter
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
148 starts a defun if it is at the left margin.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
149 * Moving by Defuns:: Commands to move over or mark a major definition.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
150 * Imenu:: Making buffer indexes as menus.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
151 * Which Function:: Which Function mode shows which function you are in.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
152 @end menu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
153
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
154 @node Left Margin Paren
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
155 @subsection Left Margin Convention
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
156
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
157 @cindex open-parenthesis in leftmost column
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
158 @cindex ( in leftmost column
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
159 Many programming-language modes assume by default that any opening
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
160 delimiter found at the left margin is the start of a top-level
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
161 definition, or defun. Therefore, @strong{don't put an opening
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
162 delimiter at the left margin unless it should have that significance}.
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
163 For instance, never put an open-parenthesis at the left margin in a
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
164 Lisp file unless it is the start of a top-level list.
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
165
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
166 The convention speeds up many Emacs operations, which would
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
167 otherwise have to scan back to the beginning of the buffer to analyze
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
168 the syntax of the code.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
169
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
170 If you don't follow this convention, not only will you have trouble
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
171 when you explicitly use the commands for motion by defuns; other
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
172 features that use them will also give you trouble. This includes the
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
173 indentation commands (@pxref{Program Indent}) and Font Lock mode
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
174 (@pxref{Font Lock}).
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
175
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
176 The most likely problem case is when you want an opening delimiter
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
177 at the start of a line inside a string. To avoid trouble, put an
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
178 escape character (@samp{\}, in C and Emacs Lisp, @samp{/} in some
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
179 other Lisp dialects) before the opening delimiter. This will not
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
180 affect the contents of the string, but will prevent that opening
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
181 delimiter from starting a defun. Here's an example:
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
182
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
183 @example
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
184 (insert "Foo:
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
185 \(bar)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
186 ")
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
187 @end example
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
188
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
189 To help you catch violations of this convention, Font Lock mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
190 highlights confusing opening delimiters (those that ought to be
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
191 quoted) in bold red.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
192
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
193 If you need to override this convention, you can do so by setting
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
194 this user option:
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
195
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
196 @defvar open-paren-in-column-0-is-defun-start
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
197 If this user option is set to @code{t} (the default), opening
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
198 parentheses or braces at column zero always start defuns. When it's
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
199 @code{nil}, defuns are found by searching for parens or braces at the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
200 outermost level.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
201 @end defvar
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
202
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
203 Usually, you should leave this option at its default value of
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
204 @code{t}. If your buffer contains parentheses or braces in column
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
205 zero which don't start defuns, and it is somehow impractical to remove
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
206 these parentheses or braces, it might be helpful to set the option to
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
207 @code{nil}. Be aware that this might make scrolling and display in
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
208 large buffers quite sluggish. Furthermore, the parentheses and braces
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
209 must be correctly matched throughout the buffer for it to work
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
210 properly.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
211
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
212 @node Moving by Defuns
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
213 @subsection Moving by Defuns
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
214 @cindex defuns
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
215
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
216 These commands move point or set up the region based on top-level
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
217 major definitions, also called @dfn{defuns}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
218
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
219 @table @kbd
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
220 @item C-M-a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
221 Move to beginning of current or preceding defun
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
222 (@code{beginning-of-defun}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
223 @item C-M-e
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
224 Move to end of current or following defun (@code{end-of-defun}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
225 @item C-M-h
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
226 Put region around whole current or following defun (@code{mark-defun}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
227 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
228
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
229 @cindex move to beginning or end of function
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
230 @cindex function, move to beginning or end
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
231 @kindex C-M-a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
232 @kindex C-M-e
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
233 @kindex C-M-h
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
234 @findex beginning-of-defun
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
235 @findex end-of-defun
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
236 @findex mark-defun
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
237 The commands to move to the beginning and end of the current defun
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
238 are @kbd{C-M-a} (@code{beginning-of-defun}) and @kbd{C-M-e}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
239 (@code{end-of-defun}). If you repeat one of these commands, or use a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
240 positive numeric argument, each repetition moves to the next defun in
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
241 the direction of motion.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
242
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
243 @kbd{C-M-a} with a negative argument @minus{}@var{n} moves forward
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
244 @var{n} times to the next beginning of a defun. This is not exactly
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
245 the same place that @kbd{C-M-e} with argument @var{n} would move to;
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
246 the end of this defun is not usually exactly the same place as the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
247 beginning of the following defun. (Whitespace, comments, and perhaps
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
248 declarations can separate them.) Likewise, @kbd{C-M-e} with a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
249 negative argument moves back to an end of a defun, which is not quite
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
250 the same as @kbd{C-M-a} with a positive argument.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
251
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
252 @kindex C-M-h @r{(C mode)}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
253 @findex c-mark-function
93357
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
254 To operate on the current defun, use @kbd{C-M-h}
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
255 (@code{mark-defun}), which sets the mark at the end of the current
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
256 defun and puts point at its beginning. @xref{Marking Objects}. This
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
257 is the easiest way to get ready to kill the defun in order to move it
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
258 to a different place in the file. If you use the command while point
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
259 is between defuns, it uses the following defun. If you use the
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
260 command while the mark is already active, it sets the mark but does
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
261 not move point; furthermore, each successive use of @kbd{C-M-h}
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
262 extends the end of the region to include one more defun.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
263
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
264 In C mode, @kbd{C-M-h} runs the function @code{c-mark-function},
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
265 which is almost the same as @code{mark-defun}; the difference is that
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
266 it backs up over the argument declarations, function name and returned
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
267 data type so that the entire C function is inside the region. This is
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
268 an example of how major modes adjust the standard key bindings so that
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
269 they do their standard jobs in a way better fitting a particular
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
270 language. Other major modes may replace any or all of these key
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
271 bindings for that purpose.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
272
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
273 @node Imenu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
274 @subsection Imenu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
275 @cindex index of buffer definitions
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
276 @cindex buffer definitions index
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
277
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
278 The Imenu facility offers a way to find the major definitions in
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
279 a file by name. It is also useful in text formatter major modes,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
280 where it treats each chapter, section, etc., as a definition.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
281 (@xref{Tags}, for a more powerful feature that handles multiple files
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
282 together.)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
283
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
284 @findex imenu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
285 If you type @kbd{M-x imenu}, it reads the name of a definition using
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
286 the minibuffer, then moves point to that definition. You can use
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
287 completion to specify the name; the command always displays the whole
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
288 list of valid names.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
289
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
290 @findex imenu-add-menubar-index
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
291 Alternatively, you can bind the command @code{imenu} to a mouse
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
292 click. Then it displays mouse menus for you to select a definition
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
293 name. You can also add the buffer's index to the menu bar by calling
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
294 @code{imenu-add-menubar-index}. If you want to have this menu bar
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
295 item available for all buffers in a certain major mode, you can do
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
296 this by adding @code{imenu-add-menubar-index} to its mode hook. But
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
297 if you have done that, you will have to wait a little while each time
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
298 you visit a file in that mode, while Emacs finds all the definitions
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
299 in that buffer.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
300
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
301 @vindex imenu-auto-rescan
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
302 When you change the contents of a buffer, if you add or delete
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
303 definitions, you can update the buffer's index based on the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
304 new contents by invoking the @samp{*Rescan*} item in the menu.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
305 Rescanning happens automatically if you set @code{imenu-auto-rescan} to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
306 a non-@code{nil} value. There is no need to rescan because of small
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
307 changes in the text.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
308
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
309 @vindex imenu-sort-function
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
310 You can customize the way the menus are sorted by setting the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
311 variable @code{imenu-sort-function}. By default, names are ordered as
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
312 they occur in the buffer; if you want alphabetic sorting, use the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
313 symbol @code{imenu--sort-by-name} as the value. You can also
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
314 define your own comparison function by writing Lisp code.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
315
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
316 Imenu provides the information to guide Which Function mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
317 @ifnottex
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
318 (@pxref{Which Function}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
319 @end ifnottex
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
320 @iftex
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
321 (see below).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
322 @end iftex
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
323 The Speedbar can also use it (@pxref{Speedbar}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
324
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
325 @node Which Function
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
326 @subsection Which Function Mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
327 @cindex current function name in mode line
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
328
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
329 Which Function mode is a minor mode that displays the current
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
330 function name in the mode line, updating it as you move around in a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
331 buffer.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
332
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
333 @findex which-function-mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
334 @vindex which-func-modes
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
335 To either enable or disable Which Function mode, use the command
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
336 @kbd{M-x which-function-mode}. This command applies to all buffers,
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
337 both existing ones and those yet to be created. However, it takes
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
338 effect only in certain major modes, those listed in the value of
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
339 @code{which-func-modes}. If the value of @code{which-func-modes} is
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
340 @code{t} rather than a list of modes, then Which Function mode applies
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
341 to all major modes that know how to support it---in other words, all
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
342 the major modes that support Imenu.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
343
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
344 @node Program Indent
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
345 @section Indentation for Programs
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
346 @cindex indentation for programs
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
347
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
348 The best way to keep a program properly indented is to use Emacs to
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
349 reindent it as you change it. Emacs has commands to indent either a
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
350 single line, a specified number of lines, or all of the lines inside a
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
351 single parenthetical grouping.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
352
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
353 @menu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
354 * Basic Indent:: Indenting a single line.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
355 * Multi-line Indent:: Commands to reindent many lines at once.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
356 * Lisp Indent:: Specifying how each Lisp function should be indented.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
357 * C Indent:: Extra features for indenting C and related modes.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
358 * Custom C Indent:: Controlling indentation style for C and related modes.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
359 @end menu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
360
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
361 @cindex pretty-printer
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
362 Emacs also provides a Lisp pretty-printer in the library @code{pp}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
363 This program reformats a Lisp object with indentation chosen to look nice.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
364
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
365 @node Basic Indent
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
366 @subsection Basic Program Indentation Commands
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
367
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
368 The basic indentation commands indent a single line according to the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
369 usual conventions of the language you are editing.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
370
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
371 @table @kbd
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
372 @item @key{TAB}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
373 Adjust indentation of current line.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
374 @item C-j
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
375 Insert a newline, then adjust indentation of following line
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
376 (@code{newline-and-indent}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
377 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
378
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
379 @kindex TAB @r{(programming modes)}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
380 @findex c-indent-command
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
381 @findex indent-line-function
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
382 @findex indent-for-tab-command
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
383 The basic indentation command is @key{TAB}. In any
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
384 programming-language major mode, @key{TAB} gives the current line the
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
385 correct indentation as determined from the previous lines. It does
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
386 this by inserting or deleting whitespace at the beginning of the
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
387 current line. If point was inside the whitespace at the beginning of
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
388 the line, @key{TAB} puts it at the end of that whitespace; otherwise,
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
389 @key{TAB} keeps point fixed with respect to the characters around it.
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
390 If the region is active (@pxref{Mark}), @key{TAB} indents every line
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
391 within the region instead of just the current line. The function that
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
392 @key{TAB} runs depends on the major mode; for instance, it is
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
393 @code{c-indent-line-or-region} in C mode. Each function is aware of
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
394 the syntax and conventions for its particular language.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
395
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
396 Use @kbd{C-q @key{TAB}} to insert a tab character at point.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
397
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
398 @kindex C-j
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
399 @findex newline-and-indent
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
400 When entering lines of new code, use @kbd{C-j}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
401 (@code{newline-and-indent}), which inserts a newline and then adjusts
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
402 indentation after it. (It also deletes any trailing whitespace which
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
403 remains before the new newline.) For instance, @kbd{C-j} at the end
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
404 of a line creates a blank line with appropriate indentation. In
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
405 programming language modes, it is equivalent to @key{RET} @key{TAB}.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
406
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
407 When Emacs indents a line that starts within a parenthetical
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
408 grouping, it usually places the start of the line under the preceding
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
409 line within the group, or under the text after the parenthesis. If
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
410 you manually give one of these lines a nonstandard indentation, the
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
411 lines below will tend to follow it. This behavior is convenient in
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
412 cases where you have overridden the standard result of @key{TAB}
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
413 indentation (e.g., for aesthetic purposes).
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
414
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
415 Many programming-language modes assume that an open-parenthesis,
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
416 open-brace or other opening delimiter at the left margin is the start
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
417 of a function. This assumption speeds up indentation commands. If
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
418 the text you are editing contains opening delimiters in column zero
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
419 that aren't the beginning of a functions---even if these delimiters
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
420 occur inside strings or comments---then you must set
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
421 @code{open-paren-in-column-0-is-defun-start}. @xref{Left Margin
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
422 Paren}.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
423
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
424 Normally, Emacs indents lines using an ``optimal'' mix of tab and
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
425 space characters. If you want Emacs to use spaces only, set
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
426 @code{indent-tabs-mode} (@pxref{Just Spaces}).
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
427
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
428 @node Multi-line Indent
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
429 @subsection Indenting Several Lines
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
430
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
431 Sometimes, you may want to reindent several lines of code at a time.
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
432 One way to do this is to use the mark; when the mark is active and the
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
433 region is non-empty, @key{TAB} indents every line within the region.
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
434 In addition, Emacs provides several other commands for indenting large
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
435 chunks of code:
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
436
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
437 @table @kbd
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
438 @item C-M-q
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
439 Reindent all the lines within one parenthetical grouping.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
440 @item C-M-\
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
441 Reindent all lines in the region (@code{indent-region}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
442 @item C-u @key{TAB}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
443 Shift an entire parenthetical grouping rigidly sideways so that its
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
444 first line is properly indented.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
445 @item M-x indent-code-rigidly
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
446 Shift all the lines in the region rigidly sideways, but do not alter
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
447 lines that start inside comments and strings.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
448 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
449
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
450 @kindex C-M-q
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
451 @findex indent-pp-sexp
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
452 To reindent the contents of a single parenthetical grouping,
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
453 position point before the beginning of the grouping and type
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
454 @kbd{C-M-q}. This changes the relative indentation within the
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
455 grouping, without affecting its overall indentation (i.e., the
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
456 indentation of the line where the grouping starts). The function that
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
457 @kbd{C-M-q} runs depends on the major mode; it is
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
458 @code{indent-pp-sexp} in Lisp mode, @code{c-indent-exp} in C mode,
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
459 etc. To correct the overall indentation as well, type @key{TAB}
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
460 first.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
461
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
462 @kbd{C-M-\} (@code{indent-region}) applies @key{TAB} to the region.
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
463 This is useful when Transient Mark mode is disabled (@pxref{Persistent
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
464 Mark}), because in that case @key{TAB} does not act on the region.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
465
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
466 @kindex C-u TAB
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
467 If you like the relative indentation within a grouping but not the
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
468 indentation of its first line, move point to that first line and type
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
469 @kbd{C-u @key{TAB}}. In Lisp, C, and some other major modes,
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
470 @key{TAB} with a numeric argument reindents the current line as usual,
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
471 then reindents by the same amount all the lines in the parenthetical
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
472 grouping starting on the current line. It is clever, though, and does
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
473 not alter lines that start inside strings. Neither does it alter C
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
474 preprocessor lines when in C mode, but it does reindent any
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
475 continuation lines that may be attached to them.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
476
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
477 @findex indent-code-rigidly
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
478 The command @kbd{M-x indent-code-rigidly} rigidly shifts all the
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
479 lines in the region sideways, like @code{indent-rigidly} does
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
480 (@pxref{Indentation Commands}). It doesn't alter the indentation of
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
481 lines that start inside a string, unless the region also starts inside
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
482 that string. The prefix arg specifies the number of columns to
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
483 indent.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
484
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
485 @node Lisp Indent
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
486 @subsection Customizing Lisp Indentation
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
487 @cindex customizing Lisp indentation
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
488
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
489 The indentation pattern for a Lisp expression can depend on the function
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
490 called by the expression. For each Lisp function, you can choose among
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
491 several predefined patterns of indentation, or define an arbitrary one with
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
492 a Lisp program.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
493
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
494 The standard pattern of indentation is as follows: the second line of the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
495 expression is indented under the first argument, if that is on the same
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
496 line as the beginning of the expression; otherwise, the second line is
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
497 indented underneath the function name. Each following line is indented
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
498 under the previous line whose nesting depth is the same.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
499
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
500 @vindex lisp-indent-offset
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
501 If the variable @code{lisp-indent-offset} is non-@code{nil}, it overrides
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
502 the usual indentation pattern for the second line of an expression, so that
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
503 such lines are always indented @code{lisp-indent-offset} more columns than
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
504 the containing list.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
505
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
506 @vindex lisp-body-indent
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
507 Certain functions override the standard pattern. Functions whose
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
508 names start with @code{def} treat the second lines as the start of
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
509 a @dfn{body}, by indenting the second line @code{lisp-body-indent}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
510 additional columns beyond the open-parenthesis that starts the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
511 expression.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
512
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
513 @cindex @code{lisp-indent-function} property
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
514 You can override the standard pattern in various ways for individual
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
515 functions, according to the @code{lisp-indent-function} property of
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
516 the function name. Normally you would use this for macro definitions
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
517 and specify it using the @code{declare} construct (@pxref{Defining
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
518 Macros,,, elisp, the Emacs Lisp Reference Manual}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
519
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
520 @node C Indent
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
521 @subsection Commands for C Indentation
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
522
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
523 Here are special features for indentation in C mode and related modes:
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
524
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
525 @table @code
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
526 @item C-c C-q
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
527 @kindex C-c C-q @r{(C mode)}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
528 @findex c-indent-defun
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
529 Reindent the current top-level function definition or aggregate type
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
530 declaration (@code{c-indent-defun}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
531
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
532 @item C-M-q
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
533 @kindex C-M-q @r{(C mode)}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
534 @findex c-indent-exp
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
535 Reindent each line in the balanced expression that follows point
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
536 (@code{c-indent-exp}). A prefix argument inhibits warning messages
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
537 about invalid syntax.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
538
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
539 @item @key{TAB}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
540 @findex c-indent-command
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
541 Reindent the current line, and/or in some cases insert a tab character
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
542 (@code{c-indent-command}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
543
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
544 @vindex c-tab-always-indent
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
545 If @code{c-tab-always-indent} is @code{t}, this command always reindents
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
546 the current line and does nothing else. This is the default.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
547
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
548 If that variable is @code{nil}, this command reindents the current line
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
549 only if point is at the left margin or in the line's indentation;
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
550 otherwise, it inserts a tab (or the equivalent number of spaces,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
551 if @code{indent-tabs-mode} is @code{nil}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
552
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
553 Any other value (not @code{nil} or @code{t}) means always reindent the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
554 line, and also insert a tab if within a comment or a string.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
555 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
556
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
557 To reindent the whole current buffer, type @kbd{C-x h C-M-\}. This
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
558 first selects the whole buffer as the region, then reindents that
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
559 region.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
560
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
561 To reindent the current block, use @kbd{C-M-u C-M-q}. This moves
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
562 to the front of the block and then reindents it all.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
563
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
564 @node Custom C Indent
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
565 @subsection Customizing C Indentation
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
566 @cindex style (for indentation)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
567
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
568 C mode and related modes use a flexible mechanism for customizing
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
569 indentation. C mode indents a source line in two steps: first it
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
570 classifies the line syntactically according to its contents and
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
571 context; second, it determines the indentation offset associated by
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
572 your selected @dfn{style} with the syntactic construct and adds this
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
573 onto the indentation of the @dfn{anchor statement}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
574
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
575 @table @kbd
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
576 @item C-c . @key{RET} @var{style} @key{RET}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
577 Select a predefined style @var{style} (@code{c-set-style}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
578 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
579
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
580 A @dfn{style} is a named collection of customizations that can be
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
581 used in C mode and the related modes. @ref{Styles,,, ccmode, The CC
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
582 Mode Manual}, for a complete description. Emacs comes with several
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
583 predefined styles, including @code{gnu}, @code{k&r}, @code{bsd},
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
584 @code{stroustrup}, @code{linux}, @code{python}, @code{java},
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
585 @code{whitesmith}, @code{ellemtel}, and @code{awk}. Some of these
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
586 styles are primarily intended for one language, but any of them can be
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
587 used with any of the languages supported by these modes. To find out
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
588 what a style looks like, select it and reindent some code, e.g., by
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
589 typing @key{C-M-q} at the start of a function definition.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
590
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
591 @kindex C-c . @r{(C mode)}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
592 @findex c-set-style
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
593 To choose a style for the current buffer, use the command @w{@kbd{C-c
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
594 .}}. Specify a style name as an argument (case is not significant).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
595 This command affects the current buffer only, and it affects only
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
596 future invocations of the indentation commands; it does not reindent
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
597 the code already in the buffer. To reindent the whole buffer in the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
598 new style, you can type @kbd{C-x h C-M-\}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
599
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
600 @vindex c-default-style
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
601 You can also set the variable @code{c-default-style} to specify the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
602 default style for various major modes. Its value should be either the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
603 style's name (a string) or an alist, in which each element specifies
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
604 one major mode and which indentation style to use for it. For
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
605 example,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
606
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
607 @example
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
608 (setq c-default-style
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
609 '((java-mode . "java") (awk-mode . "awk") (other . "gnu")))
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
610 @end example
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
611
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
612 @noindent
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
613 specifies explicit choices for Java and AWK modes, and the default
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
614 @samp{gnu} style for the other C-like modes. (These settings are
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
615 actually the defaults.) This variable takes effect when you select
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
616 one of the C-like major modes; thus, if you specify a new default
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
617 style for Java mode, you can make it take effect in an existing Java
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
618 mode buffer by typing @kbd{M-x java-mode} there.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
619
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
620 The @code{gnu} style specifies the formatting recommended by the GNU
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
621 Project for C; it is the default, so as to encourage use of our
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
622 recommended style.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
623
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
624 @xref{Indentation Engine Basics,,, ccmode, the CC Mode Manual}, and
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
625 @ref{Customizing Indentation,,, ccmode, the CC Mode Manual}, for more
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
626 information on customizing indentation for C and related modes,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
627 including how to override parts of an existing style and how to define
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
628 your own styles.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
629
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
630 @node Parentheses
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
631 @section Commands for Editing with Parentheses
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
632
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
633 @findex check-parens
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
634 @cindex unbalanced parentheses and quotes
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
635 This section describes the commands and features that take advantage
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
636 of the parenthesis structure in a program, or help you keep it
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
637 balanced.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
638
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
639 When talking about these facilities, the term ``parenthesis'' also
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
640 includes braces, brackets, or whatever delimiters are defined to match
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
641 in pairs. The major mode controls which delimiters are significant,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
642 through the syntax table (@pxref{Syntax}). In Lisp, only parentheses
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
643 count; in C, these commands apply to braces and brackets too.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
644
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
645 You can use @kbd{M-x check-parens} to find any unbalanced
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
646 parentheses and unbalanced string quotes in the buffer.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
647
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
648 @menu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
649 * Expressions:: Expressions with balanced parentheses.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
650 * Moving by Parens:: Commands for moving up, down and across
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
651 in the structure of parentheses.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
652 * Matching:: Insertion of a close-delimiter flashes matching open.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
653 @end menu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
654
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
655 @node Expressions
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
656 @subsection Expressions with Balanced Parentheses
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
657
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
658 @cindex sexp
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
659 @cindex expression
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
660 @cindex balanced expression
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
661 These commands deal with balanced expressions, also called
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
662 @dfn{sexps}@footnote{The word ``sexp'' is used to refer to an
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
663 expression in Lisp.}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
664
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
665 @table @kbd
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
666 @item C-M-f
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
667 Move forward over a balanced expression (@code{forward-sexp}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
668 @item C-M-b
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
669 Move backward over a balanced expression (@code{backward-sexp}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
670 @item C-M-k
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
671 Kill balanced expression forward (@code{kill-sexp}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
672 @item C-M-t
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
673 Transpose expressions (@code{transpose-sexps}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
674 @item C-M-@@
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
675 @itemx C-M-@key{SPC}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
676 Put mark after following expression (@code{mark-sexp}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
677 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
678
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
679 Each programming language major mode customizes the definition of
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
680 balanced expressions to suit that language. Balanced expressions
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
681 typically include symbols, numbers, and string constants, as well as
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
682 any pair of matching delimiters and their contents. Some languages
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
683 have obscure forms of expression syntax that nobody has bothered to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
684 implement in Emacs.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
685
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
686 @cindex Control-Meta
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
687 By convention, the keys for these commands are all Control-Meta
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
688 characters. They usually act on expressions just as the corresponding
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
689 Meta characters act on words. For instance, the command @kbd{C-M-b}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
690 moves backward over a balanced expression, just as @kbd{M-b} moves
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
691 back over a word.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
692
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
693 @kindex C-M-f
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
694 @kindex C-M-b
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
695 @findex forward-sexp
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
696 @findex backward-sexp
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
697 To move forward over a balanced expression, use @kbd{C-M-f}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
698 (@code{forward-sexp}). If the first significant character after point
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
699 is an opening delimiter (@samp{(} in Lisp; @samp{(}, @samp{[} or
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
700 @samp{@{} in C), @kbd{C-M-f} moves past the matching closing
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
701 delimiter. If the character begins a symbol, string, or number,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
702 @kbd{C-M-f} moves over that.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
703
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
704 The command @kbd{C-M-b} (@code{backward-sexp}) moves backward over a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
705 balanced expression. The detailed rules are like those above for
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
706 @kbd{C-M-f}, but with directions reversed. If there are prefix
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
707 characters (single-quote, backquote and comma, in Lisp) preceding the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
708 expression, @kbd{C-M-b} moves back over them as well. The balanced
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
709 expression commands move across comments as if they were whitespace,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
710 in most modes.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
711
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
712 @kbd{C-M-f} or @kbd{C-M-b} with an argument repeats that operation the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
713 specified number of times; with a negative argument, it moves in the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
714 opposite direction.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
715
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
716 @cindex killing expressions
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
717 @kindex C-M-k
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
718 @findex kill-sexp
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
719 Killing a whole balanced expression can be done with @kbd{C-M-k}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
720 (@code{kill-sexp}). @kbd{C-M-k} kills the characters that @kbd{C-M-f}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
721 would move over.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
722
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
723 @cindex transposition of expressions
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
724 @kindex C-M-t
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
725 @findex transpose-sexps
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
726 A somewhat random-sounding command which is nevertheless handy is
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
727 @kbd{C-M-t} (@code{transpose-sexps}), which drags the previous
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
728 balanced expression across the next one. An argument serves as a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
729 repeat count, moving the previous expression over that many following
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
730 ones. A negative argument drags the previous balanced expression
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
731 backwards across those before it (thus canceling out the effect of
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
732 @kbd{C-M-t} with a positive argument). An argument of zero, rather
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
733 than doing nothing, transposes the balanced expressions ending at or
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
734 after point and the mark.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
735
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
736 @kindex C-M-@@
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
737 @kindex C-M-@key{SPC}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
738 @findex mark-sexp
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
739 To set the region around the next balanced expression in the buffer,
93357
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
740 use @kbd{C-M-@key{SPC}} (@code{mark-sexp}), which sets mark at the
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
741 same place that @kbd{C-M-f} would move to. @kbd{C-M-@key{SPC}} treats
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
742 numeric arguments in the same way as @kbd{C-M-f}; in particular, a
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
743 negative argument puts the mark at the beginning of the previous
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
744 balanced expression. The alias @kbd{C-M-@@} is equivalent to
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
745 @kbd{C-M-@key{SPC}}. While the mark is active, each successive use of
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
746 @kbd{C-M-@key{SPC}} extends the region by shifting the mark by one
50a71f4146c8 (Moving by Defuns, Expressions, Comment Commands): Describe Transient
Chong Yidong <cyd@stupidchicken.com>
parents: 88056
diff changeset
747 sexp.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
748
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
749 In languages that use infix operators, such as C, it is not possible
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
750 to recognize all balanced expressions as such because there can be
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
751 multiple possibilities at a given position. For example, C mode does
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
752 not treat @samp{foo + bar} as a single expression, even though it
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
753 @emph{is} one C expression; instead, it recognizes @samp{foo} as one
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
754 expression and @samp{bar} as another, with the @samp{+} as punctuation
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
755 between them. Both @samp{foo + bar} and @samp{foo} are legitimate
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
756 choices for ``the expression following point'' when point is at the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
757 @samp{f}, so the expression commands must perforce choose one or the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
758 other to operate on. Note that @samp{(foo + bar)} is recognized as a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
759 single expression in C mode, because of the parentheses.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
760
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
761 @node Moving by Parens
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
762 @subsection Moving in the Parenthesis Structure
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
763
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
764 @cindex parenthetical groupings
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
765 @cindex parentheses, moving across
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
766 @cindex matching parenthesis and braces, moving to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
767 @cindex braces, moving across
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
768 @cindex list commands
99956
6eac7f3fceba (Moving by Parens): Clarify that parens inside strings and comments are
Alan Mackenzie <acm@muc.de>
parents: 99317
diff changeset
769
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
770 The Emacs commands for handling parenthetical groupings see nothing
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
771 except parentheses (or whatever characters must balance in the
99956
6eac7f3fceba (Moving by Parens): Clarify that parens inside strings and comments are
Alan Mackenzie <acm@muc.de>
parents: 99317
diff changeset
772 language you are working with). They ignore strings and comments
6eac7f3fceba (Moving by Parens): Clarify that parens inside strings and comments are
Alan Mackenzie <acm@muc.de>
parents: 99317
diff changeset
773 (including any parentheses within them) and ignore parentheses quoted
6eac7f3fceba (Moving by Parens): Clarify that parens inside strings and comments are
Alan Mackenzie <acm@muc.de>
parents: 99317
diff changeset
774 by an escape character. They are mainly intended for editing
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
775 programs, but can be useful for editing any text that has parentheses.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
776 They are sometimes called ``list'' commands because in Lisp these
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
777 groupings are lists.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
778
99956
6eac7f3fceba (Moving by Parens): Clarify that parens inside strings and comments are
Alan Mackenzie <acm@muc.de>
parents: 99317
diff changeset
779 These commands assume that the starting point is not inside a string
6eac7f3fceba (Moving by Parens): Clarify that parens inside strings and comments are
Alan Mackenzie <acm@muc.de>
parents: 99317
diff changeset
780 or a comment. Sometimes you can invoke them usefully from one of
6eac7f3fceba (Moving by Parens): Clarify that parens inside strings and comments are
Alan Mackenzie <acm@muc.de>
parents: 99317
diff changeset
781 these places (for example, when you have a parenthesised clause in a
6eac7f3fceba (Moving by Parens): Clarify that parens inside strings and comments are
Alan Mackenzie <acm@muc.de>
parents: 99317
diff changeset
782 comment) but this is unreliable.
6eac7f3fceba (Moving by Parens): Clarify that parens inside strings and comments are
Alan Mackenzie <acm@muc.de>
parents: 99317
diff changeset
783
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
784 @table @kbd
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
785 @item C-M-n
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
786 Move forward over a parenthetical group (@code{forward-list}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
787 @item C-M-p
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
788 Move backward over a parenthetical group (@code{backward-list}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
789 @item C-M-u
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
790 Move up in parenthesis structure (@code{backward-up-list}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
791 @item C-M-d
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
792 Move down in parenthesis structure (@code{down-list}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
793 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
794
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
795 @kindex C-M-n
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
796 @kindex C-M-p
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
797 @findex forward-list
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
798 @findex backward-list
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
799 The ``list'' commands @kbd{C-M-n} (@code{forward-list}) and
99956
6eac7f3fceba (Moving by Parens): Clarify that parens inside strings and comments are
Alan Mackenzie <acm@muc.de>
parents: 99317
diff changeset
800 @kbd{C-M-p} (@code{backward-list}) move forward or backward over one
6eac7f3fceba (Moving by Parens): Clarify that parens inside strings and comments are
Alan Mackenzie <acm@muc.de>
parents: 99317
diff changeset
801 (or @var{n}) parenthetical groupings.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
802
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
803 @kindex C-M-u
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
804 @findex backward-up-list
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
805 @kbd{C-M-n} and @kbd{C-M-p} try to stay at the same level in the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
806 parenthesis structure. To move @emph{up} one (or @var{n}) levels, use
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
807 @kbd{C-M-u} (@code{backward-up-list}). @kbd{C-M-u} moves backward up
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
808 past one unmatched opening delimiter. A positive argument serves as a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
809 repeat count; a negative argument reverses the direction of motion, so
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
810 that the command moves forward and up one or more levels.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
811
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
812 @kindex C-M-d
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
813 @findex down-list
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
814 To move @emph{down} in the parenthesis structure, use @kbd{C-M-d}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
815 (@code{down-list}). In Lisp mode, where @samp{(} is the only opening
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
816 delimiter, this is nearly the same as searching for a @samp{(}. An
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
817 argument specifies the number of levels to go down.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
818
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
819 @node Matching
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
820 @subsection Automatic Display Of Matching Parentheses
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
821 @cindex matching parentheses
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
822 @cindex parentheses, displaying matches
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
823
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
824 The Emacs parenthesis-matching feature is designed to show
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
825 automatically how parentheses (and other matching delimiters) match in
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
826 the text. Whenever you type a self-inserting character that is a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
827 closing delimiter, the cursor moves momentarily to the location of the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
828 matching opening delimiter, provided that is on the screen. If it is
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
829 not on the screen, Emacs displays some of the text near it in the echo
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
830 area. Either way, you can tell which grouping you are closing off.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
831
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
832 If the opening delimiter and closing delimiter are mismatched---such
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
833 as in @samp{[x)}---a warning message is displayed in the echo area.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
834
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
835 @vindex blink-matching-paren
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
836 @vindex blink-matching-paren-distance
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
837 @vindex blink-matching-delay
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
838 Three variables control parenthesis match display:
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
839
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
840 @code{blink-matching-paren} turns the feature on or off: @code{nil}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
841 disables it, but the default is @code{t} to enable match display.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
842
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
843 @code{blink-matching-delay} says how many seconds to leave the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
844 cursor on the matching opening delimiter, before bringing it back to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
845 the real location of point; the default is 1, but on some systems it
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
846 is useful to specify a fraction of a second.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
847
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
848 @code{blink-matching-paren-distance} specifies how many characters
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
849 back to search to find the matching opening delimiter. If the match
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
850 is not found in that distance, scanning stops, and nothing is displayed.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
851 This is to prevent the scan for the matching delimiter from wasting
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
852 lots of time when there is no match. The default is 25600.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
853
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
854 @cindex Show Paren mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
855 @cindex highlighting matching parentheses
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
856 @findex show-paren-mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
857 Show Paren mode provides a more powerful kind of automatic matching.
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
858 Whenever point is before an opening delimiter or after a closing
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
859 delimiter, both that delimiter and its opposite delimiter are
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
860 highlighted. Use the command @kbd{M-x show-paren-mode} to enable or
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
861 disable this mode.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
862
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
863 Show Paren mode uses the faces @code{show-paren-match} and
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
864 @code{show-paren-mismatch} to highlight parentheses; you can customize
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
865 them to control how highlighting looks. @xref{Face Customization}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
866
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
867 @node Comments
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
868 @section Manipulating Comments
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
869 @cindex comments
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
870
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
871 Because comments are such an important part of programming, Emacs
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
872 provides special commands for editing and inserting comments. It can
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
873 also do spell checking on comments with Flyspell Prog mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
874 (@pxref{Spelling}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
875
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
876 @menu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
877 * Comment Commands:: Inserting, killing, and aligning comments.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
878 * Multi-Line Comments:: Commands for adding and editing multi-line comments.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
879 * Options for Comments::Customizing the comment features.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
880 @end menu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
881
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
882 @node Comment Commands
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
883 @subsection Comment Commands
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
884 @cindex indentation for comments
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
885 @cindex alignment for comments
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
886
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
887 The commands in this table insert, kill and align comments:
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
888
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
889 @table @asis
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
890 @item @kbd{M-;}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
891 Insert or realign comment on current line; alternatively, comment or
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
892 uncomment the region (@code{comment-dwim}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
893 @item @kbd{C-u M-;}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
894 Kill comment on current line (@code{comment-kill}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
895 @item @kbd{C-x ;}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
896 Set comment column (@code{comment-set-column}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
897 @item @kbd{C-M-j}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
898 @itemx @kbd{M-j}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
899 Like @key{RET} followed by inserting and aligning a comment
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
900 (@code{comment-indent-new-line}). @xref{Multi-Line Comments}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
901 @item @kbd{M-x comment-region}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
902 @itemx @kbd{C-c C-c} (in C-like modes)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
903 Add or remove comment delimiters on all the lines in the region.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
904 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
905
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
906 @kindex M-;
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
907 @findex comment-dwim
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
908 The command to create or align a comment is @kbd{M-;}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
909 (@code{comment-dwim}). The word ``dwim'' is an acronym for ``Do What
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
910 I Mean''; it indicates that this command can be used for many
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
911 different jobs relating to comments, depending on the situation where
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
912 you use it.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
913
100077
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
914 When a region is active, @kbd{M-;} either adds or removes comment
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
915 delimiters on each line of the region. @xref{Mark}. If every line in
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
916 the region is a comment, it removes comment delimiters from each;
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
917 otherwise, it adds comment delimiters to each. You can also use the
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
918 commands @code{comment-region} and @code{uncomment-region} to
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
919 explicitly comment or uncomment the text in the region
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
920 (@pxref{Multi-Line Comments}). If you supply a prefix argument to
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
921 @kbd{M-;} when a region is active, that specifies how many comment
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
922 delimiters to add or how many to delete.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
923
100077
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
924 If the region is not active, @kbd{M-;} inserts a new comment if
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
925 there is no comment already on the line. The new comment is normally
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
926 aligned at a specific column called the @dfn{comment column}; if the
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
927 text of the line extends past the comment column, @kbd{M-;} aligns the
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
928 comment start string to a suitable boundary (usually, at least one
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
929 space is inserted). The comment begins with the string Emacs thinks
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
930 comments should start with (the value of @code{comment-start}; see
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
931 below). Emacs places point after that string, so you can insert the
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
932 text of the comment right away. If the major mode has specified a
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
933 string to terminate comments, @kbd{M-;} inserts that string after
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
934 point, to keep the syntax valid.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
935
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
936 You can also use @kbd{M-;} to align an existing comment. If a line
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
937 already contains the comment-start string, @kbd{M-;} realigns it to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
938 the conventional alignment and moves point after it. (Exception:
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
939 comments starting in column 0 are not moved.) Even when an existing
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
940 comment is properly aligned, @kbd{M-;} is still useful for moving
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
941 directly to the start of the text inside the comment.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
942
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
943 @findex comment-kill
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
944 @kindex C-u M-;
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
945 @kbd{C-u M-;} kills any comment on the current line, along with the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
946 whitespace before it. To reinsert the comment on another line, move
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
947 to the end of that line, do @kbd{C-y}, and then do @kbd{M-;} to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
948 realign it.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
949
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
950 Note that @kbd{C-u M-;} is not a distinct key; it is @kbd{M-;}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
951 (@code{comment-dwim}) with a prefix argument. That command is
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
952 programmed so that when it receives a prefix argument it calls
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
953 @code{comment-kill}. However, @code{comment-kill} is a valid command
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
954 in its own right, and you can bind it directly to a key if you wish.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
955
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
956 Some major modes have special rules for aligning certain kinds of
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
957 comments in certain contexts. For example, in Lisp code, comments which
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
958 start with two semicolons are indented as if they were lines of code,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
959 instead of at the comment column. Comments which start with three
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
960 semicolons are supposed to start at the left margin and are often used
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
961 for sectioning purposes. Emacs understands
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
962 these conventions by indenting a double-semicolon comment using @key{TAB},
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
963 and by not changing the indentation of a triple-semicolon comment at all.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
964
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
965 @example
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
966 ;; This function is just an example.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
967 ;;; Here either two or three semicolons are appropriate.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
968 (defun foo (x)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
969 ;;; And now, the first part of the function:
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
970 ;; The following line adds one.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
971 (1+ x)) ; This line adds one.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
972 @end example
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
973
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
974 For C-like modes, you can configure the exact effect of @kbd{M-;} by
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
975 setting the variables @code{c-indent-comment-alist} and
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
976 @code{c-indent-comments-syntactically-p}. For example, on a line
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
977 ending in a closing brace, @kbd{M-;} puts the comment one space after
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
978 the brace rather than at @code{comment-column}. For full details see
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
979 @ref{Comment Commands,,, ccmode, The CC Mode Manual}.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
980
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
981 @node Multi-Line Comments
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
982 @subsection Multiple Lines of Comments
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
983
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
984 @kindex C-M-j
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
985 @kindex M-j
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
986 @cindex blank lines in programs
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
987 @findex comment-indent-new-line
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
988
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
989 If you are typing a comment and wish to continue it on another line,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
990 you can use the command @kbd{C-M-j} or @kbd{M-j}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
991 (@code{comment-indent-new-line}). If @code{comment-multi-line}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
992 (@pxref{Options for Comments}) is non-@code{nil}, it moves to a new
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
993 line within the comment. Otherwise it closes the comment and starts a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
994 new comment on a new line. When Auto Fill mode is on, going past the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
995 fill column while typing a comment causes the comment to be continued
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
996 in just this fashion.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
997
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
998 @kindex C-c C-c (C mode)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
999 @findex comment-region
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1000 To turn existing lines into comment lines, use the @kbd{M-x
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1001 comment-region} command (or type @kbd{C-c C-c} in C-like modes). It
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1002 adds comment delimiters to the lines that start in the region, thus
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1003 commenting them out. With a negative argument, it does the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1004 opposite---it deletes comment delimiters from the lines in the region.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1005
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1006 With a positive argument, @code{comment-region} duplicates the last
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1007 character of the comment start sequence it adds; the argument
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1008 specifies how many copies of the character to insert. Thus, in Lisp
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1009 mode, @kbd{C-u 2 M-x comment-region} adds @samp{;;} to each line.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1010 Duplicating the comment delimiter is a way of calling attention to the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1011 comment. It can also affect how the comment is aligned or indented.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1012 In Lisp, for proper indentation, you should use an argument of two or
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1013 three, if between defuns; if within a defun, it must be three.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1014
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1015 You can configure C Mode such that when you type a @samp{/} at the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1016 start of a line in a multi-line block comment, this closes the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1017 comment. Enable the @code{comment-close-slash} clean-up for this.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1018 @xref{Clean-ups,,, ccmode, The CC Mode Manual}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1019
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1020 @node Options for Comments
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1021 @subsection Options Controlling Comments
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1022
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1023 @vindex comment-column
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1024 @kindex C-x ;
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1025 @findex comment-set-column
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1026 The @dfn{comment column}, the column at which Emacs tries to place
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1027 comments, is stored in the variable @code{comment-column}. You can
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1028 set it to a number explicitly. Alternatively, the command @kbd{C-x ;}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1029 (@code{comment-set-column}) sets the comment column to the column
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1030 point is at. @kbd{C-u C-x ;} sets the comment column to match the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1031 last comment before point in the buffer, and then does a @kbd{M-;} to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1032 align the current line's comment under the previous one.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1033
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1034 The variable @code{comment-column} is per-buffer: setting the variable
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1035 in the normal fashion affects only the current buffer, but there is a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1036 default value which you can change with @code{setq-default}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1037 @xref{Locals}. Many major modes initialize this variable for the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1038 current buffer.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1039
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1040 @vindex comment-start-skip
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1041 The comment commands recognize comments based on the regular
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1042 expression that is the value of the variable @code{comment-start-skip}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1043 Make sure this regexp does not match the null string. It may match more
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1044 than the comment starting delimiter in the strictest sense of the word;
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1045 for example, in C mode the value of the variable is
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1046 @c This stops M-q from breaking the line inside that @code.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1047 @code{@w{"/\\*+ *\\|//+ *"}}, which matches extra stars and spaces
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1048 after the @samp{/*} itself, and accepts C++ style comments also.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1049 (Note that @samp{\\} is needed in Lisp syntax to include a @samp{\} in
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1050 the string, which is needed to deny the first star its special meaning
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1051 in regexp syntax. @xref{Regexp Backslash}.)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1052
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1053 @vindex comment-start
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1054 @vindex comment-end
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1055 When a comment command makes a new comment, it inserts the value of
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1056 @code{comment-start} to begin it. The value of @code{comment-end} is
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1057 inserted after point, so that it will follow the text that you will
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1058 insert into the comment. When @code{comment-end} is non-empty, it
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1059 should start with a space. For example, in C mode,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1060 @code{comment-start} has the value @w{@code{"/* "}} and
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1061 @code{comment-end} has the value @w{@code{" */"}}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1062
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1063 @vindex comment-padding
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1064 The variable @code{comment-padding} specifies how many spaces
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1065 @code{comment-region} should insert on each line between the comment
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1066 delimiter and the line's original text. The default is 1, to insert
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1067 one space. @code{nil} means 0. Alternatively, @code{comment-padding}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1068 can hold the actual string to insert.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1069
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1070 @vindex comment-multi-line
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1071 The variable @code{comment-multi-line} controls how @kbd{C-M-j}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1072 (@code{indent-new-comment-line}) behaves when used inside a comment.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1073 Specifically, when @code{comment-multi-line} is @code{nil}, the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1074 command inserts a comment terminator, begins a new line, and finally
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1075 inserts a comment starter. Otherwise it does not insert the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1076 terminator and starter, so it effectively continues the current
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1077 comment across multiple lines. In languages that allow multi-line
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1078 comments, the choice of value for this variable is a matter of taste.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1079 The default for this variable depends on the major mode.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1080
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1081 @vindex comment-indent-function
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1082 The variable @code{comment-indent-function} should contain a function
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1083 that will be called to compute the alignment for a newly inserted
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1084 comment or for aligning an existing comment. It is set differently by
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1085 various major modes. The function is called with no arguments, but with
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1086 point at the beginning of the comment, or at the end of a line if a new
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1087 comment is to be inserted. It should return the column in which the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1088 comment ought to start. For example, in Lisp mode, the indent hook
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1089 function bases its decision on how many semicolons begin an existing
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1090 comment, and on the code in the preceding lines.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1091
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1092 @node Documentation
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1093 @section Documentation Lookup
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1094
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1095 Emacs provides several features you can use to look up the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1096 documentation of functions, variables and commands that you plan to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1097 use in your program.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1098
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1099 @menu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1100 * Info Lookup:: Looking up library functions and commands
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1101 in Info files.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1102 * Man Page:: Looking up man pages of library functions and commands.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1103 * Lisp Doc:: Looking up Emacs Lisp functions, etc.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1104 @end menu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1105
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1106 @node Info Lookup
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1107 @subsection Info Documentation Lookup
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1108
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1109 @findex info-lookup-symbol
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1110 @findex info-lookup-file
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1111 @kindex C-h S
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
1112 For major modes that apply to languages which have documentation in
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
1113 Info, you can use @kbd{C-h S} (@code{info-lookup-symbol}) to view the
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
1114 Info documentation for a symbol used in the program. You specify the
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
1115 symbol with the minibuffer; the default is the symbol appearing in the
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
1116 buffer at point. For example, in C mode this looks for the symbol in
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
1117 the C Library Manual. The command only works if the appropriate
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
1118 manual's Info files are installed.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1119
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1120 The major mode determines where to look for documentation for the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1121 symbol---which Info files to look in, and which indices to search.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1122 You can also use @kbd{M-x info-lookup-file} to look for documentation
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1123 for a file name.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1124
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1125 If you use @kbd{C-h S} in a major mode that does not support it,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1126 it asks you to specify the ``symbol help mode.'' You should enter
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1127 a command such as @code{c-mode} that would select a major
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1128 mode which @kbd{C-h S} does support.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1129
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1130 @node Man Page
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1131 @subsection Man Page Lookup
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1132
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1133 @cindex manual page
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1134 On Unix, the main form of on-line documentation was the @dfn{manual
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1135 page} or @dfn{man page}. In the GNU operating system, we aim to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1136 replace man pages with better-organized manuals that you can browse
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1137 with Info (@pxref{Misc Help}). This process is not finished, so it is
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1138 still useful to read manual pages.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1139
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1140 @findex manual-entry
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1141 You can read the man page for an operating system command, library
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1142 function, or system call, with the @kbd{M-x man} command. It
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1143 runs the @code{man} program to format the man page; if the system
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1144 permits, it runs @code{man} asynchronously, so that you can keep on
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1145 editing while the page is being formatted. (On MS-DOS and MS-Windows
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1146 3, you cannot edit while Emacs waits for @code{man} to finish.) The
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1147 result goes in a buffer named @samp{*Man @var{topic}*}. These buffers
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1148 use a special major mode, Man mode, that facilitates scrolling and
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1149 jumping to other manual pages. For details, type @kbd{C-h m} while in
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1150 a man page buffer.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1151
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1152 @cindex sections of manual pages
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1153 Each man page belongs to one of ten or more @dfn{sections}, each
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1154 named by a digit or by a digit and a letter. Sometimes there are
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1155 multiple man pages with the same name in different sections. To read
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1156 a man page from a specific section, type
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1157 @samp{@var{topic}(@var{section})} or @samp{@var{section} @var{topic}}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1158 when @kbd{M-x manual-entry} prompts for the topic. For example, to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1159 read the man page for the C library function @code{chmod} (as opposed
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1160 to a command of the same name), type @kbd{M-x manual-entry @key{RET}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1161 chmod(2) @key{RET}}. (@code{chmod} is a system call, so it is in
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1162 section @samp{2}.)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1163
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1164 @vindex Man-switches
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1165 If you do not specify a section, the results depend on how the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1166 @code{man} program works on your system. Some of them display only
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1167 the first man page they find. Others display all man pages that have
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1168 the specified name, so you can move between them with the @kbd{M-n}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1169 and @kbd{M-p} keys@footnote{On some systems, the @code{man} program
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1170 accepts a @samp{-a} command-line option which tells it to display all
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1171 the man pages for the specified topic. If you want this behavior, you
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1172 can add this option to the value of the variable @code{Man-switches}.}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1173 The mode line shows how many manual pages are present in the Man buffer.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1174
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1175 @vindex Man-fontify-manpage-flag
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1176 By default, Emacs highlights the text in man pages. For a long man
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1177 page, highlighting can take substantial time. You can turn off
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1178 highlighting of man pages by setting the variable
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1179 @code{Man-fontify-manpage-flag} to @code{nil}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1180
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1181 @findex Man-fontify-manpage
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1182 If you insert the text of a man page into an Emacs buffer in some
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1183 other fashion, you can use the command @kbd{M-x Man-fontify-manpage} to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1184 perform the same conversions that @kbd{M-x manual-entry} does.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1185
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1186 @findex woman
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1187 @cindex manual pages, on MS-DOS/MS-Windows
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1188 An alternative way of reading manual pages is the @kbd{M-x woman}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1189 command@footnote{The name of the command, @code{woman}, is an acronym
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1190 for ``w/o (without) man,'' since it doesn't use the @code{man}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1191 program.}. Unlike @kbd{M-x man}, it does not run any external
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1192 programs to format and display the man pages; instead it does the job
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1193 in Emacs Lisp, so it works on systems such as MS-Windows, where the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1194 @code{man} program (and other programs it uses) are not generally
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1195 available.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1196
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1197 @kbd{M-x woman} prompts for a name of a manual page, and provides
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1198 completion based on the list of manual pages that are installed on
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1199 your machine; the list of available manual pages is computed
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1200 automatically the first time you invoke @code{woman}. The word at
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1201 point in the current buffer is used to suggest the default for the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1202 name the manual page.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1203
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1204 With a numeric argument, @kbd{M-x woman} recomputes the list of the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1205 manual pages used for completion. This is useful if you add or delete
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1206 manual pages.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1207
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1208 If you type a name of a manual page and @kbd{M-x woman} finds that
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1209 several manual pages by the same name exist in different sections, it
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1210 pops up a window with possible candidates asking you to choose one of
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1211 them.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1212
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1213 For more information about setting up and using @kbd{M-x woman}, see
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1214 @ref{Top, WoMan, Browse UN*X Manual Pages WithOut Man, woman, The WoMan
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1215 Manual}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1216
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1217 @node Lisp Doc
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1218 @subsection Emacs Lisp Documentation Lookup
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1219
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1220 As you edit Lisp code to be run in Emacs, you can use the commands
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1221 @kbd{C-h f} (@code{describe-function}) and @kbd{C-h v}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1222 (@code{describe-variable}) to view documentation of functions and
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1223 variables that you want to use. These commands use the minibuffer to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1224 read the name of a function or variable to document, and display the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1225 documentation in a window. Their default arguments are based on the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1226 code in the neighborhood of point. For @kbd{C-h f}, the default is
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1227 the function called in the innermost list containing point. @kbd{C-h
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1228 v} uses the symbol name around or adjacent to point as its default.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1229
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1230 @cindex Eldoc mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1231 @findex eldoc-mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1232 A more automatic but less powerful method is Eldoc mode. This minor
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1233 mode constantly displays in the echo area the argument list for the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1234 function being called at point. (In other words, it finds the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1235 function call that point is contained in, and displays the argument
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1236 list of that function.) If point is over a documented variable, it
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1237 shows the first line of the variable's docstring. Eldoc mode applies
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1238 in Emacs Lisp and Lisp Interaction modes, and perhaps a few others
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1239 that provide special support for looking up doc strings. Use the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1240 command @kbd{M-x eldoc-mode} to enable or disable this feature.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1241
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1242 @node Hideshow
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1243 @section Hideshow minor mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1244
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1245 @findex hs-minor-mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1246 Hideshow minor mode provides selective display of portions of a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1247 program, known as @dfn{blocks}. You can use @kbd{M-x hs-minor-mode}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1248 to enable or disable this mode, or add @code{hs-minor-mode} to the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1249 mode hook for certain major modes in order to enable it automatically
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1250 for those modes.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1251
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1252 Just what constitutes a block depends on the major mode. In C mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1253 or C++ mode, they are delimited by braces, while in Lisp mode and
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1254 similar modes they are delimited by parentheses. Multi-line comments
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1255 also count as blocks.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1256
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1257 @findex hs-hide-all
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1258 @findex hs-hide-block
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1259 @findex hs-show-all
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1260 @findex hs-show-block
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1261 @findex hs-show-region
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1262 @findex hs-hide-level
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1263 @findex hs-minor-mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1264 @kindex C-c @@ C-h
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1265 @kindex C-c @@ C-s
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1266 @kindex C-c @@ C-M-h
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1267 @kindex C-c @@ C-M-s
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1268 @kindex C-c @@ C-r
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1269 @kindex C-c @@ C-l
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1270 @kindex S-Mouse-2
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1271 @table @kbd
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1272 @item C-c @@ C-h
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1273 Hide the current block (@code{hs-hide-block}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1274 @item C-c @@ C-s
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1275 Show the current block (@code{hs-show-block}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1276 @item C-c @@ C-c
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1277 Either hide or show the current block (@code{hs-toggle-hiding}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1278 @item S-Mouse-2
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1279 Either hide or show the block you click on (@code{hs-mouse-toggle-hiding}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1280 @item C-c @@ C-M-h
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1281 Hide all top-level blocks (@code{hs-hide-all}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1282 @item C-c @@ C-M-s
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1283 Show everything in the buffer (@code{hs-show-all}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1284 @item C-c @@ C-l
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1285 Hide all blocks @var{n} levels below this block
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1286 (@code{hs-hide-level}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1287 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1288
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1289 @vindex hs-hide-comments-when-hiding-all
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1290 @vindex hs-isearch-open
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1291 @vindex hs-special-modes-alist
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1292 These variables exist for customizing Hideshow mode.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1293
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1294 @table @code
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1295 @item hs-hide-comments-when-hiding-all
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1296 Non-@code{nil} says that @kbd{hs-hide-all} should hide comments too.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1297
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1298 @item hs-isearch-open
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1299 Specifies what kind of hidden blocks incremental search should make
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1300 visible. The value should be one of these four symbols:
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1301
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1302 @table @code
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1303 @item code
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1304 Open only code blocks.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1305 @item comment
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1306 Open only comments.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1307 @item t
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1308 Open both code blocks and comments.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1309 @item nil
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1310 Open neither code blocks nor comments.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1311 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1312
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1313 @item hs-special-modes-alist
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1314 A list of elements, each specifying how to initialize Hideshow
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1315 variables for one major mode. See the variable's documentation string
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1316 for more information.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1317 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1318
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1319 @node Symbol Completion
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1320 @section Completion for Symbol Names
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1321 @cindex completion (symbol names)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1322
99317
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
1323 In Emacs, completion is something you normally do in the minibuffer
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
1324 (@pxref{Completion}). But one kind of completion is available in all
988149a79ff6 (Program Modes): Link to Program Indent node.
Chong Yidong <cyd@stupidchicken.com>
parents: 93357
diff changeset
1325 buffers: completion for symbol names.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1326
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1327 @kindex M-TAB
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1328 The character @kbd{M-@key{TAB}} runs a command to complete the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1329 partial symbol before point against the set of meaningful symbol
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1330 names. This command inserts at point any additional characters that
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1331 it can determine from the partial name.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1332
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1333 If your window manager defines @kbd{M-@key{TAB}} to switch windows,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1334 you can type @kbd{@key{ESC} @key{TAB}} or @kbd{C-M-i} instead.
100077
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
1335 However, most window managers let you customize these shortcuts, so
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
1336 you can change any that interfere with the way you use Emacs.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1337
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1338 If the partial name in the buffer has multiple possible completions
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1339 that differ in the very next character, so that it is impossible to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1340 complete even one more character, @kbd{M-@key{TAB}} displays a list of
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1341 all possible completions in another window.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1342
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1343 @cindex tags-based completion
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1344 @cindex Info index completion
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1345 @findex complete-symbol
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1346 In most programming language major modes, @kbd{M-@key{TAB}} runs the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1347 command @code{complete-symbol}, which provides two kinds of completion.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1348 Normally it does completion based on a tags table (@pxref{Tags}); with a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1349 numeric argument (regardless of the value), it does completion based on
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1350 the names listed in the Info file indexes for your language. Thus, to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1351 complete the name of a symbol defined in your own program, use
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1352 @kbd{M-@key{TAB}} with no argument; to complete the name of a standard
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1353 library function, use @kbd{C-u M-@key{TAB}}. Of course, Info-based
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1354 completion works only if there is an Info file for the standard library
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1355 functions of your language, and only if it is installed at your site.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1356
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1357 @cindex Lisp symbol completion
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1358 @cindex completion (Lisp symbols)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1359 @findex lisp-complete-symbol
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1360 In Emacs-Lisp mode, the name space for completion normally consists of
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1361 nontrivial symbols present in Emacs---those that have function
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1362 definitions, values or properties. However, if there is an
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1363 open-parenthesis immediately before the beginning of the partial symbol,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1364 only symbols with function definitions are considered as completions.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1365 The command which implements this is @code{lisp-complete-symbol}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1366
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1367 In Text mode and related modes, @kbd{M-@key{TAB}} completes words
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1368 based on the spell-checker's dictionary. @xref{Spelling}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1369
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1370 @node Glasses
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1371 @section Glasses minor mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1372 @cindex Glasses mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1373 @cindex identifiers, making long ones readable
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1374 @cindex StudlyCaps, making them readable
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1375 @findex glasses-mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1376
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1377 Glasses minor mode makes @samp{unreadableIdentifiersLikeThis}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1378 readable by altering the way they display. It knows two different
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1379 ways to do this: by displaying underscores between a lower-case letter
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1380 and the following capital letter, and by emboldening the capital
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1381 letters. It does not alter the buffer text, only the way they
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1382 display, so you can use it even on read-only buffers. You can use the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1383 command @kbd{M-x glasses-mode} to enable or disable the mode in the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1384 current buffer; you can also add @code{glasses-mode} to the mode hook
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1385 of the programming language major modes in which you normally want
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1386 to use Glasses mode.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1387
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1388 @node Misc for Programs
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1389 @section Other Features Useful for Editing Programs
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1390
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1391 A number of Emacs commands that aren't designed specifically for
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1392 editing programs are useful for that nonetheless.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1393
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1394 The Emacs commands that operate on words, sentences and paragraphs
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1395 are useful for editing code. Most symbols names contain words
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1396 (@pxref{Words}); sentences can be found in strings and comments
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1397 (@pxref{Sentences}). Paragraphs in the strict sense can be found in
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1398 program code (in long comments), but the paragraph commands are useful
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1399 in other places too, because programming language major modes define
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1400 paragraphs to begin and end at blank lines (@pxref{Paragraphs}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1401 Judicious use of blank lines to make the program clearer will also
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1402 provide useful chunks of text for the paragraph commands to work on.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1403 Auto Fill mode, if enabled in a programming language major mode,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1404 indents the new lines which it creates.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1405
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1406 The selective display feature is useful for looking at the overall
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1407 structure of a function (@pxref{Selective Display}). This feature
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1408 hides the lines that are indented more than a specified amount.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1409 Programming modes often support Outline minor mode (@pxref{Outline
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1410 Mode}). The Foldout package provides folding-editor features
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1411 (@pxref{Foldout}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1412
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1413 The ``automatic typing'' features may be useful for writing programs.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1414 @xref{Top,,Autotyping, autotype, Autotyping}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1415
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1416 @node C Modes
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1417 @section C and Related Modes
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1418 @cindex C mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1419 @cindex Java mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1420 @cindex Pike mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1421 @cindex IDL mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1422 @cindex CORBA IDL mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1423 @cindex Objective C mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1424 @cindex C++ mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1425 @cindex AWK mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1426 @cindex mode, Java
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1427 @cindex mode, C
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1428 @cindex mode, C++
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1429 @cindex mode, Objective C
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1430 @cindex mode, CORBA IDL
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1431 @cindex mode, Pike
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1432 @cindex mode, AWK
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1433
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1434 This section gives a brief description of the special features
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1435 available in C, C++, Objective-C, Java, CORBA IDL, Pike and AWK modes.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1436 (These are called ``C mode and related modes.'') @xref{Top, , CC Mode,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1437 ccmode, CC Mode}, for a more extensive description of these modes
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1438 and their special features.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1439
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1440 @menu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1441 * Motion in C:: Commands to move by C statements, etc.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1442 * Electric C:: Colon and other chars can automatically reindent.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1443 * Hungry Delete:: A more powerful DEL command.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1444 * Other C Commands:: Filling comments, viewing expansion of macros,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1445 and other neat features.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1446 @end menu
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1447
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1448 @node Motion in C
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1449 @subsection C Mode Motion Commands
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1450
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1451 This section describes commands for moving point, in C mode and
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1452 related modes.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1453
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1454 @table @code
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1455 @item M-x c-beginning-of-defun
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1456 @itemx M-x c-end-of-defun
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1457 @findex c-beginning-of-defun
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1458 @findex c-end-of-defun
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1459 Move point to the beginning or end of the current function or
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1460 top-level definition. These are found by searching for the least
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1461 enclosing braces. (By contrast, @code{beginning-of-defun} and
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1462 @code{end-of-defun} search for braces in column zero.) If you are
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1463 editing code where the opening brace of a function isn't placed in
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1464 column zero, you may wish to bind @code{C-M-a} and @code{C-M-e} to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1465 these commands. @xref{Moving by Defuns}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1466
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1467 @item C-c C-u
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1468 @kindex C-c C-u @r{(C mode)}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1469 @findex c-up-conditional
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1470 Move point back to the containing preprocessor conditional, leaving the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1471 mark behind. A prefix argument acts as a repeat count. With a negative
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1472 argument, move point forward to the end of the containing
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1473 preprocessor conditional.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1474
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1475 @samp{#elif} is equivalent to @samp{#else} followed by @samp{#if}, so
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1476 the function will stop at a @samp{#elif} when going backward, but not
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1477 when going forward.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1478
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1479 @item C-c C-p
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1480 @kindex C-c C-p @r{(C mode)}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1481 @findex c-backward-conditional
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1482 Move point back over a preprocessor conditional, leaving the mark
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1483 behind. A prefix argument acts as a repeat count. With a negative
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1484 argument, move forward.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1485
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1486 @item C-c C-n
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1487 @kindex C-c C-n @r{(C mode)}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1488 @findex c-forward-conditional
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1489 Move point forward across a preprocessor conditional, leaving the mark
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1490 behind. A prefix argument acts as a repeat count. With a negative
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1491 argument, move backward.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1492
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1493 @item M-a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1494 @kindex M-a (C mode)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1495 @findex c-beginning-of-statement
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1496 Move point to the beginning of the innermost C statement
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1497 (@code{c-beginning-of-statement}). If point is already at the beginning
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1498 of a statement, move to the beginning of the preceding statement. With
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1499 prefix argument @var{n}, move back @var{n} @minus{} 1 statements.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1500
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1501 In comments or in strings which span more than one line, this command
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1502 moves by sentences instead of statements.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1503
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1504 @item M-e
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1505 @kindex M-e (C mode)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1506 @findex c-end-of-statement
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1507 Move point to the end of the innermost C statement or sentence; like
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1508 @kbd{M-a} except that it moves in the other direction
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1509 (@code{c-end-of-statement}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1510 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1511
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1512 @node Electric C
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1513 @subsection Electric C Characters
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1514
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1515 In C mode and related modes, certain printing characters are
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1516 @dfn{electric}---in addition to inserting themselves, they also
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1517 reindent the current line, and optionally also insert newlines. The
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1518 ``electric'' characters are @kbd{@{}, @kbd{@}}, @kbd{:}, @kbd{#},
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1519 @kbd{;}, @kbd{,}, @kbd{<}, @kbd{>}, @kbd{/}, @kbd{*}, @kbd{(}, and
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1520 @kbd{)}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1521
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1522 You might find electric indentation inconvenient if you are editing
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1523 chaotically indented code. If you are new to CC Mode, you might find
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1524 it disconcerting. You can toggle electric action with the command
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1525 @kbd{C-c C-l}; when it is enabled, @samp{/l} appears in the mode line
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1526 after the mode name:
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1527
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1528 @table @kbd
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1529 @item C-c C-l
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1530 @kindex C-c C-l @r{(C mode)}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1531 @findex c-toggle-electric-state
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1532 Toggle electric action (@code{c-toggle-electric-state}). With a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1533 prefix argument, this command enables electric action if the argument
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1534 is positive, disables it if it is negative.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1535 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1536
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1537 Electric characters insert newlines only when, in addition to the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1538 electric state, the @dfn{auto-newline} feature is enabled (indicated
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1539 by @samp{/la} in the mode line after the mode name). You can turn
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1540 this feature on or off with the command @kbd{C-c C-a}:
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1541
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1542 @table @kbd
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1543 @item C-c C-a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1544 @kindex C-c C-a @r{(C mode)}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1545 @findex c-toggle-auto-newline
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1546 Toggle the auto-newline feature (@code{c-toggle-auto-newline}). With a
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1547 prefix argument, this command turns the auto-newline feature on if the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1548 argument is positive, and off if it is negative.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1549 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1550
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1551 Usually the CC Mode style configures the exact circumstances in
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1552 which Emacs inserts auto-newlines. You can also configure this
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1553 directly. @xref{Custom Auto-newlines,,, ccmode, The CC Mode Manual}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1554
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1555 @node Hungry Delete
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1556 @subsection Hungry Delete Feature in C
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1557 @cindex hungry deletion (C Mode)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1558
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1559 If you want to delete an entire block of whitespace at point, you
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1560 can use @dfn{hungry deletion}. This deletes all the contiguous
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1561 whitespace either before point or after point in a single operation.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1562 @dfn{Whitespace} here includes tabs and newlines, but not comments or
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1563 preprocessor commands.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1564
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1565 @table @kbd
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1566 @item C-c C-@key{DEL}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1567 @itemx C-c @key{DEL}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1568 @findex c-hungry-delete-backwards
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1569 @kindex C-c C-@key{DEL} (C Mode)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1570 @kindex C-c @key{DEL} (C Mode)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1571 @code{c-hungry-delete-backwards}---Delete the entire block of whitespace
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1572 preceding point.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1573
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1574 @item C-c C-d
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1575 @itemx C-c C-@key{DELETE}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1576 @itemx C-c @key{DELETE}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1577 @findex c-hungry-delete-forward
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1578 @kindex C-c C-d (C Mode)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1579 @kindex C-c C-@key{DELETE} (C Mode)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1580 @kindex C-c @key{DELETE} (C Mode)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1581 @code{c-hungry-delete-forward}---Delete the entire block of whitespace
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1582 following point.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1583 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1584
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1585 As an alternative to the above commands, you can enable @dfn{hungry
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1586 delete mode}. When this feature is enabled (indicated by @samp{/h} in
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1587 the mode line after the mode name), a single @key{DEL} deletes all
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1588 preceding whitespace, not just one space, and a single @kbd{C-c C-d}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1589 (but @emph{not} plain @key{DELETE}) deletes all following whitespace.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1590
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1591 @table @kbd
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1592 @item M-x c-toggle-hungry-state
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1593 @findex c-toggle-hungry-state
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1594 Toggle the hungry-delete feature
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1595 (@code{c-toggle-hungry-state})@footnote{This command had the binding
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1596 @kbd{C-c C-d} in earlier versions of Emacs. @kbd{C-c C-d} is now
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1597 bound to @code{c-hungry-delete-forward}.}. With a prefix argument,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1598 this command turns the hungry-delete feature on if the argument is
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1599 positive, and off if it is negative.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1600 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1601
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1602 @vindex c-hungry-delete-key
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1603 The variable @code{c-hungry-delete-key} controls whether the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1604 hungry-delete feature is enabled.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1605
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1606 @node Other C Commands
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1607 @subsection Other Commands for C Mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1608
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1609 @table @kbd
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1610 @item C-c C-w
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1611 @itemx M-x c-subword-mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1612 @findex c-subword-mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1613 Enable (or disable) @dfn{subword mode}. In subword mode, Emacs's word
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1614 commands recognize upper case letters in
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1615 @samp{StudlyCapsIdentifiers} as word boundaries. This is indicated by
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1616 the flag @samp{/w} on the mode line after the mode name
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1617 (e.g. @samp{C/law}). You can even use @kbd{M-x c-subword-mode} in
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1618 non-CC Mode buffers.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1619
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1620 In the GNU project, we recommend using underscores to separate words
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1621 within an identifier in C or C++, rather than using case distinctions.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1622
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1623 @item M-x c-context-line-break
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1624 @findex c-context-line-break
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1625 This command inserts a line break and indents the new line in a manner
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1626 appropriate to the context. In normal code, it does the work of
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1627 @kbd{C-j} (@code{newline-and-indent}), in a C preprocessor line it
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1628 additionally inserts a @samp{\} at the line break, and within comments
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1629 it's like @kbd{M-j} (@code{c-indent-new-comment-line}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1630
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1631 @code{c-context-line-break} isn't bound to a key by default, but it
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1632 needs a binding to be useful. The following code will bind it to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1633 @kbd{C-j}. We use @code{c-initialization-hook} here to make sure
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1634 the keymap is loaded before we try to change it.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1635
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1636 @smallexample
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1637 (defun my-bind-clb ()
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1638 (define-key c-mode-base-map "\C-j" 'c-context-line-break))
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1639 (add-hook 'c-initialization-hook 'my-bind-clb)
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1640 @end smallexample
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1641
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1642 @item C-M-h
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1643 Put mark at the end of a function definition, and put point at the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1644 beginning (@code{c-mark-function}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1645
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1646 @item M-q
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1647 @kindex M-q @r{(C mode)}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1648 @findex c-fill-paragraph
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1649 Fill a paragraph, handling C and C++ comments (@code{c-fill-paragraph}).
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1650 If any part of the current line is a comment or within a comment, this
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1651 command fills the comment or the paragraph of it that point is in,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1652 preserving the comment indentation and comment delimiters.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1653
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1654 @item C-c C-e
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1655 @cindex macro expansion in C
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1656 @cindex expansion of C macros
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1657 @findex c-macro-expand
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1658 @kindex C-c C-e @r{(C mode)}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1659 Run the C preprocessor on the text in the region, and show the result,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1660 which includes the expansion of all the macro calls
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1661 (@code{c-macro-expand}). The buffer text before the region is also
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1662 included in preprocessing, for the sake of macros defined there, but the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1663 output from this part isn't shown.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1664
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1665 When you are debugging C code that uses macros, sometimes it is hard to
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1666 figure out precisely how the macros expand. With this command, you
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1667 don't have to figure it out; you can see the expansions.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1668
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1669 @item C-c C-\
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1670 @findex c-backslash-region
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1671 @kindex C-c C-\ @r{(C mode)}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1672 Insert or align @samp{\} characters at the ends of the lines of the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1673 region (@code{c-backslash-region}). This is useful after writing or
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1674 editing a C macro definition.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1675
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1676 If a line already ends in @samp{\}, this command adjusts the amount of
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1677 whitespace before it. Otherwise, it inserts a new @samp{\}. However,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1678 the last line in the region is treated specially; no @samp{\} is
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1679 inserted on that line, and any @samp{\} there is deleted.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1680
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1681 @item M-x cpp-highlight-buffer
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1682 @cindex preprocessor highlighting
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1683 @findex cpp-highlight-buffer
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1684 Highlight parts of the text according to its preprocessor conditionals.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1685 This command displays another buffer named @samp{*CPP Edit*}, which
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1686 serves as a graphic menu for selecting how to display particular kinds
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1687 of conditionals and their contents. After changing various settings,
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1688 click on @samp{[A]pply these settings} (or go to that buffer and type
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1689 @kbd{a}) to rehighlight the C mode buffer accordingly.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1690
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1691 @item C-c C-s
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1692 @findex c-show-syntactic-information
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1693 @kindex C-c C-s @r{(C mode)}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1694 Display the syntactic information about the current source line
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1695 (@code{c-show-syntactic-information}). This information directs how
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1696 the line is indented.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1697
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1698 @item M-x cwarn-mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1699 @itemx M-x global-cwarn-mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1700 @findex cwarn-mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1701 @findex global-cwarn-mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1702 @vindex global-cwarn-mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1703 @cindex CWarn mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1704 @cindex suspicious constructions in C, C++
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1705 CWarn minor mode highlights certain suspicious C and C++ constructions:
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1706
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1707 @itemize @bullet{}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1708 @item
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1709 Assignments inside expressions.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1710 @item
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1711 Semicolon following immediately after @samp{if}, @samp{for}, and @samp{while}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1712 (except after a @samp{do @dots{} while} statement);
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1713 @item
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1714 C++ functions with reference parameters.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1715 @end itemize
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1716
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1717 @noindent
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1718 You can enable the mode for one buffer with the command @kbd{M-x
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1719 cwarn-mode}, or for all suitable buffers with the command @kbd{M-x
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1720 global-cwarn-mode} or by customizing the variable
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1721 @code{global-cwarn-mode}. You must also enable Font Lock mode to make
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1722 it work.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1723
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1724 @item M-x hide-ifdef-mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1725 @findex hide-ifdef-mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1726 @cindex Hide-ifdef mode
100077
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
1727 @vindex hide-ifdef-shadow
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1728 Hide-ifdef minor mode hides selected code within @samp{#if} and
100077
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
1729 @samp{#ifdef} preprocessor blocks. If you change the variable
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
1730 @code{hide-ifdef-shadow} to @code{t}, Hide-ifdef minor mode
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
1731 ``shadows'' preprocessor blocks by displaying them with a less
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
1732 prominent face, instead of hiding them entirely. See the
c1e5046326d7 (Other C Commands): Document hide-ifdef-shadow.
Chong Yidong <cyd@stupidchicken.com>
parents: 99956
diff changeset
1733 documentation string of @code{hide-ifdef-mode} for more information.
84262
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1734
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1735 @item M-x ff-find-related-file
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1736 @cindex related files
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1737 @findex ff-find-related-file
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1738 @vindex ff-related-file-alist
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1739 Find a file ``related'' in a special way to the file visited by the
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1740 current buffer. Typically this will be the header file corresponding
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1741 to a C/C++ source file, or vice versa. The variable
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1742 @code{ff-related-file-alist} specifies how to compute related file
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1743 names.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1744 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1745
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1746 @node Asm Mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1747 @section Asm Mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1748
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1749 @cindex Asm mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1750 @cindex assembler mode
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1751 Asm mode is a major mode for editing files of assembler code. It
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1752 defines these commands:
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1753
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1754 @table @kbd
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1755 @item @key{TAB}
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1756 @code{tab-to-tab-stop}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1757 @item C-j
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1758 Insert a newline and then indent using @code{tab-to-tab-stop}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1759 @item :
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1760 Insert a colon and then remove the indentation from before the label
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1761 preceding colon. Then do @code{tab-to-tab-stop}.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1762 @item ;
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1763 Insert or align a comment.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1764 @end table
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1765
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1766 The variable @code{asm-comment-char} specifies which character
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1767 starts comments in assembler syntax.
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1768
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1769 @ifnottex
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1770 @include fortran-xtra.texi
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1771 @end ifnottex
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1772
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1773 @ignore
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1774 arch-tag: c7ee7409-40a4-45c7-bfb7-ae7f2c74d0c0
711a12cdc0cd Move here from ../../man
Glenn Morris <rgm@gnu.org>
parents:
diff changeset
1775 @end ignore