Annotation of 43BSDReno/contrib/emacs-18.55/info/emacs-7, revision 1.1

1.1     ! root        1: Info file emacs, produced by texinfo-format-buffer   -*-Text-*-
        !             2: from file emacs.tex
        !             3: 
        !             4: This file documents the GNU Emacs editor.
        !             5: 
        !             6: Copyright (C) 1985, 1986 Richard M. Stallman.
        !             7: 
        !             8: Permission is granted to make and distribute verbatim copies of
        !             9: this manual provided the copyright notice and this permission notice
        !            10: are preserved on all copies.
        !            11: 
        !            12: Permission is granted to copy and distribute modified versions of this
        !            13: manual under the conditions for verbatim copying, provided also that the
        !            14: sections entitled "The GNU Manifesto", "Distribution" and "GNU Emacs
        !            15: General Public License" are included exactly as in the original, and
        !            16: provided that the entire resulting derived work is distributed under the
        !            17: terms of a permission notice identical to this one.
        !            18: 
        !            19: Permission is granted to copy and distribute translations of this manual
        !            20: into another language, under the above conditions for modified versions,
        !            21: except that the sections entitled "The GNU Manifesto", "Distribution"
        !            22: and "GNU Emacs General Public License" may be included in a translation
        !            23: approved by the author instead of in the original English.
        !            24: 
        !            25: 
        !            26: File: emacs  Node: Defuns, Prev: Lists, Up: Programs, Next: Grinding
        !            27: 
        !            28: Defuns
        !            29: ======
        !            30: 
        !            31:   In Emacs, a parenthetical grouping at the top level in the buffer is
        !            32: called a "defun".  The name derives from the fact that most top-level
        !            33: lists in a Lisp file are instances of the special form `defun', but
        !            34: any top-level parenthetical grouping counts as a defun in Emacs parlance
        !            35: regardless of what its contents are, and regardless of the programming
        !            36: language in use.  For example, in C, the body of a function definition is a
        !            37: defun.
        !            38: 
        !            39: `C-M-a'     
        !            40:      Move to beginning of current or preceding defun
        !            41:      (`beginning-of-defun').
        !            42: `C-M-e'     
        !            43:      Move to end of current or following defun (`end-of-defun').
        !            44: `C-M-h'     
        !            45:      Put region around whole current or following defun (`mark-defun').
        !            46: 
        !            47:   The commands to move to the beginning and end of the current defun are
        !            48: `C-M-a' (`beginning-of-defun') and `C-M-e' (`end-of-defun').
        !            49: 
        !            50:   If you wish to operate on the current defun, use `C-M-h'
        !            51: (`mark-defun') which puts point at the beginning and mark at the end
        !            52: of the current or next defun.  For example, this is the easiest way to get
        !            53: ready to move the defun to a different place in the text.  In C mode,
        !            54: `C-M-h' runs the function `mark-c-function', which is almost the
        !            55: same as `mark-defun'; the difference is that it backs up over the
        !            56: argument declarations, function name and returned data type so that the
        !            57: entire C function is inside the region.
        !            58: 
        !            59:   Emacs assumes that any open-parenthesis found in the leftmost column is
        !            60: the start of a defun.  Therefore, never put an open-parenthesis at the
        !            61: left margin in a Lisp file unless it is the start of a top level list.
        !            62: Never put an open-brace or other opening delimiter at the beginning of a
        !            63: line of C code unless it starts the body of a function.  The most likely
        !            64: problem case is when you want an opening delimiter at the start of a line
        !            65: inside a string.  To avoid trouble, put an escape character (`\', in C
        !            66: and Emacs Lisp, `/' in some other Lisp dialects) before the opening
        !            67: delimiter.  It will not affect the contents of the string.
        !            68: 
        !            69:   In the remotest past, the original Emacs found defuns by moving upward a
        !            70: level of parentheses until there were no more levels to go up.  This always
        !            71: required scanning all the way back to the beginning of the buffer, even for
        !            72: a small function.  To speed up the operation, Emacs was changed to assume
        !            73: that any `(' (or other character assigned the syntactic class of
        !            74: opening-delimiter) at the left margin is the start of a defun.  This
        !            75: heuristic was nearly always right and avoided the costly scan; however,
        !            76: it mandated the convention described above.
        !            77: 
        !            78: 
        !            79: File: emacs  Node: Grinding, Prev: Defuns, Up: Programs, Next: Matching
        !            80: 
        !            81: Indentation for Programs
        !            82: ========================
        !            83: 
        !            84:   The best way to keep a program properly indented ("ground") is to use
        !            85: Emacs to re-indent it as you change it.  Emacs has commands to indent
        !            86: properly either a single line, a specified number of lines, or all of the
        !            87: lines inside a single parenthetical grouping.
        !            88: 
        !            89: * Menu:
        !            90: 
        !            91: * Basic Indent::
        !            92: * Multi-line Indent::   Commands to reindent many lines at once.
        !            93: * Lisp Indent::                Specifying how each Lisp function should be indented.
        !            94: * C Indent::           Choosing an indentation style for C code.
        !            95: 
        !            96: 
        !            97: File: emacs  Node: Basic Indent, Prev: Grinding, Up: Grinding, Next: Multi-line Indent
        !            98: 
        !            99: Basic Program Indentation Commands
        !           100: ----------------------------------
        !           101: 
        !           102: `TAB'     
        !           103:      Adjust indentation of current line.
        !           104: `LFD'     
        !           105:      Equivalent to RET followed by TAB (`newline-and-indent').
        !           106: 
        !           107:   The basic indentation command is TAB, which gives the current line
        !           108: the correct indentation as determined from the previous lines.  The
        !           109: function that TAB runs depends on the major mode; it is `lisp-indent-line'
        !           110: in Lisp mode, `c-indent-line' in C mode, etc.  These functions
        !           111: understand different syntaxes for different languages, but they all do
        !           112: about the same thing.  TAB in any programming language major mode
        !           113: inserts or deletes whitespace at the beginning of the current line,
        !           114: independent of where point is in the line.  If point is inside the
        !           115: whitespace at the beginning of the line, TAB leaves it at the end of
        !           116: that whitespace; otherwise, TAB leaves point fixed with respect to
        !           117: the characters around it.
        !           118: 
        !           119:   Use `C-q TAB' to insert a tab at point.
        !           120: 
        !           121:   When entering a large amount of new code, use LFD (`newline-and-indent'),
        !           122: which is equivalent to a RET followed by a TAB.  LFD creates
        !           123: a blank line, and then gives it the appropriate indentation.
        !           124: 
        !           125:   TAB indents the second and following lines of the body of an
        !           126: parenthetical grouping each under the preceding one; therefore, if you
        !           127: alter one line's indentation to be nonstandard, the lines below will tend
        !           128: to follow it.  This is the right behavior in cases where the standard
        !           129: result of TAB is unaesthetic.
        !           130: 
        !           131:   Remember that an open-parenthesis, open-brace or other opening delimiter
        !           132: at the left margin is assumed by Emacs (including the indentation routines)
        !           133: to be the start of a function.  Therefore, you must never have an opening
        !           134: delimiter in column zero that is not the beginning of a function, not even
        !           135: inside a string.  This restriction is vital for making the indentation
        !           136: commands fast; you must simply accept it.  *Note Defuns::, for more
        !           137: information on this.
        !           138: 
        !           139: 
        !           140: File: emacs  Node: Multi-line Indent, Prev: Basic Indent, Up: Grinding, Next: Lisp Indent
        !           141: 
        !           142: Indenting Several Lines
        !           143: -----------------------
        !           144: 
        !           145:   When you wish to re-indent several lines of code which have been altered
        !           146: or moved to a different level in the list structure, you have several
        !           147: commands available.
        !           148: 
        !           149: `C-M-q'     
        !           150:      Re-indent all the lines within one list (`indent-sexp').
        !           151: `C-u TAB'     
        !           152:      Shift an entire list rigidly sideways so that its first line
        !           153:      is properly indented.
        !           154: `C-M-\'     
        !           155:      Re-indent all lines in the region (`indent-region').
        !           156: 
        !           157:   You can re-indent the contents of a single list by positioning point
        !           158: before the beginning of it and typing `C-M-q' (`indent-sexp' in
        !           159: Lisp mode, `indent-c-exp' in C mode; also bound to other suitable
        !           160: functions in other modes).  The indentation of the line the sexp starts on
        !           161: is not changed; therefore, only the relative indentation within the list,
        !           162: and not its position, is changed.  To correct the position as well, type a
        !           163: TAB before the `C-M-q'.
        !           164: 
        !           165:   If the relative indentation within a list is correct but the indentation
        !           166: of its beginning is not, go to the line the list begins on and type
        !           167: `C-u TAB'.  When TAB is given a numeric argument, it moves all the
        !           168: lines in the grouping starting on the current line sideways the same amount
        !           169: that the current line moves.  It is clever, though, and does not move lines
        !           170: that start inside strings, or C preprocessor lines when in C mode.
        !           171: 
        !           172:   Another way to specify the range to be re-indented is with point and
        !           173: mark.  The command `C-M-\' (`indent-region') applies TAB to every line
        !           174: whose first character is between point and mark.
        !           175:  
        !           176: 
        !           177: File: emacs  Node: Lisp Indent, Prev: Multi-line Indent, Up: Grinding, Next: C Indent
        !           178: 
        !           179: Customizing Lisp Indentation
        !           180: ----------------------------
        !           181: 
        !           182:   The indentation pattern for a Lisp expression can depend on the function
        !           183: called by the expression.  For each Lisp function, you can choose among
        !           184: several predefined patterns of indentation, or define an arbitrary one with
        !           185: a Lisp program.
        !           186: 
        !           187:   The standard pattern of indentation is as follows: the second line of the
        !           188: expression is indented under the first argument, if that is on the same
        !           189: line as the beginning of the expression; otherwise, the second line is
        !           190: indented underneath the function name.  Each following line is indented
        !           191: under the previous line whose nesting depth is the same.
        !           192: 
        !           193:   If the variable `lisp-indent-offset' is non-`nil', it overrides
        !           194: the usual indentation pattern for the second line of an expression, so that
        !           195: such lines are always indented `lisp-indent-offset' more columns than
        !           196: the containing list.
        !           197: 
        !           198:   The standard pattern is overridded for certain functions.  Functions
        !           199: whose names start with `def' always indent the second line by
        !           200: `lisp-body-indention' extra columns beyond the open-parenthesis
        !           201: starting the expression.
        !           202: 
        !           203:   The standard pattern can be overridden in various ways for individual
        !           204: functions, according to the `lisp-indent-hook' property of the
        !           205: function name.  There are four possibilities for this property:
        !           206: 
        !           207: `nil'     
        !           208:      This is the same as no property; the standard indentation pattern is used.
        !           209: `defun'     
        !           210:      The pattern used for function names that start with `def' is used for
        !           211:      this function also.
        !           212: a number, NUMBER     
        !           213:      The first NUMBER arguments of the function are
        !           214:      "distinguished" arguments; the rest are considered the "body"
        !           215:      of the expression.  A line in the expression is indented according to
        !           216:      whether the first argument on it is distinguished or not.  If the
        !           217:      argument is part of the body, the line is indented `lisp-body-indent'
        !           218:      more columns than the open-parenthesis starting the containing
        !           219:      expression.  If the argument is distinguished and is either the first
        !           220:      or second argument, it is indented twice that many extra columns.
        !           221:      If the argument is distinguished and not the first or second argument,
        !           222:      the standard pattern is followed for that line.
        !           223: a symbol, SYMBOL     
        !           224:      SYMBOL should be a function name; that function is called to
        !           225:      calculate the indentation of a line within this expression.  The
        !           226:      function receives two arguments:
        !           227:      STATE     
        !           228:           The value returned by `parse-partial-sexp' (a Lisp primitive for
        !           229:           indentation and nesting computation) when it parses up to the
        !           230:           beginning of this line.
        !           231:      POS     
        !           232:           The position at which the line being indented begins.
        !           233:      It should return either a number, which is the number of columns of
        !           234:      indentation for that line, or a list whose car is such a number.  The
        !           235:      difference between returning a number and returning a list is that a
        !           236:      number says that all following lines at the same nesting level should
        !           237:      be indented just like this one; a list says that following lines might
        !           238:      call for different indentations.  This makes a difference when the
        !           239:      indentation is being computed by `C-M-q'; if the value is a
        !           240:      number, `C-M-q' need not recalculate indentation for the following
        !           241:      lines until the end of the list.
        !           242: 
        !           243: 
        !           244: File: emacs  Node: C Indent, Prev: Lisp Indent, Up: Grinding
        !           245: 
        !           246: Customizing C Indentation
        !           247: -------------------------
        !           248: 
        !           249:   Two variables control which commands perform C indentation and when.
        !           250: 
        !           251:   If `c-auto-newline' is non-`nil', newlines are inserted both
        !           252: before and after braces that you insert, and after colons and semicolons.
        !           253: Correct C indentation is done on all the lines that are made this way.
        !           254: 
        !           255:   If `c-tab-always-indent' is non-`nil', the TAB command
        !           256: in C mode does indentation only if point is at the left margin or within
        !           257: the line's indentation.  If there is non-whitespace to the left of point,
        !           258: then TAB just inserts a tab character in the buffer.  Normally,
        !           259: this variable is `nil', and TAB always reindents the current line.
        !           260: 
        !           261:   C does not have anything analogous to particular function names for which
        !           262: special forms of indentation are desirable.  However, it has a different
        !           263: need for customization facilities: many different styles of C indentation
        !           264: are in common use.
        !           265: 
        !           266:   There are six variables you can set to control the style that Emacs C
        !           267: mode will use.
        !           268: 
        !           269: `c-indent-level'     
        !           270:      Indentation of C statements within surrounding block.  The surrounding
        !           271:      block's indentation is the indentation of the line on which the
        !           272:      open-brace appears.
        !           273: `c-continued-statement-offset'     
        !           274:      Extra indentation given to a substatement, such as the then-clause of
        !           275:      an if or body of a while.
        !           276: `c-brace-offset'     
        !           277:      Extra indentation for line if it starts with an open brace.
        !           278: `c-brace-imaginary-offset'     
        !           279:      An open brace following other text is treated as if it were this far
        !           280:      to the right of the start of its line.
        !           281: `c-argdecl-indent'     
        !           282:      Indentation level of declarations of C function arguments.
        !           283: `c-label-offset'     
        !           284:      Extra indentation for line that is a label, or case or default.
        !           285: 
        !           286:   The variable `c-indent-level' controls the indentation for C
        !           287: statements with respect to the surrounding block.  In the example
        !           288: 
        !           289:          {
        !           290:            foo ();
        !           291: 
        !           292: the difference in indentation between the lines is `c-indent-level'.
        !           293: Its standard value is 2.
        !           294: 
        !           295: If the open-brace beginning the compound statement is not at the beginning
        !           296: of its line, the `c-indent-level' is added to the indentation of the
        !           297: line, not the column of the open-brace.  For example,
        !           298: 
        !           299:      if (losing) {
        !           300:        do_this ();
        !           301: 
        !           302: One popular indentation style is that which results from setting
        !           303: `c-indent-level' to 8 and putting open-braces at the end of a line in
        !           304: this way.  I prefer to put the open-brace on a separate line.
        !           305: 
        !           306:   In fact, the value of the variable `c-brace-imaginary-offset' is
        !           307: also added to the indentation of such a statement.  Normally this variable
        !           308: is zero.  Think of this variable as the imaginary position of the open
        !           309: brace, relative to the first nonblank character on the line.  By setting
        !           310: this variable to 4 and `c-indent-level' to 0, you can get this style:
        !           311: 
        !           312:      if (x == y) {
        !           313:          do_it ();
        !           314:          }
        !           315: 
        !           316:   When `c-indent-level' is zero, the statements inside most braces
        !           317: will line up right under the open brace.  But there is an exception made
        !           318: for braces in column zero, such as surrounding a function's body.  The
        !           319: statements just inside it do not go at column zero.  Instead,
        !           320: `c-brace-offset' and `c-continued-statement-offset' (see below)
        !           321: are added to produce a typical offset between brace levels, and the
        !           322: statements are indented that far.
        !           323: 
        !           324:   `c-continued-statement-offset' controls the extra indentation for a
        !           325: line that starts within a statement (but not within parentheses or
        !           326: brackets).  These lines are usually statements that are within other
        !           327: statements, such as the then-clauses of `if' statements and the bodies
        !           328: of `while' statements.  This parameter is the difference in
        !           329: indentation between the two lines in
        !           330: 
        !           331:      if (x == y)
        !           332:        do_it ();
        !           333: 
        !           334: Its standard value is 2.  Some popular indentation styles correspond to a
        !           335: value of zero for `c-continued-statement-offset'.
        !           336: 
        !           337:   `c-brace-offset' is the extra indentation given to a line that
        !           338: starts with an open-brace.  Its standard value is zero;
        !           339: compare
        !           340: 
        !           341:      if (x == y)
        !           342:        {
        !           343: 
        !           344: with
        !           345: 
        !           346:      if (x == y)
        !           347:        do_it ();
        !           348: 
        !           349: if `c-brace-offset' were set to 4, the first example would become
        !           350: 
        !           351:      if (x == y)
        !           352:            {
        !           353: 
        !           354:   `c-argdecl-indent' controls the indentation of declarations of the
        !           355: arguments of a C function.  It is absolute: argument declarations receive
        !           356: exactly `c-argdecl-indent' spaces.  The standard value is 5, resulting
        !           357: in code like this:
        !           358: 
        !           359:      char *
        !           360:      index (string, char)
        !           361:           char *string;
        !           362:           int char;
        !           363: 
        !           364:   `c-label-offset' is the extra indentation given to a line that
        !           365: contains a label, a case statement, or a `default:' statement.  Its
        !           366: standard value is -2, resulting in code like this
        !           367: 
        !           368:      switch (c)
        !           369:        {
        !           370:        case 'x':
        !           371: 
        !           372: If `c-label-offset' were zero, the same code would be indented as
        !           373: 
        !           374:      switch (c)
        !           375:        {
        !           376:          case 'x':
        !           377: 
        !           378: This example assumes that the other variables above also have their
        !           379: standard values.
        !           380: 
        !           381:   I strongly recommend that you try out the indentation style produced by
        !           382: the standard settings of these variables, together with putting open braces
        !           383: on separate lines.  You can see how it looks in all the C source files of
        !           384: GNU Emacs.
        !           385: 
        !           386: 
        !           387: File: emacs  Node: Matching, Prev: Grinding, Up: Programs, Next: Comments
        !           388: 
        !           389: Automatic Display Of Matching Parentheses
        !           390: =========================================
        !           391: 
        !           392:   The Emacs parenthesis-matching feature is designed to show automatically
        !           393: how parentheses match in the text.  Whenever a self-inserting character
        !           394: that is a closing delimiter is typed, the cursor moves momentarily to the
        !           395: location of the matching opening delimiter, provided that is on the screen.
        !           396: If it is not on the screen, some text starting with that opening delimiter
        !           397: is displayed in the echo area.  Either way, you can tell what grouping is
        !           398: being closed off.
        !           399: 
        !           400:   In Lisp, automatic matching applies only to parentheses.  In C, it
        !           401: applies to braces and brackets too.  Emacs knows which characters to regard
        !           402: as matching delimiters based on the syntax table, which is set by the major
        !           403: mode.  *Note Syntax::.
        !           404: 
        !           405:   If the opening delimiter and closing delimiter are mismatched---such as
        !           406: in `[x)'---a warning message is displayed in the echo area.  The
        !           407: correct matches are specified in the syntax table.
        !           408: 
        !           409:   Two variables control parenthesis match display.  `blink-matching-paren'
        !           410: turns the feature on or off; `nil' turns it off, but the default is
        !           411: `t' to turn match display on.  `blink-matching-paren-distance'
        !           412: specifies how many characters back to search to find the matching opening
        !           413: delimiter.  If the match is not found in that far, scanning stops, and
        !           414: nothing is displayed.  This is to prevent scanning for the matching
        !           415: delimiter from wasting lots of time when there is no match.  The default
        !           416: is 4000.
        !           417: 
        !           418: 
        !           419: File: emacs  Node: Comments, Prev: Matching, Up: Programs, Next: Balanced Editing
        !           420: 
        !           421: Manipulating Comments
        !           422: =====================
        !           423: 
        !           424:   The comment commands insert, kill and align comments.
        !           425: 
        !           426: `M-;'     
        !           427:      Insert or align comment (`indent-for-comment').
        !           428: `C-x ;'     
        !           429:      Set comment column (`set-comment-column').
        !           430: `C-u - C-x ;'     
        !           431:      Kill comment on current line (`kill-comment').
        !           432: `M-LFD'     
        !           433:      Like RET followed by inserting and aligning a comment
        !           434:      (`indent-new-comment-line').
        !           435: 
        !           436:   The command that creates a comment is `Meta-;' (`indent-for-comment').
        !           437: If there is no comment already on the line, a new comment is created,
        !           438: aligned at a specific column called the "comment column".  The comment
        !           439: is created by inserting the string Emacs thinks comments should start with
        !           440: (the value of `comment-start'; see below).  Point is left after that
        !           441: string.  If the text of the line extends past the comment column, then the
        !           442: indentation is done to a suitable boundary (usually, at least one space is
        !           443: inserted).  If the major mode has specified a string to terminate comments,
        !           444: that is inserted after point, to keep the syntax valid.
        !           445: 
        !           446:   `Meta-;' can also be used to align an existing comment.  If a line
        !           447: already contains the string that starts comments, then `M-;' just moves
        !           448: point after it and re-indents it to the conventional place.  Exception:
        !           449: comments starting in column 0 are not moved.
        !           450: 
        !           451:   Some major modes have special rules for indenting certain kinds of
        !           452: comments in certain contexts.  For example, in Lisp code, comments which
        !           453: start with two semicolons are indented as if they were lines of code,
        !           454: instead of at the comment column.  Comments which start with three
        !           455: semicolons are supposed to start at the left margin.  Emacs understands
        !           456: these conventions by indenting a double-semicolon comment using TAB,
        !           457: and by not changing the indentation of a triple-semicolon comment at all.
        !           458: 
        !           459:      ;; This function is just an example
        !           460:      ;;; Here either two or three semicolons are appropriate.
        !           461:      (defun foo (x)
        !           462:      ;;; And now, the first part of the function:
        !           463:        ;; The following line adds one.
        !           464:        (1+ x))           ; This line adds one.
        !           465: 
        !           466:   In C code, a comment preceded on its line by nothing but whitespace
        !           467: is indented like a line of code.
        !           468: 
        !           469:   Even when an existing comment is properly aligned, `M-;' is still
        !           470: useful for moving directly to the start of the comment.
        !           471: 
        !           472:   `C-u - C-x ;' (`kill-comment') kills the comment on the current line,
        !           473: if there is one.  The indentation before the start of the comment is killed
        !           474: as well.  If there does not appear to be a comment in the line, nothing is
        !           475: done.  To reinsert the comment on another line, move to the end of that
        !           476: line, do `C-y', and then do `M-;' to realign it.  Note that
        !           477: `C-u - C-x ;' is not a distinct key; it is `C-x ;' (`set-comment-column')
        !           478: with a negative argument.  That command is programmed so that when it
        !           479: receives a negative argument it calls `kill-comment'.  However,
        !           480: `kill-comment' is a valid command which you could bind directly to a
        !           481: key if you wanted to.
        !           482: 
        !           483: 
        !           484: Multiple Lines of Comments
        !           485: --------------------------
        !           486: 
        !           487:   If you are typing a comment and find that you wish to continue it on
        !           488: another line, you can use the command `Meta-LFD' (`indent-new-comment-line'),
        !           489: which terminates the comment you are typing, creates a new blank line
        !           490: afterward, and begins a new comment indented under the old one.  When Auto
        !           491: Fill mode is on, going past the fill column while typing a comment causes
        !           492: the comment to be continued in just this fashion.  If point is not at the
        !           493: end of the line when `M-LFD' is typed, the text on the rest of
        !           494: the line becomes part of the new comment line.
        !           495: 
        !           496: 
        !           497: Options Controlling Comments
        !           498: ----------------------------
        !           499: 
        !           500:   The comment column is stored in the variable `comment-column'.  You
        !           501: can set it to a number explicitly.  Alternatively, the command `C-x ;'
        !           502: (`set-comment-column') sets the comment column to the column point is
        !           503: at.  `C-u C-x ;' sets the comment column to match the last comment
        !           504: before point in the buffer, and then does a `Meta-;' to align the
        !           505: current line's comment under the previous one.  Note that `C-u - C-x ;'
        !           506: runs the function `kill-comment' as described above.
        !           507: 
        !           508:   `comment-column' is a per-buffer variable; altering the variable
        !           509: affects only the current buffer, but there is a default value which you can
        !           510: change as well.  *Note Locals::.  Many major modes initialize this variable
        !           511: for the current buffer.
        !           512: 
        !           513:   The comment commands recognize comments based on the regular expression
        !           514: that is the value of the variable `comment-start-skip'.  This regexp
        !           515: should not match the null string.  It may match more than the comment
        !           516: starting delimiter in the strictest sense of the word; for example, in C
        !           517: mode the value of the variable is `"/\\*+ *"', which matches extra
        !           518: stars and spaces after the `/*' itself.  (Note that `\\' is
        !           519: needed in Lisp syntax to include a `\' in the string, which is needed
        !           520: to deny the first star its special meaning in regexp syntax.  *Note Regexps::.)
        !           521: 
        !           522:   When a comment command makes a new comment, it inserts the value of
        !           523: `comment-start' to begin it.  The value of `comment-end' is
        !           524: inserted after point, so that it will follow the text that you will insert
        !           525: into the comment.  In C mode, `comment-start' has the value
        !           526: `"/* "' and `comment-end' has the value `" */"'.
        !           527: 
        !           528:   `comment-multi-line' controls how `M-LFD' (`indent-new-comment-line')
        !           529: behaves when used inside a comment.  If `comment-multi-line' is
        !           530: `nil', as it normally is, then the comment on the starting line is
        !           531: terminated and a new comment is started on the new following line.  If
        !           532: `comment-multi-line' is not `nil', then the new following line is
        !           533: set up as part of the same comment that was found on the starting line.
        !           534: This is done by not inserting a terminator on the old line, and not
        !           535: inserting a starter on the new line.  In languages where multi-line comments
        !           536: work, the choice of value for this variable is a matter of taste.
        !           537: 
        !           538:   The variable `comment-indent-hook' should contain a function that
        !           539: will be called to compute the indentation for a newly inserted comment or
        !           540: for aligning an existing comment.  It is set differently by various major
        !           541: modes.  The function is called with no arguments, but with point at the
        !           542: beginning of the comment, or at the end of a line if a new comment is to be
        !           543: inserted.  It should return the column in which the comment ought to start.
        !           544: For example, in Lisp mode, the indent hook function bases its decision
        !           545: on how many semicolons begin an existing comment, and on the code in the
        !           546: preceding lines.
        !           547: 
        !           548: 
        !           549: File: emacs  Node: Balanced Editing, Prev: Comments, Up: Programs, Next: Lisp Completion
        !           550: 
        !           551: Editing Without Unbalanced Parentheses
        !           552: ======================================
        !           553: 
        !           554: `M-('     
        !           555:      Put parentheses around next sexp(s) (`insert-parentheses').
        !           556: `M-)'     
        !           557:      Move past next close parenthesis and re-indent
        !           558:      (`move-over-close-and-reindent').
        !           559: 
        !           560:   The commands `M-(' (`insert-parentheses') and `M-)'
        !           561: (`move-over-close-and-reindent') are designed to facilitate a style of
        !           562: editing which keeps parentheses balanced at all times.  `M-(' inserts a
        !           563: pair of parentheses, either together as in `()', or, if given an
        !           564: argument, around the next several sexps, and leaves point after the open
        !           565: parenthesis.  Instead of typing `( F O O )', you can type `M-( F O
        !           566: O', which has the same effect except for leaving the cursor before the
        !           567: close parenthesis.  Then you would type `M-)', which moves past the
        !           568: close parenthesis, deleting any indentation preceding it (in this example
        !           569: there is none), and indenting with LFD after it.
        !           570: 
        !           571: 
        !           572: File: emacs  Node: Lisp Completion, Prev: Balanced Editing, Up: Programs, Next: Documentation
        !           573: 
        !           574: Completion for Lisp Symbols
        !           575: ===========================
        !           576: 
        !           577:   Usually completion happens in the minibuffer.  But one kind of completion
        !           578: is available in all buffers: completion for Lisp symbol names.
        !           579: 
        !           580:   The command `M-TAB' (`lisp-complete-symbol') takes the
        !           581: partial Lisp symbol before point to be an abbreviation, and compares it
        !           582: against all nontrivial Lisp symbols currently known to Emacs.  Any
        !           583: additional characters that they all have in common are inserted at point.
        !           584: Nontrivial symbols are those that have function definitions, values or
        !           585: properties.
        !           586: 
        !           587:   If there is an open-parenthesis immediately before the beginning of
        !           588: the partial symbol, only symbols with function definitions are considered
        !           589: as completions.
        !           590: 
        !           591:   If the partial name in the buffer has more than one possible completion
        !           592: and they have no additional characters in common, a list of all possible
        !           593: completions is displayed in another window.
        !           594: 
        !           595: 
        !           596: File: emacs  Node: Documentation, Prev: Lisp Completion, Up: Programs, Next: Change Log
        !           597: 
        !           598: Documentation Commands
        !           599: ======================
        !           600: 
        !           601:   As you edit Lisp code to be run in Emacs, the commands `C-h f'
        !           602: (`describe-function') and `C-h v' (`describe-variable') can
        !           603: be used to print documentation of functions and variables that you want to
        !           604: call.  These commands use the minibuffer to read the name of a function or
        !           605: variable to document, and display the documentation in a window.
        !           606: 
        !           607:   For extra convenience, these commands provide default arguments based on
        !           608: the code in the neighborhood of point.  `C-h f' sets the default to the
        !           609: function called in the innermost list containing point.  `C-h v' uses
        !           610: the symbol name around or adjacent to point as its default.
        !           611: 
        !           612:   Documentation on Unix commands, system calls and libraries can be
        !           613: obtained with the `M-x manual-entry' command.  This reads a topic as an
        !           614: argument, and displays the text on that topic from the Unix manual.
        !           615: `manual-entry' always searches all 8 sections of the manual, and
        !           616: concatenates all the entries that are found.  For example, the topic
        !           617: `termcap' finds the description of the termcap library from section 3,
        !           618: followed by the description of the termcap data base from section 5.
        !           619: 
        !           620: 
        !           621: File: emacs  Node: Change Log, Prev: Documentation, Up: Programs, Next: Tags
        !           622: 
        !           623: Change Logs
        !           624: ===========
        !           625: 
        !           626:   The Emacs command `M-x add-change-log-entry' helps you keep a record
        !           627: of when and why you have changed a program.  It assumes that you have a
        !           628: file in which you write a chronological sequence of entries describing
        !           629: individual changes.  The default is to store the change entries in a file
        !           630: called `ChangeLog' in the same directory as the file you are editing.
        !           631: The same `ChangeLog' file therefore records changes for all the files
        !           632: in the directory.
        !           633: 
        !           634:   A change log entry starts with a header line that contains your name and
        !           635: the current date.  Aside from these header lines, every line in the change
        !           636: log starts with a tab.  One entry can describe several changes; each change
        !           637: starts with a line starting with a tab and a star.  `M-x add-change-log-entry'
        !           638: visits the change log file and creates a new entry unless the most recent
        !           639: entry is for today's date and your name.  In either case, it adds a new
        !           640: line to start the description of another change just after the header line
        !           641: of the entry.  When `M-x add-change-log-entry' is finished, all is
        !           642: prepared for you to edit in the description of what you changed and how.
        !           643: You must then save the change log file yourself.
        !           644: 
        !           645:   The change log file is always visited in Indented Text mode, which means
        !           646: that LFD and auto-filling indent each new line like the previous
        !           647: line.  This is convenient for entering the contents of an entry, which must
        !           648: all be indented.  *Note Text Mode::.
        !           649: 
        !           650:   Here is an example of the formatting conventions used in the change log
        !           651: for Emacs:
        !           652: 
        !           653:      Wed Jun 26 19:29:32 1985  Richard M. Stallman  (rms at mit-prep)
        !           654:      
        !           655:              * xdisp.c (try_window_id):
        !           656:              If C-k is done at end of next-to-last line,
        !           657:              this fn updates window_end_vpos and cannot leave
        !           658:              window_end_pos nonnegative (it is zero, in fact).
        !           659:              If display is preempted before lines are output,
        !           660:              this is inconsistent.  Fix by setting
        !           661:              blank_end_of_window to nonzero.
        !           662:      
        !           663:      Tue Jun 25 05:25:33 1985  Richard M. Stallman  (rms at mit-prep)
        !           664:      
        !           665:              * cmds.c (Fnewline):
        !           666:              Call the auto fill hook if appropriate.
        !           667:      
        !           668:              * xdisp.c (try_window_id):
        !           669:              If point is found by compute_motion after xp, record that
        !           670:              permanently.  If display_text_line sets point position wrong
        !           671:              (case where line is killed, point is at eob and that line is
        !           672:              not displayed), set it again in final compute_motion.
        !           673: 
        !           674: 
        !           675: File: emacs  Node: Tags, Prev: Change Log, Up: Programs, Next: Fortran
        !           676: 
        !           677: Tag Tables
        !           678: ==========
        !           679: 
        !           680:   A "tag table" is a description of how a multi-file program is broken
        !           681: up into files.  It lists the names of the component files and the names and
        !           682: positions of the functions in each file.  Grouping the related files makes
        !           683: it possible to search or replace through all the files with one command.
        !           684: Recording the function names and positions makes possible the `Meta-.'
        !           685: command which you can use to find the definition of a function without
        !           686: having to know which of the files it is in.
        !           687: 
        !           688:   Tag tables are stored in files called "tag table files".  The
        !           689: conventional name for a tag table file is `TAGS'.
        !           690: 
        !           691:   Each entry in the tag table records the name of one tag, the name of the
        !           692: file that the tag is defined in (implicitly), and the position in that file
        !           693: of the tag's definition.
        !           694: 
        !           695:   Just what names from the described files are recorded in the tag table
        !           696: depends on the programming language of the described file.  They normally
        !           697: include all functions and subroutines, and may also include global
        !           698: variables, data types, and anything else convenient.  In any case, each
        !           699: name recorded is called a "tag".
        !           700: 
        !           701: * Menu:
        !           702: 
        !           703: * Tag Syntax::
        !           704: * Create Tag Table::
        !           705: * Select Tag Table::
        !           706: * Find Tag::
        !           707: * Tags Search::
        !           708: * Tags Stepping::
        !           709: * List Tags::
        !           710: 
        !           711: 
        !           712: File: emacs  Node: Tag Syntax, Prev: Tags, Up: Tags, Next: Create Tag Table
        !           713: 
        !           714: Source File Tag Syntax
        !           715: ----------------------
        !           716: 
        !           717:   In Lisp code, any function defined with `defun', any variable
        !           718: defined with `defvar' or `defconst', and in general the first
        !           719: argument of any expression that starts with `(def' in column zero, is
        !           720: a tag.
        !           721: 
        !           722:   In C code, any C function is a tag, and so is any typedef if `-t' is
        !           723: specified when the tag table is constructed.
        !           724: 
        !           725:   In Fortran code, functions and subroutines are tags.
        !           726: 
        !           727:   In LaTeX text, the argument of any of the commands `\chapter',
        !           728: `\section', `\subsection', `\subsubsection', `\eqno', `\label', `\ref',
        !           729: `\cite', `\bibitem' and `\typeout' is a tag.
        !           730: 
        !           731: 
        !           732: File: emacs  Node: Create Tag Table, Prev: Tag Syntax, Up: Tags, Next: Select Tag Table
        !           733: 
        !           734: Creating Tag Tables
        !           735: -------------------
        !           736: 
        !           737:   The `etags' program is used to create a tag table file.  It knows
        !           738: the syntax of C, Fortran, LaTeX, Scheme and Emacs Lisp/Common Lisp.  To
        !           739: use `etags', type
        !           740: 
        !           741:      etags INPUTFILES...
        !           742: 
        !           743: as a shell command.  It reads the specified files and writes a tag table
        !           744: named `TAGS' in the current working directory.  `etags'
        !           745: recognizes the language used in an input file based on its file name and
        !           746: contents; there are no switches for specifying the language.  The `-t'
        !           747: switch tells `etags' to record typedefs in C code as tags.
        !           748: 
        !           749:   If the tag table data become outdated due to changes in the files
        !           750: described in the table, the way to update the tag table is the same way it
        !           751: was made in the first place.  It is not necessary to do this often.
        !           752: 
        !           753:   If the tag table fails to record a tag, or records it for the wrong file,
        !           754: then Emacs cannot possibly find its definition.  However, if the position
        !           755: recorded in the tag table becomes a little bit wrong (due to some editing
        !           756: in the file that the tag definition is in), the only consequence is to slow
        !           757: down finding the tag slightly.  Even if the stored position is very wrong,
        !           758: Emacs will still find the tag, but it must search the entire file for it.
        !           759: 
        !           760:   So you should update a tag table when you define new tags that you want
        !           761: to have listed, or when you move tag definitions from one file to another,
        !           762: or when changes become substantial.  Normally there is no need to update
        !           763: the tag table after each edit, or even every day.
        !           764: 
        !           765: 
        !           766: File: emacs  Node: Select Tag Table, Prev: Create Tag Table, Up: Tags, Next: Find Tag
        !           767: 
        !           768: Selecting a Tag Table
        !           769: ---------------------
        !           770: 
        !           771:   Emacs has at any time one "selected" tag table, and all the commands
        !           772: for working with tag tables use the selected one.  To select a tag table,
        !           773: type `M-x visit-tags-table', which reads the tag table file name as an
        !           774: argument.  The name `TAGS' in the default directory is used as the
        !           775: default file name.
        !           776: 
        !           777:   All this command does is store the file name in the variable
        !           778: `tags-file-name'.  Emacs does not actually read in the tag table
        !           779: contents until you try to use them.  Setting this variable yourself is just
        !           780: as good as using `visit-tags-table'.  The variable's initial value is
        !           781: `nil'; this value tells all the commands for working with tag tables
        !           782: that they must ask for a tag table file name to use.
        !           783: 
        !           784: 
        !           785: File: emacs  Node: Find Tag, Prev: Select Tag Table, Up: Tags, Next: Tags Search
        !           786: 
        !           787: Finding a Tag
        !           788: -------------
        !           789: 
        !           790:   The most important thing that a tag table enables you to do is to find
        !           791: the definition of a specific tag.
        !           792: 
        !           793: `M-. TAG'     
        !           794:      Find first definition of TAG (`find-tag').
        !           795: `C-u M-.'     
        !           796:      Find next alternate definition of last tag specified.
        !           797: `C-x 4 . TAG'     
        !           798:      Find first definition of TAG, but display it in another window
        !           799:      (`find-tag-other-window').
        !           800: 
        !           801:   `M-.' (`find-tag') is the command to find the definition of a
        !           802: specified tag.  It searches through the tag table for that tag, as a
        !           803: string, and then uses the tag table info to determine the file that the
        !           804: definition is in and the approximate character position in the file of the
        !           805: definition.  Then `find-tag' visits that file, moves point to the
        !           806: approximate character position, and starts searching ever-increasing
        !           807: distances away for the the text that should appear at the beginning of the
        !           808: definition.
        !           809: 
        !           810:   If an empty argument is given (just type RET), the sexp in the
        !           811: buffer before or around point is used as the name of the tag to find.
        !           812: *Note Lists::, for info on sexps.
        !           813: 
        !           814:   The argument to `find-tag' need not be the whole tag name; it can be
        !           815: a substring of a tag name.  However, there can be many tag names containing
        !           816: the substring you specify.  Since `find-tag' works by searching the
        !           817: text of the tag table, it finds the first tag in the table that the
        !           818: specified substring appears in.  The way to find other tags that match the
        !           819: substring is to give `find-tag' a numeric argument, as in `C-u
        !           820: M-.'; this does not read a tag name, but continues searching the tag
        !           821: table's text for another tag containing the same substring last used.  If
        !           822: you have a real META key, `M-0 M-.' is an easier alternative
        !           823: to `C-u M-.'.
        !           824: 
        !           825:   Like most commands that can switch buffers, `find-tag' has another
        !           826: similar command that displays the new buffer in another window.  `C-x 4
        !           827: .' invokes the function `find-tag-other-window'.  (This key sequence
        !           828: ends with a period.)
        !           829: 
        !           830:   Emacs comes with a tag table file `TAGS', in the directory
        !           831: containing Lisp libraries, which includes all the Lisp libraries and all
        !           832: the C sources of Emacs.  By specifying this file with `visit-tags-table'
        !           833: and then using `M-.' you can quickly look at the source of any Emacs
        !           834: function.
        !           835: 
        !           836: 
        !           837: File: emacs  Node: Tags Search, Prev: Find Tag, Up: Tags, Next: Tags Stepping
        !           838: 
        !           839: Searching and Replacing with Tag Tables
        !           840: ---------------------------------------
        !           841: 
        !           842:   The commands in this section visit and search all the files listed in the
        !           843: selected tag table, one by one.  For these commands, the tag table serves
        !           844: only to specify a sequence of files to search.  A related command is
        !           845: `M-x grep' (*Note Compilation::).
        !           846: 
        !           847: `M-x tags-search'     
        !           848:      Search for the specified regexp through the files in the selected tag
        !           849:      table.
        !           850: `M-x tags-query-replace'     
        !           851:      Perform a `query-replace' on each file in the selected tag table.
        !           852: `M-,'     
        !           853:      Restart one of the commands above, from the current location of point
        !           854:      (`tags-loop-continue').
        !           855: 
        !           856:   `M-x tags-search' reads a regexp using the minibuffer, then visits
        !           857: the files of the selected tag table one by one, and searches through each
        !           858: one for that regexp.  It displays the name of the file being searched so
        !           859: you can follow its progress.  As soon as an occurrence is found,
        !           860: `tags-search' returns.
        !           861: 
        !           862:   Having found one match, you probably want to find all the rest.  To find
        !           863: one more match, type `M-,' (`tags-loop-continue') to resume the
        !           864: `tags-search'.  This searches the rest of the current buffer, followed
        !           865: by the remaining files of the tag table.
        !           866: 
        !           867:   `M-x tags-query-replace' performs a single `query-replace' through all
        !           868: the files in the tag table.  It reads a string to search for and a string
        !           869: to replace with, just like ordinary `M-x query-replace'.  It searches much
        !           870: like `M-x tags-search' but repeatedly, processing matches according to your
        !           871: input.  *Note Replace::, for more information on `query-replace'.
        !           872: 
        !           873:   It is possible to get through all the files in the tag table with a
        !           874: single invocation of `M-x tags-query-replace'.  But since any
        !           875: unrecognized character causes the command to exit, you may need to continue
        !           876: where you left off.  `M-,' can be used for this.  It resumes the last
        !           877: tags search or replace command that you did.
        !           878: 
        !           879:   It may have struck you that `tags-search' is a lot like `grep'.
        !           880: You can also run `grep' itself as an inferior of Emacs and have Emacs
        !           881: show you the matching lines one by one.  This works mostly the same as
        !           882: running a compilation and having Emacs show you where the errors were.
        !           883: *Note Compilation::.
        !           884: 
        !           885: 
        !           886: File: emacs  Node: Tags Stepping, Prev: Tags Search, Up: Tags, Next: List Tags
        !           887: 
        !           888: Stepping Through a Tag Table
        !           889: ----------------------------
        !           890: 
        !           891:   If you wish to process all the files in the selected tag table, but
        !           892: `M-x tags-search' and `M-x tags-query-replace' in particular are not what
        !           893: you want, you can use `M-x next-file'.
        !           894: 
        !           895: `C-u M-x next-file'     
        !           896:      With a numeric argument, regardless of its value, visit the first
        !           897:      file in the tag table, and prepare to advance sequentially by files.
        !           898: `M-x next-file'     
        !           899:      Visit the next file in the selected tag table.
        !           900: 
        !           901: 
        !           902: File: emacs  Node: List Tags, Prev: Tags Stepping, Up: Tags
        !           903: 
        !           904: Tag Table Inquiries
        !           905: -------------------
        !           906: 
        !           907: `M-x list-tags'     
        !           908:      Display a list of the tags defined in a specific program file.
        !           909: `M-x tags-apropos'     
        !           910:      Display a list of all tags matching a specified regexp.
        !           911: 
        !           912:   `M-x list-tags' reads the name of one of the files described by the
        !           913: selected tag table, and displays a list of all the tags defined in that
        !           914: file.  The "file name" argument is really just a string to compare
        !           915: against the names recorded in the tag table; it is read as a string rather
        !           916: than as a file name.  Therefore, completion and defaulting are not
        !           917: available, and you must enter the string the same way it appears in the tag
        !           918: table.  Do not include a directory as part of the file name unless the file
        !           919: name recorded in the tag table includes a directory.
        !           920: 
        !           921:   `M-x tags-apropos' is like `apropos' for tags.  It reads a regexp,
        !           922: then finds all the tags in the selected tag table whose entries match that
        !           923: regexp, and displays the tag names found.
        !           924: 
        !           925: 
        !           926: File: emacs  Node: Fortran, Prev: Tags, Up: Programs
        !           927: 
        !           928: Fortran Mode
        !           929: ============
        !           930: 
        !           931:   Fortran mode provides special motion commands for Fortran statements and
        !           932: subprograms, and indentation commands that understand Fortran conventions
        !           933: of nesting, line numbers and continuation statements.
        !           934: 
        !           935:   Special commands for comments are provided because Fortran comments are
        !           936: unlike those of other languages.
        !           937: 
        !           938:   Built-in abbrevs optionally save typing when you insert Fortran keywords.
        !           939: 
        !           940:   Use `M-x fortran-mode' to switch to this major mode.  Doing so calls
        !           941: the value of `fortran-mode-hook' as a function of no arguments if
        !           942: that variable has a value that is not `nil'.
        !           943: 
        !           944: * Menu:
        !           945: 
        !           946: * Motion: Fortran Motion.     Moving point by statements or subprograms.
        !           947: * Indent: Fortran Indent.     Indentation commands for Fortran.
        !           948: * Comments: Fortran Comments. Inserting and aligning comments.
        !           949: * Columns: Fortran Columns.   Measuring columns for valid Fortran.
        !           950: * Abbrev: Fortran Abbrev.     Built-in abbrevs for Fortran keywords.
        !           951: 
        !           952:   Fortran mode was contributed by Michael Prange.
        !           953: 
        !           954: 
        !           955: File: emacs  Node: Fortran Motion, Prev: Fortran, Up: Fortran, Next: Fortran Indent
        !           956: 
        !           957: Motion Commands
        !           958: ---------------
        !           959: 
        !           960:   Fortran mode provides special commands to move by subprograms (functions
        !           961: and subroutines) and by statements.  There is also a command to put the
        !           962: region around one subprogram, convenient for killing it or moving it.
        !           963: 
        !           964: 
        !           965: `C-M-a'     
        !           966:      Move to beginning of subprogram
        !           967:      (`beginning-of-fortran-subprogram').
        !           968: `C-M-e'     
        !           969:      Move to end of subprogram (`end-of-fortran-subprogram').
        !           970: `C-M-h'     
        !           971:      Put point at beginning of subprogram and mark at end
        !           972:      (`mark-fortran-subprogram').
        !           973: `C-c C-n'     
        !           974:      Move to beginning of current or next statement
        !           975:      (`fortran-next-statement').
        !           976: `C-c C-p'     
        !           977:      Move to beginning of current or previous statement
        !           978:      (`fortran-previous-statement').
        !           979: 
        !           980: 
        !           981: File: emacs  Node: Fortran Indent, Prev: Fortran Motion, Up: Fortran, Next: Fortran Comments
        !           982: 
        !           983: Fortran Indentation
        !           984: -------------------
        !           985: 
        !           986:   Special commands and features are needed for indenting Fortran code in
        !           987: order to make sure various syntactic entities (line numbers, comment line
        !           988: indicators and continuation line flags) appear in the columns that are
        !           989: required for standard Fortran.
        !           990: 
        !           991: * Menu:
        !           992: 
        !           993: * Commands: ForIndent Commands. Commands for indenting Fortran.
        !           994: * Numbers:  ForIndent Num.      How line numbers auto-indent.
        !           995: * Conv:     ForIndent Conv.     Conventions you must obey to avoid trouble.
        !           996: * Vars:     ForIndent Vars.     Variables controlling Fortran indent style.
        !           997: 
        !           998: 
        !           999: File: emacs  Node: ForIndent Commands, Prev: Fortran Indent, Up: Fortran Indent, Next: ForIndent Num
        !          1000: 
        !          1001: Fortran Indentation Commands
        !          1002: ............................
        !          1003: 
        !          1004: `TAB'     
        !          1005:      Indent the current line (`fortran-indent-line').
        !          1006: `M-LFD'     
        !          1007:      Break the current line and set up a continuation line.
        !          1008: `C-M-q'     
        !          1009:      Indent all the lines of the subprogram point is in
        !          1010:      (`fortran-indent-subprogram').
        !          1011: 
        !          1012:   TAB is redefined by Fortran mode to reindent the current line for
        !          1013: Fortran (`fortran-indent-line').  Line numbers and continuation
        !          1014: markers are indented to their required columns, and the body of the
        !          1015: statement is independently indented based on its nesting in the program.
        !          1016: 
        !          1017:   The key `C-M-q' is redefined as `fortran-indent-subprogram', a
        !          1018: command to reindent all the lines of the Fortran subprogram (function or
        !          1019: subroutine) containing point.
        !          1020: 
        !          1021:   The key `M-LFD' is redefined as `fortran-split-line', a
        !          1022: command to split a line in the appropriate fashion for Fortran.  In a
        !          1023: non-comment line, the second half becomes a continuation line and is
        !          1024: indented accordingly.  In a comment line, both halves become separate
        !          1025: comment lines.
        !          1026: 
        !          1027: 
        !          1028: File: emacs  Node: ForIndent Num, Prev: ForIndent Commands, Up: Fortran Indent, Next: ForIndent Conv
        !          1029: 
        !          1030: Line Numbers and Continuation
        !          1031: .............................
        !          1032: 
        !          1033:   If a number is the first non-whitespace in the line, it is assumed to be
        !          1034: a line number and is moved to columns 0 through 4.  (Columns are always
        !          1035: counted from 0 in GNU Emacs.)  If the text on the line starts with the
        !          1036: conventional Fortran continuation marker `$', it is moved to column 5.
        !          1037: If the text begins with any non whitespace character in column 5, it is
        !          1038: assumed to be an unconventional continuation marker and remains in column
        !          1039: 5.
        !          1040: 
        !          1041:   Line numbers of four digits or less are normally indented one space.
        !          1042: This amount is controlled by the variable `fortran-line-number-indent'
        !          1043: which is the maximum indentation a line number can have.  Line numbers
        !          1044: are indented to right-justify them to end in column 4 unless that would
        !          1045: require more than this maximum indentation.  The default value of the
        !          1046: variable is 1.
        !          1047: 
        !          1048:   Simply inserting a line number is enough to indent it according to these
        !          1049: rules.  As each digit is inserted, the indentation is recomputed.  To turn
        !          1050: off this feature, set the variable `fortran-electric-line-number' to
        !          1051: `nil'.  Then inserting line numbers is like inserting anything else.
        !          1052: 
        !          1053: 
        !          1054: File: emacs  Node: ForIndent Conv, Prev: ForIndent Num, Up: Fortran Indent, Next: ForIndent Vars
        !          1055: 
        !          1056: Syntactic Conventions
        !          1057: .....................
        !          1058: 
        !          1059:   Fortran mode assumes that you follow certain conventions that simplify
        !          1060: the task of understanding a Fortran program well enough to indent it
        !          1061: properly:
        !          1062: 
        !          1063:    * Two nested `do' loops never share a `continue' statement.
        !          1064:      
        !          1065:    * The same character appears in column 5 of all continuation lines, and
        !          1066:      this character is the value of the variable `fortran-continuation-char'.
        !          1067:      By default, this character is `$'.
        !          1068: 
        !          1069: If you fail to follow these conventions, the indentation commands may
        !          1070: indent some lines unaesthetically.  However, a correct Fortran program will
        !          1071: retain its meaning when reindented even if the conventions are not
        !          1072: followed.
        !          1073: 
        !          1074: 
        !          1075: File: emacs  Node: ForIndent Vars, Prev: ForIndent Conv, Up: Fortran Indent
        !          1076: 
        !          1077: Variables for Fortran Indentation
        !          1078: .................................
        !          1079: 
        !          1080:   Several additional variables control how Fortran indentation works.
        !          1081: 
        !          1082: `fortran-do-indent'     
        !          1083:      Extra indentation within each level of `do' statement (default 3).
        !          1084:      
        !          1085: `fortran-if-indent'     
        !          1086:      Extra indentation within each level of `if' statement (default 3).
        !          1087:      
        !          1088: `fortran-continuation-indent'     
        !          1089:      Extra indentation for bodies of continuation lines (default 5).
        !          1090:      
        !          1091: `fortran-check-all-num-for-matching-do'     
        !          1092:      If this is `nil', indentation assumes that each `do'
        !          1093:      statement ends on a `continue' statement.  Therefore, when
        !          1094:      computing indentation for a statement other than `continue', it
        !          1095:      can save time by not checking for a `do' statement ending there.
        !          1096:      If this is non-`nil', indenting any numbered statement must check
        !          1097:      for a `do' that ends there.  The default is `nil'.
        !          1098:      
        !          1099: `fortran-minimum-statement-indent'     
        !          1100:      Minimum indentation for fortran statements.  For standard Fortran,
        !          1101:      this is 6.  Statement bodies will never be indented less than this
        !          1102:      much.
        !          1103: 
        !          1104: 
        !          1105: File: emacs  Node: Fortran Comments, Prev: Fortran Indent, Up: Fortran, Next: Fortran Columns
        !          1106: 
        !          1107: Comments
        !          1108: --------
        !          1109: 
        !          1110:   The usual Emacs comment commands assume that a comment can follow a line
        !          1111: of code.  In Fortran, the standard comment syntax requires an entire line
        !          1112: to be just a comment.  Therefore, Fortran mode replaces the standard Emacs
        !          1113: comment commands and defines some new variables.
        !          1114: 
        !          1115:   Fortran mode can also handle a nonstandard comment syntax where comments
        !          1116: start with `!' and can follow other text.  Because only some Fortran
        !          1117: compilers accept this syntax, Fortran mode will not insert such comments
        !          1118: unless you have said in advance to do so.  To do this, set the variable
        !          1119: `comment-start' to `"!"' (*Note Variables::).
        !          1120: 
        !          1121: `M-;'     
        !          1122:      Align comment or insert new comment (`fortran-comment-indent').
        !          1123:      
        !          1124: `C-x ;'     
        !          1125:      Applies to nonstandard `!' comments only.
        !          1126:      
        !          1127: `C-c ;'     
        !          1128:      Turn all lines of the region into comments, or (with arg)
        !          1129:      turn them back into real code (`fortran-comment-region').
        !          1130: 
        !          1131:   `M-;' in Fortran mode is redefined as the command
        !          1132: `fortran-comment-indent'.  Like the usual `M-;' command, this
        !          1133: recognizes any kind of existing comment and aligns its text appropriately;
        !          1134: if there is no existing comment, a comment is inserted and aligned.  But
        !          1135: inserting and aligning comments are not the same in Fortran mode as in
        !          1136: other modes.
        !          1137: 
        !          1138:   When a new comment must be inserted, if the current line is blank, a
        !          1139: full-line comment is inserted.  On a non-blank line, a nonstandard `!'
        !          1140: comment is inserted if you have said you want to use them.  Otherwise a
        !          1141: full-line comment is inserted on a new line before the current line.
        !          1142: 
        !          1143:   Nonstandard `!' comments are aligned like comments in other
        !          1144: languages, but full-line comments are different.  In a standard full-line
        !          1145: comment, the comment delimiter itself must always appear in column zero.
        !          1146: What can be aligned is the text within the comment.  You can choose from
        !          1147: three styles of alignment by setting the variable
        !          1148: `fortran-comment-indent-style' to one of these values:
        !          1149: 
        !          1150: `fixed'     
        !          1151:      The text is aligned at a fixed column, which is the value of
        !          1152:      `fortran-comment-line-column'.  This is the default.
        !          1153: `relative'     
        !          1154:      The text is aligned as if it were a line of code, but with an
        !          1155:      additional `fortran-comment-line-column' columns of indentation.
        !          1156: `nil'     
        !          1157:      Text in full-line columns is not moved automatically.
        !          1158: 
        !          1159:   In addition, you can specify the character to be used to indent within
        !          1160: full-line comments by setting the variable `fortran-comment-indent-char'
        !          1161: to the character you want to use.
        !          1162: 
        !          1163:   Fortran mode introduces two variables `comment-line-start' and
        !          1164: `comment-line-start-skip' which play for full-line comments the same
        !          1165: roles played by `comment-start' and `comment-start-skip' for
        !          1166: ordinary text-following comments.  Normally these are set properly by
        !          1167: Fortran mode so you do not need to change them.
        !          1168: 
        !          1169:   The normal Emacs comment command `C-x ;' has not been redefined.
        !          1170: If you use `!' comments, this command can be used with them.  Otherwise
        !          1171: it is useless in Fortran mode.
        !          1172: 
        !          1173:   The command `C-c ;' (`fortran-comment-region') turns all the
        !          1174: lines of the region into comments by inserting the string `C$$$' at
        !          1175: the front of each one.  With a numeric arg, the region is turned back into
        !          1176: live code by deleting `C$$$' from the front of each line in it.  The
        !          1177: string used for these comments can be controlled by setting the variable
        !          1178: `fortran-comment-region'.  Note that here we have an example of a
        !          1179: command and a variable with the same name; these two uses of the name never
        !          1180: conflict because in Lisp and in Emacs it is always clear from the context
        !          1181: which one is meant.
        !          1182: 
        !          1183: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.