dkns(1)                 FreeBSD General Commands Manual                dkns(1)

NAME
     dkns -- Text editor

SYNOPSIS
     dkns [<line-number>] <filename>

DESCRIPTION
     Dickens is an old-school, black-and-white, one-buffer-in-one-window con-
     sole programmer's editor (because that's how we roll).  Pretty visual
     gewgaws are cognitive noise, my sons and daughters.  The plainer the edi-
     tor, the deeper the flow.  What you want is keystroke-efficiency.  Dick-
     ens is written in a custom dialect of lisp called Munger, so the editor
     is programmable, but Dickens is not Emacs.

     All editors suck to some degree, this one included.

     In the command summaries which follow, lone letters preceded by C- indi-
     cate a key chord, where the specified key is to be pressed at the same
     time as the control key.  Lone letters preceded by M- indicate a key
     chord where the specified key is to be pressed at the same time as the
     alt/meta key, or you may precede the specified key by a separate pressing
     of the ESC key.

     Note that chords made with the control key always consist of a lower case
     character and the control key, but that chords made with the meta key may
     consist of either the upper or lower case version of a character and the
     meta key.  For example, M-c and M-C are two distinct commands.

     Keys or key chords preceded by C-x, indicate this chord is to be pressed
     first separately, followed by the succeeding keys or key chords.  Such
     compound commands are called extended commands.  While waiting for the
     subsequent parts of an extended command, the editor will display "C-x ?"
     in the status line.  To cancel a pending extended command the user may
     press C-u.

   Exiting
     C-x C-c  exits the editor.  This command will prompt the user for confir-
              mation if unsaved changes exist in the buffer.

     C-x 9    Will write the contents of the buffer to disk, if unsaved
              changes exist, and exit the editor.

   Command-Line Arguments
     Command line arguments can be used to specify a file to load into the
     buffer upon start-up.  If the first character of the first argument is a
     plus-sign (+), then the remaining characters of that argument are consid-
     ered to specify a line number to move the cursor to upon loading the file
     specified by the second argument.  If the remainder of the first argument
     is not a positive integer, it is ignored, but the file specified by the
     second argument is still loaded.  If the first argument does not begin
     with a plus-sign, then it is assumed to be a filename to load into the
     buffer upon start-up, and the cursor is moved to the first character of
     the first line of the file.  To load a file whose name begins with a
     plus-sign, the user may either pass a do-nothing line number argument or
     qualify the filename:

     % dkns +1 +funnyfile

     % dkns ./+funnyfile

     Any other command-line arguments are assumed to be filenames, and are
     pushed onto the file stack, where they may be subsequently accessed with
     the commands which operate upon that entity.  See the section of this
     document, titled "Working With Files" for more information on using the
     file stack.

   Configuration Options
     The editor has five user-modifiable configuration settings:

     line_length  This option is a positive integer specifying the desired
                  maximum length of manually-created lines.  This limit is
                  used by the auto-wrapper and by the paragraph formatter.

     tab_stop     This option is a positive integer specifying the frequency
                  of tabstops.  Tabstops are considered to occur every
                  tab_stop characters, ad infinitum in the line.

     auto_indent  This option is a boolean which specifies whether or not
                  leading whitespace from the preceding line should be propa-
                  gated to a new line, when the user manually terminates a
                  line.

     auto_wrap    This option is a boolean which specifies whether or not
                  lines should be automatically wrapped when manual input
                  causes a line to exceed the value of line_length.

     show_match   This option is a boolean which specifies whether or not the
                  location of opening delimiters will be indicated visually
                  when a closing delimiter is input.  If turned on, when the
                  user inputs a ")", "}", or "]" character, the editor will
                  search backward in the buffer, for the corresponding opening
                  delimiter, and if found, move the cursor there for two-
                  tenths of a second and then return it to its previous loca-
                  tion.  If the opening delimiter cannot be found, the termi-
                  nal bell is sounded.  In no case will the editor search fur-
                  ther than the line which the cursor would be moved to, if an
                  "C-x [" command were invoked from the original cursor posi-
                  tion.

     The user's startup configuration file, if it exists, must be named .dkns
     and be located in the user's home directory.  The following example shows
     code to modify the user-modifiable settings.

     ; These values must be set via a function call.

     (set_line_length 75)
     (set_tab_stop 3)

     ; The boolean flags may be set directly.

     (setq auto_indent 1)
     (setq auto_wrap 1)
     (setq show_match 1)

     The following commands may be used to inspect or change the user-modifi-
     able settings from within the editor.

     C-x @  displays the values of the user settings.

     C-x N  prompts the user for a new value for the line_length variable.

     C-x B  prompts the user for a new value for the tab_stop variable.

     C-x I  toggles the value of the auto_indent variable.

     C-x U  toggles the value of the auto_wrap variable.

     C-x M  toggles the value of the show_match variable.

   Command Prompts
     Some commands require textual or numerical input from the user.  The edi-
     tor will prompt for this input on the last line of the screen, called the
     status line.  At any command prompt, three editing commands are avail-
     able, and possibly interactive filename completion and a browsable his-
     tory for the command.

     C-h  backspaces over the last character of input, if any.

     C-w  backspaces over the last complete word on the command line, if any.

     C-u  backspaces over the entire command line.

     C-p  causes the text input so far to be replaced with the most recent
          item in the command's saved history.  Successive invocations of this
          command, continue to advance backward through the command history.

     C-n  If the C-p command has been invoked, this command will cause the
          current text on the command line to be replaced with the next item
          in the command history.  Successive invocations of this command con-
          tinue to advance forward through the command history, until the
          original input text, if any, is reached.

     C-a  Insert a tab character into the input text.

     [tab]
          invokes interactive filename completion, functioning similarly to
          that of bash or csh.  Not every command which receives input at a
          command prompt enables filename completion.  Those which do cannot
          accept a literal tab character as input.  To input a tab use C-a.
          To input any other character bound to editing commands, type C-v
          followed by the desired character.

     C-c  cancels the input operation, and the command which initiated it.

   Repeating Commands
     M-o    causes the user to be prompted for a repeat count on the status
            line.  The very next command invoked will be repeated the speci-
            fied number of times, if that command supports a repeat count.
            Those commands for which a repeat count does not make sense,
            ignore the repeat count.

     C-x g  repeats the most recently invoked command.  This command respects
            the repeat count given to the original command, but will ignore
            any repeat count given to itself.

     C-x [space]
            starts recording keystrokes for subsequent playback.  If the
            recording operation has already been started, then this command
            turns it off.

     M-[space]
            plays the last group of previously recorded keystrokes.  The edi-
            tor responds to those keystrokes just as if those keys were
            pressed by the user, allowing the user to repeat multiple commands
            at once.  If this command is given a repeat count, if will be
            respected.  If C-g is invoked after invoking this command, the
            last command in the set of recorded keystrokes will be invoked,
            and not the playback operation.

   The Region
     An abitrary region of text may be delineated for certain operations.  The
     region consists of the text lying between the cursor location and the
     mark.  The cursor position and the mark are both considered to be between
     the character they are over and the previous character in the buffer.
     Therefore, at the region endpoint occurring first in the buffer, the
     character under the endpoint will be included in the region, but at the
     region endpoint occurring second in the buffer, the character under the
     endpoint is outside the region.

     C-[space]  sets the mark before the character location the cursor is
                over.  The cursor is then moved by the user to the other end-
                point to form the region.

     C-x C-e    exchanges the cursor position and the mark.

   Working With Files
     Filename completion is triggered by entering a tab at the filename
     prompt.  Tab characters themselves can be entered at the prompt by invok-
     ing C-a.  To input any character bound to a line-editing command, type C-
     v followed by the desired character.  If the last line of a file is not
     terminated with a newline, the editor will add a newline to the end of
     that line.

     C-x C-f  loads the buffer from a file.  The buffer is emptied first, and
              the user is prompted for the filename.  If the specified file
              does not exist, then the editor assumes the user wishes to edit
              a new file.

     C-x 2    stores the filename currently associated with the buffer and the
              cursor position, then loads the buffer from a new file.  The
              filename and cursor position are stored on a stack, and may be
              returned to at a later time.  The specified file must exist or
              an error is generated.

     C-x 3    pops the last saved filename and cursor position off of the
              saved file stack and loads that file and jumps to the saved cur-
              sor position.

     C-x 4    exchanges the current file and cursor position with those stored
              on top of the file stack.  This command can be used to quickly
              switch between two files.

     C-x D    pushes the current file and cursor position onto the file stack,
              then shifts the filename and cursor position off of the bottom
              of the file stack and loads that file and jumps to that cursor
              position.  This command may be used to visit each of the files
              on the file stack, in succession, in a circular manner, ad
              infinitum.

     C-x C-s  saves the buffer to a file.  If the buffer were loaded from a
              file, the buffer will be written back to that file.  Otherwise,
              the user will be prompted for a filename.  Successive invoca-
              tions of this command will reuse that filename.

     C-x C-a  lists the filenames saved on the file stack.

     C-x C-i  Inserts a file into the buffer after the line the cursor is on.
              If the cursor is on the first line in the buffer, the user will
              be prompted to choose between inserting the file content before
              or after the first line.  This allows files to be inserted at
              the beginning of the buffer.  The user is prompted for the file-
              name.

     C-x W    writes the lines of the region to a file.  The user is prompted
              for the filename.

     C-x F    prompts the user for a new filename to associate with the
              buffer.  Subsequent invocations of C-x C-s will use this file-
              name.

   Working With External Commands
     For these commands, the region is considered to include the entire lines
     the region endpoints lie on, as well as the lines in between, which is to
     say, these commands work on whole lines.  These commands also prompt the
     user for a command line, which is passed to the shell (/bin/sh) for exe-
     cution, and so the command may be any expression that program under-
     stands.

     C-x C-m
            filters the region through an external command.  The lines in the
            region are replaced by the command's output.

     C-x &  inserts the output of a specified command into the buffer, after
            the current line.

     C-x *  writes the lines in the region to the standard input of a speci-
            fied command.

     C-x !  runs a command under the shell.

     C-x $  suspends the editor and returns to the shell from which it was
            launched.  Most shells define a "fg" command to resume suspended
            applications.

   Moving The Cursor And Scrolling The Buffer
     Lines longer than the width of the terminal are truncated onscreen, but
     the editor will scroll the screen horizontally, automatically, if an
     attempt is made to move along such a line, to a destination off the edge
     of the screen.

     C-f    moves the cursor one character forward in the buffer.

     C-b    moves the cursor one character backward in the buffer.

     M-f    moves the cursor forward one word in the buffer.

     M-b    moves the cursor backward one word in the buffer.

     C-a    moves the cursor to the beginning of the current line.

     C-e    moves the cursor to the end of the current line.

     M-a    moves the cursor to the ending punctuation mark of the sentence
            the cursor is inside, or the sentence immediately succeeding the
            cursor position if it is between sentences.

     M-e    moves the cursor to the ending punctuation mark of the sentence
            immediately preceding the sentence the cursor is inside or before.

     M-}    moves the cursor forward to the next blank line, or line with a
            full-stop in column zero, after the cursor position in the buffer.

     M-{    moves the cursor backward to the next blank line, or line with a
            full-stop in column zero, before the cursor position in the
            buffer.

     M-]    moves the cursor forward in the buffer to the next line having an
            opening parenthesis, an opening brace, or a full-stop followed by
            an uppercase S in column zero (troff section).

     M-[    moves the cursor backward to the next line in the buffer having an
            opening parenthesis, an opening brace, or a full-stop followed by
            an uppercase S in column zero.

     M-^    moves the cursor to the first non-whitespace character in the cur-
            rent line, if any.

     M-+    moves the cursor to the first non-whitespace character in the line
            immediately succeeding the line the cursor is on.

     M--    moves the cursor to the first non-whitespace character in the line
            immediately preceding the line the cursor is on.

     M-n    scrolls the buffer upward (or the window on the file downward) by
            one line.

     M-p    scrolls the buffer downward (or the window on the file upward) by
            one line.

     C-t    scrolls the buffer upward to place the line the cursor is on at
            the top of the screen.

     C-l    scrolls the buffer to place the line the cursor is on in the mid-
            dle of the screen.

     C-c    scrolls the buffer downward to place the line the cursor is on at
            the bottom of the screen.

     C-x 0  moves the cursor to first character of the line at the top of the
            screen.

     C-x 1  moves the cursor to the first character of the line at the bottom
            of the screen, or the last line in the buffer.

     C-x l  moves the cursor to the line closest to the center of the screen.

     C-v    scrolls the buffer upward (or the window on the file forward) by
            one screenful of lines.  The cursor is moved to the bottom line on
            the screen.

     M-v    scrolls the buffer downward (or the window on the file backward)
            by one screenful of lines.  The cursor is moved to the top line on
            the screen.

     M->    moves the cursor to the last character in the buffer.

     M-<    moves the cursor to the first character in the buffer.

     C-x #  prompts the user for a line number to move the cursor to.

   Marking Lines With Bookmarks
     An unlimited number of named bookmarks may be associated with lines in
     the buffer.  A bookmark is unset when the bookmarked line deleted.

     C-x m  prompts the user for the name of a bookmark to associate with the
            line the cursor is on.

     C-x j  jumps to the line associated with a named bookmark.  The user is
            prompted for the bookmark name.

   Cutting And Pasting Text To And From The Clipboard
     The following commands are provided to perform cut and paste operations
     on the buffer text.  All of the deletion commands unset the mark.  The
     text on the clipboard is overwritten with every successive deletion or
     copy, except when invoking deletion commands with a repeat count, or when
     invoking the C-k command multiple times in succession, when all the suc-
     cessive deletions so made will be appended to form one item on the clip-
     board.  To preserve the contents of the clipboard for later use, it may
     be pushed onto a stack.

     C-x C    copies the region to the clipboard without deleting it from the
              buffer.

     M-c      copies text to the clipboard from the cursor position to the end
              of the line, without deleting it.  Suppying a repeat count to
              this command determines the number of lines from which text will
              be copied.  A repeat count of 1 is the same as supplying no
              repeat count.  A repeat count of 2, for example, would copy the
              text of the current line, from the cursor position to the end of
              the line, and the text of the subsequent line, to the end of
              that line, to the clipboard.  The final terminating newline of
              the last line affected is not copied.

     M-C      copies text to the clipboard from the cursor position to the end
              of the current paragraph, without deleting it.  Supplying a
              repeat count to this command determines the number a paragraphs
              from which text will be copied.  Supplying a repeat count of 1
              is the same as supplying no repeat count.

     C-d      deletes the character under the cursor.

     C-h      deletes the character before the cursor.

     M-d      deletes the text from the cursor position forward, stopping at
              the first character of the next word in the buffer.  If the cur-
              sor is on whitespace, this command will delete all the white-
              space characters between the cursor position and the next non-
              whitespace character in the buffer.  The deleted whitespace is
              stored on the clipboard, unlike that deleted by the C-x C-p com-
              mand.

     M-h      deletes the text from the cursor position backward to the first
              character of the word the cursor is within, or the first charac-
              ter of the previous word if the cursor is between words.

     C-x C-p  deletes successive whitespace characters from the cursor loca-
              tion to the next non-whitespace character in the current line,
              or to the end of the line, if text does not appear after the
              cursor location in the current line.  The deleted whitespace is
              not stored on the clipboard, but discarded.  The user can
              restore accidentally-deleted whitespace with the undo command.

     C-k      deletes the characters in the line from the cursor position for-
              ward to the end of the line, excepting the terminating newline.
              Invoking this command on a blank line will delete the terminat-
              ing newline, causing the blank line to be removed from the
              buffer.  If this command is given a repeat count, it will delete
              whole lines.  Successive invocations of this command will cause
              each separate deletion to be appended to form one item on the
              clipboard.

     M-k      deletes the characters from the start of the line the cursor is
              on to the cursor position.

     C-x E    deletes the text from the cursor position to the ending punctua-
              tion mark of the sentence the cursor is within or before.

     C-x A    deletes the text from before the cursor position to the ending
              punctuation mark of the sentence preceding the one the cursor is
              within or before.

     C-x i    deletes the text from the cursor position forward to the next
              blank line, or line with a full-stop in column zero, without
              deleting the line.

     C-x o    deletes the text from the blank line, or line with a full-stop
              in column zero, closest to the cursor position, occuring before
              the cursor position, without deleting the blank line.

     C-x w    deletes the text from the cursor position forward to the next
              occurrence of a specified regular expression.  The user is
              prompted for the pattern to use.

     C-x q    deletes the text from the occurrence of a match on a specified
              regular expression closest to the cursor position, occurring
              before the cursor position, to the cursor position.

     C-x K    deletes the text from a specified bookmark to the cursor posi-
              tion.  The exact text deleted depends upon whether the bookmark
              occurs before or after the cursor position in the buffer, as
              described in the section documenting the region.  The book mark
              will be unset after this operation.

     C-x =    deletes the text from the first non-whitespace character in the
              line the cursor is on, to the cursor position.

     C-x y    deletes the text from the cursor position to the end of the
              buffer, excepting the final terminating newline of the final
              line, which cannot be deleted.

     C-x u    deletes the text from the beginning of the buffer to the cursor
              position.

     C-x C-d  deletes the text delineated by the region.

     C-y      pastes the content of the clipboard into the buffer before the
              cursor position.  The region is set to the inserted text, so
              that it may be removed again by invoking C-x C-d, or M-y.

     M-y      deletes the text delineated by the region, moves the current
              clipboard to the bottom of the clipboard stack, then pops the
              clipboard on the top of the clipboard stack to replace the cur-
              rent clipboard, whose content is then pasted into the current
              buffer.  Successive invocations after an invocation of C-y,
              allow the user to browse the items on the clipboard stack, by
              successively replacing the region with the content of each clip-
              board on the clipboard stack.

     M-t      pushes the current clipboard onto the clipboard stack, and cre-
              ates a new empty clipboard for use by subsequent deletion opera-
              tions.

     M-g      destroys the current clipboard and replaces it with the last
              clipboard pushed onto the clipboard stack.

     C-x ;    Prompts the user for a number of an item on the clipboard stack,
              and then pastes the content of that clipboard into the buffer at
              the cursor location.  Clipboards on the clipboard stack are num-
              bered from 1, with clipboard 1 being the clipboard on the bottom
              of the clipboard stack, which is to say, the first clipboard
              pushed onto the stack.  The number of the clipboard on the top
              of the clipboard stack (the last clipboard pushed onto the clip-
              board stack) may be ascertained by invoking this command and
              giving it a clipboard number of zero.

     C-x M-q  Executes M-g, followed by C-y, to pop the clipboard stack and
              paste the new content into the buffer at the cursor location.

     C-x Q    copies the contents of the clipboard on top of the clipboard
              stack into the current clipboard, overwriting its previous con-
              tent, without popping the clipboard stack, and then pastes the
              new content into the buffer at the cursor location.

   Undoing Modifications To Buffer Content
     Insertions and deletions may be undone with the undo command.  If the
     last buffer-modifying command invoked was the undo command, then the redo
     command is available to allow the undone changes themselves to be undone.
     One can think of the undo operation as moving the buffer back in time,
     and the redo operation moving the buffer forward in time.

     C-u    undoes the last modification to the buffer.  Changes to the buffer
            occur in a line-oriented manner internally in the editor, and so
            these changes are undone line-by-line as well.  This means that if
            you deleted many lines in the buffer with one invocation of C-x y,
            for example, the lines would be undeleted one at a time, by suc-
            cessive invocations of this command, and not all at once.  The
            undo behaviour of the editor may baffle you at first, but you are
            merely seeing the changes that go on "behind the scenes," and if
            you keep invoking C-u, you will get back to the buffer state you
            desire.  This command accepts a repeat count.

     C-x _  undoes the last undo operation.  This command is only available if
            the last modification to the buffer was performed by an undo oper-
            ation.  Once fresh changes to the buffer have been made after the
            undo command has been invoked, the redo information is discarded.
            This command accepts a repeat count.

            One can think of the discarding of the redo information in this
            manner.  Let's say, after having moved the buffer backward in time
            by invoking the undo command, and then perhaps having moved for-
            ward in time again by invoking the redo command, the user then
            chose to move forward into a different future from that point by
            manually modifying the buffer content.  At that moment the old
            future is discarded and no longer exists.

   Searching For Matches On Regular Expressions
     All searches wraparound to search the portion of the buffer on the oppo-
     site side of the cursor, if they do not find a match in the specified
     direction.  A search will fail if there is no match anywhere in the
     buffer.

     C-s  searches forward in the buffer for a match upon a specified regular
          expression.  The user is prompted for the pattern to use.

     C-r  searches backward in the buffer for a match upon a specified regular
          expression.  The user is prompted for the pattern to use.

     M-s  repeats the last regular expression search, searching forward in the
          buffer.

     M-r  repeats the last regular expression search, searching backward in
          the buffer.

   Transforming Lines With Regular-Expression-Based Substitutions
     Each of the commands below performs a regular-expression-based substitu-
     tion over a range of lines in the buffer.  For each command the user is
     prompted for the pattern, the replacement text, and a repeat count to
     use.  A repeat count of 0 means to replace every occurrence in the
     affected region.  The replacement text can refer to the first ten paren-
     thesized subexpressions in the pattern by using the escape sequences \1
     to \0, with \0 referring to the tenth subexpression.  The text of the
     entire match can be accessed with \&.  As well, \U turns on conversion to
     uppercase and will effect all text from that point forward in the
     affected line, including that portion of the line outside the replacement
     text.  Similarly \L will turn on conversion to lowercase.  Either can be
     turned off with \e.  The two sequences \u and \l convert the single char-
     acter succeeding them to upper or lower case, respectively.  These com-
     mands are front-ends to the Munger(1) "substitute" intrinsic.  More
     information on performing substitutions can be found in the Munger(1)
     manual page.

     Terminating newlines are removed from lines when performing substitutions
     so that "$" will match the empty string before the newline, and "^$" will
     match empty lines.  The terminators are replaced when the modified lines
     are written back to the buffer.

     C-x t    performs a substitution on the portion of the line after the
              cursor.

     C-x T    performs a substitution on the portion of the line before the
              cursor.

     C-x )    performs a substitution on the region from the cursor position
              to the next blank line, or line with a full-stop in column zero.

     C-x (    performs a substitution on the region from the blank line, or
              line with a full-stop in column zero, closest to the cursor
              position, occurring before the cursor position, to the cursor
              position.

     C-x S    performs a substitution on the region from the cursor position
              to the occurrence of the next match of a specified regular
              expression in the buffer.  The user is prompted for the pattern.

     C-x R    performs a substitution on the region from the match on a speci-
              fied regular expression closest to the cursor position, occur-
              ring before the cursor position, to the cursor position.  The
              user is prompted for the pattern.

     C-x C-r  performs a substitution on the region.

     C-x J    performs a substitution on the region formed between a named
              bookmark and the cursor location.  The exact region affected
              depends upon whether the bookmark occurs before or after the
              cursor in the buffers as detailed in the section of this docu-
              ment describing the region.

     C-x .    performs a substitution on the region from the cursor position
              to the end of the buffer.

     C-x ,    performs a substitution on the region from the start of the
              buffer to the cursor position.

   Modifying The Indentation Of Lines
     The following commands alter the indentation of lines in the buffer.  The
     functions which decrease indentation, do so by one tab character or the
     equivalent number of space characters, as determined by the tabstop vari-
     able.  Indentation is assumed to be in increments of this variable, so
     for example, if it were set to three, then one tab or three space charac-
     ters would be removed from the start of the affected lines.

     M-z      decreases the indentation of contiguous lines from the line the
              cursor is on, forward in the buffer.  Supplying a repeat count
              to this command determines the number of lines this command
              affects.  The default is to only affect the line the cursor is
              on.

     M-x      behaves similarly to the above described command but increases
              the indentation of the affect lines, instead of decreasing it.

     C-x z    decreases the indentation of the range of lines from the line
              the cursor is on to the next blank line.  Supplying a repeat
              count to this command will cause it to affect lines to the nth
              next blank line.

     C-x x    increases the indentation of the range of lines from the line
              the cursor is on to the next next blank line.  Supplying a
              repeat count to this command will cause it to affect lines to
              the nth next blank line.

     C-x C-z  decreases the indentation of the range of lines from the blank
              line closest to the cursor position, occurring before the cursor
              position, to the line the cursor is on.  Supplying a repeat
              count to this command will cause it to affect lines from the nth
              previous blank line to the cursor position.

     C-x C-x  increases the indentation of the range of lines from the blank
              line closest to the cursor position, occurring before the cursor
              position, to the line the cursor is on.  Supplying a repeat
              count to this command will cause it to affect lines from the nth
              previous blank line to the cursor position.

     C-x 5    attempts to invoke M-%, to jump to the other end of a region
              delimited by parentheses, brackets, or braces, and if success-
              ful, decreases the indentation of that range of lines, inclu-
              sive.  This command ignores repeat counts.

     C-x 6    attempts to invoke M-%, to jump to the other end of a region
              delimited by parentheses, brackets, or braces, and if success-
              ful, increases the indentation of that range of lines, inclu-
              sive.  This command ignores repeat counts.

     C-x 7    decreases the indentation of the lines in the region.  This com-
              mand ignores repeat counts.

     C-x 8    increases the indentation of the lines in the region.  This com-
              mand ignores repeat counts.

     C-x `    increases the indentation of the range of lines from the cursor
              position to the line containing the next occurrence of a match
              on a specified regular expression, inclusive.  The user is
              prompted for the pattern to use.  Supplying a repeat count to
              this command will cause it to affect lines to the nth next
              occurence of the specified regular expression.

     C-x \    decreases the indentation of the range of lines from the cursor
              position to the line containing the next occurrence of a match
              on a specified regular expression.  The user is prompted for the
              pattern to use.  Supplying a repeat count to this command will
              cause it to affect lines to the nth next occurence of the speci-
              fied regular expression.

     C-x |    decreases the indentation of the range of lines from the occur-
              rence of a match on a specified regular expression closest to
              the cursor position, before the cursor position, to the cursor
              position.  The user is prompted for the pattern to use.  Supply-
              ing a repeat count to this command will cause it to affect lines
              from the nth previous occurence of the specified regular expres-
              sion.

     C-x ~    increases the indentation of the range of lines from the occur-
              rence of a match on a specified regular expression, closest to
              the cursor position, before the cursor position, to the cursor
              position.  The user is prompted for the pattern to use.  Supply-
              ing a repeat count to this command will cause it to affect lines
              from the nth previous occurence of the specified regular expres-
              sion.

   Altering The Capitalization Of Words
     M-;  capitalizes the character under the cursor, and converts any con-
          tiguous non-whitespace succeeding characters to lowercase.

     M-"  converts the contiguous non-whitespace characters from the cursor
          position forward to lowercase.

     M-:  converts the contiguous non-whitespace characters from the cursor
          position forward to uppercase.

   Reforming Paragraphs Of Text
     The following commands filter a range of buffer lines through the
     fmt.munger script, which is part of the Munger(1) distribution.  Any tabs
     in the formatted region will be expanded, according to the value of the
     tabstop variable and their position in the line.  The maximum length of
     formatted lines is determined by the value of the line_length variable.

     M-q      formats the lines from the line the cursor is on to the next
              blank line, or line with a full-stop in column zero.  Supplying
              a repeat count to this command will cause it to affect lines to
              the nth next delimiter line.

     M-w      formats the lines from the blank line, or line with a full-stop
              in column zero, closest to the cursor, before the cursor posi-
              tion, to the line the cursor is on.  Supplying a repeat count to
              this command will cause it to affect lines from the nth previous
              delimiter line.

     C-q      formats the lines from the line the cursor is on to the next
              blank line, or line with a full-stop in column zero, propagating
              any non-alphabetic prefix characters, possibly delimited by
              whitespace on either or both sides, found at the start of the
              first line of the region, to the start of each line of the for-
              matted region.  This command can be used to format some types of
              program comments and citations in email messages.  Supplying a
              repeat count to this command will cause it to affect lines to
              the nth next delimiter line.

     C-w      formats the lines from the blank line, or line with a full-stop
              in column zero, closest to the cursor, before the cursor posi-
              tion, to the line the cursor is on, propagating any non-alpha-
              betic prefix characters, possibly delimited by whitespace on
              either or both sides, found at the start of the first line of
              the region, to the start of each line of the formatted region.
              This command can be used to format some types of program com-
              ments and citations in email messages.  Supplying a repeat count
              to this command will cause it to affect lines from the nth pre-
              vious delimiter line.

   Working With Tags
     The following command can be used to find the location of a toplevel def-
     inition in program code, using tags tables.  See ctags(1) for more infor-
     mation on tags.

     C-x C-g  prompts the user for a symbol name on the status line, and
              attempts to lookup that symbol in the tags file in the current
              directory.  If the cursor appears to be on a symbol in the
              buffer, that symbol will appear on the status line as a default
              value.  Tag completion is available at the prompt and is trig-
              gered by pressing the tab key.  If a tag is found, the editor
              will load the appropriate file and jump to the location of the
              toplevel definition for that symbol as specified in the tags ta-
              ble.  The current filename and cursor position will be pushed
              onto the file stack, first, and may be returned to with the C-x
              3 command.

   Evaluating Munger Code
     C-x L    sends the s-expression immediately before the cursor position to
              an inferior Munger process for evaluation.  The editor will
              attempt to read and page the inferior Munger's output.  If the
              editor does not receives output from the inferior Munger immedi-
              ately, it will complain.  Any subsequently arriving data from
              the inferior Munger may be paged by invoking C-x ?.

     C-x ?    displays any output pending from the inferior Munger process.

     C-x C-l  terminates the inferior Munger process.

   Miscellaneous Commands
     C-x s  Causes the editor to remove trailing contigous whitespace charac-
            ters from the ends of buffer lines.  Lines consisting of only
            whitespace will become blank lines.

     M-%    instructs the editor to move the cursor to the location of the
            delimiter which matches ("closes") the delimiter character under
            the cursor.  If the cursor is not on a "(", ")", "[", "]", "{", or
            "}" character, an error message will be displayed in the status
            line.

     C-o    inserts a blank line into the buffer before the line the cursor is
            on.

     C-x g  displays the filename associated with the buffer, the cursor posi-
            tion, and whether or not the buffer contains unsaved changes, on
            the status line.

     C-x V  displays the version of the editor and the version of Munger on
            which is it running, as well as the author's copyright notice.

     C-x C-v
            counts the number of words in the buffer, using the same algorithm
            as wc(1), and displays the count on the status line.

     M-i    allows the user to insert any character their keyboard can gener-
            ate, excepting the carriage return character (ascii 13), into the
            buffer.  When invoked, the command prompts the user to type a
            character and that character is inserted into the buffer.  In this
            manner characters which have commands bound to them, may be
            inserted into the buffer.

AUTHOR
     James Bailie <jimmy@mammothcheese.ca>
     http://www.mammothcheese.ca

                               October 13, 2014