X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=info%2Fxemacs.info-11;h=b8daf71d757352f767f4562d3163ba5c5de15be2;hb=0b6cc849a8a353d01b8e5b001fcc27284d50ded8;hp=67dc4907a4f62084483678c4fdc8778f197bd492;hpb=c8aa261a7bf3eb1389d2e018be1d715f73cacd66;p=chise%2Fxemacs-chise.git diff --git a/info/xemacs.info-11 b/info/xemacs.info-11 index 67dc490..b8daf71 100644 --- a/info/xemacs.info-11 +++ b/info/xemacs.info-11 @@ -30,6 +30,315 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  +File: xemacs.info, Node: Basic Indent, Next: Multi-line Indent, Prev: Grinding, Up: Grinding + +Basic Program Indentation Commands +---------------------------------- + +`' + Adjust indentation of current line. + +`' + Equivalent to followed by (`newline-and-indent'). + + The basic indentation command is , which gives the current line +the correct indentation as determined from the previous lines. The +function that runs depends on the major mode; it is +`lisp-indent-line' in Lisp mode, `c-indent-line' in C mode, etc. These +functions understand different syntaxes for different languages, but +they all do about the same thing. in any programming language +major mode inserts or deletes whitespace at the beginning of the +current line, independent of where point is in the line. If point is +inside the whitespace at the beginning of the line, leaves it at +the end of that whitespace; otherwise, leaves point fixed with +respect to the characters around it. + + Use `C-q ' to insert a tab at point. + + When entering a large amount of new code, use +(`newline-and-indent'), which is equivalent to a followed by a +. creates a blank line, then gives it the appropriate +indentation. + + indents the second and following lines of the body of a +parenthetical grouping each under the preceding one; therefore, if you +alter one line's indentation to be nonstandard, the lines below tend to +follow it. This is the right behavior in cases where the standard +result of does not look good. + + Remember that Emacs assumes that an open-parenthesis, open-brace, or +other opening delimiter at the left margin (including the indentation +routines) is the start of a function. You should therefore never have +an opening delimiter in column zero that is not the beginning of a +function, not even inside a string. This restriction is vital for +making the indentation commands fast. *Note Defuns::, for more +information on this behavior. + + +File: xemacs.info, Node: Multi-line Indent, Next: Lisp Indent, Prev: Basic Indent, Up: Grinding + +Indenting Several Lines +----------------------- + + Several commands are available to re-indent several lines of code +which have been altered or moved to a different level in a list +structure. + +`C-M-q' + Re-indent all the lines within one list (`indent-sexp'). + +`C-u ' + Shift an entire list rigidly sideways so that its first line is + properly indented. + +`C-M-\' + Re-indent all lines in the region (`indent-region'). + + To re-indent the contents of a single list, position point before the +beginning of it and type `C-M-q'. This key is bound to `indent-sexp' in +Lisp mode, `indent-c-exp' in C mode, and bound to other suitable +functions in other modes. The indentation of the line the sexp starts +on is not changed; therefore, only the relative indentation within the +list, and not its position, is changed. To correct the position as +well, type a before `C-M-q'. + + If the relative indentation within a list is correct but the +indentation of its beginning is not, go to the line on which the list +begins and type `C-u '. When you give a numeric argument, +it moves all the lines in the group, starting on the current line, +sideways the same amount that the current line moves. The command does +not move lines that start inside strings, or C preprocessor lines when +in C mode. + + Another way to specify a range to be re-indented is with point and +mark. The command `C-M-\' (`indent-region') applies to every +line whose first character is between point and mark. + + +File: xemacs.info, Node: Lisp Indent, Next: C Indent, Prev: Multi-line Indent, Up: Grinding + +Customizing Lisp Indentation +---------------------------- + + The indentation pattern for a Lisp expression can depend on the +function called by the expression. For each Lisp function, you can +choose among several predefined patterns of indentation, or define an +arbitrary one with a Lisp program. + + The standard pattern of indentation is as follows: the second line +of the expression is indented under the first argument, if that is on +the same line as the beginning of the expression; otherwise, the second +line is indented underneath the function name. Each following line is +indented under the previous line whose nesting depth is the same. + + If the variable `lisp-indent-offset' is non-`nil', it overrides the +usual indentation pattern for the second line of an expression, so that +such lines are always indented `lisp-indent-offset' more columns than +the containing list. + + Certain functions override the standard pattern. Functions whose +names start with `def' always indent the second line by +`lisp-body-indention' extra columns beyond the open-parenthesis +starting the expression. + + Individual functions can override the standard pattern in various +ways, according to the `lisp-indent-function' property of the function +name. (Note: `lisp-indent-function' was formerly called +`lisp-indent-hook'). There are four possibilities for this property: + +`nil' + This is the same as no property; the standard indentation pattern + is used. + +`defun' + The pattern used for function names that start with `def' is used + for this function also. + +a number, NUMBER + The first NUMBER arguments of the function are "distinguished" + arguments; the rest are considered the "body" of the expression. + A line in the expression is indented according to whether the + first argument on it is distinguished or not. If the argument is + part of the body, the line is indented `lisp-body-indent' more + columns than the open-parenthesis starting the containing + expression. If the argument is distinguished and is either the + first or second argument, it is indented twice that many extra + columns. If the argument is distinguished and not the first or + second argument, the standard pattern is followed for that line. + +a symbol, SYMBOL + SYMBOL should be a function name; that function is called to + calculate the indentation of a line within this expression. The + function receives two arguments: + STATE + The value returned by `parse-partial-sexp' (a Lisp primitive + for indentation and nesting computation) when it parses up to + the beginning of this line. + + POS + The position at which the line being indented begins. + + It should return either a number, which is the number of columns of + indentation for that line, or a list whose first element is such a + number. The difference between returning a number and returning a + list is that a number says that all following lines at the same + nesting level should be indented just like this one; a list says + that following lines might call for different indentations. This + makes a difference when the indentation is computed by `C-M-q'; if + the value is a number, `C-M-q' need not recalculate indentation + for the following lines until the end of the list. + + +File: xemacs.info, Node: C Indent, Prev: Lisp Indent, Up: Grinding + +Customizing C Indentation +------------------------- + + Two variables control which commands perform C indentation and when. + + If `c-auto-newline' is non-`nil', newlines are inserted both before +and after braces that you insert and after colons and semicolons. +Correct C indentation is done on all the lines that are made this way. + + If `c-tab-always-indent' is non-`nil', the command in C mode +does indentation only if point is at the left margin or within the +line's indentation. If there is non-whitespace to the left of point, + just inserts a tab character in the buffer. Normally, this +variable is `nil', and always reindents the current line. + + C does not have anything analogous to particular function names for +which special forms of indentation are desirable. However, it has a +different need for customization facilities: many different styles of C +indentation are in common use. + + There are six variables you can set to control the style that Emacs C +mode will use. + +`c-indent-level' + Indentation of C statements within surrounding block. The + surrounding block's indentation is the indentation of the line on + which the open-brace appears. + +`c-continued-statement-offset' + Extra indentation given to a substatement, such as the then-clause + of an `if' or body of a `while'. + +`c-brace-offset' + Extra indentation for lines that start with an open brace. + +`c-brace-imaginary-offset' + An open brace following other text is treated as if it were this + far to the right of the start of its line. + +`c-argdecl-indent' + Indentation level of declarations of C function arguments. + +`c-label-offset' + Extra indentation for a line that is a label, case, or default. + + The variable `c-indent-level' controls the indentation for C +statements with respect to the surrounding block. In the example: + + { + foo (); + +the difference in indentation between the lines is `c-indent-level'. +Its standard value is 2. + + If the open-brace beginning the compound statement is not at the +beginning of its line, the `c-indent-level' is added to the indentation +of the line, not the column of the open-brace. For example, + + if (losing) { + do_this (); + +One popular indentation style is that which results from setting +`c-indent-level' to 8 and putting open-braces at the end of a line in +this way. Another popular style prefers to put the open-brace on a +separate line. + + In fact, the value of the variable `c-brace-imaginary-offset' is +also added to the indentation of such a statement. Normally this +variable is zero. Think of this variable as the imaginary position of +the open brace, relative to the first non-blank character on the line. +By setting the variable to 4 and `c-indent-level' to 0, you can get +this style: + + if (x == y) { + do_it (); + } + + When `c-indent-level' is zero, the statements inside most braces +line up exactly under the open brace. An exception are braces in column +zero, like those surrounding a function's body. The statements inside +those braces are not placed at column zero. Instead, `c-brace-offset' +and `c-continued-statement-offset' (see below) are added to produce a +typical offset between brace levels, and the statements are indented +that far. + + `c-continued-statement-offset' controls the extra indentation for a +line that starts within a statement (but not within parentheses or +brackets). These lines are usually statements inside other statements, +like the then-clauses of `if' statements and the bodies of `while' +statements. The `c-continued-statement-offset' parameter determines +the difference in indentation between the two lines in: + + if (x == y) + do_it (); + +The default value for `c-continued-statement-offset' is 2. Some +popular indentation styles correspond to a value of zero for +`c-continued-statement-offset'. + + `c-brace-offset' is the extra indentation given to a line that +starts with an open-brace. Its standard value is zero; compare: + + if (x == y) + { + +with: + + if (x == y) + do_it (); + +If you set `c-brace-offset' to 4, the first example becomes: + + if (x == y) + { + + `c-argdecl-indent' controls the indentation of declarations of the +arguments of a C function. It is absolute: argument declarations +receive exactly `c-argdecl-indent' spaces. The standard value is 5 and +results in code like this: + + char * + index (string, char) + char *string; + int char; + + `c-label-offset' is the extra indentation given to a line that +contains a label, a case statement, or a `default:' statement. Its +standard value is -2 and results in code like this: + + switch (c) + { + case 'x': + +If `c-label-offset' were zero, the same code would be indented as: + + switch (c) + { + case 'x': + +This example assumes that the other variables above also have their +default values. + + Using the indentation style produced by the default settings of the +variables just discussed and putting open braces on separate lines +produces clear and readable files. For an example, look at any of the C +source files of XEmacs. + + File: xemacs.info, Node: Matching, Next: Comments, Prev: Grinding, Up: Programs Automatic Display of Matching Parentheses @@ -808,376 +1117,3 @@ the C sources of Emacs. By specifying this file with `visit-tags-table' and then using `M-.' you can quickly look at the source of any Emacs function. - -File: xemacs.info, Node: Tags Search, Next: List Tags, Prev: Find Tag, Up: Tags - -Searching and Replacing with Tags Tables ----------------------------------------- - - The commands in this section visit and search all the files listed -in the selected tags table, one by one. For these commands, the tags -table serves only to specify a sequence of files to search. A related -command is `M-x grep' (*note Compilation::). - -`M-x tags-search REGEXP ' - Search for REGEXP through the files in the selected tags table. - -`M-x tags-query-replace REGEXP REPLACEMENT ' - Perform a `query-replace-regexp' on each file in the selected tags - table. - -`M-,' - Restart one of the commands above, from the current location of - point (`tags-loop-continue'). - - `M-x tags-search' reads a regexp using the minibuffer, then searches -for matches in all the files in the selected tags table, one file at a -time. It displays the name of the file being searched so you can -follow its progress. As soon as it finds an occurrence, `tags-search' -returns. - - Having found one match, you probably want to find all the rest. To -find one more match, type `M-,' (`tags-loop-continue') to resume the -`tags-search'. This searches the rest of the current buffer, followed -by the remaining files of the tags table. - - `M-x tags-query-replace' performs a single `query-replace-regexp' -through all the files in the tags table. It reads a regexp to search -for and a string to replace with, just like ordinary `M-x -query-replace-regexp'. It searches much like `M-x tags-search', but -repeatedly, processing matches according to your input. *Note -Replace::, for more information on query replace. - - It is possible to get through all the files in the tags table with a -single invocation of `M-x tags-query-replace'. But often it is useful -to exit temporarily, which you can do with any input event that has no -special query replace meaning. You can resume the query replace -subsequently by typing `M-,'; this command resumes the last tags search -or replace command that you did. - - The commands in this section carry out much broader searches than the -`find-tag' family. The `find-tag' commands search only for definitions -of tags that match your substring or regexp. The commands -`tags-search' and `tags-query-replace' find every occurrence of the -regexp, as ordinary search commands and replace commands do in the -current buffer. - - These commands create buffers only temporarily for the files that -they have to search (those which are not already visited in Emacs -buffers). Buffers in which no match is found are quickly killed; the -others continue to exist. - - It may have struck you that `tags-search' is a lot like `grep'. You -can also run `grep' itself as an inferior of Emacs and have Emacs show -you the matching lines one by one. This works much like running a -compilation; finding the source locations of the `grep' matches works -like finding the compilation errors. *Note Compilation::. - - If you wish to process all the files in a selected tags table, but -`M-x tags-search' and `M-x tags-query-replace' are not giving you the -desired result, you can use `M-x next-file'. - -`C-u M-x next-file' - With a numeric argument, regardless of its value, visit the first - file in the tags table and prepare to advance sequentially by - files. - -`M-x next-file' - Visit the next file in the selected tags table. - - -File: xemacs.info, Node: List Tags, Prev: Tags Search, Up: Tags - -Tags Table Inquiries --------------------- - -`M-x list-tags' - Display a list of the tags defined in a specific program file. - -`M-x tags-apropos' - Display a list of all tags matching a specified regexp. - - `M-x list-tags' reads the name of one of the files described by the -selected tags table, and displays a list of all the tags defined in that -file. The "file name" argument is really just a string to compare -against the names recorded in the tags table; it is read as a string -rather than a file name. Therefore, completion and defaulting are not -available, and you must enter the string the same way it appears in the -tag table. Do not include a directory as part of the file name unless -the file name recorded in the tags table contains that directory. - - `M-x tags-apropos' is like `apropos' for tags. It reads a regexp, -then finds all the tags in the selected tags table whose entries match -that regexp, and displays the tag names found. - - -File: xemacs.info, Node: Fortran, Next: Asm Mode, Prev: Tags, Up: Programs - -Fortran Mode -============ - - Fortran mode provides special motion commands for Fortran statements -and subprograms, and indentation commands that understand Fortran -conventions of nesting, line numbers, and continuation statements. - - Special commands for comments are provided because Fortran comments -are unlike those of other languages. - - Built-in abbrevs optionally save typing when you insert Fortran -keywords. - - Use `M-x fortran-mode' to switch to this major mode. Doing so calls -the value of `fortran-mode-hook' as a function of no arguments if that -variable has a non-`nil' value. - -* Menu: - -* Motion: Fortran Motion. Moving point by statements or subprograms. -* Indent: Fortran Indent. Indentation commands for Fortran. -* Comments: Fortran Comments. Inserting and aligning comments. -* Columns: Fortran Columns. Measuring columns for valid Fortran. -* Abbrev: Fortran Abbrev. Built-in abbrevs for Fortran keywords. - - Fortran mode was contributed by Michael Prange. - - -File: xemacs.info, Node: Fortran Motion, Next: Fortran Indent, Prev: Fortran, Up: Fortran - -Motion Commands ---------------- - - Fortran mode provides special commands to move by subprograms -(functions and subroutines) and by statements. There is also a command -to put the region around one subprogram, which is convenient for -killing it or moving it. - -`C-M-a' - Move to beginning of subprogram - (`beginning-of-fortran-subprogram'). - -`C-M-e' - Move to end of subprogram (`end-of-fortran-subprogram'). - -`C-M-h' - Put point at beginning of subprogram and mark at end - (`mark-fortran-subprogram'). - -`C-c C-n' - Move to beginning of current or next statement (`fortran-next- - statement'). - -`C-c C-p' - Move to beginning of current or previous statement (`fortran- - previous-statement'). - - -File: xemacs.info, Node: Fortran Indent, Next: Fortran Comments, Prev: Fortran Motion, Up: Fortran - -Fortran Indentation -------------------- - - Special commands and features are available for indenting Fortran -code. They make sure various syntactic entities (line numbers, comment -line indicators, and continuation line flags) appear in the columns -that are required for standard Fortran. - -* Menu: - -* Commands: ForIndent Commands. Commands for indenting Fortran. -* Numbers: ForIndent Num. How line numbers auto-indent. -* Conv: ForIndent Conv. Conventions you must obey to avoid trouble. -* Vars: ForIndent Vars. Variables controlling Fortran indent style. - - -File: xemacs.info, Node: ForIndent Commands, Next: ForIndent Num, Prev: Fortran Indent, Up: Fortran Indent - -Fortran Indentation Commands -............................ - -`' - Indent the current line (`fortran-indent-line'). - -`M-' - Break the current line and set up a continuation line. - -`C-M-q' - Indent all the lines of the subprogram point is in - (`fortran-indent-subprogram'). - - is redefined by Fortran mode to reindent the current line for -Fortran (`fortran-indent-line'). Line numbers and continuation markers -are indented to their required columns, and the body of the statement -is independently indented, based on its nesting in the program. - - The key `C-M-q' is redefined as `fortran-indent-subprogram', a -command that reindents all the lines of the Fortran subprogram -(function or subroutine) containing point. - - The key `M-' is redefined as `fortran-split-line', a command to -split a line in the appropriate fashion for Fortran. In a non-comment -line, the second half becomes a continuation line and is indented -accordingly. In a comment line, both halves become separate comment -lines. - - -File: xemacs.info, Node: ForIndent Num, Next: ForIndent Conv, Prev: ForIndent Commands, Up: Fortran Indent - -Line Numbers and Continuation -............................. - - If a number is the first non-whitespace in the line, it is assumed -to be a line number and is moved to columns 0 through 4. (Columns are -always counted from 0 in XEmacs.) If the text on the line starts with -the conventional Fortran continuation marker `$', it is moved to column -5. If the text begins with any non whitespace character in column 5, -it is assumed to be an unconventional continuation marker and remains -in column 5. - - Line numbers of four digits or less are normally indented one space. -This amount is controlled by the variable `fortran-line-number-indent', -which is the maximum indentation a line number can have. Line numbers -are indented to right-justify them to end in column 4 unless that would -require more than the maximum indentation. The default value of the -variable is 1. - - Simply inserting a line number is enough to indent it according to -these rules. As each digit is inserted, the indentation is recomputed. -To turn off this feature, set the variable -`fortran-electric-line-number' to `nil'. Then inserting line numbers -is like inserting anything else. - - -File: xemacs.info, Node: ForIndent Conv, Next: ForIndent Vars, Prev: ForIndent Num, Up: Fortran Indent - -Syntactic Conventions -..................... - - Fortran mode assumes that you follow certain conventions that -simplify the task of understanding a Fortran program well enough to -indent it properly: - - * Two nested `do' loops never share a `continue' statement. - - * The same character appears in column 5 of all continuation lines. - It is the value of the variable `fortran-continuation-char'. By - default, this character is `$'. - -If you fail to follow these conventions, the indentation commands may -indent some lines unaesthetically. However, a correct Fortran program -will retain its meaning when reindented even if the conventions are not -followed. - - -File: xemacs.info, Node: ForIndent Vars, Prev: ForIndent Conv, Up: Fortran Indent - -Variables for Fortran Indentation -................................. - - Several additional variables control how Fortran indentation works. - -`fortran-do-indent' - Extra indentation within each level of `do' statement (the default - is 3). - -`fortran-if-indent' - Extra indentation within each level of `if' statement (the default - is 3). - -`fortran-continuation-indent' - Extra indentation for bodies of continuation lines (the default is - 5). - -`fortran-check-all-num-for-matching-do' - If this is `nil', indentation assumes that each `do' statement - ends on a `continue' statement. Therefore, when computing - indentation for a statement other than `continue', it can save - time by not checking for a `do' statement ending there. If this - is non-`nil', indenting any numbered statement must check for a - `do' that ends there. The default is `nil'. - -`fortran-minimum-statement-indent' - Minimum indentation for Fortran statements. For standard Fortran, - this is 6. Statement bodies are always indented at least this - much. - - -File: xemacs.info, Node: Fortran Comments, Next: Fortran Columns, Prev: Fortran Indent, Up: Fortran - -Comments --------- - - The usual Emacs comment commands assume that a comment can follow a -line of code. In Fortran, the standard comment syntax requires an -entire line to be just a comment. Therefore, Fortran mode replaces the -standard Emacs comment commands and defines some new variables. - - Fortran mode can also handle a non-standard comment syntax where -comments start with `!' and can follow other text. Because only some -Fortran compilers accept this syntax, Fortran mode will not insert such -comments unless you have specified to do so in advance by setting the -variable `comment-start' to `"!"' (*note Variables::). - -`M-;' - Align comment or insert new comment (`fortran-comment-indent'). - -`C-x ;' - Applies to nonstandard `!' comments only. - -`C-c ;' - Turn all lines of the region into comments, or (with arg) turn - them back into real code (`fortran-comment-region'). - - `M-;' in Fortran mode is redefined as the command -`fortran-comment-indent'. Like the usual `M-;' command, it recognizes -an existing comment and aligns its text appropriately. If there is no -existing comment, a comment is inserted and aligned. - - Inserting and aligning comments is not the same in Fortran mode as in -other modes. When a new comment must be inserted, a full-line comment -is inserted if the current line is blank. On a non-blank line, a -non-standard `!' comment is inserted if you previously specified you -wanted to use them. Otherwise a full-line comment is inserted on a new -line before the current line. - - Non-standard `!' comments are aligned like comments in other -languages, but full-line comments are aligned differently. In a -standard full-line comment, the comment delimiter itself must always -appear in column zero. What can be aligned is the text within the -comment. You can choose from three styles of alignment by setting the -variable `fortran-comment-indent-style' to one of these values: - -`fixed' - The text is aligned at a fixed column, which is the value of - `fortran-comment-line-column'. This is the default. - -`relative' - The text is aligned as if it were a line of code, but with an - additional `fortran-comment-line-column' columns of indentation. - -`nil' - Text in full-line columns is not moved automatically. - - You can also specify the character to be used to indent within -full-line comments by setting the variable `fortran-comment-indent-char' -to the character you want to use. - - Fortran mode introduces two variables `comment-line-start' and -`comment-line-start-skip', which do for full-line comments what -`comment-start' and `comment-start-skip' do for ordinary text-following -comments. Normally these are set properly by Fortran mode, so you do -not need to change them. - - The normal Emacs comment command `C-x ;' has not been redefined. It -can therefore be used if you use `!' comments, but is useless in -Fortran mode otherwise. - - The command `C-c ;' (`fortran-comment-region') turns all the lines -of the region into comments by inserting the string `C$$$' at the front -of each one. With a numeric arg, the region is turned back into live -code by deleting `C$$$' from the front of each line. You can control -the string used for the comments by setting the variable -`fortran-comment-region'. Note that here we have an example of a -command and a variable with the same name; the two uses of the name -never conflict because in Lisp and in Emacs it is always clear from the -context which one is referred to. -