Google
 

Trailing-Edge - PDP-10 Archives - mit_emacs_170_teco_1220 - info/emacs.guide
There are no other files named emacs.guide in the archive.






                   MASSACHUSETTS INSTITUTE OF TECHNOLOGY
                    ARTIFICIAL INTELLIGENCE LABORATORY






     AI Memo 555                                        2 October 1981







                       EMACS MANUAL FOR TWENEX USERS


                                    BY


                            RICHARD M. STALLMAN


                            A REFERENCE MANUAL


            FOR THE EXTENSIBLE, CUSTOMIZABLE, SELF-DOCUMENTING


                         REAL-TIME DISPLAY EDITOR


               This manual corresponds to EMACS version 161









     This  report  describes  work done at the Artificial Intelligence
     Laboratory of the Massachusetts Institute of Technology.  Support
     for the laboratory's research is provided in part by the Advanced
     Research Projects Agency  of  the  Department  of  Defense  under
     Office of Naval Research contract N00014-80-C-0505.
     1                                   EMACS Manual for TWENEX Users



                                  PREFACE



       This  manual  documents the use and simple customization of the
     display  editor  EMACS  with  the  Twenex  (officially  known  as
     "TOPS-20")  operating system.  The reader is not expected to be a
     programmer.    Even  simple   customizations   do   not   require
     programming  skill,  but  the  user  who  is  not  interested  in
     customizing can ignore the scattered customization hints.

       This is primarily a reference manual, but can also be used as a
     primer.  However, I recommend that the  newcomer  first  use  the
     on-line, learn-by-doing tutorial TEACH-EMACS.  With it, you learn
     EMACS by using EMACS on a specially designed file which describes
     commands,  tells  you  when  to  try  them, and then explains the
     results you see.  This gives a more  vivid  introduction  than  a
     printed manual.

       On  first  reading,  you  need not make any attempt to memorize
     chapters 1 and 2, which describe the  notational  conventions  of
     the  manual  and  the  general  appearance  of  the EMACS display
     screen.  It is enough to be aware of what questions are  answered
     in  these  chapters,  so you can refer back when you later become
     interested in the answers.    After  reading  the  Basic  Editing
     chapter  you  should  practice  the commands there.  The next few
     chapters describe fundamental techniques and  concepts  that  are
     referred  to  again  and  again.    It is best to understand them
     thoroughly, experimenting with them if necessary.

       To find the documentation on a particular command, look in  the
     index  if  you know what the command is.  Both command characters
     and function names are indexed.  If you  know  vaguely  what  the
     command  does,  look in the command summary.  The command summary
     contains a line or two about each command, and a cross  reference
     to  the  section of the manual that describes the command in more
     detail; related commands are grouped together.  There is  also  a
     glossary, with a cross reference for each term.

       Many user-contributed libraries accompany EMACS, and often then
     have  no  documentation  except their on-line self-documentation.
     Browsing through the catalogue of libraries in this manual  is  a
     good way to find out what is available.

       This   manual   has   in  two  versions,  one  for  ITS,  MIT's
     Incompatible Timesharing  System,  and  one  for  Twenex.    Each
     version  comes  in three forms: the published form, the LPT form,
     and the INFO form.  You can order the  published  form  from  the
     Publications  Department  of  the Artificial Intelligence lab for
     2                                   EMACS Manual for TWENEX Users



     $3.25  per copy; be sure to specify the ITS version or the Twenex
     version.      The   LPT   form   is   available   on   line    as
     EMACS:EMACS.GUIDE  for  printing  on  unsophisticated  hard  copy
     devices such as terminals and line printers.  The  INFO  form  is
     for  on-line  perusal with the INFO program.  All three forms are
     substantially the same.

       EMACS is available for distribution for use on Tenex and Twenex
     systems (It does not run on Bottoms-10, and the conversion  would
     not  be  easy).  Mail us a 2400 foot mag tape if you want it.  It
     does  not  cost  anything;  instead,  you  must  join  the  EMACS
     software-sharing  commune.  The conditions of membership are that
     you must send back any improvements you make to EMACS,  including
     any  libraries  you write, and that you must not redistribute the
     system except exactly as you got it, complete.    (You  can  also
     distribute your customizations, separately.)

       Please  do  not attempt to get a copy of EMACS, for yourself or
     any one else, by dumping it off of your  local  system.    It  is
     almost  certain to be incomplete or inconsistent.  It is pathetic
     to hear from sites that received incomplete  copies  lacking  the
     sources, asking me years later whether sources are available.  If
     you  wish  to give away a copy of EMACS, copy a distribution tape
     from MIT, or mail me a tape and get a new one.

       For information on the underlying philosophy of EMACS  and  the
     lessons  learned  from its development, write to me for a copy of
     AI   memo   519a,   "EMACS,    the    Extensible,    Customizable
     Self-Documenting   Display  Editor",  or  send  Arpanet  mail  to
     RMS@MIT-AI.


                                      Yours in hacking,



                                           /  2 \ 1/2
                                          <  X   >
                                           \    /


                                          Richard M. Stallman
                                          Artificial Intelligence Lab
                                          545 Tech Square, Rm 913
                                          Cambridge, MA 02139
                                          (617) 253-6765
     3                                   EMACS Manual for TWENEX Users



                               INTRODUCTION



       You   are   about   to   read   about   EMACS,   an   advanced,
     self-documenting,  customizable,  extensible  real-time   display
     editor.

       We say that EMACS is a display editor because normally the text
     being   edited   is   visible   on  the  screen  and  is  updated
     automatically  as  you  type  your  commands.    See  section   1
     [Display], page 5.

       We  call  it  a real-time editor because the display is updated
     very  frequently,  usually  after  each  character  or  pair   of
     characters  you  type.   This minimizes the amount of information
     you must keep in your head as you edit.  See section  3  [Basic],
     page 14.

       We  call  EMACS advanced because it provides facilities that go
     beyond simple insertion and deletion: filling of text;  automatic
     indentation  of  programs; viewing two files at once; and dealing
     in terms of characters, words, lines, sentences, paragraphs,  and
     pages,  as  well as expressions and comments in several different
     programming languages.  It is much easier  to  type  one  command
     meaning "go to the end of the paragraph" than to find the desired
     spot with repetition of simpler commands.

       Self-documenting  means that at any time you can type a special
     character, the "Help" key, to find out  what  your  options  are.
     You can also use it to find out what any command does, or to find
     all  the commands that pertain to a topic.  See section 7 [Help],
     page 36.

       Customizable means that you can change the definitions of EMACS
     commands in little ways.  For example, if you use  a  programming
     language  in  which comments start with <** and end with **>, you
     can tell the EMACS comment manipulation  commands  to  use  those
     strings.    Another sort of customization is rearrangement of the
     command set.  For example, if you prefer the  four  basic  cursor
     motion  commands  (up, down, left and right) on keys in a diamond
     pattern on the keyboard, you can  have  it.    See  section  21.8
     [Customization], page 133.

       Extensible  means  that  you can go beyond simple customization
     and write entirely new commands, programs in the  language  TECO.
     EMACS  is  an "on-line extensible" system, which means that it is
     divided into many functions that call each other,  any  of  which
     can  be  redefined in the middle of an editing session.  Any part
     4                                   EMACS Manual for TWENEX Users



     of EMACS can be replaced without making a separate copy of all of
     EMACS.    Many  already  written  extensions are distributed with
     EMACS, and some (including DIRED, PAGE, PICTURE, SORT, TAGS,  and
     WORDAB)   are  documented  in  this  manual.    Although  only  a
     programmer can write an extension, anybody can use it afterward.

       Extension  requires  programming  in  TECO,  a  rather  obscure
     language.    If  you are clever and bold, you might wish to learn
     how.  See the file INFO:CONV.INFO, for advice on  learning  TECO.
     This  manual  does  not  even  try  to  explain how to write TECO
     programs,  but  it  does  contain  some  notes  that  are  useful
     primarily to the extension writer.
     5                                   EMACS Manual for TWENEX Users



                                CHAPTER ONE
                      THE ORGANIZATION OF THE SCREEN



       EMACS  divides  the  screen  into  several areas, each of which
     contains its own sorts of information.    The  biggest  area,  of
     course,  is  the  one  in  which you usually see the text you are
     editing.  The terminal's cursor usually appears in the middle  of
     the  text,  showing  the position of point, the location at which
     editing takes place.  While the cursor  appears  to  point  at  a
     character,  point should be thought of as between two characters;
     it points before the character that the cursor appears on top of.
     Terminals have only one cursor, and when output is in progress it
     must appear where the typing is being done.  This does  not  mean
     that  point  is moving.  It is only that EMACS has no way to show
     you the location of point except when the terminal is idle.

       The top lines of the screen are usually available for text  but
     are  sometimes  pre-empted  by  an error message, which says that
     some command you gave was  illegal  or  used  improperly,  or  by
     typeout  from a command (such as, a listing of a file directory).
     Error messages are typically one line, end with a question  mark,
     and  are  accompanied by ringing the bell.  Typeout generally has
     none of those characteristics.

       The  error  message  or  typeout   appears   there   for   your
     information,  but it is not part of the file you are editing, and
     it goes away if you type any command.  If you want to make it  go
     away  immediately but not do anything else, you can type a Space.
     (Usually a Space inserts itself,  but  when  there  is  an  error
     message  or  typeout on the screen it does nothing but get rid of
     that.)  The terminal's cursor always appears at the  end  of  the
     error  message  or typeout, but this does not mean that point has
     moved.  The cursor moves back to the location of point after  the
     error message or typeout goes away.

       If  you  type  a  question mark when an error message is on the
     screen, you enter the EMACS error handler.   You  probably  don't
     want  to  do this unless you know how to write TECO programs.  If
     you do it by accident, C-] (the standard  abort  character)  will
     get you out.  Enough said.

       A  few lines at the bottom of the screen compose what is called
     the echo area.  The variable Echo Area Height controls  how  many
     lines  long  it is.  Echoing means printing out the commands that
     you type.  EMACS commands are usually not echoed at all,  but  if
     you   pause   for   more  than  a  second  in  the  middle  of  a
     multi-character command then all the characters typed so far  are
     6                                   EMACS Manual for TWENEX Users



     echoed.    This  is  intended  to  prompt you for the rest of the
     command.  The rest of the command is echoed, too, as you type it.
     This  behavior  is  designed  to  give  confident  users  optimum
     response, while giving hesitant users maximum feedback.

       EMACS  also  uses  the echo area for reading and displaying the
     arguments for some commands, such as searches, and  for  printing
     brief information in response to certain commands.



     1.1 The Mode Line


       The  line above the echo area is known as the mode line.  It is
     the line that usually  starts  with  "EMACS  (something)".    Its
     purpose  is  to  tell you anything that may affect the meaning of
     your commands aside from the text itself.

       Some EMACS commands read and process more commands.   They  are
     known  as  subsystems  or  recursive  editing levels.  If you are
     inside a subsystem or a recursive editing level,  the  mode  line
     tells  you  its  name.    Square  brackets  around  the mode line
     indicate a recursive editing level; See  section  6.2  [Recursive
     Editing Levels], page 28.  Parentheses indicate a minibuffer; See
     section   23  [Minibuffer],  page  157.    Neither  brackets  nor
     parentheses indicates a subsystem; See section 6.1  [Subsystems],
     page 27.

       Subsystems  and recursive editing levels are advanced features,
     and you will not initially be using  them.    When  you  are  not
     inside  a  subsystem  or recursive editing level, we say that you
     are at top level; this implies that the characters you  type  are
     interpreted  as  ordinary  EMACS  commands.   When you are at top
     level, the mode line tells you what file you are  editing,  where
     you  are  in  it,  and  what  editing modes are enabled which may
     affect the meaning of your commands.  The top level mode line has
     this format:


         EMACS  (major minor)  bfr:  file (vrs) --pos-- *


       major is always the name of the major mode you are in.  At  any
     time,  EMACS  is in one and only one of its possible major modes.
     The major modes available include Fundamental mode  (which  EMACS
     starts  out  in),  Text mode, Lisp mode, PASCAL mode, and others.
     See section 20.1 [Major Modes], page 102, for details of how  the
     modes  differ  and  how to select one.  Sometimes the name of the
     7                                   EMACS Manual for TWENEX Users



     major  mode  is  followed  immediately  with  another name inside
     square-brackets ("[ - ]").  This name is called the submode.  The
     submode indicates that you are "inside" of a command that  causes
     your  editing  commands  to  be changed temporarily, but does not
     change what text you are  editing.    A  submode  is  a  kind  of
     recursive editing level.  See section 6.2 [Submodes], page 28.

       minor  is  a list of some of the minor modes that are turned on
     at the moment.  "Fill" means that Auto Fill mode is on.    "Save"
     means that Auto-saving is on.  "Save(off)" means that Auto-saving
     is  on  by  default  but turned off at the moment in this buffer.
     "Atom" means that Atom Word mode is on.  "Abbrev" means that Word
     Abbrev mode is on.  "Ovwrt" means that Overwrite mode is on.  See
     section 22.1 [Minor  Modes],  page  134,  for  more  information.
     "Def" means that a keyboard macro is being defined; although this
     is  not  exactly  a minor mode, it is still useful to be reminded
     about.  See section 22.8 [Keyboard Macros], page 153.    "Narrow"
     means  that editing is currently restricted to only a part of the
     buffer.  See section 17 [Narrowing], page 93.

       bfr is the name of the currently selected buffer.  Each  buffer
     has its own name and holds a file being edited; this is how EMACS
     can  hold several files at once.  But at any time you are editing
     only one of them, the selected buffer.  When  we  speak  of  what
     some  command  does  to  "the  buffer",  we are talking about the
     currently selected buffer.  Multiple  buffers  make  it  easy  to
     switch  around  between several files, and then it is very useful
     that the mode line tells you which one you  are  editing  at  any
     time.  However, before you learn how to use multiple buffers, you
     will always be in the buffer called "Main", which is the only one
     that  exists  when EMACS starts up.  If the name of the buffer is
     the same as the first name of the file you are visiting, then the
     buffer name is left out  of  the  mode  line.    See  section  14
     [Buffers],  page  83,  for how to use more than one buffer in one
     EMACS.

       file is the name of the file that you are editing.  It  is  the
     last  file  that  was  visited  in  the buffer you are in.  It is
     followed,  in  parentheses,  by  the  file  version  number  most
     recently  visited  or  saved  .  "(R-O)" after the filename means
     that the file or buffer is read-only; a  file  visited  read-only
     will  not  be  saved  unless you insist, while a read-only buffer
     does  not  allow  you  to  alter  its  contents  at  all.     See
     section 13.1 [Visiting], page 71, for more information.

       The  star  at  the  end  of  the mode line means that there are
     changes in the buffer that have not been saved in the file.    If
     the  file  has  not  been  changed since it was read in or saved,
     there is no star.
     8                                   EMACS Manual for TWENEX Users



       pos tells you whether there is additional text above the top of
     the screen, or below the bottom.  If your file is small and it is
     all  on  the  screen,  --pos--  is  omitted.    Otherwise,  it is
     --TOP-- if  you  are  looking  at  the  beginning  of  the  file,
     --BOT--   if  you  are  looking  at  the  end  of  the  file,  or
     --nn%-- where nn is the percentage of the file above the  top  of
     the screen.

       Sometimes  you  will  see  --MORE--  instead  of --nn%--.  This
     happens when typeout from a command is too long  to  fit  on  the
     screen.   It means that if you type a Space the next screenful of
     information will be printed.  If you are not  interested,  typing
     anything  but  a  Space  will  cause the rest of the output to be
     discarded.  Typing a  Rubout  will  discard  the  output  and  do
     nothing  else.  Typing any other command will discard the rest of
     the output  and  also  do  the  command.    When  the  output  is
     discarded, "FLUSHED" is printed after the --MORE--.

       If  you  are  accustomed  to  other display editors, you may be
     surprised that EMACS does not always display the page number  and
     line  number of point in the mode line.  This is because the text
     is stored in a way  that  makes  it  difficult  to  compute  this
     information.    Displaying them all the time would be too slow to
     be borne.  When you want to know the  page  and  line  number  of
     point,  you  must  ask for the information with the M-X What Page
     command.  See section 18 [Pages], page 94.  However, once you are
     adjusted to  EMACS,  you  will  rarely  have  any  reason  to  be
     concerned with page numbers or line numbers.

       If you set the variable Display Mode Line Inverse nonzero, then
     the  mode  line is displayed in inverse video if the terminal you
     are using supports it.  See section 22.3 [Variables], page 138.

       The libraries MODLIN and  MODE2  allow  you  to  customize  the
     information  that is displayed in the mode line.  MODLIN replaces
     the standard EMACS mode line generation routines.  MODE2 makes  a
     second  mode line, above the first, whose contents are under your
     control.  Refer to the self-documentation of these libraries; See
     section 22.2 [Libraries], page 136.
     9                                   EMACS Manual for TWENEX Users



                                CHAPTER TWO
               CHARACTER SETS AND COMMAND INPUT CONVENTIONS



       In  this chapter we introduce the terminology and concepts used
     to talk about EMACS commands.  EMACS is designed to be used  with
     a kind of keyboard with two special shift keys which can type 512
     different  characters,  instead  of  the 128 different characters
     which ordinary ASCII keyboards can  send.    The  terminology  of
     EMACS  commands  is  formulated in terms of these shift keys.  So
     that  EMACS  can  be  used  on  ASCII   terminals,   we   provide
     two-character  ASCII  circumlocutions  for the command characters
     which are not ASCII.



     2.1 The 9-bit Command Character Set


       EMACS is designed ideally  to  be  used  with  terminals  whose
     keyboards  have  a  pair  of  shift  keys,  labeled "Control" and
     "Meta", either  or  both  of  which  can  be  combined  with  any
     character  that  you  can type.  These shift keys produce Control
     characters and Meta characters, which are the editing commands of
     EMACS.  We name each of these characters by prefixing  "Control-"
     (or  "C-"),  "Meta-"  (or  "M-")  or both to the basic character:
     thus, Meta-F or M-F is the character which is F  typed  with  the
     Meta  key  held down.  C-M-; is the Semicolon character with both
     the Control  and  Meta  keys.    Control  in  the  EMACS  command
     character  set  is not precisely the same as Control in the ASCII
     character set, but the general purpose is the same.

       There are  128  basic  characters.    Multiplied  by  the  four
     possibilities  of  the  Control  and  Meta  keys,  this makes 512
     characters in the EMACS command character set.  So it  is  called
     the  512-character  set,  to distinguish it from ASCII, which has
     only 128 characters.  It is also called the 9-bit  character  set
     because  9  bits  are required to express a number from 0 to 511.
     Note that  the  512-character  set  is  used  only  for  keyboard
     commands.   Characters in files being edited with EMACS are ASCII
     characters.

       Sadly, most terminals do not have ideal EMACS  keyboards.    In
     fact,  the  only  ideal  keyboards  are  at  MIT.    On  nonideal
     keyboards, the Control key is somewhat limited (it  can  only  be
     combined  with  some  characters, not with all), and the Meta key
     may not exist at all.  We make it possible  to  use  EMACS  on  a
     nonideal  terminal  by  providing  two-character circumlocutions,
     10                                  EMACS Manual for TWENEX Users



     made up of ASCII characters that you can type, for the characters
     that  you  can't  type.    These circumlocutions start with a bit
     prefix character; see below.  For  example,  to  use  the  Meta-A
     command,  you  could type Altmode A.  Also see the appendices for
     more detailed information on what to do on your type of terminal.

       Both the EMACS 9-bit  character  set  and  ASCII  have  Control
     characters,  but the 9-bit character set has more different ones.
     In ASCII, only letters and a few punctuation marks  can  be  made
     into  Control  characters;  in  the  9-bit  character  set  every
     character  has  a  Control  version.    For  example,   we   have
     Control-Space,  Control-1,  and  Control-=.    We  also  have two
     different characters Control-A and Control-a!  But they always do
     the same thing in  EMACS,  so  you  can  ignore  the  distinction
     between  them,  unless you are doing customization.  In practice,
     you can forget all about the distinction  between  ASCII  Control
     and  EMACS  Control,  except  to  realize  that  EMACS  uses some
     "Control" characters which ASCII keyboards cannot type.

       In addition to the 9-bit command character set,  there  is  one
     additional  EMACS  command  character  called Help.  It cannot be
     combined  with  Control  or  Meta.    Its  use  is  to  ask   for
     documentation,  at  any time.  The Help character has its own key
     on an ideal keyboard, but must be represented by  something  else
     on other keyboards.  The usual choice is Control-Underscore, code
     337   (octal).      This   implies  that  the  command  character
     Control-Underscore cannot be used because  it  is  translated  to
     Help instead.  The code used internally for Help is 4110 (octal).

       We  have  given  some command characters special names which we
     always capitalize.  "Return" or "<cr>" stands  for  the  carriage
     return  character,  code  015 (all character codes are in octal).
     Note that  C-R  means  the  character  Control-R,  never  Return.
     "Rubout" is the character with code 177, labeled "Delete" on some
     keyboards.    "Altmode" is the character with code 033, sometimes
     labeled "Escape".  Other command characters  with  special  names
     are  Tab  (code  011), Backspace (code 010), Linefeed (code 012),
     Space (code 040), Excl ("!", code 041),  Comma  (code  054),  and
     Period  (code  056).   Control is represented in the numeric code
     for a character by 200, and Meta by  400;  thus,  Meta-Period  is
     code 456 in the 9-bit character set.



     2.2 Prefix Characters


       A  non-ideal keyboard can only send certain Control characters,
     and may completely lack the ability to send Meta characters.   To
     11                                  EMACS Manual for TWENEX Users



     use   these   commands   on  such  keyboards,  you  need  to  use
     two-character  circumlocutions  starting  with   a   bit   prefix
     character  which  turns  on the Control or Meta bit in the second
     character.  The Altmode character  turns  on  the  Meta  bit,  so
     Altmode X can be used to type a Meta-X, and Altmode Control-O can
     be used to type a C-M-O.  Altmode is known as the Metizer.  Other
     bit  prefix  characters  are C-^ for Control, and C-Z for Control
     and Meta together.  Thus, C-^ < is a way of typing  a  Control-<,
     and  C-Z  < can be used to type C-M-<.  Because C-^ is awkward to
     type on most keyboards, we have tried to minimize the  number  of
     commands for which you will need it.

       The  bit  prefix  characters  are simply commands which run the
     functions ^R Prefix  Control,  ^R  Prefix  Meta,  and  ^R  Prefix
     Control-Meta.

       There  is  another prefix character, Control-X which is used as
     the beginning of a large set of two-character commands  known  as
     C-X  commands.  C-X is not a bit prefix character; C-X A is not a
     circumlocution for any single character, and it must be typed  as
     two  characters  on  any  terminal.    You  can create new prefix
     characters when you customize.  See the file INFO:CONV.INFO, node
     Prefix.



     2.3 Commands, Functions, and Variables


       Most of the EMACS commands documented  herein  are  members  of
     this  9-bit  character  set.  Others are pairs of characters from
     that set.   However,  EMACS  doesn't  really  implement  commands
     directly.    Instead,  EMACS is composed of functions, which have
     long names such as "^R Down Real Line" and definitions which  are
     programs that perform the editing operations.  Then commands such
     as  C-N  are  connected to functions through the command dispatch
     table.  When we say that C-N moves the cursor down a line, we are
     glossing over a distinction which  is  unimportant  for  ordinary
     use,  but essential for customization: it is the function ^R Down
     Real Line which knows how to move down a line, and C-N moves down
     a line because it is connected to  that  function.    We  usually
     ignore  this  subtlety  to  keep  things  simple.    To  give the
     extension-writer the information he needs, we state the  name  of
     the  function  which  really  does  the work in parentheses after
     mentioning the command name.  For example:  "C-N  (^R  Down  Real
     Line)  moves  the  cursor down a line".  In the EMACS wall chart,
     the function names are used as a form of very brief documentation
     for  the  command  characters.    See  section  5.2  [Functions],
     page 23.
     12                                  EMACS Manual for TWENEX Users



       The  "^R  "  which appears at the front of the function name is
     simply part of the name.   By  convention,  a  certain  class  of
     functions have names which start with "^R ".

       While  we are on the subject of customization information which
     you should not be frightened of, it's a good  time  to  tell  you
     about variables.  Often the description of a command will say "to
     change  this, set the variable Mumble Foo".  A variable is a name
     used to remember a value.  EMACS contains  many  variables  which
     are  there  so that you can change them if you want to customize.
     The variable's value is examined by some  command,  and  changing
     the  value  makes  the command behave differently.  Until you are
     interested in customizing, you can ignore this information.  When
     you are ready to be interested, read  the  basic  information  on
     variables,  and then the information on individual variables will
     make sense.  See section 22.3 [Variables], page 138.



     2.4 Notational Conventions for ASCII Characters


       Control  characters  in  files,  your  EMACS  buffer,  or  TECO
     programs,  are  ordinary  ASCII  characters.    The special 9-bit
     character set applies only  to  typing  EMACS  commands.    ASCII
     contains  the  printing  characters,  rubout,  and  some  control
     characters.  Most ASCII control  characters  are  represented  in
     this  manual  as  uparrow  or caret followed by the corresponding
     non-control character: control-E is represented as ^E.

       Some ASCII characters have special names.   These  include  tab
     (011),  backspace  (010),  linefeed  (012), return (015), altmode
     (033), space (040), and rubout (177).  To make it  clear  whether
     we  are talking about a 9-bit character or an ASCII character, we
     capitalize names of 9-bit characters and  leave  names  of  ASCII
     characters in lower case.  Note that the 9-bit characters Tab and
     Control-I  are  different,  but  the  ASCII  characters  tab  and
     control-I are the same.

       Lines in files are separated by a sequence of two ASCII control
     characters, carriage return followed by linefeed.  This  sequence
     is  called  CRLF.    Normally,  EMACS  treats  this two-character
     sequence as if it were a single character, a line separator.    A
     return or a linefeed which is not part of a CRLF is called stray.
     EMACS  usually  treats  them  as  part  of the text of a line and
     displays them as ^M and ^J.  If the variable Display Overprinting
     is zero, they display as actual carriage return or linefeed.

       Most control characters when present in the  EMACS  buffer  are
     13                                  EMACS Manual for TWENEX Users



     displayed  with  a  caret;  thus,  ^A  for  ASCII  ^A.  Rubout is
     displayed as ^?, because by stretching the meaning  of  "control"
     it can be interpreted as ASCII control-?.  A backspace is usually
     displayed  as  ^H  since  it  is  ASCII  control-H,  because most
     displays cannot do overprinting.  If you want backspace and stray
     return to display  as  overprinting,  set  the  variable  Display
     Overprinting nonzero.

       Altmode  is  the  ASCII code 033, sometimes labeled "Escape" or
     "Alt".  Altmode is often represented by itself in  this  document
     (remember,  it  is an ASCII character and can therefore appear in
     files).  It looks like this: $.  On most terminals, altmode looks
     just like the dollar sign character.  If that's so on yours,  you
     should  assume that anything you see in the on-line documentation
     which looks like a dollar sign is really an  altmode  unless  you
     are  specifically  told  it's  a  dollar  sign.   The dollar sign
     character is not particularly important  in  EMACS  and  we  will
     rarely have reason to mention it.
     14                                  EMACS Manual for TWENEX Users



                               CHAPTER THREE
                          BASIC EDITING COMMANDS



       We  now give the basics of how to enter text, make corrections,
     and save the text in a file.  If this material is new to you, you
     might learn it more easily by running the TEACH-EMACS program.



     3.1 Inserting Text


       To insert printing characters into the text  you  are  editing,
     just  type  them.    When  EMACS  is  at  top level, all printing
     characters you type are inserted into  the  text  at  the  cursor
     (that  is,  at  point),  and  the  cursor  moves  forward.    Any
     characters after the cursor move forward too.  If the text in the
     buffer is FOOBAR, with the cursor before the B, then if you  type
     XX, you get FOOXXBAR, with the cursor still before the B. 

       To  correct  text  you  have just inserted, you can use Rubout.
     Rubout deletes the character before the cursor (not the one  that
     the cursor is on top of or under; that is the character after the
     cursor).   The cursor and all characters after it move backwards.
     Therefore, if you type a printing character and then type Rubout,
     they cancel out.

       To end  a  line  and  start  typing  a  new  one,  type  Return
     (Customizers,  note:  this  runs  the  function ^R CRLF).  Return
     operates by inserting a line separator, so if you type Return  in
     the  middle  of a line, you break the line in two.  Return really
     inserts two characters, a  carriage  return  and  a  linefeed  (a
     CRLF),  but  almost everything in EMACS makes them look like just
     one character,  which  you  can  think  of  as  a  line-separator
     character.   For example, typing Rubout when the cursor is at the
     beginning of a line rubs out the line separator before the  line,
     joining that line with the preceding line.

       If you add too many characters to one line, without breaking it
     with  a  Return, the line will grow to occupy two (or more) lines
     on the screen, with a "!" at the extreme right margin of all  but
     the last of them.  The "!" says that the following screen line is
     not really a distinct line in the file, but just the continuation
     of a line too long to fit the screen.

       Direct  insertion  works for printing characters and space, but
     other characters act  as  editing  commands  and  do  not  insert
     15                                  EMACS Manual for TWENEX Users



     themselves.   If you need to insert a control character, Altmode,
     Tab or  Rubout,  you  must  quote  it  by  typing  the  Control-Q
     (^R  Quoted  Insert)  command first.  See section 2 [Characters],
     page 9.  Inserting a ^C  is  harder  because  EMACS  cannot  even
     receive  the character; you must use the minibuffer as in Altmode
     Altmode  3i  Altmode  Altmode.    See  section  23  [Minibuffer],
     page 157.



     3.2 Moving The Cursor


       To do more than insert characters, you have to know how to move
     the cursor.  Here are a few of the commands for doing that.


             C-A     Move to the beginning of the line.
             C-E     Move to the end of the line.
             C-F     Move forward over one character.
             C-B     Move backward over one character.
             C-N     Move  down one line, vertically.  If you start in
                     the middle of one line, you end in the middle  of
                     the next.  From the last line of text, it creates
                     a new line.
             C-P     Move up one line, vertically.
             C-L     Clear   the   screen   and  reprints  everything.
                     C-U C-L reprints just the line that the cursor is
                     on.
             C-T     Transpose two characters  (the  ones  before  and
                     after the cursor).
             M-<     Move to the top of your text.
             M->     Move to the end of your text.  



     3.3 Erasing Text


             Rubout  Delete the character before the cursor.
             C-D     Delete the character after the cursor.
             C-K     Kill to the end of the line.  


       You  already  know  about  the Rubout command which deletes the
     character before the cursor.  Another command, Control-D, deletes
     the character after the cursor, causing the rest of the  text  on
     the  line  to  shift left.  If Control-D is typed at the end of a
     line, that line and the next line are joined together.
     16                                  EMACS Manual for TWENEX Users



       To  erase  a  larger amount of text, use the Control-K command,
     which kills a line at a time.    If  Control-K  is  done  at  the
     beginning  or  middle  of a line, it kills all the text up to the
     end of the line.  If Control-K is done at the end of a  line,  it
     joins that line and the next line.

       See  section  9.1 [Killing], page 42, for more flexible ways of
     killing text.



     3.4 Files


       The commands above are sufficient  for  creating  text  in  the
     EMACS  buffer.  The more advanced EMACS commands just make things
     easier.  But to keep any text permanently you must put  it  in  a
     file.    Files are the objects which Twenex uses for storing data
     for communication between different programs or to hold onto  for
     a length of time.  To tell EMACS to edit text in a file, choose a
     filename,  such  as  FOO.BAR, and type C-X C-V FOO.BAR<cr>.  This
     visits the file FOO.BAR so that its contents appear on the screen
     for editing.  You can make changes, and then  save  the  file  by
     typing  C-X  C-S.   This makes the changes permanent and actually
     changes the file FOO.BAR.   Until  then,  the  changes  are  only
     inside  your  EMACS,  and the file FOO.BAR is not really changed.
     If the file FOO.BAR doesn't exist, and you  want  to  create  it,
     visit  it  as  if it did exist.  When you save your text with C-X
     C-S the file will be created.

       Of course, there is a lot more to learn about using files.  See
     section 13 [Files], page 71.



     3.5 Help


       If you forget what a command does, you can find  out  with  the
     Help  character.  The Help character is typed as Control-_.  Type
     Help followed by C and the command you want to know about.   Help
     can  help  you  in  other  ways  as  well.  See section 7 [Help],
     page 36.
     17                                  EMACS Manual for TWENEX Users



     3.6 Using Blank Lines Can Make Editing Faster


             C-O         Insert  one  or  more  blank  lines after the
                         cursor.
             C-X C-O     Delete all but one of many consecutive  blank
                         lines.  


       It  is  much more efficient to insert text at the end of a line
     than in the middle.  So if you want to stick a new line before an
     existing one, the best way is to make a blank  line  there  first
     and  then  type  the  text into it, rather than inserting the new
     text at the beginning of the existing line and finally  inserting
     a  line  separator.    Making the blank line first also makes the
     meaning of the text clearer while you are typing it in.

       To make a blank line, you can type Return and then  C-B.    But
     there  is  a single character for this: C-O (Customizers: this is
     the  built-in  function  ^R  Open  Line).    So,  FOO  Return  is
     equivalent to C-O FOO.

       If  you  want  to insert many lines, you can type many C-O's at
     the beginning (or you can give C-O an argument  to  tell  it  how
     many  blank  lines  to make.  See section 4 [Arguments], page 18,
     for how).  As you then insert lines of text, you will notice that
     Return behaves strangely: it "uses up" the blank lines instead of
     pushing them down.

       If you don't use up all the blank lines, you can type  C-X  C-O
     (the  function  ^R Delete Blank Lines) to get rid of all but one.
     When point is on a blank line, C-X C-O  replaces  all  the  blank
     lines around that one with a single blank line.  When point is on
     a  nonblank  line, C-X C-O deletes any blank lines following that
     nonblank line.
     18                                  EMACS Manual for TWENEX Users



                               CHAPTER FOUR
                GIVING NUMERIC ARGUMENTS TO EMACS COMMANDS



       Any  EMACS  command  can  be  given  a  numeric argument.  Some
     commands interpret the argument  as  a  repetition  count.    For
     example,  giving  an  argument  of  ten  to the C-F command (move
     forward one character) moves forward ten characters.  With  these
     commands, no argument is equivalent to an argument of 1.

       Some commands care only about whether there is an argument, and
     not  about  its  value;  for  example,  the  command M-Q (^R Fill
     Paragraph) with no arguments fills text,  but  with  an  argument
     justifies the text as well.

       Some  commands  use the value of the argument, but do something
     peculiar when there  is  no  argument.    For  example,  the  C-K
     (^R  Kill  Line) command with an argument <n> kills <n> lines and
     the line separators that follow them.  But C-K with  no  argument
     is  special; it kills the text up to the next line separator, or,
     if point is right at the end of  the  line,  it  kills  the  line
     separator  itself.   Thus, two C-K commands with no arguments can
     kill a nonblank line, just like C-K with an argument of one.

       The fundamental way of specifying an argument is to use the C-U
     (^R Universal Argument) command followed by  the  digits  of  the
     argument.    Negative  arguments  are allowed.  Often they tell a
     command to move or act backwards.  A negative argument is entered
     with C-U followed by a minus sign and the digits of the value  of
     the argument.

       C-U  followed  by  a  character  which is neither a digit nor a
     minus sign has the special meaning of "multiply  by  four".    It
     multiplies  the  argument for the next command by four.  Two such
     C-U's multiply it by sixteen.  Thus, C-U C-U  C-F  moves  forward
     sixteen  characters.   This is a good way to move forward "fast",
     since it moves about 1/4 of a line  on  most  terminals.    Other
     useful  combinations  are  C-U C-N, C-U C-U C-N (move down a good
     fraction of a screen), C-U C-U C-O (make "a lot" of blank lines),
     and C-U C-K (kill four lines).  With commands like M-Q that  care
     whether  there is an argument but not what the value is, C-U is a
     good way of saying "I want an argument".

       A few commands treat a plain C-U differently from  an  ordinary
     argument.    A  few  others may treat an argument of just a minus
     sign differently from an argument of -1.    These  unusual  cases
     will  be described when they come up; they are always for reasons
     of convenience of use.
     19                                  EMACS Manual for TWENEX Users



       There   are   other,   terminal-dependent  ways  of  specifying
     arguments.  They have the same effect but may be easier to  type.
     See  the  appendix.   If your terminal has a numeric keypad which
     sends something recognizably different from the ordinary  digits,
     it  is  possible  to  program  EMACS  to allow use of the numeric
     keypad for specifying arguments.  The libraries  VT52  and  VT100
     provide  such  a  feature  for those two types of terminals.  See
     section 22.2 [Libraries], page 136.



     4.1 Autoarg Mode


       Users of ASCII  keyboards  may  prefer  to  use  Autoarg  mode.
     Autoarg  mode  means that you don't need to type C-U to specify a
     numeric argument.  Instead, you type just  the  digits.    Digits
     followed  by  an  ordinary  inserting  character  are  themselves
     inserted, but digits followed by an Altmode or Control  character
     serve  as  an  argument to it and are not inserted.  A minus sign
     can also be part of an argument, but only at the beginning.    If
     you  type a minus sign following some digits, both the digits and
     the minus sign are inserted.

       To use Autoarg mode, set the  variable  Autoarg  Mode  nonzero.
     See section 22.3 [Variables], page 138.

       Autoargument digits echo at the bottom of the screen; the first
     nondigit  causes them to be inserted or uses them as an argument.
     To insert some digits and nothing else, you must follow them with
     a Space and then rub it out.    C-G  cancels  the  digits,  while
     Rubout inserts them all and then rubs out the last.
     20                                  EMACS Manual for TWENEX Users



                               CHAPTER FIVE
                 EXTENDED (META-X) COMMANDS AND FUNCTIONS



       Not  all EMACS commands are of the one or two character variety
     you have seen so far.  Most commands have long names composed  of
     English  words.    This  is  for  two reasons: the long names are
     easier to remember and more suggestive, and there are not  enough
     two-character combinations for every command to have one.

       The  commands  with  long  names are known as extended commands
     because they extend the set of two-character commands.



     5.1 Issuing Extended Commands


             M-X             Begin an extended  command.    Follow  by
                             command name and arguments.
             C-M-X           Begin an extended command.  Follow by the
                             command  name  only; the command will ask
                             for any arguments.
             C-X Altmode     Re-execute recent extended command.  


       Extended commands are also called M-X  commands,  because  they
     all  start  with the character Meta-X (^R Extended Command).  The
     M-X is followed by the command's long, suggestive name,  actually
     the  name  of a function to be called.  Terminate the name of the
     function  with  a  Return  (unless  you  are   supplying   string
     arguments;  see  below).   For example, Meta-X Auto Fill Mode<cr>
     invokes the function Auto Fill Mode.  This function when executed
     turns Auto Fill mode on or off.

       We say that  M-X  Foo<cr>  "calls  the  function  Foo".    When
     documenting  the  individual extended commands, we will call them
     functions to avoid confusion between them  and  the  one  or  two
     character commands.  We will also use "M-X" as a title like "Mr."
     for  functions,  as  in "use M-X Foo".  The "extended command" is
     what you type, starting with M-X, and what the  command  does  is
     call  a  function.  The name that goes in the command is the name
     of the command and is also the name of  the  function,  and  both
     terms will be used.

       Note:  Extended  commands  and  functions  were once called "MM
     commands", but this term is obsolete.  If you see it used  either
     in INFO documentation of in Help documentation, please report it.
     21                                  EMACS Manual for TWENEX Users



     Ordinary  one  or two character commands used to be known as "^R"
     commands; please report any occurrences  of  this  obsolete  term
     also.

       There  are  a  great  many  functions in EMACS for you to call.
     They will be described elsewhere in the manual, according to what
     they do.  Here we are concerned only with  extended  commands  in
     general.


     5.1.1 Typing The Command Name


       When  you  type  M-X, the cursor moves down to the echo area at
     the bottom of the screen.  "M-X" is printed there, and  when  you
     type  the command name it echoes there.  This is known as reading
     a line in the echo area.   You  can  use  Rubout  to  cancel  one
     character of the command name, or C-U or C-D to cancel the entire
     command  name.  A C-G cancels the whole M-X, and so does a Rubout
     when the command name is empty.  These editing  characters  apply
     any  time  EMACS  reads  a line in the echo area, not just within
     M-X.

       The string "M-X" which appears in the echo  area  is  called  a
     prompt.    The  prompt  always tells you what sort of argument is
     required and what it is going to be used for;  "M-X"  means  that
     you  are inside of the command M-X, and should type the name of a
     function to be called.  You can replace  the  prompt  "M-X"  with
     some other string by defining the variable Read Command Prompt.


     5.1.2 Completion


       You  can  abbreviate  the  name of the command, typing only the
     beginning of the name, as much  as  is  needed  to  identify  the
     command  unambiguously.    You  can  also  use  completion on the
     function name.  This means that you  type  part  of  the  command
     name,  and  EMACS visibly fills in the rest, or as much as can be
     determined from the part you have typed.

       You request completion by typing an Altmode ($).  For  example,
     if  you  type  M-X  Au$,  the "Au" expands to "Auto " because all
     command names which start with "Au" continue with "to ".  If  you
     ask  for  completion  when there are several alternatives for the
     next character, the bell rings and nothing else happens.  Altmode
     is also the way to terminate  the  command  name  and  begin  the
     string  arguments,  but  it  only  does  this if the command name
     completes in full.  In that case, an Altmode  appears  after  the
     22                                  EMACS Manual for TWENEX Users



     command  name  in the echo area.  In practice, these two meanings
     of Altmode do not conflict, because if the command name does  not
     complete  in full, it is ambiguous and would not be accepted.  So
     it would be useless to type the arguments yet.

       Space is another way to request completion,  but  it  completes
     only  one  word.  Successive Spaces complete one word each, until
     either there are multiple possibilities or the end of the name is
     reached.  If the first word of a command  is  Edit,  List,  Kill,
     View  or What, it is sufficient to type just the first letter and
     complete it with a Space.  (This does not follow from  the  usual
     definition  of  completion, since the single letter is ambiguous;
     it is a special feature added because these words are so common).

       Typing "?" in the middle of the command name prints a  list  of
     all  the  command  names  which begin with what you have typed so
     far.  You can then go on typing the name.


     5.1.3 Numeric Arguments and String Arguments


       Some functions can use numeric prefix arguments.   Simply  give
     the  Meta-X  command an argument and Meta-X will pass it along to
     the function which it calls.  The  argument  appears  before  the
     "M-X"  in  the  prompt,  as  in  "69 M-X", to remind you that the
     function you call will receive a numeric argument.

       Some  functions  require  string  arguments  (sometimes  called
     suffix  arguments).    To specify string arguments, terminate the
     function name with a single Altmode,  then  type  the  arguments,
     separated by Altmodes.  After the last argument, type a Return to
     cause  the  function  to  be executed.  For example, the function
     Describe prints the  full  documentation  of  a  function  (or  a
     variable)  whose  name  must  be  given as a string argument.  An
     example of using it is 


         Meta-X Describe$Apropos<cr>


     which prints the full description of the function named Apropos.

       An alternate way of  calling  extended  commands  is  with  the
     command  C-M-X  (^R  Instant  Extended Command).  It differs from
     plain M-X in that the function itself reads any string arguments.
     The function prompts for  each  argument  individually.    If  an
     argument  is  supposed  to  be  a  filename  or  a  command name,
     completion  is  available.    However,  there  are   compensating
     23                                  EMACS Manual for TWENEX Users



     disadvantages.    For  one  thing, since the function has already
     been invoked, you can't rub  out  from  the  arguments  into  the
     function name.  For another, it is not possible to save the whole
     thing,  function  name  and arguments, for you to recall with C-X
     Altmode (see below).  So C-M-X saves  nothing  for  C-X  Altmode.
     The  prompt  for  C-M-X is "C-M-X".  You can override it with the
     variable Instant Command Prompt.


     5.1.4 Repeating an Extended Command


       The last few extended commands you have executed are saved  and
     you  can repeat them.  We say that the extended command is saved,
     rather than  that  the  function  is  saved,  because  the  whole
     command, including arguments, is saved.

       To  re-execute  a  saved  command,  use the command C-X Altmode
     (^R Re-execute Minibuffer).  It retypes the last extended command
     and asks for confirmation.   With  an  argument,  it  repeats  an
     earlier  extended  command:  2  means repeat the next to the last
     command, etc.  You can also use the minibuffer to edit a previous
     extended command and re-execute it with changes (See  section  23
     [Minibuffer], page 157.).



     5.2 Arcane Information about M-X Commands


       You  can  skip  this  section  if  you  are  not  interested in
     customization, unless you want to know what is  going  on  behind
     the scenes.


     5.2.1 MM


       Extended  commands were once called "MM" commands, because "MM"
     is a TECO expression which looks up a command name  to  find  the
     associated  program,  and  runs  that  program.    Thus, the TECO
     expression 


         MM Apropos$Word$


     means to run the Apropos command with the argument "word".    You
     could  type  this  expression  into a minibuffer and get the same
     24                                  EMACS Manual for TWENEX Users



     results  as you would get from Meta-X Apropos$Word<cr>.  In fact,
     for the first year or so, EMACS had no Meta-X command, and that's
     what people did.  See section  23  [Minibuffer],  page  157,  for
     information on the minibuffer.

       "MM"  actually  tells TECO to call the subroutine in q-register
     "M".  The first "M" means "call", and the second "M" says what to
     call.  This subroutine takes a string argument which is the  name
     of  a function and looks it up.  Calling a function is built into
     TECO, but looking up the name is not; it is  implemented  by  the
     program  in  q-register M. That's why "MM" is called that and not
     "Run" or "F^Q".


     5.2.2 Arguments in TECO Code


       Functions can use  one  or  two  prefix  arguments  or  numeric
     arguments.   These are numbers (actually, TECO expressions) which
     go before the "MM".  Meta-X can only  give  the  MM  command  one
     argument.   If you want to give it two, you must type it in using
     the minibuffer.  When TECO code  passes  prefix  arguments,  they
     don't  have  to be numbers; they can also be string objects, TECO
     buffer objects, etc.  However, no more about that here.

       TECO code can also pass string arguments or  suffix  arguments.
     When  TECO  code passes a string argument, it appears, terminated
     by an Altmode, after the Altmode which ends  the  function  name.
     There  can  be  any  number  of  string  arguments.  In fact, the
     function can decide at run time  how  many  string  arguments  to
     read.  This makes it impossible to compile TECO code!

       Since  Altmode terminates a string argument, TECO has a quoting
     convention to allow Altmodes to be part  of  a  string  argument.
     This  convention is to use the two characters ^] Altmode to cause
     just an Altmode to be part of the argument.    ^]  also  must  be
     quoted, as ^] ^].  The M-X command hides all of this: there is no
     way to quote an Altmode; every Altmode always terminates a string
     argument;  ^]  is not special, because M-X automatically replaces
     each ^] with two.  If you understand the TECO meaning of  ^]  you
     can  enable  its  use  in  M-X  command  arguments by setting the
     variable Quote Execute Command nonzero.  Then M-X does no special
     processing to ^] characters.  You can use them to quote Altmodes,
     and you must also take care of quoting ^] characters themselves.
     25                                  EMACS Manual for TWENEX Users



     5.2.3 Commands and Functions


       Actually,  every  command in EMACS simply runs a function.  For
     example, when you type the command  C-N,  it  runs  the  function
     "^R Down Real Line".  You could just as well do C-U 1 M-X ^R Down
     Real  Line<cr> and get the same effect.  C-N can be thought of as
     a sort of abbreviation.  We say that the  command  C-N  has  been
     connected  to the function ^R Down Real Line.  The name is looked
     up once when the command and function are connected, so  that  it
     does  not  have  to  be  looked up again each time the command is
     used.  For historical reasons, the default argument passed  to  a
     function  which is connected to a command you typed is 1, but the
     default for MM and for M-X is 0.  This  is  why  the  C-U  1  was
     necessary in the example above.  The documentation for individual
     EMACS  commands  usually  gives  the  name  of the function which
     really implements the command in parentheses  after  the  command
     itself.

       Just as any function can be called directly with M-X, so almost
     any  function  can  be  connected  to a command.  You can use the
     function Set Key to do this.  Set  Key  takes  the  name  of  the
     function  as  a string argument, then reads the character command
     (including metizers or other prefix characters) directly from the
     terminal.  To define C-N, you could type 


         M-X Set Key$^R Down Real Line<cr>


     and then type C-N.  If you use the function View File often,  you
     could  connect  it  to  the command C-X V (not normally defined).
     You could even connect it to the command  C-M-V,  replacing  that
     command's  normal  definition.    Set  Key is good for redefining
     commands in the middle of editing.  An init  file  or  EMACS.VARS
     file can do it each time you run EMACS.  See section 22.6 [Init],
     page 144.


     5.2.4 Subroutines


       EMACS  is  composed of a large number of functions, each with a
     name.  Some of these functions are connected  to  commands;  some
     are  there  for  you  to  call with M-X; some are called by other
     functions.  The last group are called subroutines.  They  usually
     have names starting with "&", as in "& Read Line", the subroutine
     which  reads  a line in the echo area.  Although most subroutines
     have such names, any function can  be  called  as  a  subroutine.
     26                                  EMACS Manual for TWENEX Users



     Functions  like  ^R  Down  Real  Line have names starting with ^R
     because you are not expected to call them directly, either.   The
     purpose  of the "&" or "^R" is to get those function names out of
     the way of command completion in M-X.   M-X  allows  the  command
     name  to  be  abbreviated  if the abbreviation is unique, and the
     commands that you are not interested in  might  have  names  that
     would  interfere  and  make  some useful abbreviation cease to be
     unique.  The funny characters at the front of  the  name  prevent
     this from happening.


     5.2.5 Built-in Functions


       Not  all  of the functions in EMACS are written in TECO.  A few
     of  the  most  frequently  used  single-character  commands  have
     definitions   written   in   machine  language.    These  include
     self-inserting  characters,  Rubout,  C-F,  and  others.     Such
     functions  defined in machine language as part of TECO are called
     built-in functions.  Whereas the actual definition of an ordinary
     function is a string, the definition of a  built-in  function  is
     just  a  number,  the  address  of  a routine in TECO.  The EMACS
     "definitions" of these commands exist only to give  the  commands
     names  and  documentation,  and  live in a special library called
     BARE which is  loaded  when  necessary  to  make  the  names  and
     documentation  available.    For example, ^R Forward Character is
     the name of the function which implements the C-F command.
     27                                  EMACS Manual for TWENEX Users



                                CHAPTER SIX
                         MOVING UP AND DOWN LEVELS



       Subsystems and recursive editing levels are two states in which
     you  are  temporarily  doing  something  other  than  editing the
     visited file as usual.  For  example,  you  might  be  editing  a
     message that you wish to send, or looking at a documentation file
     with  INFO.  Running another fork under EMACS can also be thought
     of as a sort of "sublevel".



     6.1 Subsystems


       A subsystem is  an  EMACS  function  which  is  an  interactive
     program  in its own right: it reads commands in a language of its
     own, and displays the results.  You enter a subsystem  by  typing
     an  EMACS  command which invokes it.  Once entered, the subsystem
     runs until a specific command to exit the subsystem is typed.  An
     example of an EMACS subsystem is INFO, the documentation  reading
     program.    Others  are  Backtrace and TDEBUG, used for debugging
     TECO programs, and BABYL,  used  for  reading  and  editing  mail
     files.

       The  commands  understood  by  a subsystem are usually not like
     EMACS commands, because their purpose  is  something  other  than
     editing text.  For example, INFO commands are designed for moving
     around  in  a tree-structured documentation file.  In EMACS, most
     commands  are  Control  or  Meta  characters   because   printing
     characters  insert  themselves.   In most subsystems, there is no
     insertion of text, so non-Control non-Meta characters can be  the
     commands.

       While  you  are inside a subsystem, the mode line usually gives
     the name of the subsystem (as well as other information  supplied
     by  the  subsystem,  such as the filename and node name in INFO).
     You can tell that you are inside a  subsystem  because  the  mode
     line  does  not start with "EMACS", or with an open bracket ("[")
     which would indicate a recursive editing level.  See section  1.1
     [Mode Line], page 6.

       Because  each  subsystem implements its own commands, we cannot
     guarantee anything about them.  However,  there  are  conventions
     for what certain commands ought to do:  
     28                                  EMACS Manual for TWENEX Users



             C-]             Aborts (exits without finishing up).
             Backspace       Scrolls backward, like M-V in EMACS.
             Space           Scrolls forward, like C-V in EMACS.
             Q               Exits normally.
             X               Begins  an  extended command, like M-X in
                             EMACS.
             Help or ?       Prints documentation on  the  subsystem's
                             commands.  


     Not all of these necessarily exist in every subsystem, however.



     6.2 Recursive Editing Levels


       A  recursive  editing  level  is  a  state in which part of the
     execution of one command involves doing some editing.  You may be
     editing the file you are  working  on,  or  you  may  be  editing
     completely something totally different from what you were working
     on  at  top level.  Recursive editing levels are indicated in the
     mode line by square brackets ("[" and "]").

       For example, the command M-X Edit Options allows you to  change
     the  settings  of  EMACS  options.   During the execution of this
     command, you enter a recursive editing level in which you edit  a
     list  of  options  names and values using the usual EMACS editing
     commands.  While this is going on,  the  mode  line  says  "[Edit
     Options]" to inform you that you are in a recursive editing level
     and  why.    When  you exit the recursive editing level, the Edit
     Options command continues its work by looking at the changes  you
     have  made  in the list of options and changing the actual option
     values accordingly.  Only  then  is  the  original  Edit  Options
     command finished.

       Alternatively, you can abort the recursive editing level, which
     gets  you  out of the Edit Options command and back to top level,
     without allowing the command to finish.

       A recursive editing level differs from a subsystem in that  the
     commands  are  ordinary EMACS commands (though a handful may have
     been changed slightly),  whereas  a  subsystem  defines  its  own
     command language.

       The  text  you edit inside a recursive editing level depends on
     the command which invoked the recursive editing level.  It  could
     be  a list of options and values, or a list of tab stop settings,
     syntax table settings, a message to be sent, or any text that you
     might wish to compose.
     29                                  EMACS Manual for TWENEX Users



       Sometimes  in  a  recursive  editing level you edit text of the
     file you are visiting, just as at top level.  Why would this  be?
     Usually  because  a  few  commands  are temporarily changed.  For
     example, Edit Picture in the  PICTURE  library  defines  commands
     good  for editing a picture made out of characters, then enters a
     recursive  editing  level.     When   you   exit,   the   special
     picture-editing  commands  go  away.  Until then, the brackets in
     the mode line serve to remind you that, although the text you are
     editing is your  file,  all  is  not  normal.    See  section  26
     [PICTURE], page 185.

       In  any  case,  if  the mode line says "[...]" you are inside a
     recursive editing level, and the way to exit (send  the  message,
     redefine  the  options,  get rid of the picture-editing commands,
     etc.) is with the command C-M-Z  (^R  Exit).    See  section  6.3
     [Exiting],  page  29.   If you change your mind about the command
     (you don't want to send the  message,  or  change  your  options,
     etc.)  then you should use the command C-] (Abort Recursive Edit)
     to get out.  See section 24.1 [Aborting], page 160.

       Inside recursive editing levels, the  help  option  Help  R  is
     defined  to  print  the  full  documentation of the command which
     invoked the recursive editing  level.    The  other  normal  Help
     options are still available for asking about commands you want to
     use while inside the recursive edit.

       When the text in the mode line is surrounded by parentheses, it
     means  that  you  are  inside  a  Minibuffer.   A minibuffer is a
     special case of the recursive editing level.  Like any other,  it
     can  be  aborted  safely  with C-].  See section 23 [Minibuffer],
     page 157.



     6.3 Exiting Levels; Exiting EMACS


             C-X C-Z     Exit from EMACS to the superior fork.
             C-M-Z       Exit from EMACS or from a  recursive  editing
                         level.
             M-X Rerun CCL 
                         Exit  from  EMACS to EXEC and repeat the last
                         Compile-class command.  


       The general EMACS command to exit is C-M-Z  (^R  Exit).    This
     command  is  used  to exit from a recursive editing level back to
     the top level of EMACS, and to exit from EMACS at top level  back
     to  EXEC.    If  your keyboard does not have a Meta key, you must
     30                                  EMACS Manual for TWENEX Users



     type  this command by means of a bit prefix character, as C-Z C-Z
     or as Altmode C-Z.  Note carefully the difference between exiting
     a recursive editing level and aborting  it:  exiting  allows  the
     command  which  invoked the recursive editing level to finish its
     job with the text as you have edited it, whereas aborting cancels
     whatever  the  command  was  going  to  do.    See  section  24.1
     [Aborting], page 160.

       We  cannot  say  in general how to exit a subsystem, since each
     subsystem defines its own command language, but the convention is
     to use the character "Q".

       You can exit from EMACS back  to  the  superior  fork,  usually
     EXEC,  at  any  time, even within a recursive editing level, with
     the command C-X C-Z (^R Return to Superior).   If  this  is  used
     while  you  are inside a recursive editing level, then when EMACS
     is re-entered you will still  be  inside  the  recursive  editing
     level.

       If  the superior fork really is EXEC, you can use M-X Rerun CCL
     to return to EXEC and repeat the last  Compile,  Load,  or  Debug
     EXEC  command.   It offers to save any buffers which need saving,
     first.

       Exiting EMACS does not normally save the visited file,  because
     it  is  not  the  case  that  users exit EMACS only when they are
     "finished editing".  If you want the file saved, you must use C-X
     C-S.  Exiting does cause an auto save if Auto  Save  mode  is  in
     use.    M-X  Rerun  CCL  does  offer  to save because with it you
     indicate specifically your desire to use the saved file.

       Exiting from EMACS runs  the  function  &  Exit  EMACS.    This
     function  executes  the value of the variable Exit Hook, if it is
     nonzero; otherwise, it does auto-save if Auto Save  mode  is  on.
     &  Exit    EMACS  also executes the value of the variable Exit to
     Superior Hook, if it is defined.   If  EMACS  is  continued,  the
     value of Return from Superior Hook is executed.



     6.4 Running Subforks under EMACS


       Running  a  subfork under EMACS is a little bit like running an
     EMACS subsystem in that you give EMACS a command to start it, and
     give it a command when you want to exit.

       The difference is that a subsystem is implemented as a part  of
     EMACS.    It  can  call other parts of EMACS as a subroutine, for
     31                                  EMACS Manual for TWENEX Users



     example.    A  subfork  is  an entirely separate program, and any
     program which you could run under EXEC  can  also  be  run  under
     EMACS.    However, subforks cannot be integrated as well with the
     rest of EMACS.

       To exit from a subfork running under EMACS, type Control-C once
     or twice, just as you would to return  to  EXEC  from  a  subfork
     running under EXEC.

       Control of subforks is done with the TECO command FZ, which can
     be used for loading an arbitrary program into a subfork of EMACS.

       EMACS commands which run a subfork that is likely to run for an
     indefinite  length  of time call the function & Exit EMACS first,
     so that an auto save is done if necessary.  They also execute the
     value of Exit to Inferior Hook before running the  inferior,  and
     execute  the value of Return from Inferior Hook when the inferior
     returns.  Some EMACS commands run an inferior that is expected to
     return almost immediately and not read input from  the  terminal.
     These commands do not use & Exit EMACS or run the hooks.


     6.4.1 Inferior EXEC


       An  alternative  to  exiting  EMACS  is pushing to another EXEC
     under EMACS.  You can probably do in this EXEC whatever you would
     have done after exiting, and it will not harm the EMACS.  Do  M-X
     Push  to EXEC to get an inferior EXEC, and use the POP command to
     return to EMACS.  Repeated use of Push to EXEC gets the same EXEC
     with its subfork unchanged.  You  can  actually  switch  randomly
     between EMACS and one other program in this way, even if the EXEC
     on  your  machine  does not support multiple forks.  The variable
     Exec Name contains the name of the file to  run,  or  0  for  the
     ordinary EXEC.


     6.4.2 Reading Mail


       An  important use of subforks is for reading mail with MM.  See
     section 6.5 [Mail], page 34.


     6.4.3 Subforks in General


             M-+     Start or resume a subfork.
             M-,     Kill a subfork.  
     32                                  EMACS Manual for TWENEX Users



       The  EFORK  library,  which  you must load explicitly with Load
     Library (See  section  22.2  [Libraries],  page  136.),  contains
     general  functions  for  running  several forks underneath EMACS.
     EMACS users do not need to wait for DEC to wake  up  and  release
     the multi-forking EXEC; they can use multiple forks right now.

       When  EFORK  is  loaded,  the  command M-+ (^R Invoke Inferior)
     creates or resumes a subfork.

       Creation of a subfork requires two arguments,  which  you  must
     type.    The  first  one is the fork handle, an arbitrary name by
     which you will refer to the fork later.  The second  one  is  the
     name  of  the  file  to  run in the fork.  Both arguments must be
     terminated with <cr>.

       If the subfork terminates, you return to EMACS.  You can return
     to EMACS anyway by typing C-G (the EMACS interrupt character).

       To resume a subfork,  use  M-+  again,  and  specify  the  same
     handle.  No distinction is made between upper case and lower case
     in  the  handle name.  If you type just <cr> for the handle name,
     the most recently used subfork is resumed.

       You can also create  or  resume  an  inferior  EXEC  with  M-+.
     Specify  EXEC  as  the handle to create a new EXEC.  Specify * as
     the handle to resume an existing EXEC.  Creating a new EXEC  gets
     rid of any existing one.

       M-X  List  Handles  prints  a  list  of  the handles of all the
     existing subforks.

       To kill a subfork, use M-Comma (^R Kill Inferior),  which  asks
     you  to  specify the handle of the fork to be killed.  You cannot
     kill the inferior EXEC, if there is one, but asking to  create  a
     new one the next time you use it has much the same effect.


     6.4.4 Ephemerons


       The  functions  Execute  Ephemeron  and  Display  Ephemeron, in
     EFORK, run a program in an inferior fork and kill it as  soon  as
     it  returns  (whether because it is finished, or because you type
     C-G).  Display Ephemeron pauses until you type a character before
     redisplaying the screen; it is for  use  if  the  program  prints
     something you would like to read.
     33                                  EMACS Manual for TWENEX Users



     6.4.5 Services Obtained from an Inferior EXEC


       The  SYSTEM  library,  which you must load explicitly with Load
     Library (See  section  22.2  [Libraries],  page  136.),  contains
     functions which communicate with Twenex by passing commands to an
     inferior EXEC which exists momentarily.

       Most of the commands in SYSTEM print some sort of system status
     information.  For example, there are 


     M-X ^R System Load Average 
                     Prints  the  one  minute load average in the echo
                     area.  This function is expected to  be  used  by
                     connecting  it  to  a  command character, but the
                     SYSTEM library does not connect  it.    You  must
                     connect it yourself with Set Key or in an init or
                     EMACS.VARS file.  It can, however, be called with
                     M-X like any other function.

     M-X Check Output Queue 
                     Prints  the  contents of the output queues.  This
                     requires an argument, which should be  ALL,  FAST
                     or USER.

     M-X Check Batch Queue 
                     Prints  the  contents  of the batch queues.  This
                     requires an argument, which should be  ALL,  FAST
                     or USER.

     M-X Check Users 
                     Prints a list of the users on the system.

     M-X SYSTAT      Invokes  SYSTAT.  You may specify the argument to
                     be passed  to  SYSTAT  as  an  argument  to  this
                     command.     No  argument,  when  using  M-X,  is
                     equivalent to a null argument, which obtains  the
                     default SYSTAT printout.

     M-X Check Job   Prints  your  job number, user name and connected
                     directory.

     M-X Enable Capabilities 
                     Enables your capabilities in the  EXEC  which  is
                     EMACS's  superior,  so  that  they  are  actually
                     available  in  EMACS.     If   you   don't   have
                     capabilities to enable, your company has policies
                     of distrust and is putting artificial barriers in
     34                                  EMACS Manual for TWENEX Users



                     the  way  of  your  doing your job.  Find another
                     company.

     M-X Disable Capabilities 
                     Disables your  capabilities  in  the  EXEC  above
                     EMACS.

     M-X Check Log File
                     Prints  any changes in the log file whose name is
                     specified as an argument.  This command uses  and
                     sets the TECO default filename, so you usually do
                     not need to repeat the argument if you repeat the
                     command.

     M-X Check Disk  Performs  I  DISK  on  a directory which you must
                     specify with an argument.

     M-X Check Available 
                     Prints a list of available  devices  or  terminal
                     lines.   You must specify LINES as an argument if
                     you want that; otherwise, the default is to  list
                     the available devices.  


       Two other commands are 


     M-X Connect to Directory 
                     Changes  your  connected  directory.   Supply the
                     directory name (including  the  brackets)  as  an
                     argument,  and  the password as a second argument
                     if  it  is  needed.    This  command  is   always
                     available; you need not load SYSTEM.

     M-X Access to Directory 
                     Performs  an ACCESS command.  Supply arguments as
                     you would for Connect to Directory.  



     6.5 Reading Mail


       To edit your mail file, use C-X R (Read Mail).  This invokes  a
     mail  reading  subsystem or subfork.  If the variable Mail Reader
     Library is defined, it is the name of the subsystem to use;  else
     if  Mail Reader Program is defined, it is the name of the program
     to run in a subfork; otherwise, the program MM is used.
     35                                  EMACS Manual for TWENEX Users



       You  can  send  mail  from within MM as well as edit your mail.
     But if you want to send just one  message,  the  easiest  way  is
     Control-X M (Send Mail).  C-X M works by invoking MM, or whatever
     program  or  library  you  use  to  read mail, at a special entry
     point.  If it is a library,  the  entry  point  is  the  function
     & Mail Message.

       The  command  M-X Check Mail tells you whether you have any new
     mail  to  be  read.    The  MAICHK  library,  if  loaded,  checks
     automatically every so often.
     36                                  EMACS Manual for TWENEX Users



                               CHAPTER SEVEN
                        SELF-DOCUMENTATION COMMANDS



       EMACS  provides  extensive  self-documentation  features  which
     revolve around a single character, called the Help character.  At
     any time while using EMACS, you can type the  Help  character  to
     ask  for  help.    The  Help  character  is actually typed as C-_
     (Control-Underscore).  On some terminals just figuring out how to
     type a Control-Underscore is hard!  Typing Underscore and  adding
     the  Control  key  is  what  logically ought to work, but on some
     terminals it does not.   Sometimes  Control-Shift-O  works.    On
     VT-100 terminals, typing Control-/ or Control-? sends a Control-_
     character.

       If  you type Help while you are using a subsystem such as INFO,
     it prints a list of the commands of that subsystem.

       If you type Help in the middle of a multi-character command, it
     often tells you about what sort of thing you  should  type  next.
     For  example,  if  you type M-X and then Help, it tells you about
     M-X and how to type the name of the command.  If you  finish  the
     function  name  and  the Altmode and then type Help, it tells you
     about the function you  have  specified  so  you  can  know  what
     arguments it needs.  If you type C-X and then type Help, it tells
     you about the C-X commands.

       But  normally,  when  it's  time  for you to start typing a new
     command, Help offers you several options for  asking  about  what
     commands there are and what they do.  It prompts with "Doc (? for
     help):"  at  the  bottom  of  the  screen,  and you should type a
     character to say what kind of help you want.  You could type Help
     or "?" at this point to find out what options are available.  The
     ones you are most likely to need are described here.

       The most basic Help options are Help C and Help D. You can  use
     them  to  ask  what  a  particular  command  does.  Help C is for
     character commands; type the command you want to know about after
     the Help and the "C" ("C" stands for Character).   Thus,  Help  C
     M-F  or Help C Altmode F tells you about the M-F command.  Help D
     is for asking about functions (extended commands); type the  name
     of  the  function and a Return.  Thus, Help D Lisp Mode<cr> tells
     you about  M-X  Lisp  Mode.    Help  D  can  also  tell  you  the
     documentation  of  a  variable,  if you give it a variable's name
     instead of a function's name.  "D" stands for  "Describe",  since
     Help D actually uses the function Describe to do the work.

       A  more  complicated  sort of question to ask is, "what are the
     37                                  EMACS Manual for TWENEX Users



     commands for working with files?"  For this, you can type Help A,
     followed  by the string "file" and a Return.  It prints a list of
     all the functions that  have  "file"  anywhere  in  their  names,
     including  Save All Files, ^R Save File, Append to File, etc.  If
     some of the functions are connected to  commands,  it  tells  you
     that  too.  For example, it would say that you can invoke ^R Save
     File by typing C-X C-S.  "A" stands for "Apropos", since  Help  A
     actually  uses the function Apropos to do the substring matching.
     Help  A  does  not  list  internal  functions,  only  those   the
     nonprogrammer  is  likely  to use.  If you want subroutines to be
     listed as well, you must call Apropos yourself.

       Because Apropos looks only for functions  whose  names  contain
     the  string which you specify, you must use ingenuity in choosing
     substrings.    If  you  are  looking  for  commands  for  killing
     backwards  and  Help  A  Kill Backwards doesn't reveal any, don't
     give up.  Try just Kill, or just Backwards, or  just  Back.    Be
     persistent.  Pretend you are playing Adventure.

       Here  is  a  set of Apropos strings that covers many classes of
     EMACS commands, since there are strong conventions for naming the
     standard EMACS commands.  By giving you a  feel  for  the  naming
     conventions,  this set should also serve to aid you in developing
     a technique for picking Apropos strings.


         character, line, word, sentence, paragraph, region, page,
         buffer, screen, window,  bounds,  file,  dir,  beginning,
         end,  case,  mode, forward, backward, next, previous, up,
         down, search, kill, delete, mark, fill, indent, change.


     There is also a  convention  for  how  command  names  start  for
     certain  common kinds of operations: many commands start with one
     of the words "Edit", "View", "Insert", "List", or "What".

       If you are inside a recursive editing level, Help R prints  out
     the  complete documentation of that recursive editing level.  See
     section 6.2 [Recursive], page 28.  Help ? also tells you  briefly
     what  sort  of recursive editing level you are in, in addition to
     describing the available Help options.  If you are not  inside  a
     recursive editing level, Help R says that you are at top level.

       If  something  surprising  happens,  and  you are not sure what
     commands you typed, use Help L.    Help  L  prints  the  last  60
     command  characters  you  typed  in.  This is also helpful if you
     suffer from line noise.  If you see commands that you don't know,
     you can use Help C to find out what they do.
     38                                  EMACS Manual for TWENEX Users



       If a command doesn't do what you thought you knew it should do,
     you  can  ask  to  see  whether  it has changed recently.  Help N
     prints out the file called EMACS:EMACS.NEWS which is  an  archive
     of announcements of changes to EMACS.

       To find out about the other Help options, type Help Help.  That
     is, when the first Help asks for an option, type Help to ask what
     is available.

       Finally,  you  should  know  about  the documentation files for
     EMACS, which are EMACS.GUIDE and EMACS.CHART.  EMACS.GUIDE  is  a
     version  of  the manual formatted to be printed out on a terminal
     or line printer.  EMACS.CHART has a brief description of all  the
     commands,  known as the wall chart, because it is good to post on
     the wall near your terminal.
     39                                  EMACS Manual for TWENEX Users



                               CHAPTER EIGHT
                          THE MARK AND THE REGION



       In  general, a command which processes an arbitrary part of the
     buffer must know where to start and where to  stop.    In  EMACS,
     such  commands  usually operate on the text between point and the
     mark.  This range of text is called the region.    To  specify  a
     region, you set point to one end of it and mark at the other.  It
     doesn't  matter  which one is set first chronologically, or which
     one comes earlier in the  text.    Here  are  some  commands  for
     setting the mark:


             C-@         Set the mark where point is.
             C-Space     The same.
             C-X C-X     Interchange mark and point.
             M-@         Set  mark  after  end  of  next  word.   This
                         command and the following three do  not  move
                         point.
             C-M-@       Set mark after end of next Lisp s-expression.
             C-<         Set mark at beginning of buffer.
             C->         Set mark at end of buffer.
             M-H         Put region around current paragraph.
             C-M-H       Put region around current Lisp defun.
             C-X H       Put region around entire buffer.
             C-X C-P     Put region around current page.  


       For  example,  if you wish to convert part of the buffer to all
     upper-case, you can use the C-X C-U command,  which  operates  on
     the text in the region.  You can first go to the beginning of the
     text  to be capitalized, put the mark there, move to the end, and
     then type C-X C-U.  Or, you can set the mark at the  end  of  the
     text, move to the beginning, and then type C-X C-U.  C-X C-U runs
     the  function  ^R Uppercase Region, whose name signifies that the
     region, or everything between  point  and  the  mark,  is  to  be
     capitalized.

       The  most common way to set the mark is with the C-@ command or
     the C-Space command (^R Set/Pop Mark).  They set the  mark  where
     point is.  Then you can move point away, leaving the mark behind.

       It   isn't  actually  possible  to  type  C-Space  on  non-Meta
     keyboards.  Yet on many terminals the  command  appears  to  work
     anyway!   This is because trying to type a Control-Space on those
     terminals actually sends the character C-@, which means the  same
     thing  as  C-Space.    A few keyboards just send a Space.  If you
     have one of them, you type C-@, or customize your EMACS.
     40                                  EMACS Manual for TWENEX Users



       Since terminals have only one cursor, there is no way for EMACS
     to  show  you  where  the mark is located.  You have to remember.
     The usual solution to this problem is to set the  mark  and  then
     use  it  soon,  before  you  forget where it is.  But you can see
     where the mark is with the command C-X C-X (^R Exchange Point and
     Mark) which puts the mark where point was  and  point  where  the
     mark  was.  The extent of the region is unchanged, but the cursor
     and point are now at the previous location of the mark.

       C-X C-X is also useful when you are satisfied with the location
     of point but want to move the mark; do C-X C-X to put point there
     and then you can move it.  A second use of C-X C-X, if necessary,
     puts the mark at the new location with point back at its original
     location.

       If you insert or delete before the mark,  the  mark  may  drift
     through  the text.  If the buffer contains "FOO BAR" and the mark
     is before the "B", then if you delete the "F" the  mark  will  be
     before  the "A".  This is an unfortunate result of the simple way
     the mark is implemented.  It is best not to delete or  insert  at
     places  above  the mark until you are finished using it and don't
     care where it drifts to.



     8.1 Commands to Mark Textual Objects


       There are commands for placing the mark on the other side of  a
     certain  object  such as a word or a list, without having to move
     there first.  M-@ (^R Mark Word) puts the mark at the end of  the
     next  word,  while C-M-@ (^R Mark Sexp) puts it at the end of the
     next s-expression.  C-> (^R Mark End) puts the mark at the end of
     the buffer,  while  C-<  (^R  Mark  Beginning)  puts  it  at  the
     beginning.  These characters allow you to save a little typing or
     redisplay, sometimes.

       Other commands set both point and mark, to delimit an object in
     the  buffer.  M-H (^R Mark Paragraph) puts point at the beginning
     of the paragraph it was inside of (or before), and puts the  mark
     at the end.  M-H does all that's necessary if you wish to indent,
     case-convert,  or  kill a whole paragraph.  C-M-H (^R Mark Defun)
     similarly puts point before and the mark  after  the  current  or
     next defun.  C-X C-P (^R Mark Page) puts point before the current
     page  (or  the  next or previous, according to the argument), and
     mark at the end.   The  mark  goes  after  the  terminating  page
     delimiter  (to  include it), while point goes after the preceding
     page delimiter (to exclude it).  Finally, C-X H  (^R  Mark  Whole
     Buffer)  makes  the  region the entire buffer by putting point at
     the beginning and the mark at the end.
     41                                  EMACS Manual for TWENEX Users



     8.2 The Ring of Marks


       Aside  from  delimiting the region, the mark is also useful for
     remembering a spot that you may want to go back to.  To make this
     feature more useful, EMACS remembers 16 previous locations of the
     mark.  Most commands that set the mark push  the  old  mark  onto
     this  stack.    To  return  to a marked location, use C-U C-@ (or
     C-U C-Space).  This moves  point  to  where  the  mark  was,  and
     restores  the  mark  from the stack of former marks.  So repeated
     use of this command moves point to all of the old  marks  on  the
     stack,  one  by  one.  Since the stack is actually a ring, enough
     uses of C-U C-@ bring point back  to  where  it  was  originally.
     Insertion  and  deletion  can cause the saved marks to drift, but
     they will still  be  good  for  this  purpose  because  they  are
     unlikely to drift very far.

       Some  commands  whose  primary purpose is to move point a great
     distance take advantage of the stack of marks to give you  a  way
     to undo the command.  The best example is M-<, which moves to the
     beginning of the buffer.  It sets the mark first, so that you can
     use  C-U  C-@  or C-X C-X to go back to where you were.  Searches
     sometimes set the mark; it depends on how far they move.  Because
     of this uncertainty, searches type out "^@" if they set the mark.
     The normal situation is that searches leave the  mark  behind  if
     they  move at least 500 characters, but you can change that value
     since it is kept in the variable Auto  Push  Point  Option.    By
     setting  it  to  0,  you  can make all searches set the mark.  By
     setting it to a very large number such as ten  million,  you  can
     prevent  all  searches  from  setting the mark.  The string to be
     typed out when this option does its thing is kept in the variable
     Auto Push Point Notification.
     42                                  EMACS Manual for TWENEX Users



                               CHAPTER NINE
                          KILLING AND MOVING TEXT



       The  commonest  way  of moving or copying text with EMACS is to
     kill it, and get it back again in one or more places.    This  is
     very  safe because the last several pieces of killed text are all
     remembered, and it is versatile, because the  many  commands  for
     killing  syntactic units can also be used for moving those units.
     There are also other ways of moving text for special purposes.



     9.1 Deletion and Killing


       Most commands which erase text from the buffer save it so  that
     you  can  get it back if you change your mind, or move or copy it
     to other parts of the buffer.  These commands are known  as  kill
     commands.    The rest of the commands that erase text do not save
     it; they are known as  delete  commands.    The  delete  commands
     include  C-D  and  Rubout,  which  delete only one character at a
     time,  and  those  commands  that  delete  only  spaces  or  line
     separators.    Commands  that  can destroy significant amounts of
     nontrivial  data  generally  kill.    The  commands'  names   and
     individual  descriptions use the words "kill" and "delete" to say
     which they do.  If you do a kill command by mistake, you can  use
     the Undo command to undo it (See section 24.3 [Undo], page 164.).


             C-D             Delete next character.
             Rubout          Delete previous character.
             M-\             Delete spaces and tabs around point.
             C-X C-O         Delete  blank  lines  around  the current
                             line.
             M-^             Join two lines by deleting the  CRLF  and
                             any indentation.
             C-K             Kill rest of line or one or more lines.
             C-W             Kill region (from point to the mark).
             M-D             Kill word.
             M-Rubout        Kill word backwards.
             C-X Rubout      Kill back to beginning of sentence.
             M-K             Kill to end of sentence.
             C-M-K           Kill s-expression.
             C-M-Rubout      Kill s-expression backwards.  
     43                                  EMACS Manual for TWENEX Users



     9.1.1 Deletion


       The most basic delete commands are C-D and Rubout.  C-D deletes
     the character after the cursor, the one the cursor is "on top of"
     or  "underneath".    The cursor doesn't move.  Rubout deletes the
     character before the cursor, and moves the  cursor  back.    Line
     separators  act  like  single characters when deleted.  Actually,
     C-D and Rubout aren't always delete  commands;  if  you  give  an
     argument,  they  kill  instead.   This prevents you from losing a
     great deal of text by typing a large argument to a C-D or Rubout.

       The  other  delete  commands  are  those  which   delete   only
     formatting  characters:  spaces,  tabs  and line separators.  M-\
     (^R Delete Horizontal Space)  deletes  all  the  spaces  and  tab
     characters  before  and  after  point.   C-X C-O (^R Delete Blank
     Lines) deletes all blank lines after the current line, and if the
     current line is blank  deletes  all  blank  lines  preceding  the
     current  line as well (leaving one blank line, the current line).
     M-^ (^R Delete  Indentation)  joins  the  current  line  and  the
     previous  line, or the current line and the next line if given an
     argument.  See section 11.3 [Indentation], page 57.

       A function ^R Delete Region used  to  exist,  but  it  was  too
     dangerous.    When  you  want  to  delete  a large amount of text
     without saving a copy of it (perhaps because it is very big), you
     can set point and mark around the text and then type 


         M-Altmode
         MRK$$


     (This is a use of the minibuffer.  See section  23  [Minibuffer],
     page 157.).


     9.1.2 Killing by Lines


       The  simplest  kill  command is the C-K command (^R Kill Line).
     If given at the beginning of a line, it kills all the text on the
     line, leaving it blank.  If given on a blank line, the blank line
     disappears.  As a consequence, if  you  go  to  the  front  of  a
     non-blank   line   and   type  two  C-K's,  the  line  disappears
     completely.

       More generally, C-K kills from point up to the end of the line,
     unless it is at the end of a line.  In that  case  it  kills  the
     44                                  EMACS Manual for TWENEX Users



     line  separator  following  the  line, thus merging the next line
     into the current one.  Invisible spaces and tabs at  the  end  of
     the  line  are  ignored  when  deciding which case applies, so if
     point appears to be at the end of the line, you can be  sure  the
     line separator will be killed.

       If  C-K is given a positive argument, it kills that many lines,
     and the separators that follow them (however, text on the current
     line before point is spared).  With a negative argument, it kills
     back to a number of line beginnings.  An  argument  of  -2  means
     kill  back  to  the  second  line  beginning.  If point is at the
     beginning of a  line,  that  line  beginning  doesn't  count,  so
     C-U  -  2  C-K  with  point  at the front of a line kills the two
     previous lines.

       C-K with an argument of zero kills all the text before point on
     the current line.


     9.1.3 Other Kill Commands


       A kill command which is very general is C-W (^R  Kill  Region),
     which  kills  everything  between  point and the mark.  With this
     command, you can kill any contiguous characters, if you first set
     the mark at one end of them and go to the other end.

       Other syntactic units can be killed: words, with  M-Rubout  and
     M-D  (See  section  11.1  [Words], page 53.); s-expressions, with
     C-M-Rubout  and  C-M-K  (See  section   20.6.1   [S-expressions],
     page  111.); sentences, with C-X Rubout and M-K (See section 11.2
     [Sentences], page 55.).



     9.2 Un-Killing


       Un-killing is getting back text which was killed.    The  usual
     way to move or copy text is to kill it and then un-kill it one or
     more times.


             C-Y     Yank (re-insert) last killed text.
             M-Y     Replace   re-inserted   killed   text   with  the
                     previously killed text.
             M-W     Save region as last killed text without killing.
             C-M-W   Append next kill to last batch of killed text.  
     45                                  EMACS Manual for TWENEX Users



       Killed  text  is pushed onto a ring buffer called the kill ring
     that remembers the last 8 blocks of text that were killed.   (Why
     it is called a ring buffer will be explained below).  The command
     C-Y  (^R Un-kill) reinserts the text of the most recent kill.  It
     leaves the cursor at the end of the text, and puts  the  mark  at
     the  beginning.  Thus, a single C-W undoes the C-Y (M-X Undo also
     does so).  C-U C-Y leaves the cursor in front of  the  text,  and
     the  mark  after.  This is only if the argument is specified with
     just a C-U, precisely.  Any other sort of argument, including C-U
     and digits, has an effect described below.

       If you wish to copy a block of text, you might want to use  M-W
     (^R  Copy  Region),  which  copies  the region into the kill ring
     without removing it from  the  buffer.    This  is  approximately
     equivalent  to C-W followed by C-Y, except that M-W does not mark
     the buffer as "changed"  and  does  not  temporarily  change  the
     screen.

       There is only one kill ring, and switching buffers or files has
     no  effect  on  it.  After visiting a new file, whatever was last
     killed in the previous file is still on top  of  the  kill  ring.
     This is important for moving text between files.


     9.2.1 Appending Kills


       Normally,  each  kill  command pushes a new block onto the kill
     ring.  However, two or more kill commands in a row combine  their
     text  into  a  single  entry  on  the  ring, so that a single C-Y
     command gets it all back as it was before it was  killed.    This
     means  that  you  don't have to kill all the text in one command;
     you can keep killing line after line, or word after  word,  until
     you  have  killed  it  all,  and you can still get it all back at
     once.  (Thus  we  join  television  in  leading  people  to  kill
     thoughtlessly).

       Commands  that  kill forward from point add onto the end of the
     previous killed text.  Commands that kill backward from point add
     onto the beginning.  This way, any sequence of mixed forward  and
     backward  kill  commands  puts all the killed text into one entry
     without rearrangement.

       If a kill command is separated from the last  kill  command  by
     other  commands,  it  starts a new entry on the kill ring, unless
     you tell it not to by saying C-M-W (^R Append Next Kill) in front
     of it.  The C-M-W tells the following command, if it  is  a  kill
     command,  to  append  the  text it kills to the last killed text,
     instead of starting a new  entry.    With  C-M-W,  you  can  kill
     46                                  EMACS Manual for TWENEX Users



     several separated pieces of text and accumulate them to be yanked
     back in one place.


     9.2.2 Un-killing Earlier Kills


       To  recover killed text that is no longer the most recent kill,
     you need the Meta-Y (^R Un-kill Pop) command.   The  M-Y  command
     should be used only after a C-Y command or another M-Y.  It takes
     the  un-killed  text inserted by the C-Y and replaces it with the
     text from an earlier kill.   So,  to  recover  the  text  of  the
     next-to-the-last  kill,  you  first  use  C-Y to recover the last
     kill, and then use M-Y to move back to the previous kill.

       You can think of all the last few kills as living  in  a  ring.
     After  a  C-Y  command, the text at the front of the ring is also
     present in the buffer.  M-Y  "rotates"  the  ring,  bringing  the
     previous  string of text to the front, and this text replaces the
     other text in the buffer as well.  Enough M-Y commands can rotate
     any part of the ring to the front, so you can get at  any  killed
     text  as  long  as  it  is recent enough to be still in the ring.
     Eventually the ring rotates all  the  way  around  and  the  most
     recent  killed  text  comes  to  the  front (and into the buffer)
     again.  M-Y with a negative argument rotates the ring  backwards.
     If  the  region  doesn't match the text at the front of the ring,
     M-Y is not allowed.

       In any case, when the text you are looking for is brought  into
     the  buffer,  you  can  stop  doing M-Y's and it will stay there.
     It's really just a copy of what's at the front of  the  ring,  so
     editing  it  does  not  change what's in the ring.  And the ring,
     once rotated, stays rotated,  so  that  doing  another  C-Y  gets
     another copy of what you rotated to the front with M-Y.

       If  you  change  your  mind about un-killing, a C-W or M-X Undo
     gets rid of the un-killed text at any point, after any number  of
     M-Y's.    C-W pushes the text onto the ring again.  M-X Undo does
     not.

       If you know how many M-Y's it would take to find the  text  you
     want, then there is an alternative.  C-Y with an argument greater
     than  one  restores the text the specified number of entries down
     on the ring.  Thus, C-U 2 C-Y gets the next to the last block  of
     killed  text.  It differs from C-Y M-Y in that C-U 2 C-Y does not
     permanently rotate the ring.

       A way of viewing the contents of the kill ring is 
     47                                  EMACS Manual for TWENEX Users



         M-X View Q-register$..K<cr>


     You  must  add  one to the indices listed by this command, to get
     the argument to use with C-Y to yank any particular string.



     9.3 Other Ways of Copying Text


       Usually we copy or move text by killing it and  un-killing  it,
     but there are other ways that are useful for copying one block of
     text in many places, or for copying many scattered blocks of text
     into  one  place.    In addition to those described here, see the
     self-documentation of the MOVE library.


     9.3.1 Accumulating Text


       You can accumulate blocks  of  text  from  scattered  locations
     either into a buffer or into a file if you like.

       To   append   them  into  a  buffer,  use  the  command  C-X  A
     <buffername><cr> (^R Append to Buffer), which inserts a  copy  of
     the  region into the specified buffer at the location of point in
     that buffer.  If there is no buffer with the  name  you  specify,
     one  is created.  If you append text into a buffer which has been
     used for editing, the copied text goes into  the  middle  of  the
     text of the buffer, wherever point happens to be in it.

       Point  in that buffer is left at the end of the copied text, so
     successive uses of C-X A accumulate the  text  in  the  specified
     buffer  in the same order as they were copied.  If C-X A is given
     an argument, point in the other buffer is left before the  copied
     text, so successive uses of C-X A add text in reverse order.

       You can retrieve the accumulated text from that buffer with M-X
     Insert  Buffer$<buffername><cr>.  This inserts a copy of the text
     in that buffer into the selected buffer.  You can also select the
     other buffer for editing.  See section 14 [Buffers], page 83, for
     background information on buffers.

       Strictly speaking, C-X A does not always  append  to  the  text
     already  in  the  buffer.    But  if it is used on a buffer which
     starts out empty, it does keep appending to the end.

       Instead of accumulating text within EMACS, in a buffer, you can
     48                                  EMACS Manual for TWENEX Users



     append text directly into a disk file with the command M-X Append
     to  File$<filename><cr>.    It adds the text of the region to the
     end of the specified file.  M-X Prepend to File adds the text  to
     the  beginning  of  the  file  instead.    The  file  is  changed
     immediately on disk.  These commands are normally used with files
     that are not being visited in EMACS.  They have the advantage  of
     working  even  on  files  too large to fit into the EMACS address
     space.


     9.3.2 Copying Text Many Times


       When you want to insert a  copy  of  the  same  piece  of  text
     frequently,  the  kill  ring  becomes impractical, since the text
     moves  down  on  the  ring  as  you  edit,  and  will  be  in  an
     unpredictable place on the ring when you need it again.  For this
     case,  you can use the commands C-X X (^R Put Q-register) and C-X
     G (^R Get Q-register) to move the text.

       C-X X<q> stores a copy of the text of the  region  in  a  place
     called  q-register <q>.  With an argument, C-X X deletes the text
     as well.  <q> can be a letter or a digit.  This gives  36  places
     in  which you can store a piece of text.  C-X G<q> inserts in the
     buffer the text from q-register <q>.  Normally  it  leaves  point
     before  the  text  and  places the mark after, but with a numeric
     argument it puts point after the text and the mark before.

       The q-registers  are  important  temporary  variables  in  TECO
     programming,  but you don't have to understand them, only to know
     that what you save with C-X X A is what you will get with  C-X  G
     A. 

       Do not use q-registers M and R in this way, if you are going to
     use the TECO commands MM and MR.
     49                                  EMACS Manual for TWENEX Users



                                CHAPTER TEN
                                 SEARCHING



       Like  other  editors,  EMACS  has commands for searching for an
     occurrence of a string.  The search command is unusual in that it
     is incremental; it begins to  search  before  you  have  finished
     typing  the  search  string.    As you type in the search string,
     EMACS shows you where it would be found.   When  you  have  typed
     enough  characters  to identify the place you want, you can stop.
     Depending on what you will do next, you may or may  not  need  to
     terminate the search explicitly with an Altmode first.


             C-S         Search forward.
             C-R         Search backward.
             C-S $ C-W   Word search, ignoring whitespace.  


       The  command  to  search  is  C-S (^R Incremental Search).  C-S
     reads in  characters  and  positions  the  cursor  at  the  first
     occurrence  of  the  characters that you have typed.  If you type
     C-S and then F, the cursor moves right after the first "F".  Type
     an "O", and see the cursor move to after the first "FO".    After
     another  "O", the cursor is after the first "FOO" after the place
     where you started the search.  At the same time,  the  "FOO"  has
     echoed at the bottom of the screen.

       If  you  type  a mistaken character, you can rub it out.  After
     the FOO, typing a rubout makes the "O" disappear from the  bottom
     of  the  screen, leaving only "FO".  The cursor moves back to the
     "FO".  Rubbing out the "O" and "F" moves the cursor back to where
     you started the search.

       When you are satisfied with the place you have reached, you can
     type an Altmode, which stops searching, leaving the cursor  where
     the   search  brought  it.    Also,  any  command  not  specially
     meaningful in searches stops the searching and is then  executed.
     Thus,  typing  C-A  would  exit  the  search and then move to the
     beginning of the line.  Altmode is necessary  only  if  the  next
     command  you  want  to  type  is  a  printing  character, Rubout,
     Altmode, C-Q, or another search  command,  since  those  are  the
     characters that have special meanings inside the search.

       Sometimes you search for "FOO" and find it, but not the one you
     expected  to find.  There was a second FOO that you forgot about,
     before the one you were looking for.  Then type another  C-S  and
     the  cursor  will find the next FOO.  This can be done any number
     of times.  If you overshoot, you can rub out the C-S's.
     50                                  EMACS Manual for TWENEX Users



       After  you  exit  a  search, you can search for the same string
     again by typing just C-S C-S: one C-S command to start the search
     and then another C-S to mean "search again".

       If your string is not found at all, the echo area says "Failing
     I-Search".  The cursor is after the place where  EMACS  found  as
     much  of  your string as it could.  Thus, if you search for FOOT,
     and there is no FOOT, you might see the cursor after the  FOO  in
     FOOL.    At  this  point there are several things you can do.  If
     your string was mistyped, you can rub some of it out and  correct
     it.    If you like the place you have found, you can type Altmode
     or some other EMACS command to "accept what the search  offered".
     Or  you can type C-G, which throws away the characters that could
     not be found (the "T" in "FOOT"), leaving those that  were  found
     (the  "FOO"  in  "FOOT").   A second C-G at that point undoes the
     search entirely.

       The C-G "quit" command does  special  things  during  searches;
     just  what,  depends  on the status of the search.  If the search
     has found what you  specified  and  is  waiting  for  input,  C-G
     cancels  the  entire  search.  The cursor moves back to where you
     started the search.  If C-G is typed while the search is actually
     searching for something or updating the display, or after  search
     failed to find some of your input (having searched all the way to
     the  end  of  the  file), then only the characters which have not
     been found are discarded.  Having discarded them, the  search  is
     now  successful  and waiting for more input, so a second C-G will
     cancel the entire search.  Make sure you wait for the  first  C-G
     to ding the bell before typing the second one; if typed too soon,
     the  second  C-G  may  be confused with the first and effectively
     lost.

       You can also type C-R at any time to start searching backwards.
     If a search fails because the place you started was too  late  in
     the  file,  you  should do this.  Repeated C-R's keep looking for
     more occurrences backwards.  A C-S starts going  forwards  again.
     C-R's  can  be  rubbed  out just like anything else.  If you know
     that you want to search backwards, you can use C-R instead of C-S
     to start the search, because C-R is also a  command  (^R  Reverse
     Incremental Search) to search backward.  Note to all customizers:
     all   this  command  does  is  call  the  current  definition  of
     ^R Incremental Search with a negative argument.

       All sorts of searches in EMACS normally ignore the case of  the
     text  they  are  searching  through; if you specify searching for
     FOO, then Foo and foo are also considered a match.  If you do not
     want this feature, set the variable Case Search  to  zero.    See
     section 22.3 [Variables], page 138.
     51                                  EMACS Manual for TWENEX Users



       Recall that Altmode exits a search without doing anything else,
     while  other Control and Meta characters exit the search and then
     have their normal function.  The variable Search Exit  Char  says
     which  character  should  exit  and  do nothing else; its initial
     value is  033  octal,  for  Altmode.    This  value  is  a  9-bit
     character,  so  300  octal  means  that  Control-@  is  the  exit
     character.  Any other character whose definition indirects to the
     specified one also serves as an exit character; so if you specify
     C-B, C-b will also exit, and if you  specify  C-@,  then  C-Space
     will  also  exit.    Set the variable to -1, and there is no exit
     character.

       Bit prefix characters are not processed before the decision  as
     to  whether  and  how  to exit, so if you specify M-: as the exit
     character, you must have a meta key on your terminal in order  to
     type it.  I do not know if this can be changed easily.

       Search  Exit Option says what to do with other Control and Meta
     characters.  0 says that  they  should  be  part  of  the  search
     string.  A nonzero value says that they should exit and then have
     their  normal  function.  If this variable is nonzero, the Search
     Exit Char is distinguished only by not having its normal function
     when it exits.  If this is zero, the Search Exit Char is the only
     way to exit.

       A non-incremental search is also available.  Type  Altmode  (or
     the Search Exit Char) right after the C-S to get it.  Do 


         M-X Describe$^R String Search<cr>


     for details.  Some people who prefer non-incremental searches put
     that  function  on  Meta-S,  and  ^R  Character  Search  (do  M-X
     Describe$ for details) on C-S.  It can do one useful thing  which
     incremental  search  cannot: search for words regardless of where
     the line breaks.

       Word search searches for a sequence of words without regard  to
     how  the  words are separated.  More precisely, you type a string
     of many words, using single spaces  to  separate  them,  and  the
     string  can  be  found  even if there are multiple spaces or line
     separators between the words.  Other punctuation such  as  commas
     or  periods  must  match  exactly.  This is useful in conjunction
     with documents formatted by text justifiers.  If you  edit  while
     looking  at  the printed, formatted version, you can't tell where
     the line breaks are in the source file.  With  word  search,  you
     can search without having to know.
     52                                  EMACS Manual for TWENEX Users



       Word  search is a special case of non-incremental search and is
     invoked with C-S Altmode C-W.  This is  followed  by  the  search
     string,   which  must  always  be  terminated  with  an  Altmode.
     Searching does not  start  until  the  final  Altmode  is  typed.
     Search  Exit  Char  and  Search  Exit Option do not apply to word
     search.

       You do not even have to type each  word  in  full,  in  a  word
     search.    An abbreviation is good enough.  Word search finds the
     first occurrence of a sequence of words  whose  beginnings  match
     the words of the argument.
     53                                  EMACS Manual for TWENEX Users



                              CHAPTER ELEVEN
                         COMMANDS FOR ENGLISH TEXT



       EMACS enables you to manipulate words, sentences, or paragraphs
     of  text.    In  addition,  there  are commands to fill text, and
     convert case.

       Editing files of text in a human  language  ought  to  be  done
     using  Text  mode  rather than Fundamental mode.  Invoke M-X Text
     Mode to enter  Text  mode.    See  section  20.1  [Major  Modes],
     page 102.  M-X Text Mode causes Tab to run the function ^R Tab to
     Tab Stop, which allows you to set any tab stops with M-X Edit Tab
     Stops  (See  section  11.3  [Indentation],  page  57.).  Features
     concerned with comments in programs are turned  off  except  when
     explicitly invoked.  Automatic display of parenthesis matching is
     turned  off, which is what most people want.  Finally, the syntax
     table is changed so that periods are not  considered  part  of  a
     word, while apostrophes, backspaces and underlines are.

       If  you are editing input for the text justifier TEX, you might
     want to use TEX  mode  instead  of  Text  mode.    See  the  file
     INFO:ETEX.INFO.   For editing SCRIBE input, use SCRIBE mode.  See
     section 11.7 [SCRIBE], page 63.  Someday  there  may  be  special
     major modes for other text justifiers.



     11.1 Word Commands


       EMACS  has  commands for moving over or operating on words.  By
     convention, they are all Meta- characters.


             M-F         Move Forward over a word.
             M-B         Move Backward over a word.
             M-D         Kill up to the end of a word.
             M-Rubout    Kill back to the beginning of a word.
             M-@         Mark the end of the next word.
             M-T         Transpose two words; drag a word  forward  or
                         backward across other words.  


       Notice  how  these  commands  form  a  group that parallels the
     character based commands C-F, C-B, C-D, C-T and Rubout.   M-@  is
     related to C-@.
     54                                  EMACS Manual for TWENEX Users



       The  commands  Meta-F (^R Forward Word) and Meta-B (^R Backward
     Word) move forward and  backward  over  words.    They  are  thus
     analogous  to  Control-F  and  Control-B,  which move over single
     characters.  Like their Control-  analogues,  Meta-F  and  Meta-B
     move  several words if given an argument.  Meta-F with a negative
     argument moves backward like Meta-B, and Meta-B with  a  negative
     argument  moves  forward.    Forward motion stops right after the
     last letter of the word, while backward motion stops right before
     the first letter.

       It is easy to kill a word at a time.  Meta-D (^R  Forward  Kill
     Word)  kills  the  word  after  point.    To be precise, it kills
     everything from point to the place Meta-F would move to.    Thus,
     if point is in the middle of a word, only the part after point is
     killed.    If  some  punctuation comes after point and before the
     next word, it is killed along with the word.  If you wish to kill
     only the next word but not the punctuation, simply do  Meta-F  to
     get  the  end,  and  kill  the  word  backwards with Meta-Rubout.
     Meta-D takes arguments just like Meta-F.

       Meta-Rubout (^R Backward  Kill  Word)  kills  the  word  before
     point.  It kills everything from point back to where Meta-B would
     move to.  If point is after the space in "FOO, BAR", then "FOO, "
     is  killed.  If you wish to kill just "FOO", then do a Meta-B and
     a Meta-D instead of a Meta-Rubout.

       Meta-T (^R Transpose Words) moves the  cursor  forward  over  a
     word,  dragging  the  word  preceding  or  containing  the cursor
     forward as well.  A numeric argument serves as  a  repeat  count.
     Meta-T  with a negative argument undoes the effect of Meta-T with
     a positive argument; it drags the word behind the cursor backward
     over a word.  An argument of  zero,  instead  of  doing  nothing,
     transposes the word at point (surrounding or adjacent to it) with
     the  word at mark.  In any case, the delimiter characters between
     the words do not move.  For example, "FOO, BAR"  transposes  into
     "BAR, FOO" rather than "BAR FOO,".

       To  operate on the next n words with an operation which applies
     between point and mark, you can either set the mark at point  and
     then   move   over   the  words,  or  you  can  use  the  command
     Meta-@ (^R Mark Word) which does not move  point,  but  sets  the
     mark  where Meta-F would move to.  It can be given arguments just
     like Meta-F.

       Note that if you are in Atom Word mode and in  Lisp  mode,  all
     the  word  commands  regard an entire Lisp atom as a single word.
     See section 22.1 [Minor Modes], page 134.

       The  word  commands'  understanding  of  syntax  is  completely
     55                                  EMACS Manual for TWENEX Users



     controlled  by the syntax table.  Any character can, for example,
     be declared to be a word delimiter.  See section  22.4  [Syntax],
     page 140.



     11.2 Sentence and Paragraph Commands


       The  EMACS  commands  for manipulating sentences and paragraphs
     are mostly Meta- commands, so as to  resemble  the  word-handling
     commands.


             M-A     Move back to the beginning of the sentence.
             M-E     Move forward to the end of the sentence.
             M-K     Kill forward to the end of the sentence.
             M-[     Move back to previous paragraph beginning.
             M-]     Move forward to next paragraph end.
             M-H     Put  point and mark around this paragraph (around
                     the following one, if between paragraphs).
             C-X Rubout
                     Kill back to the beginning of the sentence.  


     11.2.1 Sentences


       The commands  Meta-A  and  Meta-E  (^R  Backward  Sentence  and
     ^R Forward Sentence) move to the beginning and end of the current
     sentence,  respectively.   They were chosen to resemble Control-A
     and Control-E, which move to the beginning and  end  of  a  line.
     Unlike  them,  Meta-A  and  Meta-E  if  repeated or given numeric
     arguments move over successive  sentences.    EMACS  considers  a
     sentence  to  end wherever there is a ".", "?" or "!" followed by
     the end of a line or two spaces, with any number of ")"'s, "]"'s,
     "'"'s, or '"' 's allowed in between.  Neither M-A nor  M-E  moves
     past the CRLF or spaces which delimit the sentence.

       Just  as C-A and C-E have a kill command, C-K, to go with them,
     so M-A and M-E have a corresponding kill  command  M-K  (^R  Kill
     Sentence)  which  kills  from  point  to the end of the sentence.
     With minus one as an argument it kills back to the  beginning  of
     the sentence.  Larger arguments serve as a repeat count.

       There  is  a  special  command,  C-X  Rubout  (^R Backward Kill
     Sentence) for killing  back  to  the  beginning  of  a  sentence,
     because this is useful when you change your mind in the middle of
     composing text.
     56                                  EMACS Manual for TWENEX Users



     11.2.2 Paragraphs


       Meta-[  (^R  Backward  Paragraph) moves to the beginning of the
     current  or  previous  paragraph,  while   Meta-]   (^R   Forward
     Paragraph)  moves  to  the  end of the current or next paragraph.
     Blank lines and text justifier command lines separate  paragraphs
     and are not part of any paragraph.  Also, an indented line starts
     a new paragraph.

       In  major  modes  for  programs  (as  opposed  to  Text  mode),
     paragraphs are determined only by blank lines.   This  makes  the
     paragraph commands continue to be useful even though there are no
     paragraphs per se.

       When  there  is a fill prefix, then paragraphs are delimited by
     all  lines  which  don't  start  with  the  fill  prefix.     See
     section 11.4 [Filling], page 59.

       When  you  wish  to  operate  on  a  paragraph, you can use the
     command Meta-H (^R Mark Paragraph) to set the region  around  it.
     This  command  puts point at the beginning and mark at the end of
     the paragraph point was in.  Before setting the new mark  at  the
     end,  a mark is set at the old location of point; this allows you
     to undo a mistaken Meta-H with  two  C-U  C-@'s.    If  point  is
     between  paragraphs  (in a run of blank lines, or at a boundary),
     the paragraph following point is surrounded by  point  and  mark.
     Thus, for example, Meta-H C-W kills the paragraph around or after
     point.

       One way to make an "invisible" paragraph boundary that does not
     show  if  the  file  is  printed is to put space-backspace at the
     front of a line.  The space makes the line appear (to  the  EMACS
     paragraph  commands)  to be indented, which usually means that it
     starts a paragraph.

       The variable Paragraph Delimiter should be a TECO search string
     (See section 19.3 [TECO search strings], page 101.)  composed  of
     various  characters  or character sequences separated by ^O's.  A
     line whose beginning matches the  search  string  is  either  the
     beginning of a paragraph or a text justifier command line part of
     no  paragraph.  If the line begins with period, singlequote, "-",
     "\" or "@", it can be a text justifier command  line;  otherwise,
     it  can  be the beginning of a paragraph; but it cannot be either
     one unless Paragraph Delimiter is set up to recognize it.   Thus,
     ".^O  "  as  the  Paragraph  Delimiter  string  means  that lines
     starting  with  spaces  start  paragraphs,  lines  starting  with
     periods are text justifier commands, and all other nonblank lines
     are nothing special.
     57                                  EMACS Manual for TWENEX Users



     11.3 Indentation Commands for Text


             Tab         Indents  "appropriately"  in a mode-dependent
                         fashion.
             M-Tab       Inserts a tab character.
             Linefeed    Is the same as Return followed by Tab.
             M-^         Undoes a Linefeed.  Merges two lines.
             M-M         Moves to the line's first nonblank character.
             M-I         Indent to tab stop.  In Text mode,  Tab  does
                         this also.
             C-M-\       Indent several lines to same column.
             C-X Tab     Shift block of lines rigidly right or left.  


       The  way  to  request indentation is with the Tab command.  Its
     precise effect depends on the major  mode.    In  Text  mode,  it
     indents  to  the  next  tab stop.  You can set the tab stops with
     Edit Tab Stops (see below).  If you just want  to  insert  a  tab
     character in the buffer, you can use M-Tab or C-Q Tab.

       For  English  text,  usually only the first line of a paragraph
     should be indented.  So, in Text mode, new lines created by  Auto
     Fill  mode  are not indented.  Text mode tells Auto Fill mode not
     to indent new lines by setting the variable Space Indent Flag  to
     zero.

       But  sometimes you want to have an indented paragraph.  In such
     cases, use M-X Edit Indented Text,  which  enters  a  submode  in
     which Tab and Auto Fill indent each line under the previous line,
     and  only blank lines delimit paragraphs.  Alternatively, you can
     specify a fill prefix (see below).

       To undo a line-break, whether done manually or  by  Auto  Fill,
     use  the  Meta-^  (^R  Delete  Indentation) command to delete the
     indentation at the front  of  the  current  line,  and  the  line
     boundary  as well.  They are replaced by a single space, or by no
     space if before a ")" or after a "(", or at the  beginning  of  a
     line.    To  delete  just  the  indentation  of a line, go to the
     beginning of the  line  and  use  Meta-\  (^R  Delete  Horizontal
     Space), which deletes all spaces and tabs around the cursor.

       To  insert  an  indented  line before the current line, do C-A,
     C-O, and then Tab.  To make an indented line  after  the  current
     line, use C-E Linefeed.

       To  move  over  the  indentation  on a line, do Meta-M or C-M-M
     (^R Back to Indentation).  These commands, given  anywhere  on  a
     line,  position the cursor at the first nonblank character on the
     line.
     58                                  EMACS Manual for TWENEX Users



       There are also commands for changing the indentation of several
     lines at once.  Control-Meta-\ (^R Indent Region) gives each line
     which  begins  in  the region the "usual" indentation by invoking
     Tab at the beginning of the line.  A numeric  argument  specifies
     the  indentation,  and each line is shifted left or right so that
     it has exactly that much.  C-X Tab (^R Indent Rigidly) moves  all
     of  the  lines  in  the  region  right by its argument (left, for
     negative arguments).  The  whole  group  of  lines  move  rigidly
     sideways, which is how the command gets its name.


     11.3.1 Tab Stops


       For  typing  in  tables,  you can use Text mode's definition of
     Tab, ^R Tab to Tab Stop, which may be given anywhere in  a  line,
     and  indents  from there to the next tab stop.  If you are not in
     Text mode, this function can be found on M-I anyway.

       Set the tab stops using Edit Tab Stops,  which  allows  you  to
     edit  some  text  which  defines  the tab stops.  Here is what it
     would look like for ordinary tab stops every eight columns.


                 :       :       :       :       :       :

          123456789 123456789 123456789 123456789 123456789 1234
         0        10        20        30        40        50


       The first line contains a colon or period  at  each  tab  stop.
     Colon  indicates  an ordinary tab, which fills with whitespace; a
     period specifies that characters be copied from the corresponding
     columns of the second line below it.  Thus,  you  can  tab  to  a
     column  automatically  inserting  dashes  or periods, etc.  It is
     your responsibility to put in the second  line  the  text  to  be
     copied.  In the example above there are no periods, so the second
     line is not used, and is left blank.

       The  third  and  fourth lines you see contain column numbers to
     help you edit.  They are only there while you are editing the tab
     stops; they are not really part of the tab settings.   The  first
     two  lines  reside in the variable Tab Stop Definitions when they
     are not being edited.  If the second line is not needed, Tab Stop
     Definitions can be just one line, with no CRLFs.  This  makes  it
     easier  to  set  the  variable  in  a  local  modes  list.    See
     section 22.7 [Locals], page 151.

       EMACS normally uses both tabs and spaces to indent  lines,  and
     59                                  EMACS Manual for TWENEX Users



     displays  tab  characters  using eight-character tab stops.  (How
     the ASCII character tab is displayed has nothing to do  with  the
     definition  of  the  Tab character as a command).  If you prefer,
     all indentation can be made from spaces only.  To  request  this,
     turn  off Indent Tabs mode with the command M-X Indent Tabs Mode.
     To display tabs with different tab stops, set the  TECO  flag  FS
     TAB  WIDTH$  to  the  desired  interval.    This  is  useful  for
     displaying files  brought  from  other  operating  systems  whose
     normal  tab  stop spacing is not 8.  See section 22.5 [FS Flags],
     page 143.

       To convert all tabs in a  file  to  spaces,  you  can  use  M-X
     Untabify.    M-X  Tabify  performs  the  opposite transformation,
     replacing spaces with tabs whenever possible, but only  if  there
     are  at  least  three  of  them  so  as  not  to  obscure ends of
     sentences.  A numeric argument to Tabify  or  Untabify  specifies
     the interval between tab stops to use for computing how to change
     the  file.  By default, they use the same interval being used for
     display.  The visual appearance  of  the  text  should  never  be
     changed by Tabify or Untabify without a numeric argument.



     11.4 Text Filling


             Space   in Auto Fill mode, breaks lines when appropriate.
             M-Q     Fill paragraph.
             M-G     Fill  region  (G  is  for  Grind, by analogy with
                     Lisp).
             M-S     Center a line.
             C-X =   Show current cursor position.  


       Auto Fill mode lets you type in text that is filled (broken  up
     into  lines  that  fit  in  a specified width) as you go.  If you
     alter existing text and thus cause it to  cease  to  be  properly
     filled, EMACS can fill it again if you ask.

       Entering  Auto Fill mode is done with M-X Auto Fill.  From then
     on, lines are broken automatically at spaces when they get longer
     than the desired width.  New  lines  created  by  Auto  Fill  are
     usually  indented,  but in Text mode they are not.  To leave Auto
     Fill mode, execute M-X Auto Fill again.  When Auto Fill  mode  is
     in effect, the word "Fill" appears in the mode line.

       When  you  finish  a  paragraph,  you  can  type  Space with an
     argument of zero.  This doesn't insert any spaces,  but  it  does
     move  the  last word of the paragraph to a new line if it doesn't
     60                                  EMACS Manual for TWENEX Users



     fit in the old line.  Return also moves the last word, but it may
     create another blank line.

       If  you  edit  the  middle  of a paragraph, it may no longer be
     correctly filled.  To refill a paragraph, use the command  Meta-Q
     (^R  Fill  Paragraph).    It  causes  the paragraph that point is
     inside, or the one after point if point is between paragraphs, to
     be refilled.  All the line-breaks are removed, and then new  ones
     are  inserted  where  necessary.  M-Q can be undone with M-X Undo
     (See section 24.3 [Undo], page 164.).

       If you are not happy with Meta-Q's  idea  of  where  paragraphs
     start   and  end  (the  same  as  Meta-H's.    See  section  11.2
     [Paragraphs], page 55.), you can  use  Meta-G  (^R  Fill  Region)
     which  refills  everything between point and mark.  Sometimes, it
     is ok to fill a region of several paragraphs  at  once.    Meta-G
     recognizes  a  blank  line  or  an  indented  line  as starting a
     paragraph and does not fill it in with the preceding line.    The
     sequence  space-backspace at the front of a line prevents it from
     being filled into the preceding line but is  invisible  when  the
     file  is  printed.    However,  the  full  sophistication  of the
     paragraph commands in recognizing  paragraph  boundaries  is  not
     available.    The  purpose  of  M-G  is  to allow you to override
     EMACS's usual criteria for paragraph  boundaries.    M-G  can  be
     undone with M-X Undo.

       Giving  an  argument  to  M-G  or  M-Q  causes  the  text to be
     justified as well as filled.  This means that  extra  spaces  are
     inserted  between  the  words so as to make the right margin come
     out exactly even.  I do not recommend doing  this.    If  someone
     else  has  uglified some text by justifying it, you can unjustify
     it (remove the spaces) with M-G or M-Q without an argument.

       The command Meta-S (^R Center Line) centers a line  within  the
     current  line  width.  With an argument, it centers several lines
     individually and moves past them.

       The maximum line width for filling  is  in  the  variable  Fill
     Column.    Both  M-Q and Auto Fill make sure that no line exceeds
     this width.  The easiest way to set the variable is  to  use  the
     command  C-X  F  (^R Set Fill Column), which places the margin at
     the column point is on, or at the column specified by  a  numeric
     argument.  The fill column is initially column 70.

       To  fill  a  paragraph in which each line starts with a special
     marker  (which  might  be  a  few  spaces,  giving  an   indented
     paragraph),  use  the  fill prefix feature.  Move point to a spot
     right after the special marker and give the  command  C-X  Period
     (^R  Set  Fill  Prefix).  Then, filling the paragraph will remove
     61                                  EMACS Manual for TWENEX Users



     the  marker from each line beforehand, and put the marker back in
     on each line afterward.  Auto Fill when there is  a  fill  prefix
     inserts the fill prefix at the front of each new line.  Also, any
     line  which  does not start with the fill prefix is considered to
     start a paragraph.  To turn off the fill prefix,  do  C-X  Period
     with  point  at  the front of a line.  The fill prefix is kept in
     the variable Fill Prefix.

       The command C-X = (What Cursor Position) can be  used  to  find
     out  the  column  that  the cursor is in, and other miscellaneous
     information about point which is quick to compute.  It  prints  a
     line in the echo area that looks like this:  


         X=5 Y=7 CH=101 .=3874(35% of 11014) H=<3051,4640>


     In this line, the X value is the column the cursor is in (zero at
     the  left),  the Y value is the screen line that the cursor is in
     (zero at the top), the  CH  value  is  the  octal  value  of  the
     character  after  point  (101  is  "A"), the "point" value is the
     number of characters in the buffer before point, and  the  values
     in  parentheses are the percentage of the buffer before point and
     the total size of the buffer.

       The H values are the virtual buffer boundaries, indicate  which
     part of the buffer is still visible when narrowing has been done.
     If  you  have  not done narrowing, the H values are omitted.  For
     more  information  about  the  virtual  buffer  boundaries,   See
     section 17 [Narrowing], page 93.



     11.5 Case Conversion Commands


       EMACS  has  commands for converting either a single word or any
     arbitrary range of text to upper case or to lower case.


             M-L         Convert following word to lower case.
             M-U         Convert following word to upper case.
             M-C         Capitalize the following word.
             C-X C-L     Convert region to lower case.
             C-X C-U     Convert region to upper case.  


       The word conversion commands  are  the  most  useful.    Meta-L
     (^R  Lowercase Word) converts the word after point to lower case,
     62                                  EMACS Manual for TWENEX Users



     moving  past  it.    Thus, successive Meta-L's convert successive
     words.  Meta-U (^R  Uppercase  Word)  converts  to  all  capitals
     instead,  while  Meta-C  (^R  Uppercase  Initial)  puts the first
     letter of the word into upper case and the rest into lower  case.
     All  these  commands  convert  several  words at once if given an
     argument.  They are especially convenient for converting a  large
     amount of text from all upper case to mixed case, because you can
     move  through  the  text  using  M-L,  M-U or M-C on each word as
     appropriate.

       When given  a  negative  argument,  the  word  case  conversion
     commands  apply  to the appropriate number of words before point,
     but do not move point.  This is convenient  when  you  have  just
     typed a word in the wrong case.  You can give the case conversion
     command and continue typing.

       If  a  word case conversion command is given in the middle of a
     word, it applies only to the part of the word which  follows  the
     cursor, treating it as a whole word.

       The  other  case  conversion commands are C-X C-U (^R Uppercase
     Region)  and  C-X  C-L  (^R  Lowercase  Region),  which   convert
     everything  between  point and mark to the specified case.  Point
     and mark do not move.  These commands ask for confirmation if the
     region contains more than Region Query Size characters; they also
     save the original contents of the region so  you  can  undo  them
     (See section 24.3 [Undo], page 164.).



     11.6 Underlining


       EMACS   has   two   commands  for  manipulating  text-justifier
     underlining command characters.  These commands  do  not  produce
     any  sort of overprinting in the text file itself; they insert or
     move command characters which direct text justifiers  to  produce
     underlining.    By default, commands for the text justifier R are
     used.


             M-_         Underline previous word or next word.
             C-X _       Underline region.  


       M-_ is somewhat like M-# in that it either creates an underline
     around the previous word  or  extends  it  past  the  next  word.
     However,  where  a  font  change requires that you specify a font
     number, an underline is just an underline and  has  no  parameter
     63                                  EMACS Manual for TWENEX Users



     for  you  to  specify.    Also,  it  is  assumed  that  the  text
     justifier's commands  for  starting  and  ending  underlines  are
     distinguishable,  whereas  you  can't  tell  from  a  font change
     whether it is "starting" something or "ending"  something.    M-_
     differs slightly from M-# as a result.

       M-_  with  no argument creates an underline around the previous
     word if there is none.  If there is an  underline  there,  it  is
     extended  one  word  forward.  Thus, you can insert an underlined
     word by typing the word and then a M-_.   Or  you  can  underline
     several  existing  words  by  moving  past the first of them, and
     typing one M-_ for each word.

       M-  given in  the  vicinity  of  an  underline-begin  moves  it
     forward.    Thus,  it  should  be  thought  of as applying to any
     boundary, where underlining either starts or stops, and moving it
     forward.  If a begin underlining is moved past an  end,  or  vice
     versa, they both disappear.

       Giving  M-_  an  argument  merely  tells it to apply to several
     words at once instead of one.  M-_ with a positive argument of  n
     underlines  the  next n words, either creating an underlined area
     or extending an existing one.  With  a  negative  argument,  that
     many previous words are underlined.  Thus, M-_ can do more things
     with underlines than M-# can do with font changes, because of the
     facts  that you don't need to use the argument to say which font,
     and you can tell a beginning from an end.

       For larger scale  operations,  you  can  use  C-X  _  to  place
     underlines  from point to mark, or C-X _ with a negative argument
     to remove all underlining between point and mark.

       By default, ^B is used to begin an underline and ^E is used  to
     end  one.  The variables Underline Begin and Underline End may be
     created and set  to  strings  to  use  instead.    For  a  single
     character you can use the numeric ASCII code for it.



     11.7 SCRIBE Mode


       SCRIBE   mode   provides  many  special  editing  commands  for
     manipulating  the  commands  for  the  text   justifier   SCRIBE.
     Instances  of  SCRIBE  commands  are  referred  to  in  EMACS  as
     environments, though strictly speaking it  is  the  command  name
     which is the environment, and not all commands either.
     64                                  EMACS Manual for TWENEX Users



             C-M-N       Move forward over SCRIBE environment.
             C-M-P       Move backward over SCRIBE environment.
             C-M-U       Move  up  to  beginning  of containing SCRIBE
                         environment.
             C-M-D       Move forward  and  down  inside  next  SCRIBE
                         environment.
             C-M-E       Move   up   to   end   of  containing  SCRIBE
                         environment.
             C-M-H       Put point and mark around  containing  SCRIBE
                         environment.
             C-M-G       Change name of containing SCRIBE environment.
             C-M-Q       Change form of containing SCRIBE environment.


       In  SCRIBE  mode  the  standard  expression  motion and killing
     commands C-M-F, C-M-B, C-M-K and C-M-Rubout operate on  units  of
     balanced  SCRIBE  delimiters.    Additional  commands specific to
     SCRIBE mode move around the  structure  of  SCRIBE  environments.
     C-M-N  (^R  Forward  Environment)  moves  forward  over an entire
     SCRIBE expression (@,  environment  name  and  arguments),  C-M-P
     (^R  Backward  Environment)  moves  back,  C-M-U  (^R Backward Up
     Environment) moves up, and  C-M-D  (^R  Down  Environment)  moves
     down.    C-M-E (^R End of Environment) moves up to the end of the
     containing SCRIBE environment.  C-M-H (^R Mark Environment)  puts
     point and mark around the containing SCRIBE environment.

       Speaking  of  balanced  delimiters,  SCRIBE  mode does not work
     properly when the characters ' and ` are used as  delimiters  for
     arguments.   This is because the parser expects each character to
     be either a parenthesis (which matches a different character)  or
     a   string   quote   (which  matches  itself),  not  both.    See
     section 22.4 [Syntax Table], page 140.  SCRIBE mode  simply  does
     not treat these characters as possible delimiters, and it is best
     not  to  use  them.    It  is  just as well, since if SCRIBE mode
     actually tried to handle these delimiters it would be confused by
     apostrophes in the text.

       Other commands transform SCRIBE environments.  C-M-G (^R Change
     Environment Name) changes the name of the SCRIBE environment that
     point is inside.  For example, if point is  somewhere  inside  an
     @I[...]  environment,  C-M-G could be used to change the @I to an
     @U.  C-M-G reads the new environment name from the  terminal  and
     replaces the old environment name with it.

       C-M-Q   (^R   Change   Form)   changes  the  containing  SCRIBE
     environment between the brief form such as @Example[...] and  the
     longer  form @Begin(Example)...@End(Example).  If the environment
     has the brief form, it is changed to the longer  form,  and  vice
     versa.
     65                                  EMACS Manual for TWENEX Users



       In  SCRIBE  mode, paragraphs are redefined to understand SCRIBE
     commands in a way that is usually right.  Any line that  consists
     entirely    of    one    SCRIBE    command    is   considered   a
     paragraph-separating line, just like a blank line.  This does the
     right thing for @Begin and @End, and for many other cases.  So is
     any line that starts with an @; or @' command.   The  @;  and  @'
     commands  are  supposed  to be no-ops at the beginning of a line,
     and can therefore be used to mark lines  that  you  think  should
     separate  paragraphs.   Which one works, and when, depends on the
     version of SCRIBE.  Eventually, @; will always work.

       Aside from the above cases, SCRIBE commands are considered part
     of the text, so an @I command which happens  to  end  up  at  the
     front  of  a  line  will  not  separate  paragraphs.  SCRIBE mode
     accomplishes this by redefining M-[ and the function ^R  Backward
     Paragraph to be the function ^R Backward SCRIBE Paragraph.  Lines
     starting  with page delimiters are paragraph delimiters as usual,
     and lines starting with space or tab start paragraphs as usual.

       The comment commands know that comments in SCRIBE  files  start
     with  "@Comment{" and end with "}".  See section 20.5 [Comments],
     page 107.

       You can use the M-X Compile command  to  invoke  SCRIBE.    See
     section  20.2  [Compile],  page  103.    It  operates on the file
     currently visited.  You can use  a  string  argument  to  specify
     switches.    After  SCRIBE is finished, if there were any errors,
     EMACS splits the screen and displays the  errors  in  the  bottom
     window.   The command M-X Next Scribe Error moves to the point in
     the file at which the next error occurred.

       The functions listed  in  this  section  live  in  the  library
     SCRIBE, which is loaded automatically if you enter SCRIBE mode.



     11.8 Dissociated Press


       M-X  Dissociated  Press  is  a command for scrambling a file of
     text either word by word or character  by  character.    Starting
     from  a  bufferfull  of  straight  English, it produces extremely
     amusing output.  Dissociated  Press  prints  its  output  on  the
     terminal.  It does not change the contents of the buffer.

       Dissociated  Press operates by jumping at random from one point
     in the buffer to another.  In order to produce  plausible  output
     rather  than gibberish, it insists on a certain amount of overlap
     between the end of one run of consecutive words or characters and
     66                                  EMACS Manual for TWENEX Users



     the  start  of  the  next.    That is, if it has just printed out
     "president" and then decides to jump to a different point in  the
     file,  it  might  spot  the "ent" in "pentagon" and continue from
     there, producing "presidentagon".  Long sample texts produce  the
     best results.

       A  negative  argument  to  M-X  Dissociated  Press  tells it to
     operate character by  character,  and  specifies  the  number  of
     overlap characters.  A positive argument tells it to operate word
     by word and specifies the number of overlap words.  In this mode,
     whole  words  are  treated as the elements to be permuted, rather
     than characters.  No argument is equivalent  to  an  argument  of
     two.   For your againformation, the output is only printed on the
     terminal.  The file you start with is not changed.

       Dissociated Press produces nearly the same results as a  Markov
     chain  based  on  a  frequency  table constructed from the sample
     text.  It is, however,  an  independent,  ignoriginal  invention.
     Dissociated  Press  techniquitously  copies  several  consecutive
     characters from the sample  between  random  choices,  whereas  a
     Markov  chain  would  choose randomly for each word or character.
     This makes for more plausible sounding results.

       It is a mustatement that too much use of Dissociated Press  can
     be a developediment to your real work.  Sometimes to the point of
     outragedy.    And keep dissociwords out of your documentation, if
     you want it to be well userenced and properbose.  Have fun.  Your
     buggestions are welcome.
     67                                  EMACS Manual for TWENEX Users



                              CHAPTER TWELVE
                         COMMANDS FOR FIXING TYPOS



       In  this  section  we describe the commands that are especially
     useful for the times when you catch a mistake in your  text  just
     after  you have made it, or change your mind while composing text
     on line.


             Rubout          Delete last character.
             M-Rubout        Kill last word.
             C-X Rubout      Kill to beginning of sentence.
             C-T             Transpose two characters.
             C-X C-T         Transpose two lines.
             C-X T           Transpose two arbitrary regions.
             M-Minus M-L     Convert last word to lower case.
             M-Minus M-U     Convert last word to all upper case.
             M-Minus M-C     Convert last  word  to  lower  case  with
                             capital initial.
             M-'             Fix up omitted shift key on digit.
             M-$             (Meta-Dollar   Sign)  Check  and  correct
                             spelling of word.
             Correct Spelling
                             Check  and  correct  spelling  of  entire
                             buffer.  



     12.1 Killing Your Mistakes


       The  Rubout  command  is the most important correction command.
     When used among printing (self-inserting) characters, it  can  be
     thought of as canceling the last character typed.

       When  your  mistake  is  longer than a couple of characters, it
     might be more convenient to use M-Rubout or C-X Rubout.  M-Rubout
     kills back to the start of the last word, and  C-X  Rubout  kills
     back  to  the  start  of  the  last  sentence.    C-X  Rubout  is
     particularly useful when you are thinking of what to write as you
     type it, in case you change your mind about phrasing.    M-Rubout
     and  C-X  Rubout save the killed text for C-Y and M-Y to retrieve
     (See section 9.2 [Un-killing], page 44.).

       M-Rubout is often useful even when you have typed  only  a  few
     characters wrong, if you know you are confused in your typing and
     aren't  sure  exactly what you typed.  At such a time, you cannot
     68                                  EMACS Manual for TWENEX Users



     correct  with  Rubout except by looking at the screen to see what
     you did.  It requires less thought to kill  the  whole  word  and
     start over again, especially if the system is heavily loaded.



     12.2 Transposition


       The  common  error  of transposing two characters can be fixed,
     when they are adjacent, with the  C-T  command.    Normally,  C-T
     transposes the two characters on either side of the cursor.  When
     given  at  the  end  of  a line, rather than transposing the last
     character of the line with the line  separator,  which  would  be
     useless, C-T transposes the last two characters on the line.  So,
     if  you catch your transposition error right away, you can fix it
     with just a C-T.  If you don't catch it so fast,  you  must  move
     the cursor back to between the two transposed characters.  If you
     transposed a space with the last character of the word before it,
     the  word  motion  commands  are  a  good  way  of getting there.
     Otherwise, a reverse search (C-R) is often the  best  way.    See
     section 10 [Search], page 49.

       To  transpose  two lines, use the C-X C-T command (^R Transpose
     Lines).  M-T transposes words and C-M-T transposes s-expressions.

       A more  general  transpose  command  is  C-X  T  (^R  Transpose
     Regions).    This  transposes two arbitrary blocks of text, which
     need not even be next to each other.  To use it, set the mark  at
     one end of one block, then at the other end of the block; then go
     to  the other block and set the mark at one end, and put point at
     the other.  In other words, point and the last three marks should
     be at the four locations which are the ends of  the  two  blocks.
     It  does  not  matter which of the four locations point is at, or
     which order the others were marked.  C-X  T  transposes  the  two
     blocks of text thus identified, and relocates point and the three
     marks without changing their order.



     12.3 Case Conversion


       A  very  common  error  is  to  type  words  in the wrong case.
     Because of this, the word case-conversion commands M-L,  M-U  and
     M-C  have  a  special feature when used with a negative argument:
     they do not move the cursor.    As  soon  as  you  see  you  have
     mistyped  the last word, you can simply case-convert it and go on
     typing.  See section 11.5 [Case], page 61.
     69                                  EMACS Manual for TWENEX Users



       Another  common  error  is to type a special character and miss
     the shift key, producing a digit instead.   There  is  a  special
     command  for  fixing this: M-' (^R Upcase Digit), which fixes the
     last digit before point in this  way  (but  only  if  that  digit
     appears  on the current line or the previous line.  Otherwise, to
     minimize random effects of accidental  use,  M-'  does  nothing).
     Once again, the cursor does not move, so you can use M-' when you
     notice  the  error  and immediately continue typing.  Because M-'
     needs to know the arrangement of your keyboard,  the  first  time
     you  use  it you must supply the information by typing the row of
     digits 1, 2, ... , 9, 0 but holding down the  shift  key.    This
     tells   M-'   the   correspondence  between  digits  and  special
     characters, which is remembered for the duration of the EMACS  in
     the  variable  Digit  Shift  Table.    This command is called M-'
     because its main use is to replace "7" with a single-quote.



     12.4 Checking and Correcting Spelling


       When you write a paper, you should correct its spelling at some
     point close to finishing it (and maybe  earlier  as  well).    To
     correct the entire buffer, do M-X Correct Spelling.  This invokes
     the ISPELL spelling corrector program, which will ask you what to
     do  with each misspelled word.  Refer to its documentation.  When
     it finished, you will be back in EMACS.

       To check the spelling of the word before point, and  optionally
     correct  it  as  well,  use  the  command  M-$  (^R  Correct Word
     Spelling).  This is a Dollar sign, not an Altmode!  This  command
     sends the word to the ISPELL program for correction.

       If  ISPELL  recognizes  the  word  as  a  correctly spelled one
     (although not necessarily the one you meant!) you will see "Found
     it" or "Found it because of" followed by  the  word  without  its
     suffix.  If the program cannot at all recognize the word, it will
     print "Couldn't find it."

       If  ISPELL recognizes the word as a misspelling, it displays on
     the screen the  other  words  which  are  possibilities  for  the
     correct  spelling,  and  gives  each one a number.  Then, you can
     type one of the following things:


             0 to 9      Replace misspelled word  with  that  spelling
                         (preserving  case,  just  like Replace String
                         and Query Replace,  unless  Case  Replace  is
                         zero).
     70                                  EMACS Manual for TWENEX Users



             Space       Exit and make no changes.
             %           Read a digit as above and Query Replace (M-%)
                         the  incorrect  spelling with the correct one
                         from the beginning of the buffer.


       No other responses are allowed.

       The cursor need not be immediately after the word you  want  to
     correct; it can be in the middle, or following any word-separator
     characters  after  the end of the word.  Note that the major mode
     you are using affects which characters are word-separators.   See
     section 22.4 [Syntax Table], page 140.

       The first time you use an EMACS spelling correction command, it
     creates  an  ISPELL  fork for you.  From then on it uses the same
     ISPELL fork.  It's ok to kill the fork if you don't think  you'll
     be  using M-$ again during that session.  But if you do leave the
     fork around checking words will  much  quicker.    Giving  M-$  a
     negative argument (as in M-- M-$) kills the ISPELL fork.

       If you are a regular user of the ISPELL program, you might have
     a dictionary file of words which you use but which are foreign to
     ISPELL.   If there are words in this file which you might want to
     use M-$ to correct, you can specify that you want this dictionary
     to be loaded into the spell job which EMACS uses.   To  do  this,
     set  the  variable  Spell  Initialization to the string of ISPELL
     program commands you want to use.  For loading a dictionary, this
     string would be a "Load " followed by  the  dictionary  filename.
     Other  initialization  commands for ISPELL can appear there also.
     The commands must be separated by commas.

       You can also pass arbitrary commands to  the  ISPELL  job  with
     command M-X Command to Spell.
     71                                  EMACS Manual for TWENEX Users



                             CHAPTER THIRTEEN
                               FILE HANDLING



       The  basic unit of stored data is the file.  Each program, each
     paper, lives usually in its own file.    To  edit  a  program  or
     paper, the editor must be told the name of the file that contains
     it.    This is called visiting the file.  To make your changes to
     the file permanent on disk, you must save the file.   EMACS  also
     has  facilities  for deleting files conveniently, and for listing
     your file directory.  Special text in  a  file  can  specify  the
     modes to be used when editing the file.



     13.1 Visiting Files


             C-X C-V     Visit a file.
             C-X C-Q     Change regular visiting to read only, or vice
                         versa.
             C-X C-S     Save the visited file.
             Meta-~      Tell EMACS to forget that the buffer has been
                         changed.  


       Visiting a file means copying its contents into EMACS where you
     can edit them.  EMACS remembers the name of the file you visited.
     Unless  you  use the multiple buffer or window features of EMACS,
     you can only be visiting one file at a time.   The  name  of  the
     file you are visiting in the currently selected buffer is visible
     in  the  mode  line  when  you  are at top level, followed by its
     version number in parentheses.

       The changes you make with EMACS  are  made  in  a  copy  inside
     EMACS.   The file itself is not changed.  The changed text is not
     permanent until you save it in a file.  The first time you change
     the text, a star appears at  the  end  of  the  mode  line;  this
     indicates that the text contains fresh changes which will be lost
     unless you save them.

       To  visit  a  file,  use  the  command C-X C-V (^R Visit File).
     Follow the command with the name of the file you wish  to  visit,
     terminated  by  a  Return.  If you can see a filename in the mode
     line, then that name is the default, and  any  component  of  the
     filename  which  you  don't  specify  is taken from it.  If EMACS
     thinks you can't see the  defaults,  they  are  included  in  the
     prompt.    You  can  abort the command by typing C-G, or edit the
     72                                  EMACS Manual for TWENEX Users



     filename   with  the  standard  Twenex  editing  and  recognition
     commands (Rubout, C-W, C-U, C-F and Altmode).  If you do  type  a
     Return  to finish the command, the new file's text appears on the
     screen, and its name and version appear in the mode line.

       When you wish to save the file and make your changes permanent,
     type C-X C-S (^R Save File).  After the save is finished, C-X C-S
     prints "Written: <filenames>" in the echo area at the  bottom  of
     the  screen.  If there are no changes to save (no star at the end
     of the mode line), the file is not saved; it would  be  redundant
     to save a duplicate of the previous version.

       Because  a  system  crash  can cause you to lose everything you
     have done since the last save, we provide Auto Save  mode,  which
     saves   the   files   you   are  visiting  at  regular  intervals
     automatically.    See  section  13.3  [Auto   Save],   page   74.
     Alternatively,  you  can  use  journal  files.   See section 24.4
     [Journals], page 165.

       What if you want to create a file?    Just  visit  it.    EMACS
     prints  "(New  File)"  but  aside from that behaves as if you had
     visited an existing empty file.  If you make any changes and save
     them, the file is created.   If  you  visit  a  nonexistent  file
     unintentionally (because you typed the wrong file name), go ahead
     and  visit  the  file  you meant.  If you don't save the unwanted
     file, it is not created.

       If there are still people using EDIT or SOS  on  your  machine,
     you  may  have  to  visit  files  with line numbers in them.  The
     function Strip SOS Line Numbers removes all line numbers from the
     current buffer.  It also removes all null (^@)  characters.    An
     explicit  argument  inhibits  removal  of  nulls  unless the file
     actually has line numbers.

       If you alter one file  and  then  visit  another  in  the  same
     buffer,  EMACS  offers to save the old one.  If you answer Y, the
     old file is saved; if you answer N, all the changes you have made
     to it since the last save are lost.  You should  not  type  ahead
     after  a  file  visiting  command,  because your type-ahead might
     answer an unexpected question in a way  that  you  would  regret.
     The  variable  Visit File Save Old controls this offer; normally,
     it is one, which means that the offer is made.  If  it  is  minus
     one,  then  the old file is always saved when you visit a new one
     in the same buffer; no question is asked.  If it is zero, the old
     file is never saved.

       A nonzero argument to C-X  C-V  specifies  read-only  visiting.
     This means that EMACS prevents you from modifying the file unless
     you  insist.   You should use this when you visit a file that you
     73                                  EMACS Manual for TWENEX Users



     do no want to change, just to avoid changing it accidentally.  If
     you give C-X C-V a positive argument, then the file is read-only.
     This  means  you  can  change  the  text in the buffer, but EMACS
     requires extra confirmation if you ask  to  save  the  file,  and
     never  offers  to  save  it.    If  you  give  C-X C-V a negative
     argument, then the buffer itself is read-only; commands to change
     the text are not  allowed.    If  the  visited  file  is  visited
     read-only,  in either fashion, then the characters "(R-O)" appear
     in the mode line after the filename.  The command C-X C-Q (^R Set
     File Read-Only) is used to switch between  read-only  and  normal
     visiting.    Its  numeric  argument  means  the same thing as the
     argument to C-X C-V: zero means  changes  are  allowed,  positive
     makes  the  file  read-only,  and  negative makes the text itself
     read-only.

       Sometimes you will change a buffer by accident.   Even  if  you
     undo  the  change by hand, EMACS still knows that "the buffer has
     been changed".  You can tell EMACS to  believe  that  there  have
     been no changes with the Meta-~ (^R Buffer Not Modified) command.
     This  command  simply  clears the "modified" flag which says that
     the buffer contains changes which need to be saved.  Even if  the
     buffer  really is changed EMACS will still act as if it were not.
     If we take "~" to mean "not", then Meta-~ is "not" metafied.

       If EMACS is about to do an unrequested save, and discovers that
     the text is now a lot shorter than it used to be, it tells you so
     and asks for confirmation (Y or N).  If you aren't sure  what  to
     answer  (because  you are surprised that it has shrunk), type C-G
     to abort everything, and take a look around.

       If EMACS is about to save a file and sees that the date of  the
     latest  version  on  disk  does not match what EMACS last read or
     wrote, EMACS notifies you of this fact,  and  asks  what  to  do,
     because  this  probably  means  that  something  is  wrong.   For
     example, someone else may have been editing the same  file.    If
     this  is  so,  there  is a good chance that your work or his work
     will be lost if you don't take the  proper  steps.    You  should
     first  find out exactly what is going on.  The C-X C-D command to
     list the directory will help.  If you determine that someone else
     has modified the file, save your file under different  names  (or
     at  least  making a new version) and then SRCCOM the two files to
     merge the two sets of changes.  Also get in touch with the  other
     person so that he doesn't continue editing.
     74                                  EMACS Manual for TWENEX Users



     13.2 How to Undo Drastic Changes to a File


       If  you  have  made extensive changes to a file and then change
     your mind about them, you can get rid of them by reading  in  the
     previous  version  of the file.  To do this, use M-X Revert File.
     If you have been using Auto Save  mode,  it  reads  in  the  last
     version of the visited file or the last auto save file, whichever
     is more recent.

       In  Auto  Save  mode, saving under special Auto Save filenames,
     then you can ask to revert to  the  last  "real"  save,  ignoring
     subsequent  auto  saves,  with  C-U  M-X Revert File.  If you are
     using the style  of  auto  saving  which  saves  under  the  real
     filenames, this is not possible.

       M-X  Revert File does not change point, so that if the file was
     only edited slightly, you will be at approximately the same piece
     of text after the Revert as before.  If  you  have  made  drastic
     changes,  the  same  value of point in the old file may address a
     totally different piece of text.

       Because M-X Revert File can be a disaster if done  by  mistake,
     it  asks  for  confirmation  (Y  or  N) before doing its work.  A
     pre-comma argument  can  be  used  to  inhibit  the  request  for
     confirmation  when  you call the function Revert File from a TECO
     program, as in 1,M(M.M Revert File$).



     13.3 Auto Save Mode: Protection Against Disasters


       In Auto Save mode, EMACS saves your  file  from  time  to  time
     (based on counting your commands) without being asked.  Your file
     is also saved if you stop typing for more than a few minutes when
     there  are  changes in the buffer.  This prevents you from losing
     more than a limited amount of  work  in  a  disaster.    (Another
     method  of  protection  is  the  journal  file.  See section 24.4
     [Journals], page 165.).

       You can turn auto saving on or off in an individual buffer with
     M-X Auto Save.  In addition, you can have auto saving by  default
     in  all  buffers  by  setting  the option Auto Save Default.  The
     frequency of saving, and the number of saved  versions  to  keep,
     can both be specified.

       Each  time  you  visit  a  file,  no matter how, auto saving is
     turned on for that file if Auto Save Default is  nonzero.    Once
     75                                  EMACS Manual for TWENEX Users



     you  have visited a file, you can turn auto saving on or off with
     M-X Auto Save.  Like other minor mode  commands,  M-X  Auto  Save
     turns  the  mode  on with a positive argument, off with a zero or
     negative argument; with no argument, it toggles.   If  you  start
     typing  a  new file into a buffer without visiting anything, Auto
     Save mode is initially off, but you can turn it on with M-X  Auto
     Save.

       When an auto save happens, "(Auto Save)" is printed in the echo
     area  (On  a  printing  terminal,  the bell is rung instead).  An
     error in the process of auto saving prints "(Auto Save Error!)".

       Let us suppose that it is time for  an  automatic  save  to  be
     done:  where should the file be saved?

       Two  workable methods have been developed:  save the file under
     the names you have visited, or save it under some  special  "auto
     save file name".  Each solution has its good and bad points.  The
     first one is excellent some of the time, but intolerable the rest
     of  the  time.    The  second is usually acceptable.  Auto saving
     under the visited file's actual names  means  that  you  need  do
     nothing  special  to  gobble the auto save file when you need it;
     and it means that there is no need to  worry  about  interference
     between  two  users  sharing  a directory, as long as they aren't
     editing the  same  file  at  once.    However,  this  method  can
     sometimes have problems:


         If  the file is visited read-only, then auto saves should
         certainly not go under the names that are visited.

         If you have visited a fixed version, auto saves can't  go
         under  that name, because they would clobber the original
         file.

         If you haven't visited a file, there aren't any names  to
         use.


     If  none  of  those cases apply then it is possible to store auto
     saves under the visited name.  This is done,  provided  that  you
     enable  it  by  setting  the variable Auto Save Visited File to a
     nonzero value.  Otherwise, or if one of the  cases  listed  above
     applies,  then the filename used for auto saves is taken from the
     variable Auto Save Filenames, modified slightly so that different
     buffers save under different names.  The buffer's name is used as
     the extension of the auto  save  file,  if  Auto  Save  Filenames
     contains a null extension.  Auto Save Filenames is usually set up
     by the default init file to <your directory>[SAVE]...
     76                                  EMACS Manual for TWENEX Users



       When  you  want  to  save your file "for real", use C-X C-S, as
     always.  C-U  C-X  C-S  is  a  way  to  request  an  "auto"  save
     explicitly.     When  you  are  auto  saving  under  the  visited
     filenames, there is not much difference between an auto save  and
     a  "real"  save,  except  that  an  auto  save will eventually be
     deleted automatically by EMACS a few auto saves  later,  while  a
     "real"  save  will  be  left  around forever (at least, Auto Save
     won't delete it).

       When it is time to recover from a system crash by reloading the
     auto save file, if auto saving was using the visited  file  names
     you have nothing special to do.  If auto saving was using special
     auto save filenames, read in the last auto save file and then use
     C-X  C-W  (Write  File) to write it out in its real location.  If
     you want to go back to an auto save file to  throw  away  changes
     that you don't like, you can use M-X Revert File, which knows how
     to  find  the  most recent save, permanent or not, under whatever
     filenames.  See section 13.2 [Revert], page 74.

       For your protection, if a file has  shrunk  by  more  than  30%
     since  the  last  save,  auto  saving  does not save.  Instead it
     prints a message  that  the  file  has  shrunk.    You  can  save
     explicitly if you wish; after that, auto saving will resume.

       Although  auto saving generates large numbers of files, it does
     not clog directories, because it cleans up after  itself.    Only
     the last Auto Save Max auto save files are kept; as further saves
     are  done,  old  auto saves are deleted (and expunged).  However,
     only files made  by  auto  saving  (or  by  explicitly  requested
     auto-saves  with  C-U  C-X C-S) are deleted in this way.  If Auto
     Save Max is 1, then repeated auto saves rewrite the same  version
     of  the file; the version number is only incremented after a real
     save.  (It will write a new version if it is  unable  to  rewrite
     the old one).

       The  variable Auto Save Max is initially 2.  Changing the value
     may not take effect in a given buffer until you turn auto  saving
     off and on in that buffer.

       The  number  of  characters  of  input  between  auto  saves is
     controlled by the variable Auto Save Interval.  It  is  initially
     500.  Changing this takes effect immediately.

       If   you   use  the  multiple-buffer  features  of  EMACS  (See
     section 14 [Buffers], page 83.) then you may want  to  have  auto
     saving  for all buffers, not just the one that is selected at the
     moment.  To get this, set the  variable  Auto  Save  All  Buffers
     nonzero.
     77                                  EMACS Manual for TWENEX Users



     13.4 Listing a File Directory


       To  look at a part of a file directory, use the C-X C-D command
     (^R Directory Display).  With no argument, it shows you  all  the
     versions  of  the  file  you  are  visiting.  C-U C-X C-D reads a
     filename from the terminal and shows you  the  files  related  to
     that filename.  The filename may contain wild cards.

       To  see the whole directory in a brief format, use the function
     List Files, which takes the directory name as a string  argument.
     The  function  View Directory prints a verbose listing of a whole
     directory.  These two commands take a filename as argument, which
     can include wild cards.

       The variable Auto Directory Display can be  set  to  make  many
     file   operations  display  the  directory  automatically.    The
     variable  is  normally  0;  making  it  positive   causes   write
     operations  such  as  Write  File  to  display the directory, and
     making it negative causes read operations such as Insert File  or
     visiting  to  display  it as well.  The display is done using the
     default directory listing function which is kept in the  variable
     Directory  Lister.    Normally  this  is  the  function  & Subset
     Directory that displays only the files  related  to  the  current
     default file.



     13.5 Cleaning a File Directory


       The normal course of editing constantly creates new versions of
     files.    If  you  don't  eventually delete the old versions, the
     directory will fill up and further editing  will  be  impossible.
     EMACS has commands that make it easy to delete the old versions.

       For complete flexibility to delete precisely the files you want
     to  delete,  you  can  use  the  DIRED package.  See section 13.6
     [DIRED], page 78, for more details.

       M-X Reap File and M-X Clean Directory are more convenient  ways
     to  do  the usual thing: keep only the two (or other number) most
     recent versions.

       M-X Reap File$<file><cr>  counts  the  number  of  versions  of
     <file>.    If  there are more than two, you are told the names of
     the recent ones (to be kept) and the names of the older ones  (to
     be  deleted),  and  asked whether to do the deletion (answer Y or
     N).
     78                                  EMACS Manual for TWENEX Users



       Reap  File  makes  a  special  offer to delete individual files
     whose extension indicates that they are likely to  be  temporary.
     The  list of temporary names is contained in a TECO search string
     in the variable Temp File FN2  List.    See  section  19.3  [TECO
     search strings], page 101.

       If  you  give  M-X  Reap  File  a null filename argument, or no
     argument, then it applies to the file you are visiting.

       M-X Clean Directory$<dirname> <cr> cleans a whole directory  of
     old  versions.   Each file in the directory is processed a la M-X
     Reap File.  M-X Clean Directory  with  a  null  argument,  or  no
     argument,  cleans  the  directory  containing  the  file  you are
     visiting.

       M-X Reap File and M-X Clean Directory can be  given  a  numeric
     argument which specifies how many versions to keep.  For example,
     C-U  4  M-X  Reap  File would keep the four most recent versions.
     The default when there  is  no  argument  is  the  value  of  the
     variable File Versions Kept, which is initially 2.

       To  expunge  the files deleted by Reap File or Clean Directory,
     use  M-X  Expunge  Directory,  which   expunges   the   connected
     directory.   If you wish to expunge some other directory, connect
     to it first with 


         M-X Connect to Directory$<directory>$<password><cr>


     You don't have to specify the password if you can connect without
     one.



     13.6 DIRED, the Directory Editor Subsystem


       DIRED makes it easy to delete many of the  files  in  a  single
     directory  at  once.    It  presents  a  copy of a listing of the
     directory, which you  can  move  around  in,  marking  files  for
     deletion.  When you are satisfied, you can tell DIRED to go ahead
     and delete the marked files.

       Invoke  DIRED  with  M-X  DIRED  to  edit  the  current default
     directory, or M-X DIRED$<dir><cr> to edit directory <dir>.    You
     are  then  given  a  listing  of the directory which you can move
     around in with all the normal EMACS motion commands.  Some  EMACS
     commands  are made illegal and others do special things, but it's
     79                                  EMACS Manual for TWENEX Users



     still  a recursive editing level which you can exit normally with
     C-M-Z and abort with C-].


     13.6.1 Basic DIRED Commands


       You can mark  a  file  for  deletion  by  moving  to  the  line
     describing  the  file and typing D, C-D, K, or C-K.  The deletion
     mark is visible as a D at the beginning of the line.    Point  is
     moved  to  the  beginning  of  the next line, so that several D's
     delete several files.  Alternatively, if you give D  an  argument
     it marks that many consecutive files.  Given a negative argument,
     it  marks the preceding file (or several files) and puts point at
     the first (in the  buffer)  line  marked.    Most  of  the  DIRED
     commands (D, U, E, Space) repeat this way with numeric arguments.

       If you wish to remove a deletion mark, use the U (for Undelete)
     command,  which  is  invoked like D: it removes the deletion mark
     from the current line (or next few lines, if given an  argument).
     The  Rubout  command  removes the deletion mark from the previous
     line, moving up to that line.  Thus, a Rubout after a D precisely
     cancels the D. 

       For extra convenience, Space is made a command similar to  C-N.
     Moving  down a line is done so often in DIRED that it deserves to
     be easy to type.  Rubout is often useful simply for moving up.

       If you are not sure whether you want to delete a file, you  can
     examine  it  by typing E. This enters a recursive editing mode on
     the file, which you can exit with C-M-Z.  The file is not  really
     visited at that time, and you are not allowed to change it.  When
     you exit the recursive editing level, you return to DIRED.  The V
     command is like E but uses View File to look at the file.

       When  you  have marked the files you wish to mark, you can exit
     DIRED with C-M-Z.  If any files were marked for  deletion,  DIRED
     lists  them  in  a  concise format, several per line.  Then DIRED
     asks for confirmation of the list.  You can type "YES" (Just  "Y"
     won't  do)  to go ahead and delete them, "N" to return to editing
     the directory so you can change the marks, or "X" to give up  and
     delete  nothing.  No Return character is needed.  No other inputs
     are accepted at this point.
     80                                  EMACS Manual for TWENEX Users



     13.6.2 Other DIRED Commands


       N  finds the next "hog": the next file which has at least three
     versions (or, more than File Versions Kept).

       C calls up SRCCOM as an inferior with the current file  in  its
     command  line.  When you return to EMACS, the cursor moves down a
     line to the next file.

       S sorts the files into a different order.    It  reads  another
     character to say which order: F for filename (the default), S for
     size, R for read date, or W for write date.

       R does the same sorting as S, but uses the reverse order (small
     files, older files or end of alphabet first).

       H  helps  you clean up.  It marks "old" versions of the current
     file, and  versions  with  "temporary"  second  file  names,  for
     deletion.    You  can  then  use  the D and U commands to add and
     remove marks before deleting  the  files.    The  variables  File
     Versions  Kept and Temp File FN2 List control which files H picks
     for deletion.  With an  argument  (C-U  H),  it  does  the  whole
     directory instead of just the current file.

       ? displays a list of the DIRED commands.


     13.6.3 Invoking DIRED


       There  are  some other ways to invoke DIRED.  The command C-X D
     (^R Dired) puts you in DIRED on the directory containing the file
     you are currently editing.  With a numeric argument of 1  (C-U  1
     C-X  D),  only the current file is displayed instead of the whole
     directory.  In combination with the H command this can be  useful
     for  cleaning  up excess versions of a file after a heavy editing
     session.  With a numeric argument of 4 (C-U C-X D), it  asks  you
     for  the  directory  name.    Type a directory name and/or a file
     name.  If you explicitly specify a file  name  only  versions  of
     that  file  are  displayed,  otherwise  the  whole  directory  is
     displayed.


     13.6.4 Editing the DIRED Buffer Yourself


       It is unwise to try to edit the text of the  directory  listing
     yourself,  without  using  the special DIRED commands, unless you
     81                                  EMACS Manual for TWENEX Users



     know  what  you  are doing, since you can confuse DIRED that way.
     To make it less likely that you  will  do  so  accidentally,  the
     self-inserting  characters  are  all  made  illegal inside DIRED.
     However, deleting whole lines at a time is certainly safe.   This
     does  not  delete the files described by those lines; instead, it
     makes DIRED forget that they are there and thus makes  sure  they
     will not be deleted.  Thus, M-X Delete Non-Matching Lines$FOO<cr>
     is  useful  if  you wish to delete only files with a FOO in their
     names.  See section 19 [Replacement], page 98.

       For more complicated things, you can use the minibuffer.   When
     you  call  the  minibuffer from within DIRED, you get a perfectly
     normal one.  The special DIRED commands are not present while you
     are editing in the minibuffer.  To  mark  a  file  for  deletion,
     replace  the  space  at the beginning of its line with a "D".  To
     remove a mark, replace the "D" with a space.



     13.7 Miscellaneous File Operations


       EMACS  has  extended  commands  for   performing   many   other
     operations  on files.  Invoking these commands with C-M-X instead
     of M-X allows you to use  filename  completion  on  the  filename
     arguments these commands require.

       M-X  View  File$<file><cr> allows you to scan or read a file by
     sequential screenfuls without visiting the file.    It  enters  a
     subsystem  in which you type a Space to see the next screenful or
     a Backspace to see the previous screenful.  Typing anything  else
     exits  the  command.   View File does not visit the file; it does
     not alter the contents of any buffer.  The advantage of View File
     is that the whole file does not need to be loaded before you  can
     begin  reading it.  The inability to do anything but page forward
     or backward is a consequence.

       M-X Write File$<file><cr> writes the  contents  of  the  buffer
     into  the  file  <file>,  and  then  visits that file.  It can be
     thought of as a way of "changing the name" of the  file  you  are
     visiting.    Unlike  C-X C-S, Write File saves even if the buffer
     has not been changed.  C-X C-W is another way of getting at  this
     command.

       M-X  Insert File$<file><cr> inserts the contents of <file> into
     the buffer at point, leaving point unchanged before the  contents
     and  mark  after them.  The current defaults are used for <file>,
     and are updated.
     82                                  EMACS Manual for TWENEX Users



       M-X Write Region$<file><cr> writes the region (the text between
     point  and  mark)  to  the  specified  file.  It does not set the
     visited filenames.  The buffer is not changed.

       M-X Append to File$<file><cr> appends  the  region  to  <file>.
     The text is added to the end of <file>.

       M-X  Prepend  to File$<file><cr> adds the text to the beginning
     of <file> instead of the end.

       M-X Set Visited Filename$<file><cr> changes  the  name  of  the
     file  being  visited  without  reading or writing the data in the
     buffer.  M-X Write  File  is  approximately  equivalent  to  this
     command followed by a C-X C-S.

       M-X Delete File$<file><cr> deletes the file.

       M-X Copy File$<old file>$<new file><cr> copies the file.

       M-X Rename File$<old name>$<new name><cr> renames the file.

       The  default  filenames  for  all  of these operations are TECO
     default filenames.  Most of these operations also leave the  TECO
     default names set to the file they operated on.  The TECO default
     is  not  always  the same as the file you are visiting.  When you
     visit a file, they start out the  same;  the  commands  mentioned
     above  change  the  TECO  default,  but do not change the visited
     filenames.  Each buffer has its own TECO default filenames.

       The operation of visiting a file is  available  as  a  function
     under  the name M-X Visit File$<file><cr>.  In this form, it uses
     the TECO default as its defaults, though it still sets  both  the
     TECO default and the visited filenames.
     83                                  EMACS Manual for TWENEX Users



                             CHAPTER FOURTEEN
                          USING MULTIPLE BUFFERS



       When  we speak of "the buffer", which contains the text you are
     editing, we have given the impression that there is only one.  In
     fact, there may be many of them, each with its own body of  text.
     At  any  time  only  one buffer can be selected and available for
     editing, but it isn't hard to switch to a different  one.    Each
     buffer  individually  remembers  which  file it is visiting, what
     modes are in effect, and whether there are any changes that  need
     saving.


             C-X B       Select or create a buffer.
             C-X C-F     Visit a file in its own buffer.
             C-X C-B     List the existing buffers.
             C-X K       Kill a buffer.  


       Each  buffer in EMACS has a single name, which normally doesn't
     change.  A buffer's name can be any length.    The  name  of  the
     currently  selected  buffer,  and the name of the file visited in
     it, are visible in the mode line when you are at top  level.    A
     newly started EMACS has only one buffer, named "Main".

       As  well  as the visited file and the major mode, a buffer can,
     if ordered to, remember many other things locally,  which  means,
     independently   of   all   other   buffers.    See  section  22.3
     [Variables], page 138.



     14.1 Creating and Selecting Buffers


       To create a new buffer, you need only think of a  name  for  it
     (say,  "FOO") and then do C-X B FOO<cr>, which is the command C-X
     B (Select Buffer) followed by the name.  This makes a new,  empty
     buffer  and  selects  it  for  editing.    The  new buffer is not
     visiting any file, so if you try to save it you will be asked for
     the filenames to use.  Each buffer has its own  major  mode;  the
     new  buffer's  major mode is taken from the value of the variable
     Default Major Mode, or from the  major  mode  of  the  previously
     selected  buffer  if  the value of Default Major Mode is the null
     string.  Normally the Default Major Mode is Fundamental mode.

       To return to buffer FOO later after having switched to another,
     84                                  EMACS Manual for TWENEX Users



     the  same  command  C-X  B  FOO<cr> is used, since C-X B can tell
     whether a buffer named FOO exists already or not.   It  does  not
     matter  whether  you  use  upper case or lower case in typing the
     name of a buffer.  C-X B Main<cr> reselects the buffer Main  that
     EMACS  started  out  with.  Just C-X B<cr> reselects the previous
     buffer.  Repeated C-X B<cr>'s  alternate  between  the  last  two
     buffers selected.

       You can also read a file into its own newly created buffer, all
     with  one command: C-X C-F (Find File), followed by the filename.
     The first name of the file becomes the buffer name.   C-F  stands
     for  "Find",  because  if the specified file already resides in a
     buffer in your EMACS, that buffer is reselected.  So you need not
     remember whether you have brought the file in already or not.   A
     buffer  created  by C-X C-F can be reselected later with C-X B or
     C-X C-F, whichever you find more convenient.   Nonexistent  files
     can  be created with C-X C-F just as they can be with C-X C-V.  A
     nonzero argument to C-X C-F makes the file or  buffer  read-only;
     it is like the argument to C-X C-V.  See section 13.1 [Visiting],
     page 71.

       Sometimes  EMACS  needs  to  visit a file as part of some other
     operation.  By default, it visits the file in whatever buffer was
     selected.  If you like to use C-X C-F and multiple  buffers,  you
     can  tell  EMACS to use multiple buffers for implicit visiting by
     setting the variable TAGS Find File to a  nonzero  value.    This
     causes  automatic visiting to be done by means of C-X C-F instead
     of C-X C-V.  Automatic visiting is done by the TAGS package  (See
     section  21  [TAGS],  page  122.)  or  by  invoking  EMACS with a
     filename 


         @EMACS <filename><cr>


       If the buffer with the same name that  C-X  C-F  wants  to  use
     already  exists  but  with  the wrong contents (often a different
     file with a similar name), then you are asked what to  do.    You
     can  type  Return meaning go ahead and reuse that buffer for this
     new file, or you can type another buffer name to use instead.  If
     C-X C-F does find the file already in a buffer, then it checks to
     see whether the version on disk is the same as the  last  version
     read  or  written  from  that  buffer,  for  safety.  If they are
     different, you are warned that someone else may  be  editing  the
     file,  and  left with the version which was already in the EMACS.
     To get the new version from disk instead, use M-X Revert File.
     85                                  EMACS Manual for TWENEX Users



     14.2 Using Existing Buffers


       To  get  a list of all the buffers that exist, do C-X C-B (List
     Buffers).  Each buffer's name, major mode, and visited  filenames
     are  printed.    A  star  at  the beginning of a line indicates a
     buffer which contains changes that have  not  been  saved.    The
     number  that  appears before a buffer's name in a C-X C-B listing
     is that buffer's buffer number.   You  can  select  a  buffer  by
     giving its number as a numeric argument to C-X B, which then does
     not need to read a string from the terminal.

       If  several  buffers  have  stars, you should save some of them
     with M-X Save All Files.  This finds all the  buffers  that  need
     saving  and asks about each one individually.  Saving the buffers
     this way is much easier and more efficient  than  selecting  each
     one and typing C-X C-S.

       A  quick  way  of  glancing  at  another  buffer,  faster  than
     selecting it, is to use M-X View Buffer$<buffername><cr>.    This
     displays  the  contents  of  the  other  buffer and lets you move
     forward and back a screen at a time  with  Space  and  Backspace.
     See section 15 [Display], page 87.

       M-X  Rename  Buffer$<new  name><cr>  changes  the  name  of the
     currently selected buffer.  If <new name> is the null string, the
     first filename of the visited file is used as the new name of the
     buffer.

       The commands C-X A (^R Append to Buffer) and M-X Insert  Buffer
     can  be  used  to  copy  text  from  one  buffer to another.  See
     section 9.3 [Copying], page 47.



     14.3 Killing Buffers


       After you use an EMACS for a while, it may fill up with buffers
     which you no longer need.  Eventually you can reach a point where
     trying to create any more results in an "URK" error.  So whenever
     it is convenient you should do M-X Kill Some Buffers, which  asks
     about each buffer individually.  You can say Y or N to kill it or
     not.   Or you can say Control-R to take a look at it first.  This
     does not actually select the buffer, as the mode line shows,  but
     gives  you a recursive editing level in which you can move around
     and look at things.  When you have seen enough to  make  up  your
     mind,  exit the recursive editing level with a C-M-Z and you will
     be asked the question again.  If you say to kill  a  buffer  that
     86                                  EMACS Manual for TWENEX Users



     needs  saving, you will be asked whether it should be saved.  See
     section 24.2.5 [Storage Exhausted], page 163.  .

       You can kill the buffer FOO by doing C-X K FOO<cr>.    You  can
     kill  the  selected  buffer,  a common thing to do if you use C-X
     C-F, by doing C-X K<cr>.  If you kill the selected buffer, in any
     way, EMACS asks you which buffer to select instead.  Saying  just
     <cr>  at  that point tells EMACS to choose one reasonably.  C-X K
     runs the function Kill Buffer.
     87                                  EMACS Manual for TWENEX Users



                              CHAPTER FIFTEEN
                          CONTROLLING THE DISPLAY



       Since only part of a large file fits on the screen, EMACS tries
     to  show  the part that is likely to be interesting.  The display
     control commands allow you to ask to see a different part of  the
     file.


             C-L     Clear  and  redisplay  screen, putting point at a
                     specified vertical position.
             C-V     Scroll forwards (a screen or a few lines).
             M-V     Scroll backwards.
             M-R     Move point  to  the  text  at  a  given  vertical
                     position.
             C-M-R   Shift the function point is in onto the screen.  


       The  terminal  screen  is rarely large enough to display all of
     your file.  If the whole buffer doesn't fit on the screen,  EMACS
     shows a contiguous portion of it, containing point.  It continues
     to  show approximately the same portion until point moves outside
     of it; then EMACS chooses a new portion centered around  the  new
     point.   This is EMACS's guess as to what you are most interested
     in seeing.  But if the guess is wrong, you can  use  the  display
     control  commands to see a different portion.  The finite area of
     screen through which you can see part of the buffer is called the
     window, and the choice of where in the buffer to start displaying
     is also called the window.

       First we describe how EMACS chooses a new  window  position  on
     its  own.    The goal is usually to place point 35 percent of the
     way down the screen.  This is controlled by the  variable  Cursor
     Centering  Point,  whose  value is the percent of the screen down
     from the top.  However, if the  end  of  the  buffer  is  on  the
     screen,  EMACS  tries  to  leave at most 35 percent of the screen
     blank beneath it, so  that  the  screen  is  not  wasted.    This
     percentage  is  controlled  by the variable End of Buffer Display
     Margin.  These variables work by controlling FS flags, and  their
     values must never be negative or greater than 99.

       Normally  EMACS  only chooses a new window position if you move
     point off the screen.  However, you can  ask  for  a  new  window
     position  to be computed whenever point gets too close to the top
     of the screen by setting the variable Top Display Margin  to  the
     percentage  of the screen in which point must not appear.  Bottom
     Display Margin does the same thing for a region near the bottom.
     88                                  EMACS Manual for TWENEX Users



       The  basic  display control command is C-L (^R New Window).  In
     its simplest form, with no argument, it  clears  the  screen  and
     tells  EMACS  to choose a new window position, centering point 35
     percent of the way from the top as usual.

       C-L with a positive argument chooses a new window so as to  put
     point  that  many  lines  from the top.  An argument of zero puts
     point on the very top line.  Point does not move with respect  to
     the  text; rather, the text and point move rigidly on the screen.
     C-L with a negative argument puts point that many lines from  the
     bottom  of the window.  For example, C-U -1 C-L puts point on the
     bottom line, and C-U -5 C-L puts it five lines from  the  bottom.
     C-L  with  an  argument does not clear the screen, so that it can
     move the text on the screen instead of printing it again  if  the
     terminal allows that.

       C-U  C-L is different from C-L with any other sort of argument.
     It causes just the line containing point to be redisplayed.

       The scrolling commands C-V and  M-V  let  you  move  the  whole
     display  up  or  down  a few lines.  C-V (^R Next Screen) with an
     argument shows you that many more lines  at  the  bottom  of  the
     screen,  moving the text and point up together as C-L might.  C-V
     with a negative argument shows you more lines at the top  of  the
     screen,  as  does  Meta-V  (^R  Previous  Screen) with a positive
     argument.

       To read the buffer a screenful at a time, use the  C-V  command
     with  no  argument.  It takes the last two lines at the bottom of
     the screen and puts them at the top, followed by nearly  a  whole
     screenful  of  lines not visible before.  Point is put at the top
     of the screen.  Thus, each C-V shows the "next screenful", except
     for two lines of overlap to provide  continuity.    The  variable
     Next  Screen  Context  Lines, if defined, controls how many lines
     from the bottom of the screen move to the top; the default if the
     variable is not defined is 2.  To move backward, use M-V  without
     an  argument, which moves a whole screenful backwards (again with
     overlap).

       Scanning by screenfuls through the buffer for some distance  is
     most  conveniently  done  with the M-X View Buffer command.  This
     command  enters  a  simple  subsystem  in  which  Space  moves  a
     screenful  forward and Backspace moves a screenful backward.  The
     Return character exits, leaving point centered in  whatever  part
     of the buffer was visible.  Any other character exits and returns
     point  to  its former location, and is then executed as a command
     (unless it is a Rubout; Rubout exits but is not executed).   View
     Buffer  can be used to view another buffer by giving the buffer's
     name as a string argument.  In this  case,  exiting  with  Return
     89                                  EMACS Manual for TWENEX Users



     moves  point permanently in the other buffer, but does not select
     it.  See section 14 [Buffers], page 83.

       With the M-X View File command,  you  can  scan  by  screenfuls
     through  a  file  which  you  have not visited.  See section 13.7
     [Advanced File Commands], page 81.

       To scroll the buffer so that the current function or  paragraph
     is  positioned  conveniently on the screen, use the C-M-R command
     (^R Reposition Window).  This command tries to  get  as  much  as
     possible  of  the  current function or paragraph onto the screen,
     preferring the beginning to the end, but not moving point off the
     screen.  A "function" in Lisp mode is a defun;  otherwise  it  is
     defined  to be a set of consecutive unindented lines, or a set of
     consecutive indented lines.

       C-L in all its forms changes  the  position  of  point  on  the
     screen,  carrying  the text with it.  Another command moves point
     the same way but leaves the text fixed.    It  is  called  Meta-R
     (^R Move to Screen Edge).  With no argument, it puts point at the
     beginning  of  the line at the center of the screen.  An argument
     is used to specify the line to put it on, counting from  the  top
     if  the  argument  is  positive,  or  from  the  bottom  if it is
     negative.  Thus, Meta-R with an argument of 0 puts point  on  the
     top  line of the screen.  Meta-R never causes any text to move on
     the screen; it causes point to move with respect  to  the  screen
     and the text.
     90                                  EMACS Manual for TWENEX Users



                              CHAPTER SIXTEEN
                              TWO WINDOW MODE



       EMACS  allows  you to split the screen into two windows and use
     them to display parts of two files, or  two  parts  of  the  same
     file.


             C-X 2       Start showing two windows.
             C-X 3       Show two windows but stay "in" the top one.
             C-X 1       Show only one window again.
             C-X O       Switch to the Other window
             C-X 4       Find buffer, file or tag in other window.
             C-X ^       Make this window bigger.
             C-M-V       Scroll the other window.


       In  two  window mode, the text display portion of the screen is
     divided into two parts called windows,  which  display  different
     pieces of text.  The two windows can display two different files,
     or  two  parts  of  the  same  file.   Only one of the windows is
     selected; that is the window which the cursor  is  in.    Editing
     normally  takes place in that window alone.  To edit in the other
     window, you would give a special command to move  the  cursor  to
     the  other  window, and then edit there.  Since there is only one
     mode line, it applies to the window you are in at the moment.

       The command C-X 2 (^R Two Windows) enters two-window mode.    A
     line  of dashes appears across the middle of the screen, dividing
     the text display area into two halves.   Window  one,  containing
     the  same text as previously occupied the whole screen, fills the
     top half, while window two fills the bottom  half.    The  cursor
     moves  to  window two.  If this is your first entry to two-window
     mode, window two contains a new buffer named W2.   Otherwise,  it
     contains the same text it held the last time you looked at it.

       To  return  to  viewing  only one window, use the command C-X 1
     (^R One Window).  Window one expands to fill  the  whole  screen,
     and  window  two  disappears until the next C-X 2. C-U C-X 1 gets
     rid of window one and makes window  two  use  the  whole  screen.
     Neither  of  these  depends on which window the cursor is in when
     the command is given.

       While you are in two window mode you can use C-X  O  (^R  Other
     Window)  to  switch  between the windows.  After doing C-X 2, the
     cursor is in window two.  Doing C-X O moves the  cursor  back  to
     window  one,  to  exactly  where  it  was  before the C-X 2.  The
     91                                  EMACS Manual for TWENEX Users



     difference  between  this  and  doing  C-X 1 is that C-X O leaves
     window two visible on the screen.   A  second  C-X  O  moves  the
     cursor  back  into  window  two, to where it was before the first
     C-X O.  And so on...

       Often you will be editing one window while using the other just
     for reference.  Then, the command C-M-V (^R Scroll Other  Window)
     is very useful.  It scrolls the other window without switching to
     it  and  switching back.  It scrolls the same way C-V does:  with
     no argument, a whole screen up; with an argument, that many lines
     up (or down, for a negative argument).  With just  a  minus  sign
     (no  digits)  as  an  argument,  C-M-V  scrolls a whole screenful
     backwards (what M-V does).

       The C-X 3 (^R View Two Windows)  command  is  like  C-X  2  but
     leaves  the  cursor  in window one.  That is, it makes window two
     appear at the bottom of the screen but leaves the cursor where it
     was.  C-X 2 is equivalent to C-X 3 C-X O.  C-X 3 is equivalent to
     C-X 2 C-X O, but C-X 3 is much faster.

       M-X Compare Windows compares  the  text  in  the  two  windows.
     Starting  from  the  existing  values of point in each window, it
     advances point in both  windows  to  the  first  mismatch.    The
     variable Collapse in Comparison, if it exists, should be a string
     containing  all  the  "insignificant"  characters;  any string of
     insignificant  characters  matches  any  other  string  of  those
     characters.    If  the variable does not exist, the insignificant
     characters are return, linefeed, space and tab.

       If you quit with C-G in the middle of Compare Windows, point is
     advanced in both windows as far as the  matching  has  proceeded.
     As   a   result,   calling  Compare  Windows  again  resumes  the
     comparison.

       Normally, the screen is divided evenly between the two windows.
     You can also redistribute screen space between the  windows  with
     the  C-X  ^  (^R  Grow  Window)  command.  It makes the currently
     selected window get one line bigger,  or  as  many  lines  as  is
     specified  with a numeric argument.  With a negative argument, it
     makes the selected window smaller.  The allocation  of  space  to
     the  windows  is  remembered while you are in one window mode and
     the same allocation is used when you return to two  window  mode.
     The allocation changes only when you give a C-X ^ command.

       After leaving two-window mode, you can still use C-X O, but its
     meaning  is  different.  Window two does not appear, but whatever
     was being shown in it appears, in window one (the whole  screen).
     Whatever  buffer  used  to  be in window one is stuck, invisibly,
     into window two.  Another C-X O reverses the effect of the first.
     92                                  EMACS Manual for TWENEX Users



     For  example,  if  window one shows buffer B and window two shows
     buffer W2 (the usual case), and only window one is visible,  then
     after  a  C-X  O  window one shows buffer W2 and window two shows
     buffer B. 



     16.1 Multiple Windows and Multiple Buffers


       Buffers can be selected independently in each window.  The  C-X
     B  command selects a new buffer in whichever window the cursor is
     in.  The other window's buffer does not  change.    Window  two's
     buffer  is  remembered while you are in one window mode, and when
     you return to two window  mode  that  same  buffer  reappears  in
     window two.  See section 14 [Buffers], page 83.

       You  can  view  one  buffer  in  both  windows.   Give C-X 2 an
     argument as in C-U C-X 2 to go into two window  mode,  with  both
     windows  showing the buffer which used to be in window one alone.
     Although the same buffer  appears  in  both  windows,  they  have
     different  values  of point, so you can move around in window two
     while window one continues to show the same text.   Then,  having
     found  in  window  two the place you wish to refer to, you can go
     back to window one with C-X O to make your changes.  Finally  you
     can  do  C-X  1  to make window two leave the screen.  If you are
     already in two window mode, C-U C-X O switches  windows  carrying
     the  buffer  from  the  old  window  to  the new one so that both
     windows show that buffer.

       If you have the same buffer in both windows, you must beware of
     trying to visit a different file in one of the windows  with  C-X
     C-V,  because  if  you bring a new file into this buffer, it will
     replace the old file in both windows.  To view different files in
     the two windows again, you must switch  buffers  in  one  of  the
     windows first (with C-X B or C-X C-F, perhaps).

       A convenient "combination" command for viewing something in the
     other  window  is  C-X  4  (^R Visit in Other Window).  With this
     command you can ask to see any specified buffer, file or  tag  in
     the  other  window.   Follow the C-X 4 with either B and a buffer
     name, F or C-F and a file name, or T or "." and a tag  name  (See
     section 21 [TAGS], page 122.).  This switches to the other window
     and  finds  there  what you specified.  If you were previously in
     one-window mode, two-window mode is entered.  C-X 4 B is  similar
     to to C-X 2 C-X B.  C-X 4 F is similar to C-X 2 C-X C-F.  C-X 4 T
     is  similar  to  C-X  2  M-Period.    The  difference  is  one of
     efficiency, and also that C-X 4 works equally  well  if  you  are
     already using two windows.
     93                                  EMACS Manual for TWENEX Users



                             CHAPTER SEVENTEEN
                                 NARROWING



       Narrowing  means  focusing  in  on  some portion of the buffer,
     making the rest temporarily invisible and inaccessible.


             C-X N       Narrow down to between point and mark.
             C-X P       Narrow down to the page point is in.
             C-X W       Widen to view the entire buffer.  


       When you have narrowed down to a part of the buffer, that  part
     appears  to  be  all there is.  You can't see the rest, you can't
     move into it (motion commands won't go outside the visible part),
     you can't change it in any way.  However, it is not gone, and  if
     you  save  the  file  all  the  invisible text will be saved.  In
     addition to sometimes making it easier to concentrate on a single
     subroutine or paragraph by eliminating clutter, narrowing can  be
     used  to  restrict  the  range of operation of a replace command.
     The word "Narrow" appears in the mode line whenever narrowing  is
     in effect.

       The  primary  narrowing  command  is C-X N (^R Narrow Bounds to
     Region).  It sets the virtual buffer boundaries at point and  the
     mark,  so that only what was between them remains visible.  Point
     and mark do not change.

       The way to undo narrowing is to widen  with  C-X  W  (^R  Widen
     Bounds).  This makes all text in the buffer accessible again.

       Another way to narrow is to narrow to just one page, with C-X P
     (^R Narrow Bounds to Page).  See section 18 [Pages], page 94.

       You  can  get  information  on  what part of the buffer you are
     narrowed down to using the C-X  =  command.    See  section  11.4
     [Filling], page 59.

       The  virtual  buffer  boundaries  are a powerful TECO mechanism
     used internally in EMACS in many ways.  While only  the  commands
     described  here  set them so as you can see, many others set them
     temporarily using the TECO  commands  FS  VB$  and  FS  VZ$,  but
     restore them before they are finished.
     94                                  EMACS Manual for TWENEX Users



                             CHAPTER EIGHTEEN
                      COMMANDS FOR MANIPULATING PAGES



       Files  are  often thought of as divided into pages by the ASCII
     character formfeed (^L).  For example, if a file is printed on  a
     line printer, each page of the file, in this sense, will start on
     a  new  page  of paper.  Most editors make the division of a file
     into pages extremely important.  For example, they may be  unable
     to show more than one page of the file at any time.  EMACS treats
     a  formfeed  character  just like any other character.  It can be
     inserted with C-Q C-L  (or,  C-M-L),  and  deleted  with  Rubout.
     Thus, you are free to paginate your file, or not.  However, since
     pages  are  often  meaningful divisions of the file, commands are
     provided to move over them and operate on them.


             C-M-L       Insert formfeed.
             C-X C-P     Put point  and  mark  around  this  page  (or
                         another page).
             C-X [       Move point to previous page boundary.
             C-X ]       Move point to next page boundary.
             C-X P       Narrow down to just this (or next) page.
             C-X L       Count the lines in this page.
             M-X What Page
                         Print current page and line number.  


       The  C-X  [  (^R  Previous  Page)  command  moves  point to the
     previous page delimiter (actually, to right after it).  If  point
     starts  out  right  after a page delimiter, it skips that one and
     stops at the previous one.  A numeric argument serves as a repeat
     count.  The C-X ] (^R Next Page) command moves forward  past  the
     next page delimiter.

       The  command  M-X  What Page prints the page and line number of
     the cursor in the echo area.  There  is  a  separate  command  to
     print this information because it is likely to be slow and should
     not  slow down anything else.  The design of TECO is such that it
     is not possible to know the absolute number of the page  you  are
     in, except by scanning through the whole file counting pages.

       The  C-X C-P command (^R Mark Page) puts point at the beginning
     of the current page and the mark at the end.  The page  delimiter
     at the end is included (the mark follows it).  The page delimiter
     at the front is excluded (point follows it).  This command can be
     followed  by a C-W to kill a page which is to be moved elsewhere.
     If it is inserted after a page delimiter, at a place where C-X  ]
     95                                  EMACS Manual for TWENEX Users



     or C-X [ would take you, then the page will be properly delimited
     before and after once again.

       A  numeric argument to C-X C-P is used to specify which page to
     go to, relative to the current one.  Zero means the current page.
     One means the next page, and -1 means the previous one.

       The command C-X P (^R Narrow Bounds to Page)  narrows  down  to
     just  one  page.  Everything before and after becomes temporarily
     invisible  and  inaccessible   (See   section   17   [Narrowing],
     page  93.).  Use C-X W (^R Widen Bounds) to undo this.  Both page
     terminators,  the  preceding  one  and  the  following  one,  are
     excluded  from  the  visible  region.    Like  C-X C-P, the C-X P
     command normally selects the current  page,  but  allows  you  to
     specify  which page explicitly relative to the current one with a
     numeric argument.  However, when you are already narrowed down to
     one page, C-X P with no argument  moves  you  to  the  next  page
     (otherwise,  it would be a useless no-op).  So several C-X P's in
     a row get first the current page and then successive pages.

       If you prefer to see only one page of the file at a time  as  a
     general  rule,  use  the  PAGE library.  See section 18.1 [PAGE],
     page 96.

       Just what delimits pages is controlled  by  the  variable  Page
     Delimiter,  which  should  contain  a  TECO  search  string  (See
     section 19.3 [TECO search strings], page 101.) which matches  all
     page  separators.    Normally, it is a string containing just ^L.
     For an INFO file, it might usefully be changed to ^ ^L^O^, which
     means that either a ^ ^L or just a ^ (either of the two  strings
     that  separate INFO nodes) should be a page separator.  Then each
     node counts as  a  page.    In  any  case,  page  separators  are
     recognized  as  such  only  at  the  beginning  of  a  line.  The
     paragraph  commands  consider  each  page  boundary  a  paragraph
     boundary as well.

       The  C-X  L  command (^R Count Lines Page) is good for deciding
     where to break a page in two.  It prints in  the  echo  area  the
     total number of lines in the current page, and then divides it up
     into those preceding the current line and those following, as in 


         Page has 96 lines (72+25)


     Notice  that  the  sum is off by one; this is correct if point is
     not at the front of a line.
     96                                  EMACS Manual for TWENEX Users



     18.1 Editing Only One Page at a Time


       The  PAGE  library allows you to edit only within a single page
     at a time, with special commands to move between pages, and split
     and join pages.  It contrives to show the number of the page  you
     are  looking  at  in  the  mode  line.  You can also ask to see a
     directory of the pages in the file, or  to  insert  it  into  the
     file.    This is an extension of and replacement for the facility
     provided by the C-X P command  in  standard  EMACS.    It  is  an
     optional  library  because  we  do not think it is necessarily an
     improvement.

       The commands in the PAGE library supplant and redefine commands
     in standard EMACS.  Therefore, you cannot  use  them  unless  you
     give  the  command  M-X  Load  Library$PAGE<cr>  explicitly.  See
     section 22.2 [Libraries], page 136.


             C-X ]       Move to next page.
             C-X [       Move to previous page.
             C-X C-P     Move to page by absolute number.
             C-X P       Split this page at point.
             C-X J       Join this page to the next or previous one.
             C-X W       See the whole file again.  


       The most fundamental thing to do  with  PAGE  is  to  go  to  a
     specific  page.  This can be done by giving the page number as an
     argument to C-X C-P (^R Goto Page).  If you  give  a  number  too
     big, the last page in the file is selected.

       For  convenience, C-X C-P with no argument when you are looking
     at the whole file selects the page containing point.    When  you
     are  looking  at  only one page, C-X C-P with no argument goes to
     the next page and with a negative argument goes to  the  previous
     page.

       However,  the  main  commands for moving forward or backward by
     pages are C-X [ and C-X ] (^R Goto Previous Page and ^R Goto Next
     Page).  These take a numeric argument (either sign) and move that
     many pages.

       To go back to viewing the whole file instead of just one  page,
     you  can use the C-X W (^R PAGE Widen Bounds) command.  These are
     the same characters that you would use  in  standard  EMACS,  but
     they  run  a  different  function  that  knows to remove the page
     number from the mode line.
     97                                  EMACS Manual for TWENEX Users



       The  C-S  (^R  Incremental  Search) and C-R (^R Reverse Search)
     commands are redefined to widen  bounds  first  and  narrow  them
     again  afterwards.  So you can search through the whole file, but
     afterward see only the page in which the search ended.  In  fact,
     PAGE  goes  through  some  trouble  to  work with whatever search
     functions you prefer to use, and find them wherever you put them.

       To split an existing page, you could insert a  ^L,  but  unless
     you  do  this  while  viewing  the  whole  file,  PAGE  might get
     confused.  The clean way is to use C-X  P  (^R  Insert  Pagemark)
     which  inserts  the  page mark, and narrows down to the second of
     the two pages formed from the old page.  The clean way to get rid
     of a page mark is to use C-X J (^R Join Next Page).  It gets  rid
     of  the  page  mark  after  the current page; or, with a negative
     argument, gets rid of the page mark before this page.

       A page mark is defined as <CRLF>^L.  If you  set  the  variable
     PAGE  Flush  CRLF  to 1, a page mark is <CRLF>^L<CRLF>, which has
     the effect of making the CRLF  at  the  beginning  of  each  page
     invisible.  This may be desirable for EMACS library source files.
     You  can also specify some other string in place of ^L by setting
     the  variable  Page  Delimiter.    If  Page  Delimiter  specifies
     multiple  alternatives,  separated by ^O, PAGE always inserts the
     first of them, but recognizes them all.

       To see  a  list  of  all  the  pages  in  the  file,  each  one
     represented  by  its  first  nonempty  line,  use  M-X  View Page
     Directory.  It prints out the first non-blank line on each  page,
     preceded  by  its page number.  M-X Insert Page Directory inserts
     the same directory into the buffer at point.  If you give  it  an
     argument,  it  tries  to  make  the whole thing into a comment by
     putting the Comment Start string at the front of  each  line  and
     the Comment End string at the end.

       If  the  variable Page Setup Hook exists, PAGE will execute its
     value as the function for placing PAGE's functions on keys.  This
     is done instead of the normal assignments to C-X [,  C-X  ],  C-X
     C-P, C-X P, and C-X J. 
     98                                  EMACS Manual for TWENEX Users



                             CHAPTER NINETEEN
                           REPLACEMENT COMMANDS



       Global search-and-replace operations are not needed as often in
     EMACS  as  they are in other editors, but they are available.  In
     addition to the simple Replace operation which is like that found
     in most editors, there is a Query Replace  operation  which  asks
     you, for each occurrence of the pattern, whether to replace it.

       To  replace every instance of FOO after point with BAR, you can
     do 


         M-X Replace$FOO$BAR<cr>


     Replacement occurs only after point, so if you want to cover  the
     whole  buffer  you  must  go to the beginning first.  Replacement
     continues to the end of the buffer, but you can  restrict  it  by
     narrowing.  See section 17 [Narrowing], page 93.

       Unless  the  variable  Case  Replace  is zero, Replace tries to
     preserve case; give both FOO and BAR in  lower  case,  and  if  a
     particular   FOO   is   found  with  a  capital  initial  or  all
     capitalized, the BAR which replaces it will  be  given  the  same
     case pattern.  Thus, 


         M-X Replace$foo$bar<cr>


     would  replace  "foo" with "bar", "Foo" with "Bar" and "FOO" with
     "BAR".  If Case  Replace  is  zero,  the  replacement  string  is
     inserted  with  the  case  you  used  when you typed it.  If Case
     Search is zero, the string to be replaced is found only  when  it
     has the same case as what you typed.

       If  you  give  Replace  (or Query Replace) an argument, then it
     replaces only occurrences of FOO delimited  by  break  characters
     (or an end of the buffer).  So you can replace only FOO the word,
     and not FOO when it is part of FOOBAR.

       The string FOO to be replaced is actually a TECO search string,
     a  type  of  pattern, in which the characters ^B, ^N, ^O, ^Q, ^S,
     ^X, and ^] are special.  See section 19.3 [TECO search  strings],
     page 101.
     99                                  EMACS Manual for TWENEX Users



     19.1 Query Replace


       If  you want to change only some of the occurrences of FOO, not
     all, then you cannot use an ordinary Replace.  Instead,  use  M-X
     Query  Replace$FOO$BAR<cr>.  This displays each occurrence of FOO
     and waits for you to say whether to replace it with a BAR.    The
     things you can type when you are shown an occurrence of FOO are:


             Space       to  replace  the  FOO  (preserving case, just
                         like plain Replace, unless  Case  Replace  is
                         zero).
             Rubout      to  skip  to  the  next FOO without replacing
                         this one.
             Comma       to replace this FOO and display  the  result.
                         You   are   then   asked  for  another  input
                         character, except that since the  replacement
                         has  already  been made, Rubout and Space are
                         equivalent.
             Altmode     to exit without doing any more replacements.
             Period      to replace this FOO and then exit.
             !           to  replace  all  remaining   FOO's   without
                         asking.
             ^           to  go back to the previous FOO (or, where it
                         was), in case you have made a mistake.   This
                         works  by  jumping to the mark (Query Replace
                         sets the mark each time it finds a FOO).
             C-R         to enter a recursive editing level,  in  case
                         the  FOO  needs to be edited rather than just
                         replaced with a BAR.  When you are done, exit
                         the recursive editing level  with  C-M-Z  and
                         the next FOO will be displayed.
             C-W         to delete the FOO, and then start editing the
                         buffer.     When  you  are  finished  editing
                         whatever is to  replace  the  FOO,  exit  the
                         recursive  editing  level  with C-M-Z and the
                         next FOO will be displayed.  


       If you type any other character, the Query Replace  is  exited,
     and  the  character  executed as a command.  To restart the Query
     Replace, use C-X Altmode which is a  command  to  re-execute  the
     previous  minibuffer  command or extended command.  See section 5
     [M-X], page 20.
     100                                 EMACS Manual for TWENEX Users



     19.1.1 Running Query Replace with the Minibuffer


       Meta-%  gives  you  a minibuffer pre-initialized with "MM Query
     Replace$".  See section 23 [Minibuffer], page 157.  This  is  the
     easiest  way  to invoke Query Replace.  It also allows you to get
     Returns and Altmodes into the arguments.

       With the minibuffer, Query Replace  can  be  given  a  precomma
     argument,  which says that the second string argument is actually
     a TECO program to be executed to perform the replacement,  rather
     than simply a string to replace with.

       When   you  invoke  Query  Replace  from  the  minibuffer,  the
     character ^] becomes special  (because  it  is  special  in  TECO
     programs).    In  order to get a ^] into the search string or the
     replacement string, you must use two of them.  You can also use a
     ^] to quote an  Altmode.    In  the  minibuffer,  Return  has  no
     syntactic  significance,  so  there is no need for a way to quote
     it.  However, in order to insert any control characters into  the
     arguments,  you need to quote them again with C-Q.  So, to get ^Q
     ^X into the search string so as to search for a ^X, you  have  to
     type C-Q C-Q C-Q C-X.



     19.2 Other Search-and-loop Functions


       Here  are  some  other functions related to replacement.  Their
     arguments are TECO search strings (See section 19.3 [TECO  search
     strings],  page 101.).  They all operate from point to the end of
     the buffer (or where narrowing stops them).


     M-X List Matching Lines$FOO<cr>
                     prints  each  line  containing  FOO.    With   an
                     argument,  it  prints  that many lines before and
                     after each occurrence.

     M-X Count Occurrences$FOO<cr>
                     prints the number of  occurrences  of  FOO  after
                     point.

     M-X Delete Non-Matching Lines$FOO<cr>
                     kills  all  lines  after point that don't contain
                     FOO.

     M-X Delete Matching Lines$FOO<cr>
                     kills all lines after point that contain FOO.  
     101                                 EMACS Manual for TWENEX Users



     19.3 TECO Search Strings


       The  first  string  argument  to  Replace  and Query Replace is
     actually a TECO search string.  This means  that  the  characters
     ^X, ^B, ^N, ^S, ^O, and ^Q have special meanings.

       ^X matches any character.  ^B matches any "delimiter" character
     (anything  which  the  word commands consider not part of a word,
     according to the  syntax  table.    See  section  22.4  [Syntax],
     page  140.).    ^N  negates  what  follows,  so that ^N A matches
     anything but A, and ^N ^B  matches  any  non-delimiter.    ^S  is
     followed  by  a  parameter  character, and matches anything whose
     Lisp syntax equals the parameter.  So ^S( matches  any  character
     given  the  syntax  of  an  open-parenthesis.   ^N^SA matches any
     character which is not part of symbol names.

       ^O means "or", so that XYXY ^O ZZZ matches either XYXY or  ZZZ.
     ^O  can  be  used  more  than  once  in a pattern.  ^Q quotes the
     following character, in case you want to search for  one  of  the
     special  control characters.  However, you can't quote an Altmode
     or a Return in this way because its specialness is at an  earlier
     stage of processing.

       Some  variables  are  supposed  to  have TECO search strings as
     their values.  For example, Page Delimiter is supposed  to  be  a
     search  string to match anything which should start a page.  This
     is so that you can use ^O to match several alternatives.  In  the
     values  of  such  variables,  ^B,  ^N,  ^O, ^Q, ^S, ^X and ^] are
     special, but Altmode is not.  ^B through ^X are quoted with a ^Q,
     and ^] is quoted with another ^].

       The function Apropos (or, Help A)  and  all  similar  functions
     actually take TECO search strings as arguments, so you can search
     for  more  than  one substring at a time.  This is useful because
     doing Apropos on word^Opara is not really slower  than  searching
     for just "word" or just "para".
     102                                 EMACS Manual for TWENEX Users



                              CHAPTER TWENTY
                             EDITING PROGRAMS



       Special   features   for  editing  programs  include  automatic
     indentation, comment alignment,  parenthesis  matching,  and  the
     ability  to  move  over  and  kill balanced expressions.  Many of
     these features are parameterized so that they can  work  for  any
     programming language.

       For   each  language  there  is  a  special  major  mode  which
     customizes EMACS slightly to be better suited to editing programs
     written in that language.  These modes  sometimes  offer  special
     facilities as well.

       See section 11.1 [Words], page 53.  Moving over words is useful
     for editing programs as well as text.

       See  section  11.2  [Paragraphs],  page  55.   Most programming
     language major modes define paragraphs to be  separated  only  by
     blank  lines  and  page  boundaries.    This  makes the paragraph
     commands useful for editing programs.

       See section 21 [Tags], page 122.  The TAGS package can remember
     all the labels or functions in a multi-file program and find  any
     one of them quickly.



     20.1 Major Modes


       EMACS  has many different major modes, each of which customizes
     EMACS for editing text of a particular sort.  The major modes are
     mutually exclusive, and one major mode is current  at  any  time.
     When at top level, EMACS always says in the mode line which major
     mode you are in.

       When EMACS starts up, it is in what is called Fundamental mode,
     which  means  that the character commands are defined so as to be
     convenient in general.  More precisely, in Fundamental mode every
     EMACS option is set in  its  default  state.    For  editing  any
     specific  type  of  text,  such as Lisp code or English text, you
     should switch to the appropriate major mode.  This tells EMACS to
     change the meanings of a few commands to become more specifically
     adapted to the language  being  edited.    Most  commands  remain
     unchanged;  the  ones  which  usually change are Tab, Rubout, and
     Linefeed.  In addition, the commands which  handle  comments  use
     the mode to determine how comments are to be delimited.
     103                                 EMACS Manual for TWENEX Users



       Selecting  a  new major mode is done with an M-X command.  Each
     major mode is the name of  the  function  to  select  that  mode.
     Thus,  you  can  enter Lisp mode by executing M-X Lisp (short for
     M-X Lisp Mode).  Often EMACS enters the correct major mode for  a
     file simply based on the file's extension, and you do not have to
     worry about selecting a mode.

       You  can  specify which major mode should be used for editing a
     certain file by putting -*-<mode name>-*- somewhere in the  first
     nonblank   line  of  the  file.    For  example,  this  file  has
     -*-SCRIBE-*-.   In  a  program,  this  string  is  surrounded  by
     appropriate  other  characters  to hide it from the compiler in a
     comment.

       Many  major  modes  redefine  the  syntactical  properties   of
     characters  appearing  in the buffer.  See section 22.4 [Syntax],
     page 140.

       Most programming language major modes specify that  only  blank
     lines  separate  paragraphs.    This  is  so  that  the paragraph
     commands remain useful.  They also cause Auto Fill  mode  to  use
     the  definition  of Tab to indent the new lines it creates.  This
     is because most lines in a program are usually indented.

       To find out what a particular major  mode  redefines,  use  the
     command  M-X  List  Redefinitions  while  that mode is in effect.
     This command describes all the local variables  and  commands  of
     the selected buffer, in a form designed to be easy to understand.

       Major  modes  are  available  for  the  languages LISP, MUDDLE,
     MIDAS, PALX, IBM370 (assembler), FAIL, MACRO-10,  BASIC20,  BCPL,
     BLISS,  CLU, COBOL, FORTRAN, MACSYMA, PASCAL, PCL, PL1, SAIL, and
     TECO.

       There is also Text mode, designed for editing English text, and
     TEX and SCRIBE modes, for editing input to those  text  justifier
     programs.  See section 11 [Text], page 53.



     20.2 Compiling Your Program


       The  command  M-X  Compile<cr>  is  used to compile the visited
     file.  It knows how to compile it based on the  major  mode;  for
     example,  in  TECO  mode,  it  invokes  the  generator  for EMACS
     libraries.  Usually it assumes that the major mode  name  is  the
     name of the compiler or assembler to use.
     104                                 EMACS Manual for TWENEX Users



       The  first thing M-X Compile does is offer to save each buffer.
     This is because it is likely that other buffers contain parts  of
     the same program you are about to compile.

       Then M-X Compile invokes the appropriate compiler and passes it
     the  name  of the visited file as the source file.  If you give a
     string argument to M-X Compile, that is passed  to  the  compiler
     also.    This  can  be used to specify switches or the name of an
     output file.

       The major mode or the file's local modes  list  can  specify  a
     different  compiler  by  setting  the  variable Compiler Filename
     locally.  They can specify switches to be  used  by  setting  the
     variable  Compiler  Switches  (the  default is to use no switches
     except those specified by the user in the string argument to  M-X
     Compile).   If Compiler Filename is set to a positive number, the
     EXECUTE command is used  in  an  inferior  EXEC  to  compile  the
     program.

       When  EMACS  starts  up  again,  it  executes  the value of the
     variable After Compilation Hook, if that is nonzero.  This can be
     used for such tasks as  reading  the  compiler's  file  of  error
     messages into EMACS.

       The  major  mode  or the file's local modes list can completely
     override the normal processing of M-X Compile by giving a nonzero
     local value to the variable Compile Command.  This  should  be  a
     TECO  expression  which  takes  complete  responsibility  for the
     compilation.  It can find the filename to use  in  q-register  1.
     It  must use ^\ to exit.  All the other hooks described above are
     ignored.  This is often used when several  input  files  must  be
     compiled  together in order to compile any of them.  See the file
     EMACS:CCL.EMACS for  an  example  of  doing  this  for  an  EMACS
     library.

       You  can  also  use  EXEC  to  compile the program.  If EMACS's
     superior fork is EXEC, then M-X Rerun CCL  returns  to  EXEC  and
     re-executes   the   most   recent  Compile-class  command.    See
     section 6.3 [Exiting], page 29.



     20.3 Indentation Commands for Code


             Tab         Indents current line.
             Linefeed    Equivalent to Return followed by Tab.
             M-^         Joins two lines, leaving one space between if
                         appropriate.
     105                                 EMACS Manual for TWENEX Users



             M-\         Deletes all spaces and tabs around point.
             M-M         Moves  to the first nonblank character on the
                         line.  


       Most programming languages have  some  indentation  convention.
     For  Lisp  code, lines are indented according to their nesting in
     parentheses.  For assembler code, almost all lines start  with  a
     single  tab, but some have one or more spaces as well.  Indenting
     TECO code is an art rather than a science, but it is often useful
     to indent a line under the previous one.

       Whatever the language, to indent a line, use the  Tab  command.
     Each  major  mode  defines  this  command  to perform the sort of
     indentation appropriate for the particular  language.    In  Lisp
     mode,  Tab aligns the line according to its depth in parentheses.
     No matter where in the line you are when you type Tab, it  aligns
     the  line  as  a  whole.   In MIDAS mode, Tab inserts a tab, that
     being the standard indentation for assembly code.  In TECO  mode,
     Tab realigns the current line to match a previous line.  PL1 mode
     (See  the  file  INFO:EPL1.INFO.) knows in great detail about the
     keywords of the language so as to indent lines according  to  the
     nesting structure.

       The  command  Linefeed  (^R  Indent New Line) does a Return and
     then does a Tab on the next line.  Thus, Linefeed at the  end  of
     the  line  makes  a following blank line and supplies it with the
     usual amount of indentation.  Linefeed in the middle  of  a  line
     breaks  the  line  and supplies the usual indentation in front of
     the new line.

       The  inverse  of  Linefeed  is  Meta-^  or  C-M-^  (^R   Delete
     Indentation).   This command deletes the indentation at the front
     of the current line, and the line separator as well.    They  are
     replaced  by  a  single  space, or by no space if before a ")" or
     after a "(", or at the beginning of a line.  To delete  just  the
     indentation  of  a  line, go to the beginning of the line and use
     Meta-\ (^R Delete Horizontal Space), which deletes all spaces and
     tabs around the cursor.

       To insert an indented line before the current one, do C-A, C-O,
     and then Tab.  To make an indented line after  the  current  one,
     use C-E Linefeed.

       To  move  over  the  indentation on a line, use Meta-M or C-M-M
     (^R Back to Indentation).  These commands move the cursor forward
     or back to the first nonblank character on the line.
     106                                 EMACS Manual for TWENEX Users



     20.4 Automatic Display Of Matching Parentheses


       The  EMACS  parenthesis-matching  feature  is  designed to show
     automatically how parentheses balance in text as it is typed  in.
     When  this feature is enabled, after a close parenthesis or other
     close bracket character  is  inserted  the  cursor  automatically
     moves  for  an  instant  to  the  open  which  balances the newly
     inserted character.  The cursor stays at the open parenthesis for
     a second before returning home, unless you type  another  command
     before the second is up.

       It  is  worth emphasizing that the location of point, the place
     where your type-in will be  inserted,  is  not  affected  by  the
     parenthesis   matching   feature.    It  stays  after  the  close
     parenthesis, where it ought to be.  Only the cursor on the screen
     moves away and back.   You  can  type  ahead  freely  as  if  the
     parenthesis  display feature did not exist.  In fact, if you type
     fast enough, you won't see the cursor move.  You must pause after
     typing a close parenthesis to let the cursor  move  to  the  open
     parenthesis.

       The   variable  Display  Matching  Paren  controls  parenthesis
     display.  If it is  zero,  the  feature  is  disabled.    If  the
     variable  is  nonzero,  then  its absolute value is the number of
     seconds for the cursor to stay at  the  open  parenthesis  before
     coming  back  to  its real location.  The sign of the variable is
     also significant: if it is negative, then the open parenthesis is
     shown only if it is already on the screen.  If  the  variable  is
     positive,  then  EMACS  will actually shift text on the screen to
     show the open parenthesis.  The default setting of  the  variable
     is -1.

       An  additional  parameter  is  whether EMACS should warn you by
     ringing the bell if you type an unmatched close parenthesis.  The
     default is to warn you if you are editing  a  language  in  which
     parentheses  are  paramount,  such  as Lisp, but not to do so for
     languages in which parentheses are  not  so  crucial.    This  is
     controlled by the variable Permit Unmatched Paren.  When it is 1,
     you  are  never warned (they are always "permitted").  When it is
     0, you are warned, regardless of major mode.  When it is -1,  you
     are  warned  only  in  Lisp  mode  and similar modes (this is the
     default).   Note  that  these  modes  distinguish  themselves  by
     setting the variable locally to 0 if it was -1.  Unmatched parens
     are  always "permitted" in that EMACS will never refuse to insert
     them.

       While this feature was intended primarily for Lisp, it  can  be
     used just as well for any other language, and it is not dependent
     107                                 EMACS Manual for TWENEX Users



     on  what major mode you are in.  It is expected that you wouldn't
     want it in Text mode, so Text  mode  sets  the  variable  Display
     Matching  Paren  locally  to zero.  If you do want the feature in
     Text mode, you can create a Text Mode Hook  variable  which  sets
     the  variable  back  to  -1.    See the file INFO:CONV.INFO, node
     Hooks, for more info on Text Mode Hook.  The way to control which
     characters trigger this feature is with the syntax  table.    Any
     character  whose Lisp syntax is ")" causes the matching character
     with syntax "(" to be shown.  Most major modes automatically  set
     up the syntax table (See section 22.4 [Syntax], page 140.).

       The  syntax  table  also controls what is done with the case of
     "mismatched" parens, as in "[ )".  The  third  slot  in  a  close
     parenthesis  character's  syntax table entry should be the proper
     matching open parenthesis character, if  you  want  this  feature
     turned  on.  If that slot contains a space instead, then any open
     parenthesis character is considered a legitimate  match.    If  a
     close parenthesis is mismatched, it is inserted as always, but it
     rings the bell.

       The  implementation  of  this  feature  uses  the  TECO flag FS
     ^R PAREN$.  See section 22.5 [FS Flags], page 143.



     20.5 Manipulating Comments


       The comment commands insert, kill and align  comments.    There
     are  also commands for moving through existing code and inserting
     comments.


             M-;         Insert or align comment.
             C-;         The same.
             C-M-;       Kill comment.
             Return      Move past comment  terminator  and  onto  new
                         line.
             C-X ;       Set comment column.
             M-N         Move to Next line and insert comment.
             M-P         Move to Previous line and insert comment.
             M-J         Continue a comment on a new line.
             M-Linefeed  The same.  


       The  command  that  creates  a  comment  is Meta-; or Control-;
     (^R Indent for Comment).  If there is no comment already  on  the
     line,  a  new  comment  is  created, aligned at a specific column
     called the comment column.  The comment is created  by  inserting
     108                                 EMACS Manual for TWENEX Users



     whatever string EMACS thinks should start comments in the current
     major mode.  Point is left after the comment-starting string.  If
     the  text  of  the  line  goes  past the comment column, then the
     indentation is done to a suitable boundary (usually,  a  multiple
     of 8).

       Meta-;  can  also  be  used to align an existing comment.  If a
     line already contains the string that starts comments,  then  M-;
     just  moves point after it and re-indents it to the right column.
     Exception:  comments starting in column 0 are not moved.

       Even when an existing comment is properly aligned, M-; is still
     useful for moving directly to the start of the comment.

       Some languages require an explicit comment terminator, which is
     not simply the end of the line.  Although the language  may  then
     allow  comments  in  the  middle  of  the line, the EMACS comment
     commands assume that a comment is the last  thing  on  the  line.
     When there is a comment terminator, M-; inserts the terminator as
     well  as  the starter, and leaves point between them, so that you
     are ready to insert the text of the comment.  When you are  done,
     the   Return   command   given  immediately  before  the  comment
     terminator acts as if it were at the end of the line already:  it
     moves  down  to  or  creates a following blank line.  It does not
     break the existing line before  the  comment  terminator  as  you
     would expect.

       C-M-;  (^R Kill Comment) kills the comment on the current line,
     if there is one.  The indentation before the start of the comment
     is killed as well.  If there does not appear to be a  comment  in
     the  line,  nothing  is done.  To reinsert the comment on another
     line, move to the end of that line, do C-Y, and then  do  M-;  to
     realign it.


     20.5.1 Multiple Lines of Comments


       If  you  wish to align a large number of comments, you can give
     Meta-; an argument and it indents what  comments  exist  on  that
     many  lines,  creating  none.   Point is left after the last line
     processed (unlike the no-argument case).

       When adding comments to a long stretch of  existing  code,  the
     commands  M-N (^R Down Comment Line) and M-P (^R Up Comment Line)
     may be useful.  They are like C-N and C-P except that they  do  a
     C-;  automatically on each line as you move to it, and delete any
     empty comment from the line as you leave it.  Thus, you  can  use
     M-N to move down through the code, putting text into the comments
     109                                 EMACS Manual for TWENEX Users



     when  you  want to, and allowing the comments that you don't fill
     in to be removed because they remained empty.

       If you are typing a comment and find that you wish to  continue
     it   on   another  line,  you  can  use  the  command  Meta-J  or
     Meta-Linefeed (^R Indent New Comment Line), which terminates  the
     comment  you are typing, creates or gobbles a new blank line, and
     begins a new comment indented under the old one.  When Auto  Fill
     mode  is  on,  going  past the fill column while typing a comment
     causes the comment to be continued in just this  fashion.    Note
     that  if the next line is not blank, a blank line is created, and
     the continuation goes on that line.   By  comparison,  M-N  would
     create a continuation comment on the next existing line of code.


     20.5.2 Double and Triple Semicolons in Lisp


       In  Lisp  code  there  are conventions for comments which start
     with more than one semicolon.   Comments  which  start  with  two
     semicolons are indented as if they were lines of code, instead of
     at   the  comment  column.    Comments  which  start  with  three
     semicolons are supposed to start  at  the  left  margin.    EMACS
     understands  these  conventions  by  indenting a double-semicolon
     comment using Tab, and by  not  changing  the  indentation  of  a
     triple-semicolon  comment  at  all.  (Actually, this rule applies
     whenever the  comment  starter  is  a  single  character  and  is
     duplicated).      Note   that  the  ATSIGN  program  considers  a
     four-semicolon comment a subtitle in Lisp code.


     20.5.3 Options Controlling Comments


       The comment column is stored in the  variable  Comment  Column.
     You  can  set  it  to  a  number  explicitly.  Alternatively, the
     command C-X ; (^R Set Comment Column) sets the comment column  to
     the  column  point  is  at.  C-U C-X ; sets the comment column to
     match the last comment before point in the buffer, and then  does
     a  Meta-;  to align the current line's comment under the previous
     one.

       Many major modes supply default local values  for  the  comment
     column.    In  addition,  C-X  ; automatically makes the variable
     Comment Column local.  Otherwise,  if  you  change  the  variable
     itself,  it changes globally (for all buffers) unless it has been
     made local in the selected  one.    See  section  22.7  [Locals],
     page 151.
     110                                 EMACS Manual for TWENEX Users



       The  string  recognized  as the start of a comment is stored in
     the variable Comment Start, while the string used to start a  new
     comment  is kept in Comment Begin (if that is zero, Comment Start
     is used for new comments).  This makes it  possible  for  you  to
     have  any  ";"  recognized  as  starting  a  comment but have new
     comments begin with ";; ** ".

       The string used to end  a  comment  is  kept  in  the  variable
     Comment  End.   In many languages no comment end is needed as the
     comment extends to the end of the line.  Then, this variable is a
     null string.

       If Comment Multi Line is nonzero, then Meta-Linefeed  within  a
     comment does not close the old comment and start a new comment on
     the  new  line.  Instead it allows the original comment to extend
     through the new line.  This is legitimate  if  the  language  has
     explicit comment terminators.  Then it's a matter of taste.



     20.6 Lisp Mode and Muddle Mode


       Lisp's  simple  syntax  makes  it  much easier for an editor to
     understand; as a result, EMACS can do more  for  Lisp,  and  with
     less work, than for any other language.

       Lisp programs should be edited in Lisp mode.  In this mode, Tab
     is   defined   to  indent  the  current  line  according  to  the
     conventions of Lisp programming style.  It does not matter  where
     in the line Tab is used; the effect on the line is the same.  The
     function  which  does  the  work  is  called  ^R Indent for Lisp.
     Linefeed, as usual, does a Return and a Tab, so it moves  to  the
     next line and indents it.

       As  in most modes where indentation is likely to vary from line
     to line, Rubout is redefined to treat a tab as  if  it  were  the
     equivalent  number  of  space  (^R Backward Delete Hacking Tabs).
     This makes it possible to rub out indentation one position  at  a
     time  without  worrying  whether it is made up of spaces or tabs.
     Control-Rubout does the ordinary type of rubbing out  which  rubs
     out a whole tab at once.

       Paragraphs  are  defined to start only with blank lines so that
     the paragraph commands can be useful.  Auto Fill indents the  new
     lines  which  it creates.  Comments start with ";".  If Atom Word
     mode is in effect, them in Lisp  mode  the  word-motion  commands
     regard each Lisp atom as one word.
     111                                 EMACS Manual for TWENEX Users



       Lisp  mode  is  exactly  right  only for the MacLisp dialect of
     Lisp.  For Interlisp, there is  Interlisp  mode,  which  is  only
     slightly  different.    Mainly,  it  has a different syntax table
     which enables all the Lisp commands  to  work  as  documented  on
     Interlisp  code.  The only noteworthy difference is that comments
     begin with "(*" and end with ")".

       The LEDIT library allows EMACS and Lisp to communicate, telling
     Lisp the new definitions of functions which you  edit  in  EMACS.
     See  the  file  INFO:LEDIT.INFO.    For  Interlisp, use the INTER
     library.  See the file INFO:INTER.INFO.

       The language Muddle is a variant form of Lisp which shares  the
     concept  of  using  parentheses  (of  various  sorts) as the main
     syntactical construct.  It can be edited using Muddle mode, which
     is almost the same as Lisp mode and provides the  same  features,
     differing only in the syntax table used.


     20.6.1 Moving Over and Killing Lists and S-expressions


             C-M-F           Move Forward over s-expression.
             C-M-B           Move Backward.
             C-M-K           Kill s-expression forward.
             C-M-Rubout      Kill s-expression backward.
             C-M-U           Move Up and backward in list structure.
             C-M-(           The same.
             C-M-)           Move up and forward in list structure.
             C-M-D           Move Down and forward in list structure.
             C-M-N           Move forward over a list.
             C-M-P           Move backward over a list.
             C-M-T           Transpose s-expressions.
             C-M-@           Put mark after s-expression.
             M-(             Put      parentheses      around     next
                             s-expression(s).
             M-)             Move  past  next  close  parenthesis  and
                             re-indent.  


       By   convention,   EMACS   commands  that  deal  with  balanced
     parentheses are usually Control-Meta- characters.  They  tend  to
     be analogous in function to their Control- and Meta- equivalents.
     These  commands are usually thought of as pertaining to Lisp, but
     can be useful with any language in which some sort of parentheses
     exist (including English).

       To move forward over an s-expression,  use  C-M-F  (^R  Forward
     Sexp).  If the first significant character after point is an "(",
     112                                 EMACS Manual for TWENEX Users



     C-M-F  moves  past the matching ")".  If the first character is a
     ")", C-M-F just moves past it.  If the character begins an  atom,
     C-M-F  moves  to  the  end  of  the atom.  C-M-F with an argument
     repeats that operation the specified  number  of  times;  with  a
     negative argument, it moves backward instead.

       The  command  C-M-B  (^R  Backward Sexp) moves backward over an
     s-expression; it is like C-M-F with the  argument  negated.    If
     there  are "'"-like characters in front of the s-expression moved
     over, they are moved over  as  well.    Thus,  with  point  after
     " 'FOO ", C-M-B leaves point before the "'", not before the "F".

       These  two  commands (and most of the commands in this section)
     do not know how to deal with the presence of comments.   Although
     that would be easy to fix for forward motion, for backward motion
     the  syntax  of  Lisp  makes  it  nearly impossible.  Comments by
     themselves can be dealt with,  but  handling  both  comments  and
     strings is impossible with local backward parsing.  In a line 


         ((FOO ; " BAR


     are the open parentheses inside a string?  So C-M-B cannot handle
     comments, and C-M-F does not either for simplicity's sake.

       For  this  reason,  two  other  commands  which move over lists
     instead of s-expressions  are  often  useful.    They  are  C-M-N
     (^R  Forward  List)  and C-M-P (^R Backward List).  They act like
     C-M-F and C-M-B except that  they  don't  stop  on  atoms;  after
     moving over an atom, they move over the next expression, stopping
     after  moving  over  a  list.    With this command, you can avoid
     stopping after all of the words in a comment.

       Killing an s-expression at a time can be done  with  C-M-K  and
     C-M-Rubout  (^R  Forward  Kill  Sexp  and ^R Backward Kill Sexp).
     C-M-K kills the  characters  that  C-M-F  would  move  over,  and
     C-M-Rubout kills what C-M-B would move over.

       C-M-F  and  C-M-B  stay  at the same level in parentheses, when
     that's possible.  To move up one (or  n)  levels,  use  C-M-(  or
     C-M-)  (^R Backward Up List and ^R Forward Up List).  C-M-( moves
     backward up past one containing "(".  C-M-) moves forward up past
     one containing ")".  Given a positive  argument,  these  commands
     move  up the specified number of levels of parentheses.  C-M-U is
     another name for C-M-(, which is easier to  type,  especially  on
     non-Meta  keyboards.   If you use that name, it is useful to know
     that a negative argument makes the command move up forwards, like
     C-M-).
     113                                 EMACS Manual for TWENEX Users



       To  move  down in list structure, use C-M-D (^R Down List).  It
     is nearly the same as searching for a "(".

       A somewhat random-sounding command which is  nevertheless  easy
     to  use  is  C-M-T (^R Transpose Sexps), which drags the previous
     s-expression across the next one.  An argument serves as a repeat
     count, and a negative argument drags  backwards  (thus  canceling
     out  the  effect of C-M-T with a positive argument).  An argument
     of zero, rather than doing nothing, transposes the  s-expressions
     at the point and the mark.

       To  make the region be the next s-expression in the buffer, use
     or C-M-@ (^R Mark Sexp) which sets mark at the  same  place  that
     C-M-F  would  move  to.    C-M-@  takes arguments like C-M-F.  In
     particular, a negative argument is useful for putting the mark at
     the beginning of the previous s-expression.

       The commands M-( ("^R Insert ()") and M-) ("^R  Move  Over  )")
     are  designed  for  a  style  of  editing which keeps parentheses
     balanced at all times.  M-( inserts a pair of parentheses, either
     together as in "()", or, if given an argument,  around  the  next
     several   s-expressions,   and   leaves   point  after  the  open
     parenthesis.  Instead of typing "(FOO)", you can  type  M-(  FOO,
     which  has  the  same effect except for leaving the cursor before
     the close parenthesis.  Then you type M-), which moves  past  the
     close parenthesis, deleting any indentation preceding it (in this
     example there is none), and indenting with Linefeed after it.

       The  library LSPUTL contains two other list commands.  Find Pat
     searches for lists which contain several  strings.    ^R  Extract
     Sublist   replaces  a  list  with  one  of  its  sublists.    See
     section 22.2 [Libraries], page 136.

       <level>M-X Find  Pat$<mainstring>$<string1>$<string2>  searches
     for  a  list  which  contains  <mainstring> at a depth of <level>
     lists down, and contains <string1> and <string2>  at  any  level.
     There can be any number of such additional strings to search for;
     there can be none of them.

       ^R  Extract  Sublist  is  meant to be connected to a character.
     Given an argument of <level>, it replaces the list <level> levels
     up from point with its sublist which starts after point.

       The library XLISP  contains  a  functions  for  making  various
     transformations on Lisp code:

       Lowercase  Lisp  Buffer changes all the Lisp code in the buffer
     to lower case, without changing comments, strings, or  slashified
     characters.      Uppercase   Lisp  Buffer  performs  the  inverse
     114                                 EMACS Manual for TWENEX Users



     transformation.   Lowercase Lisp Region and Uppercase Lisp Region
     are similar but act only between point and mark.

       Change /  to  \  takes  Lisp  code  written  with  "/"  as  the
     character-quote  character  and  transforms  it  to  use  the new
     character-quote character, "\".  The meaning of  the  transformed
     code in the new syntax is the same as that of the old code in the
     old syntax.

       XLISP  contains  several  other  commands  which  transform old
     constructs into new ones.  They behave like Query Replace in that
     they display each occurrence of the old  construct  and  ask  you
     whether to change it to the new one.  A Space means yes, a Rubout
     means  no.    Here is a list of these commands, and what each one
     transforms.


     Modernize FUNCTION References
                     (FUNCTION ...) into #'...

     Modernize QUOTE References
                     (QUOTE ...) into '...

     Modernize LAMBDA References
                     '(LAMBDA ...) into #'(LAMBDA ...)

     Modernize MAP References
                     (MAPxxx '... ...) into (MAPxxx #'... ...)

     Modernize NIL Occurrences
                     NIL into ()

     Modernize LAMBDA Combinations
                     ((LAMBDA (X) Y) ARG) into (LET ((X ARG)) Y)

     Modernize Strings
                     '|...| into "..."  


       facility  for  replacing  obsolete  or  old-fashioned   Maclisp
     constructs with equivalent modern ones.

       The  list  commands'  understanding  of  syntax  is  completely
     controlled by the syntax table.  Any character can, for  example,
     be  declared  to  act like an open parenthesis.  See section 22.4
     [Syntax], page 140.
     115                                 EMACS Manual for TWENEX Users



     20.6.2 Commands for Manipulating Defuns


             C-M-[, C-M-A    Move to beginning of defun.
             C-M-], C-M-E    Move to end of defun.
             C-M-H           Put region around wHole defun.  


       In  EMACS,  an  expression  at  the  top level in the buffer is
     called a defun, regardless of what function is actually called by
     the expression, because such expressions usually call defun.

       In the remotest past, EMACS found defuns  by  moving  upward  a
     level  of  parentheses  until there were no more levels to go up.
     This required scanning all the way back to the beginning  of  the
     file.   To speed up the operation, EMACS now assumes that any "("
     (or any character with "(" as its Lisp syntax) in column 0 is the
     start of a defun.  This heuristic  is  nearly  always  right  and
     avoids the costly scan.

       The  commands  to  move to the beginning and end of the current
     defun are C-M-[ (^R Beginning of Defun)  and  C-M-]  (^R  End  of
     Defun).    Alternate  names  for these two commands are C-M-A for
     C-M-[ and C-M-E for C-M-].  The alternate  names  are  easier  to
     type on many non-Meta keyboards.

       If you wish to operate on the current defun, use C-M-H (^R Mark
     Defun)  which  puts point at the beginning and mark at the end of
     the current or next defun.



     20.7 Lisp Grinding


       The best way to keep Lisp code properly indented ("ground")  is
     to  use  EMACS  to  re-indent  it  when it is changed.  EMACS has
     commands to indent properly either a  single  line,  a  specified
     number   of   lines,   or  all  of  the  lines  inside  a  single
     s-expression.


             Tab         In Lisp mode, re-indents  line  according  to
                         parenthesis depth.
             Linefeed    Equivalent to Return followed by Tab.
             M-^         Join  two  lines,  leaving  one space between
                         them if appropriate.
             C-M-Q       Re-indent all the lines within one list.
             C-M-G       Grind a list, moving code between lines.  
     116                                 EMACS Manual for TWENEX Users



       The  basic  indentation  function  is ^R Indent for Lisp, which
     gives the current line the correct indentation as determined from
     the previous lines' indentation and parenthesis structure.   This
     function  is  normally found on C-M-Tab, but when in Lisp mode it
     is placed on Tab as well (Use Meta-Tab or C-Q  Tab  to  insert  a
     tab).    If  executed at the beginning of a line, it leaves point
     after the indentation; when given inside the text on the line, it
     leaves point fixed with respect to the characters around it.

       When  entering  a  large  amount  of  new  code,  use  Linefeed
     (^R Indent New Line), which is equivalent to a Return followed by
     a  Tab.    In  Lisp mode, a Linefeed creates or moves down onto a
     blank line, and then gives it the appropriate indentation.

       To join two lines together, use the  Meta-^  or  Control-Meta-^
     command  (^R  Delete  Indentation),  which  is  approximately the
     opposite of Linefeed.  It deletes any  spaces  and  tabs  at  the
     front  of  the  current line, and then deletes the line separator
     before the line.  A single  space  is  then  inserted,  if  EMACS
     thinks  that one is needed there.  Spaces are not needed before a
     close parenthesis, or after an open parenthesis.

       If you are dissatisfied about where Tab indents the second  and
     later  lines  of  an  s-expression,  you can override it.  If you
     alter the indentation of one of the lines yourself, then Tab will
     indent successive lines of the same list  to  be  underneath  it.
     This   is  the  right  thing  for  functions  which  Tab  indents
     unaesthetically.

       When you wish to re-indent code which has been altered or moved
     to a different level in the  list  structure,  you  have  several
     commands available.  You can re-indent a specific number of lines
     by  giving  the  ordinary  indent  command (Tab, in Lisp mode) an
     argument.  This indents as many lines as you say and moves to the
     line following them.  Thus, if you underestimate, you can  repeat
     the process later.

       You  can  re-indent  the  contents  of a single s-expression by
     positioning  point  before  the  beginning  of  it   and   typing
     Control-Meta-Q  (^R  Indent  Sexp).    The  line the s-expression
     starts on is not re-indented; thus, only the relative indentation
     with in the s-expression, and not its position, is changed.    To
     correct the position as well, type a Tab before the C-M-Q.

       Another  way  to  specify  the  range to be re-indented is with
     point and mark.  The command C-M-\ (^R Indent Region) applies Tab
     to every line whose first character is between  point  and  mark.
     In Lisp mode, this does a Lisp indent.
     117                                 EMACS Manual for TWENEX Users



       A more powerful grind command which can move text between lines
     is  C-M-G  (^R Format Code).  You might or might not like it.  It
     knows in different ways about Lisp code and Macsyma code.


     20.7.1 Customizing Lisp Indentation


       The indentation pattern for a Lisp expression can depend on the
     function called by the expression.  For each Lisp  function,  you
     can  choose  among several predefined patterns of indentation, or
     define an arbitrary one with a TECO program.

       The standard pattern of indentation is as follows:  the  second
     line  of  the expression is indented under the first argument, if
     that is on the same line as  the  beginning  of  the  expression;
     otherwise,  the  second  line is indented one space more than the
     entire expression.  Each following line  is  indented  under  the
     previous line whose nesting depth is the same.

       Another  indentation  pattern is used for functions whose names
     start with "def".  The second line of the expression is  indented
     two  spaces  more  than the entire expression.  The variable Lisp
     Special Indent Offset  (default  2)  controls  the  increment  in
     depth.    Each  following  line  indents  under the previous one.
     Again, lines starting at lower depths do not count.  Setting  the
     variable  Lisp Indent DEFAnything to zero turns this feature off.
     Then the standard pattern applies to def- functions by default.

       The indentation pattern for expressions that call the  function
     FOO  is  controlled specifically by the variable Lisp FOO Indent.
     If this variable does not exist,  the  standard  pattern  or  the
     def-  pattern  is  used.    If the variable does exist, its value
     should be one of these:


         -3          selects the standard or def- indentation pattern,
                     as if the variable did not exist.
         -2          selects the standard indentation  pattern.    The
                     def-  pattern  is  not used, even if the function
                     name starts with "def".
         -1          selects the def- indentation pattern, independent
                     of the function name  and  the  setting  of  Lisp
                     Indent DEFAnything.
         0 or more   selects  special form with body indentation.  The
                     value of the variable is the  number  of  special
                     arguments  that  precede  the body; thus, LET and
                     LAMBDA have one distinguished argument before the
                     body (the list of  bound  variables),  PROGN  has
     118                                 EMACS Manual for TWENEX Users



                     none,   and   DO  has  two.    The  distinguished
                     expressions at the beginning are  indented  using
                     the standard pattern, but the first expression of
                     the  body, if it should occur at the beginning of
                     a line, is indented two spaces  deeper  than  the
                     entire  expression.   Following lines indent each
                     under the previous one as usual.    The  variable
                     Lisp  Special  Indent Offset (default 2) controls
                     the increment in depth.
         a string    should be a TECO expression which  implements  an
                     indentation pattern.  Initially, Lisp PROG Indent
                     is  defined  as  a  string  (the  definition of &
                     Standard Lisp PROG Indent) which detects tags and
                     indents them specially.


       The  variable  Lisp  Indent  Offset,  if  nonzero,  selects   a
     different  indentation  pattern  as the standard one.  It indents
     the second line of each expression that many spaces  deeper  than
     the enclosing expression.

       Implementing and selecting among the above indentation patterns
     is  the  responsibility  of  the  definition of the variable Lisp
     Indentation Hook.  This variable must exist and its value must be
     a TECO program.  By default its value  is  the  definition  of  &
     Standard Lisp Indentation Hook.

       Whatever  its  value,  the  hook  is called with two arguments,
     which are the position in the buffer of the most recent  unclosed
     "("  and  the  buffer position of the beginning of the line to be
     indented.  The buffer position of the cursor at the time the  tab
     was  typed  is  stored as an offset from Z in qZ, so Z-qZ is that
     buffer position.  The hook should not modify the buffer.   If  it
     returns  0 or no value, the caller will use the horizontal cursor
     position of point as the column to indent to.  Hence,  to  indent
     under the "O" in PROG, it is sufficient to jump to that character
     in  the  buffer  and  return.  Alternatively, the hook can simply
     return the desired indentation column number as a value.

       The hook should return a nonzero precomma  value  if  following
     lines of the same expression should be indented individually.  If
     it  does  not  return  a  nonzero  precomma value, the caller may
     remember the indentation of this line and indent following  lines
     the same way.

       If Lisp FOO Indent has a TECO expression as its value, the same
     interface conventions apply to it.

       Different  Lisp-like languages can select an entirely different
     119                                 EMACS Manual for TWENEX Users



     set of indentation patterns by changing the value of the variable
     Lisp Indent Language.  Normally the value of this variable is the
     string  "Lisp".    All  the  variables  listed  above  with names
     beginning with "Lisp" actually should have names  beginning  with
     the  Lisp  Indent  Language.    Thus,  if Lisp Indent Language is
     changed to "Muddle", then the indentation commands will look  for
     variables  Muddle  Indent Offset, Muddle Indentation Hook, Muddle
     PROG Indent, etc.



     20.8 Editing Assembly-Language Programs


       MIDAS mode is designed for  editing  programs  written  in  the
     MIDAS assembler.  Major modes for other assemblers, such as PALX,
     MACRO,  and  FAIL, also exist but differ only in the syntax table
     and in the name of the major mode hook  that  they  will  invoke.
     (There   is  also  IBM370  mode,  for  370  assembler,  which  is
     completely different.  Refer to  the  self-documentation  of  the
     IBM370 library for information on it).

       In  MIDAS  mode,  comments start with ";", and "<" and ">" have
     the syntax of parentheses.  In addition, there are  five  special
     commands  which understand the syntax of instructions and labels.
     These commands are:


             C-M-N       Go to Next label.
             C-M-P       Go to Previous label.
             C-M-A       Go to Accumulator field of instruction.
             C-M-E       Go to Effective Address field.
             C-M-D       Kill next word and its Delimiting  character.
                         


       Two other commands with slightly different uses are


             M-[         Move up to previous blank line.
             M-]         Move down to next blank line.  


       Any  line  which  is  not indented and is not just a comment is
     taken to contain a label.  The label  is  everything  up  to  the
     first  whitespace (or the end of the line).  C-M-N (^R Go to Next
     Label) and C-M-P (^R Go to  Previous  Label)  both  position  the
     cursor  right  at the end of a label; C-M-N moves forward or down
     and C-M-P moves backward or up.   At  the  beginning  of  a  line
     120                                 EMACS Manual for TWENEX Users



     containing  a  label, C-M-N moves past it.  Past the label on the
     same line, C-M-P moves back to the end of it.    If  you  kill  a
     couple  of  indented  lines and want to insert them right after a
     label, these commands put you at just the right place.

       C-M-A (^R Go to AC Field) and C-M-E (^R Go  to  Address  Field)
     move  to  the  beginning  of  the  accumulator  (AC) or effective
     address fields of a PDP-10 instruction.  They always stay on  the
     same  line, moving either forward or backward as appropriate.  If
     the instruction contains no AC  field,  C-M-A  positions  to  the
     start of the address field.  If the instruction is just an opcode
     with  no AC field or address field, a space is inserted after the
     opcode and the cursor left after the space.  In PDP-11  programs,
     C-M-A  moves  to  the first operand and C-M-E moves to the second
     operand.

       Once you've gone to the beginning of the AC field you can often
     use C-M-D (^R Kill Terminated Word) to kill the AC name  and  the
     comma  which terminates it.  You can also use it at the beginning
     of a line, to kill a label and  its  colon,  or  after  a  line's
     indentation  to kill the opcode and the following space.  This is
     very convenient for moving a label from one line to another.   In
     general,  C-M-D  is  equivalent  to  M-D C-D, except that all the
     characters are  saved  on  the  kill  ring,  together.    C-D,  a
     "deletion" command, doesn't save on the kill ring if not given an
     argument.

       The  M-[ and M-] commands are not, strictly speaking, redefined
     by MIDAS mode.  They go up or down to a  paragraph  boundary,  as
     usual.    However,  in  MIDAS  mode the criterion for a paragraph
     boundary is changed by setting the variable  Paragraph  Delimiter
     (See  section  11.2  [Paragraphs],  page  55.) so that only blank
     lines (and pages) delimit paragraphs.  So, M-[ moves  up  to  the
     previous blank line and M-] moves to the next one.



     20.9 Major Modes for Other Languages


       MACSYMA mode redefines the syntax of words and s-expressions in
     an  attempt  to  make  it  easier  to move over MACSYMA syntactic
     units.  In addition, the C-M-G "grind" command is told  to  grind
     text  as MACSYMA instead of as Lisp.  Also, the syntax of MACSYMA
     comments is understood.

       TECO mode is good for editing EMACS library source files.    It
     connects  Tab  to  ^R Indent Nested (see its self-documentation).
     Comments start with "!* " and end with "!".    In  addition,  the
     121                                 EMACS Manual for TWENEX Users



     PURIFY  library, which contains many things useful for processing
     library sources (including the  commands  to  compile  them),  is
     loaded.    M-' and M-" are connected to functions ^R Forward TECO
     Conditional and ^R Backward TECO Conditional which  move  forward
     and  backward over balanced TECO conditionals.  In TECO mode on a
     terminal with a Meta key, it may be useful to set the  TECO  flag
     FS  CTLMTA$  which causes Control-Meta commands to insert Control
     characters.  See section 22.5 [FS Flags], page 143.

       CLU mode is for editing CLU code.  It is similar to LISP  mode,
     but  it  treats the statement nesting tokens like the appropriate
     sorts of parentheses.  It is in the library called CLU.  See  the
     file INFO:ECLU.INFO.

       PL1  mode  is for editing PL1 code, and causes Tab to indent an
     amount based on the previous statement type.   The  body  of  the
     implementation of PL1 mode is in the library PL1, which is loaded
     automatically when necessary.  See the file INFO:EPL1.INFO.

       PASCAL  mode  is similar to PL1 mode, for PASCAL.  It is in the
     library called PASCAL.  See the file INFO:EPASC.INFO.

       FORTRAN mode is implemented by the FORTRAN library.    See  the
     file INFO:EFORTRAN.INFO.

       There   are   major   modes   for  many  other  languages,  but
     documentation for them except that in the  libraries  themselves.
     Any  volunteers  to  write  some?  Meanwhile, you can look at the
     documentation in the libraries.  See  section  22.2  [Libraries],
     page 136.
     122                                 EMACS Manual for TWENEX Users



                            CHAPTER TWENTY-ONE
                             THE TAGS PACKAGE.



       The  TAGS  package  remembers  the  locations  of  the function
     definitions in a file and enables  you  to  go  directly  to  the
     definition of any function, without searching the whole file.

       The functions of several files that make up one program can all
     be  remembered  together  if you wish; then the TAGS package will
     automatically select the appropriate file as well.



     21.1 How to Make a Tag Table for a Program


       To use the TAGS package, you must create a tag  table  for  the
     source  file  or  files in your package.  Normally, the tag table
     does not reside in any of those files,  but  in  a  separate  tag
     table  file  which  contains the names of the text files which it
     describes.  Tag table files are generated by  the  TAGS  program.
     The  same  program  can  be  used  to  update the tag table if it
     becomes very far out of date (slight inaccuracies do not matter).
     Tag tables  for  INFO  files  work  differently;  the  INFO  file
     contains  its own tag table, which describes only that file.  See
     section 21.8 [INFO tag tables], page 132, for how  to  deal  with
     them.

       To  make  a  tag  table  file  for some source file or group of
     source files, you need to  run  the  TAGS  program  which  should
     reside somewhere on SYS: or, if not there, <EMACS>.  When you run
     it,  it  will  ask you for an output file.  This is the file that
     will contain the tags of the source files.    Usually  you  would
     specify something like FOO.TAGS if the source file is FOO.BAR, so
     that  they  will  be grouped together in directory listings.  For
     example:


         @TAGS                      ; Runs the TAGS program
         Output tags file:FOO.TAGS   ; Specify output file
         Type filenames, end with blank line
         *


       After you specify the output file, TAGS asks you for the  input
     files.   You can give a number of files separated by commas, with
     wild cards allowed.  Once you have done  this,  TAGS  scans  each
     123                                 EMACS Manual for TWENEX Users



     input  file  and  writes  the  data  into  the  output file.  For
     example:


         Type filenames, end with blank line
         *FOO.MAC
         FOO.MAC.1 - 784. functions found.
         *
         FOO.TAGS.1 - 784. functions in 1. files.
         @


       Once each file is scanned, a message is  typed  indicating  the
     number  of  "functions"  (labels, procedures, routines etc.) that
     were actually found.  Once it is through  processing  your  input
     files,  you  can  type another line full of input file names.  If
     there are no more, type just a Return.  The empty line  of  input
     tells TAGS to finish up and close the output file, which is now a
     usable tag table file.

       The  following  languages  are  recognized  by the TAGS program
     according to the extension of the input filename specified:


             Language        Presumed extension
             BASIC           B20
             BLISS           BLI
             BLISS11         B11
             FAIL            FAI
             FORTRAN         FOR
             H316            H16
             INTERLISP       ILSP
             MACLISP         LSP
             MACN11          M11
             MACRO           MAC
             MIDAS           MID
             MORTRAN         MOR
             NONE            ZZZ
             PAL11X          P11
             PASCAL          PAS
             PCL             PCL
             PUB             DFS
             PUBTEXT         PUB
             SAIL            SAI
             TECO            EMACS or TEC
             TEXT            HLP, MEM or TXT 


       If the extension you give is not recognizable, TAGS asks you to
     124                                 EMACS Manual for TWENEX Users



     specify  the complete language name as above.  Languages NONE and
     TEXT just include the file in the tag table, for  use  with  Tags
     Query  Replace  and  such;  files with those languages contain no
     tags.

       Once a tag table file exists, you must updated it  if  you  add
     new tags to the source files, or change them grossly.  You can do
     this by invoking TAGS with the tab table filename as an argument:
     


         @TAGS FOO.TAGS


     TAGS finds the names and languages of the source files by reading
     the old tag table.

       The  recently developed TAGGEN library is contains the function
     Generate Tags File for updating a tag table.   This  library  may
     eventually  replace  the TAGS program, being easier to customize.
     In the mean time, you are encouraged to try it out.  Refer to its
     self-documentation for more information.



     21.2 How to Tell EMACS You Want to Use TAGS


       Before you can use the TAGS package to find  a  tag,  you  must
     tell  EMACS the name of the tag table file you want to use.  This
     is done with the command


         M-X Visit Tag Table$ <filenames> <cr>


     The extension of "TAGS" need not be mentioned.

       EMACS can only know about one tag table  file  at  a  time,  so
     doing  a  second  M-X  Visit Tag Table causes the first one to be
     forgotten (or written back if you have added definitions to it).

       Giving M-X Visit Tag Table a nonzero numeric argument, as in 


         C-U 1 M-X Visit Tag Table$ <filenames> <cr>


     has the additional effect of setting the variable Tags Find  File
     125                                 EMACS Manual for TWENEX Users



     nonzero,  which  causes  the TAGS package to use Find File rather
     than Visit File when it needs to switch files.  This  causes  all
     the  files to remain resident in the EMACS, in different buffers.
     In the default mode, visiting a tag in a different file  read  it
     in  on  top of the old file, in the same buffer (but it offers to
     write out changes if there are any).  Warning: you can easily run
     out of address space by making too many buffers, this way.    See
     section 24.2.5 [Storage Exhausted], page 163. .

       Visit  Tag  Table  is  essentially  equivalent to selecting the
     buffer *TAGS* and visiting the tag table  file  in  that  buffer,
     then  returning  to  the previously selected buffer.  Afterwards,
     M-X List Buffers will show the buffer *TAGS* visiting that  file.
     The  only  difference  is  that  Visit  Tag Table causes the TAGS
     library to be loaded.



     21.3 Jumping to a Tag


       To jump to the  definition  of  a  function,  use  the  command
     Meta-Period  <tag  name>  <cr>.    You  will  go  straight to the
     definition of the tag.  If the definition is in a different  file
     then  TAGS  visits  that  file.   If it is in the same file, TAGS
     leaves the mark behind and prints "^@" in the echo area.

       You do not need to type the complete name of the function to be
     found; any substring will do.  But this  implies  that  sometimes
     you  won't get the function you intended.  When that happens, C-U
     Meta-Period will find the "next" function matching what you typed
     (next, in the order of listing in the tag table).  Thus,  if  you
     want  to find the definition of X-SET-TYPE-1 and you specify just
     TYPE-1, you might find X-READ-TYPE-1 instead.    You  could  then
     type C-U Meta-Period until you reach X-SET-TYPE-1.

       If you want to make sure you reach a precise function the first
     time,  you  should just include a character of context before and
     after its name.  Thus, in a Lisp program, put a space before  and
     after  the  function  name.    In a MIDAS program, put a linefeed
     before it and a colon after.

       If Meta-Period is used before M-X  Visit  Tag  Table  has  been
     done,  it  asks for the name of a tag table file.  After you type
     this name and a <cr>, you type the name of the tag as usual.   If
     the  variable  Tag  Table  Filenames  exists,  it  specifies  the
     defaults for the filename.

       Typing an Altmode as the first character  of  the  argument  to
     126                                 EMACS Manual for TWENEX Users



     Meta-Period  allows you to switch to a new tag table.  It prompts
     for the tag table filenames, then prompts again for the tag.



     21.4 Other Operations on Tag Tables


     21.4.1 Adding a New Function to a Tag Table


       When you define a new function, its location doesn't go in  the
     tag  table  automatically.   That's because EMACS can't tell that
     you have defined a function unless you tell it  by  invoking  the
     function  ^R  Add  Tag.  Since the operation of adding a tag to a
     tag table has proved not to be very necessary, this  function  no
     longer  placed on any character, by default.  You can invoke with
     M-X or connect it to a character if you like.  For this  section,
     let's assume you have placed it on C-X Period.

       When  you type the command C-X Period, the pointer should be on
     the line that  introduces  the  function  definition,  after  the
     function  name and the punctuation that ends it.  Thus, in a Lisp
     program, you might type "(DEFUN FOO " (note the space after  FOO)
     and then type the C-X Period.  In a MIDAS program, you might give
     the  C-X  Period after typing "FOO:".  In a TECO program in EMACS
     format, you might type C-X Period after "!Set New Foo:!".

       ^R Add Tag modifies only the copy of the tag table loaded  into
     EMACS.  To modify the tag table file itself, you must cause it to
     be saved.  M-X Save All Files is the easiest way to do this.

       Although  local  modifications  to  a  file  do not degrade the
     efficiency of the TAGS package or require that the tag  table  be
     updated  with  TAGS,  moving  a function a great distance make it
     much slower to find that function.  In this case, you  can  "add"
     the  function  to the tag table with C-X Period to give the table
     its new location.  Or you can  just  run  TAGS  again  to  update
     everything, as is usually done.


     21.4.2 How to Process All the Files in a Tag Table


       The  TAGS  package  contains  a  function  M-X  Next File which
     visits, one by one, all the files described by the  selected  tag
     table.   This is useful when there is something to be done to all
     of the files in the package.  To start off the sequence, do C-U 1
     M-X Next File, which  visits  the  first  file.    When  you  are
     127                                 EMACS Manual for TWENEX Users



     finished operating on one file, do M-X Next File (no argument) to
     see  the  next.  When all the files have been processed, M-X Next
     File gives an error.

       The files of the package are visited in the order that they are
     mentioned in the tag table, and the current place in the sequence
     is remembered by the pointer in the buffer *TAGS* which holds the
     tag table.  Thus, if you visit a tag in a different file  in  the
     middle  of  a M-X Next File sequence, you will screw it up unless
     you return to the proper file again by visiting a tag (or go into
     the buffer *TAGS* and reset the pointer).  However, visiting  any
     other files directly, not using TAGS, does not interfere with the
     sequence,  and the next M-X Next File will go just where it would
     have gone.

       Next File is also useful as a subroutine in functions that wish
     to perform an automatic transformation (such as a Query  Replace)
     on  each  file.    Such  functions  should  call Next File with a
     precomma argument as in 1,M(M.M  Next  File$)  or  1,1M(M.M  Next
     File$).    The  precomma  argument  tells  Next  File to return 0
     instead of giving an error  when  there  are  no  more  files  to
     process.  Normally, it returns -1.

       Here is an example of TECO code to do a Query Replace on all of
     the files listed in the visited tag table:


         1M(M.M Next File$)
         < M(M.M Query Replace$)FOO$BAR$
           1,M(M.M Next File$);>


       Tags  Search and Tags Query Replace (see below) both work using
     Next File.


     21.4.3 Multi-File Searches and Replacements


       The TAGS package contains a function  Tags  Search  which  will
     search  through  all of the files listed in the visited tag table
     in the order they are listed.  Do 


         M-X Tags Search$<string><cr>


     to find every occurrence of <string>.  <string> is a TECO  search
     string  in  which  special TECO search characters such as ^O, ^X,
     128                                 EMACS Manual for TWENEX Users



     ^N,  ^B,  and  ^Q  are  allowed.    See section 19.3 [TECO Search
     Strings], page 101.

       When M-X Tags Search reaches the end of the buffer,  it  visits
     the  next  file  automatically, typing its name in the echo area.
     As soon as M-X Tags Search finds one occurrence, it returns.  But
     it defines the command Control-Period to resume the  search  from
     wherever point is.

       M-X  Tags Query Replace does a Query Replace over all the files
     in a tag table.  Like M-X Tags Search, it sets Control-. up to be
     a command to continue the Query Replace,  in  case  you  wish  to
     exit, do some editing, and then resume scanning.

       With  Tags  Find  File  set  nonzero, Tags Search or Tags Query
     Replace could easily require more buffers  than  EMACS  has  room
     for.  To prevent such a problem, they do not always put each file
     in a separate buffer.  If Tags Search or Tags Query Replace wants
     to search a file which is already visited in some buffer, it uses
     the  copy  in  that  buffer.  But if the file is not present, and
     Tags Find File is 1, then instead  of  visiting  it  in  its  own
     buffer,  they  visit  it  in a buffer named *Tags Search*.  So at
     most one new buffer is created.  If Tags Find File is  2,  a  new
     buffer is created for each file.

       The  library  MQREPL  enables  you to use Next File to repeat a
     sequence of many Query Replace commands  over  a  set  of  files,
     performing all the replacements on one file at a time.


     21.4.4 Miscellaneous Applications of Tags


       M-X  List  Tags$<file><cr>  lists all the tags in the specified
     file.  Actually, all the files  in  the  tag  table  whose  names
     contain the string <file> are listed.

       M-X  Tags  Apropos$<pat><cr>  lists  all known tags whose names
     contain <pat>.

       M-X Tags File List inserts in the buffer a list  of  the  files
     known in the visited tag table.

       M-X  Tags  Rescan  runs  TAGS  over  the  visited tag table and
     revisits it.  This is the most convenient way to update  the  tag
     table.

       M-X View Arglist$<tag><cr> lets you look briefly at the line on
     which  a  tag  is  defined,  and  at  the lines of comments which
     129                                 EMACS Manual for TWENEX Users



     precede  the  definition.    This  is a good way to find out what
     arguments a function needs.  The file is  always  loaded  into  a
     separate buffer, when this command is used.

       M-X What Tag? tells you which function's definition you are in.
     It  looks  through  the  tag  table for the tag which most nearly
     precedes point.



     21.5 What Constitutes a Tag


       In MacLisp code, a function definition must start with  an  "("
     at  the  beginning  of  a line, followed immediately with an atom
     which starts with "DEF" (and does  not  start  with  "DEFP"),  or
     which starts with "MACRO", or which starts with "ENDF".  The next
     atom  on  the line is the name of the tag.  If there is no second
     atom on the line, there is no tag.

       In MIDAS code, a tag is any symbol that occurs at the beginning
     of a line and is terminated with a colon or an equal sign.  MIDAS
     mode is good for MACRO-10 also.

       FAIL code is like MIDAS code, except that one or  two  ^A's  or
     "^"'s  are  allowed  before a tag, spaces are allowed between the
     tag name and the colon or equal sign,  and  _  is  recognized  as
     equivalent to =.

       PALX  code  is  like MIDAS code, except that spaces are allowed
     between a tag and the following colon or equals, and  local  tags
     such as "10$" are ignored.

       In  TECO  code,  a tag starts with an "!" and ends with a ":!".
     There may be any number of tags on a line, but the first one must
     start at the beginning of a line.

       In BLISS and BLISS11 code, a tag starts with "GLOBAL"  followed
     by  "ROUTINE"  or  "FUNCTION", or just a "ROUTINE" or "FUNCTION",
     and ends with "=".  The "FUNCTION" identifier is only relevant in
     BLISS-10.

       In FORTRAN code, a tag starts with "SUBROUTINE", "FUNCTION", or
     "PROGRAM" and ends with the end of the line.

       In INTERLISP code, a tag starts with (DEFINEQ  and  ends  where
     the function ends. Nested functions are handled properly.

       In   INFO  code,  (e.g.  files  that  are  used  for  the  INFO
     130                                 EMACS Manual for TWENEX Users



     documentation  subsystem),  a tag starts with "Node:" and ends at
     the first ",".

       In  SAIL  code,  a  tag  starts  with  one  of  the  following:
     "SIMPLE",  "RECURSIVE",  "POINTER", "BOOLEAN", "INTEGER", "REAL",
     "STRING", "INTERNAL" and is followed by "PROCEDURE" and ends with
     the first ";".

       In PASCAL  code,  a  tag  starts  with  either  "PROCEDURE"  or
     "FUNCTION" and ends with the first ";".



     21.6 Adding or Removing Source Files


       A  tag table file is a sequence of entries, one per file.  Each
     entry looks like


         <filenames>
         <count>,<language>
         <data lines>
         ^


       <filenames>  are  the  fully  defaulted  names  of  the   file,
     <language>  is  one  of  the  languages  that  TAGS  knows how to
     process,  and  <data  lines>  are  the  actual  tag   information
     (described  below).  The CRLF after each ^  must be present.  You
     can omit both the last ^ and its CRLF together, however.

       A tags table file is for the most part an ordinary ASCII  file,
     and  any  changes you make in it, including changes to the source
     files' names, will do what they appear to do.

       The one exception is that  each  entry  contains  a  count,  in
     decimal,  of the number of characters in it, including the ^ and
     CRLF.  If you edit the contents of an  individual  source  file's
     entry,  and  change its length, then the tag table is no good for
     use in editing until the count is updated.  This is usually  done
     by  running  TAGS  over it.  TAGS ignores the specified count and
     always writes the correct count.  If you are sure that the length
     is unchanged, or if you change the count manually,  then  running
     TAGS is not necessary, but you do so at your own risk.

       Thus,  if  you  are  changing  a source file's name, you should
     simply change the name where it is present in the tag table,  and
     run TAGS over it if necessary.
     131                                 EMACS Manual for TWENEX Users



       To  add  a  new  source  file,  simply  insert  a  dummy  entry
     containing the filename, the language, a count which can be  zero
     because  TAGS  will  recompute  it,  and  a ^.  Then use TAGS to
     update the tag table.  The dummy will turn into a real entry.

       You can delete a source file from a tag table by  deleting  its
     entire  entry.    Since  the  counts of the remaining entries are
     still valid, you need not run TAGS over the file again.  You  can
     also change the order of the entries without doing any harm.  The
     order  of  the  entries matters if there are tags which appear in
     more than one source file.

       You can edit everything else in the tag table too, if you  want
     to.    You  might want to change a language name once in a while,
     but I doubt you will frequently  want  to  add  or  remove  tags,
     especially  since  that  would  all  be undone by the next use of
     TAGS!



     21.7 How a Tag Is Described in the Tag Table


       A tag table file consists of one or more entries in succession.
     Each entry lists the tags of one source file, and has the overall
     format described in the previous section, containing zero or more
     lines describing tags.  Here we give the format of each of  those
     lines.

       Starting  with the third line of the tag table entry, each line
     describes a tag.  It starts with a copy of the beginning  of  the
     line  that the tag is defined on, up through the tag name and its
     terminating punctuation.  Then there is a rubout, followed by the
     character position in decimal of the  place  in  the  line  where
     copying  stopped.    For  example,  if  a line in a MIDAS program
     starts with "FOO:"  and the colon is at position 602 in the file,
     then the line describing it in the tag table would be


         FOO:<rubout>603


       One line can describe several tags, if they are defined on  the
     same  line;  in fact, in that case, they must be on the same line
     in the tag table, since it must contain everything before the tag
     name on its definition line.  For example, 


         !Foo:! !Bar:!
     132                                 EMACS Manual for TWENEX Users



     in  a  file  of TECO code followed by character number 500 of the
     file would turn into 


         !Foo:! !Bar:!<rubout>500


     EMACS will be able to use that line to find either  FOO  or  BAR.
     TAGS  knows how to create such things only for TECO files, at the
     moment.  They aren't necessary in Lisp  or  MACSYMA  files.    In
     MIDAS files, TAGS simply ignores all but the first tag on a line.



     21.8 Tag Tables for INFO Structured Documentation Files


       INFO  files  are  divided up into nodes, which the INFO program
     must search for.  Tag tables for these files are designed to make
     the INFO program run faster.  Unlike a normal tag table, the  tag
     table  for  an  INFO file resides in that file and describes only
     that file.  This is so that  INFO,  when  visiting  a  file,  can
     automatically use its tag table if it has one.  INFO uses the tag
     tables  of  INFO  files  itself, without going through the normal
     TAGS package, which has no knowledge of  INFO  file  tag  tables.
     Thus,  INFO  file  tag tables and normal ones resemble each other
     only  in  their  appearance  and  purpose.    In  use,  they  are
     unrelated.

       To  create a tag table in an INFO file, you must first put in a
     skeleton.  This skeleton must be very close to  the  end  of  the
     file (at most 8 lines may follow it, or INFO will not notice it),
     and it must start on the line following a ^  or ^ ^L which ends a
     node.  Its format is as follows:


         ^ ^L
         Tag Table:
         ^
         End Tag Table


       No  nodes  may follow the tag table, or ITAGS will not put them
     in it.  ITAGS is one pass and after writing the  tag  table  into
     the file it copies the rest of the input file with no processing.

       To  turn the skeleton into the real thing, or to update the tag
     table, run the ITAGS program.  
     133                                 EMACS Manual for TWENEX Users



         @ITAGS <info file name>


       Once the tag table is constructed, INFO will automatically make
     use  of  it.    A  tag  in  an INFO file is just a node; whatever
     follows "Node:" on a line whose predecessor contains  a  "^"  is
     taken to be a tag.  The character which terminates the node name,
     which  may  be  a comma, tab, or CRLF, is not included in the tag
     table.  Instead, the rubout comes right after the tag name.  This
     is to make it easy for INFO to demand  an  exact  match  on  node
     names,  rather  than  the  substring match which the TAGS package
     normally uses.

       Tag tables in INFO files must be kept  close  to  up  to  date.
     INFO will not find the node if its start has moved more than 1000
     characters before the position listed in the tag table.  For best
     results,  you  should  update an INFO file's tag table every time
     you modify more than a few characters of it.
     134                                 EMACS Manual for TWENEX Users



                            CHAPTER TWENTY-TWO
                           SIMPLE CUSTOMIZATION



       In this chapter we describe the many simple ways of customizing
     EMACS without knowing how to write TECO programs.

       One   form   of  customization,  reconnection  of  commands  to
     functions, was discussed above in  the  explanation  of  how  M-X
     commands  work.    See  section  5.2.3  [Reconnecting  Commands],
     page 25.



     22.1 Minor Modes


       Minor modes are options which you can use or not.  For example,
     Auto Fill mode is a  minor  mode  in  which  Spaces  break  lines
     between  words  as you type.  All the minor modes are independent
     of each other and of the selected major mode.  Most  minor  modes
     say in the mode line when they are on; for example, "Fill" in the
     mode line means that Auto Fill mode is on.

       Each minor mode is the name of the function that can be used to
     turn it on or off.  With no argument, the function turns the mode
     on  if  it  was  off  and  off  if  it  was on.  This is known as
     toggling.  A positive argument always turns the mode on,  and  an
     explicit  zero  argument  or  a negative argument always turns it
     off.  All the minor mode functions are suitable for connecting to
     single or double character commands if you want to enter and exit
     a minor mode frequently.

       Auto Fill mode  allows  you  to  type  text  endlessly  without
     worrying  about the width of your screen.  Line separators are be
     inserted where needed to prevent lines from  becoming  too  long.
     See section 11.4 [Filling], page 59.

       Auto   Save   mode  protects  you  against  system  crashes  by
     periodically saving the file you  are  visiting.    Whenever  you
     visit  a  file,  auto  saving  is enabled if Auto Save Default is
     nonzero; in addition, M-X Auto  Save  allows  you  to  turn  auto
     saving on or off in a given buffer at any time.  See section 13.3
     [Auto Save], page 74.

       Atom  Word  mode causes the word-moving commands, in Lisp mode,
     to move over Lisp atoms instead of words.  Some people like this,
     and others don't.  In any case, the s-expression motion  commands
     135                                 EMACS Manual for TWENEX Users



     can  be  used  to  move over atoms.  If you like to use segmented
     atom names  like  FOOBAR-READ-IN-NEXT-INPUT-SOURCE-TO-READ,  then
     you  might  prefer not to use Atom Word mode, so that you can use
     M-F to move over just part of the atom, or C-M-F to move over the
     whole atom.

       Overwrite mode causes ordinary printing characters  to  replace
     existing text instead of shoving it over.  It is good for editing
     pictures.    For  example,  if  the point is in front of the B in
     FOOBAR, then in Overwrite mode typing a G changes it  to  FOOGAR,
     instead  of  making it FOOGBAR as usual.  Also, Rubout is changed
     to turn the previous character into a space instead  of  deleting
     it.

       SAIL  Character mode causes ASCII control characters in text to
     display as themselves, with no conversion.  This assumes that the
     terminal uses codes 200 and above for cursor motion and  erasure,
     and  can  display  all  the  ASCII  control characters as graphic
     characters.    The  command   Control-^B   runs   this   command.
     Control-^B  is  a  character which can generally only be typed on
     terminals which can display the ASCII control characters  in  the
     appropriate fashion.

       Word  Abbrev  mode  allows  you  to  define  abbreviations that
     automatically expand as you type them.  For example, "wam"  might
     expand  to  "word  abbrev mode".  The abbreviations may depend on
     the major (e.g. Lisp, Text, ...) mode you are currently in.    To
     use  this,  you  must  load  the  WORDAB library.  See section 25
     [Wordab], page 174.

       Indent Tabs mode controls whether indentation commands use tabs
     and spaces or just spaces to indent with.  Usually they use both,
     but you might want to use only spaces in a file to  be  processed
     by  a  program or system which doesn't ignore tabs, or for a file
     to be shipped to a system like Multics on which tab stops are not
     every 8 characters.

       Most minor modes are actually controlled  by  variables.    The
     mode  is  on  if the variable is nonzero.  Setting the minor mode
     with a command works by changing the variable.  This  means  that
     you can turn the modes on or off with Edit Options, or make their
     values  local  to  a  buffer.    See  section  22.3  [Variables],
     page 138.

       You could also put a minor mode in the local modes  list  of  a
     file,  but that is usually bad practice.  This is because usually
     the preference for a minor mode is usually a matter of individual
     style rather than a property of the file per se.   To  make  this
     more  concrete, it is a property of a file that it be filled to a
     136                                 EMACS Manual for TWENEX Users



     certain column, but use of Auto Fill mode to accomplish that is a
     matter  of  taste.   So it would be good practice for the file to
     specify the value of Fill Column, but bad practice for  the  file
     to specify the value of Auto Fill Mode.

       If  you  find  yourself constantly tempted to turn on Auto Fill
     mode in local modes lists, what you probably really  want  is  to
     have  Auto  Fill mode on whenever you are in Text mode.  This can
     be accomplished with the following code in an EMACS.VARS file:  


         Text Mode Hook: 1M.LAuto Fill Mode$


     Suffice it to explain that this  is  TECO  code  to  be  executed
     whenever Text mode is entered, which makes the variable Auto Fill
     Mode local to the buffer with local value 1.



     22.2 Libraries of Commands


       All  EMACS  functions,  including  the  ones  described in this
     document, reside in libraries.   A  function  is  not  accessible
     unless  the  library  that  contains  it  is loaded.  Every EMACS
     starts out with two libraries loaded: the EMACS library, and  the
     TWENEX  library.  These contain all of the functions described in
     this document, except those explicitly stated  to  be  elsewhere.
     Other  libraries  are  provided  with  EMACS,  and  can be loaded
     automatically or on request to make  their  functions  available.
     See section  [Catalogue], page 236, for a list of them.

       To  load  a  library,  say M-X Load Library$<libname><cr>.  The
     library is found, either on your own directory or  whichever  one
     you  specify,  or on the EMACS directory, and loaded in.  All the
     functions in the library are then available for  use.    Whenever
     you  use  M-X, the function name you specify is looked up in each
     of the libraries which you  have  loaded,  more  recently  loaded
     libraries  first.   The first definition found is the one that is
     used.

       For example, if you load the PICTURE library, you can then  use
     M-X Edit Picture to run the Edit Picture function which exists in
     that library.

       In  addition to making functions accessible to M-X, the library
     may connect some of them to command characters.  This is done  by
     the library's & Setup function (See the file INFO:CONV.INFO, node
     137                                 EMACS Manual for TWENEX Users



     Lib.).    If  you give Load Library an argument, the setup is not
     done.

       You can also load a library temporarily, just  long  enough  to
     use  one  of  the  functions  in it.  This avoids taking up space
     permanently with the library.  Do  this  with  the  function  Run
     Library,  as  in  M-X  Run$<libname>$<function  name><cr>.    The
     library <libname> is loaded in,  and  <function  name>  executed.
     Then  the library is removed from the EMACS job.  You can load it
     in again later.

       M-X  List  Loaded  Libraries  types   the   names   and   brief
     descriptions of all the libraries loaded, last loaded first.  The
     last one listed is always the EMACS library.

       You  can  get  a  brief  description  of all the functions in a
     library with M-X List Library$<libname><cr>, whether the  library
     is  loaded  or not.  This is a good way to begin to find out what
     is in a library that has no  INFO  documentation.    Continue  by
     loading  the  library  and  using Help D to inquire further about
     whichever functions looked interesting.

       The function Kill Libraries can be used  to  discard  libraries
     loaded  with  Load Library.  (Libraries used with Run Library are
     discarded  automatically).    However,  of  all   the   libraries
     presently  loaded,  only  the  most  recently  loaded  one can be
     discarded.  Kill Libraries offers to kill  each  loaded  library,
     most recently loaded first.  It keeps killing libraries until you
     say  to keep one library.  Then it returns, because the remaining
     libraries cannot be deleted if that library is kept.

       Libraries are loaded automatically in the course  of  executing
     certain  functions.    You  will  not  normally notice this.  For
     example, the TAGS library is automatically loaded in whenever you
     use M-. or Visit Tag Table for the first time.  This  process  is
     known  as  autoloading.   It is used to make the functions in the
     TAGS library available without the user's having to know to  load
     the  library  himself,  while  not  taking up space in EMACSes of
     people who aren't using them.  It works by  simply  calling  Load
     Library  on  the  library  known  to  be needed.  Another kind of
     autoloading loads a library  temporarily,  the  way  Run  Library
     does.  This is done when you use the DIRED function, for example,
     since  the  DIRED  library is not needed after the DIRED function
     returns.  (This does not use Run Library; it uses M.A,  which  is
     what Run Library uses).

       You can make your own libraries, which you and other people can
     then  use,  if  you  know  how  to write TECO code.  See the file
     INFO:CONV.INFO, node Lib, for more details.
     138                                 EMACS Manual for TWENEX Users



     22.3 Variables


       A variable is a name which is associated with a value, either a
     number  or  a  string.  EMACS uses many variables internally, and
     has  others  whose  purpose  is  to  be  set  by  the  user   for
     customization.    (They  may  also  be set automatically by major
     modes.)  One example of  such  a  variable  is  the  Fill  Column
     variable,  which  specifies  the position of the right margin (in
     characters from the left margin) to  be  used  by  the  fill  and
     justify commands.

       The  easiest way for the beginner to set a named variable is to
     use the function Edit Options.  This shows you a list of selected
     variables which you are likely to want to change,  together  with
     their  values,  and  lets  you  edit them with the normal editing
     commands in a recursive editing level.  Don't make any changes in
     the names, though!  Just change the values.  Digits with maybe  a
     minus  sign  stand  for  a  numeric  value of the variable, while
     string values are enclosed  in  doublequotes.    Each  option  is
     followed  by  a  comment which says what the option is for.  Type
     the Help character for more information on the format used.

       When you are finished, exit Edit Options using  C-M-Z  and  the
     changes will take effect.  If you decide not to make the changes,
     C-]  gets  out  without  redefining the options.  See section 6.2
     [Recursive Editing Levels], page 28.

       If you give Edit Options a string argument, it shows  you  only
     the  options  whose  names  include the string.  For example, M-X
     Edit Options$Fill<cr> shows only the options that have "Fill"  in
     their  names.  This is much more convenient, if you know what you
     plan to do.

       However, Edit Options can be used only to set a variable  which
     already  exists, and is marked as an option.  Some commands refer
     to variables which do not exist in the initial environment.  Such
     commands always use a default value  if  the  variable  does  not
     exist.    In these cases you must create the variable yourself if
     you wish to use it to alter the behavior of the command.  Use M-X
     Set Variable for this.  You can set the  variable  to  a  numeric
     value by doing 


         C-U <number> M-X Set Variable$<varname><cr>


     or to a string by doing 
     139                                 EMACS Manual for TWENEX Users



         M-X Set Variable$<varname>$<string><cr>


       In  fact, you can use Set Variable to set any variable, whether
     it exists already or not.  For existing variables,  it  does  not
     matter  whether you use upper case or lower case letters, and you
     are allowed to abbreviate the name as long as the abbreviation is
     unique.  If the variable might not exist yet, you must  type  the
     name  in  full.  While either upper case or lower case will still
     work, you are encouraged to capitalize each word of the name  for
     aesthetic reasons since EMACS stores the name as you give it.

       To examine the value of a single variable, do 


         M-X View Variable$<varname><cr>


       To  print  a  complete  list  of  all  variables,  do  M-X List
     Variables.  List Variables with a string argument shows only  the
     variables  whose  names  or  values contain that string (like the
     function Apropos).  M-X Describe can be given a  variable's  name
     instead  of a function's name; it prints the variable's value and
     its documentation, if it has any.

       If you want to set a variable a particular way  each  time  you
     use  EMACS, you can use an init file or an EMACS.VARS file.  This
     is one of the main ways of customizing EMACS for  yourself.    An
     init  file  is  a file of TECO code to be executed when you start
     EMACS up.  They are very general, but writing one is a black art.
     You might be able to get an expert to do it for you, or modify  a
     copy  of someone else's.  See the file INFO:CONV.INFO, node Init,
     for details.  An EMACS.VARS file is a much  simpler  thing  which
     you  can  do  yourself.    See  section  22.6 [EMACS.VARS files],
     page 144.

       You can also set a variable with the TECO command 


         <value> M.V <varname>$


     or 


         :I*<string>$ M.V <varname>$


     This is useful in init files.
     140                                 EMACS Manual for TWENEX Users



       Any  variable  can  be made local to a specific buffer with the
     TECO command M.L<variable name>$.  Thus, if you want the  comment
     column  to  be  column 50 in one buffer, whereas you usually like
     40, then in the  one  buffer  do  M.LComment  Column$  using  the
     minibuffer.   Then, you can do 50U$Comment Column$ in that buffer
     and other buffers will not be affected.  This is how local  modes
     lists  in files work.  M-X List Redefinitions describes the local
     variables of the selected buffer in a verbose fashion.

       Most local variables are killed  if  you  change  major  modes.
     Their  global  values  come back.  They are therefore called mode
     locals.  There are also permanent locals which are not killed  by
     changing  modes;  use  2,M.L to create one.  Permanent locals are
     used by things like Auto Save mode to keep  internal  information
     about the buffer, whereas mode locals are used for customizations
     intended  only for one buffer.  See the file INFO:CONV.INFO, node
     Variables, for information  on  how  local  variables  work,  and
     additional related features.

       Local  values  of  variables can be specified by the file being
     edited.  For example, if a certain file ought to have a 50 column
     width, it can specify a value of 50 for the variable Fill Column.
     Then Fill Column will have the value 50  whenever  this  file  is
     edited,  by  anyone.    Editing other files is not affected.  See
     section 22.7 [Locals], page 151, for how to do this.



     22.4 The Syntax Table


       All the EMACS commands which parse words or balance parentheses
     are controlled by the syntax table.  Each ASCII character  has  a
     word  syntax and a Lisp syntax.  By changing the word syntax, you
     can control whether a character is considered a word delimiter or
     part of a word.  By changing the Lisp  syntax,  you  can  control
     which  characters  are  parentheses,  which  ones  are  parts  of
     symbols, which ones are prefix operators, and which ones are just
     ignored when parsing s-expressions.

       The syntax table is actually a string which is 128*5 characters
     long.  Each group of 5 consecutive characters of the syntax table
     describe one ASCII character's syntax; but only the  first  three
     of  each  group are used.  To edit the syntax table, use M-X Edit
     Syntax Table.  But before we describe this  command,  let's  talk
     about the syntax of the syntax table itself.

       The first character in each group of five sets the word syntax.
     This  can  be either "A" or a space.  "A" signifies an alphabetic
     character, whereas a space signifies a separator character.
     141                                 EMACS Manual for TWENEX Users



       The  second character in each group is the Lisp syntax.  It has
     many possible values:


             A       an alphabetic character
             Space   a whitespace or nonsignificant character
             (       an open parenthesis
             )       a close parenthesis
             ;       a comment starter
             ^M      a comment ender
             |       a string quote
             /       a character quote
             '       a prefix character 


       When a character has the syntax of an  open  parenthesis,  that
     means  that  the  character  is  taken  to  be the beginning of a
     parenthesized grouping when expressions are being parsed.   Thus,
     any  number  of  different  expression-starting characters can be
     handled.

       The syntax of  "prefix  character"  means  that  the  character
     becomes  part  of  whatever  object follows it, whether symbol or
     list, and can also be in the middle of a  symbol,  but  does  not
     constitute anything by itself if surrounded by whitespace.

       A   character  quote  character  causes  itself  and  the  next
     character to be treated as alphabetic.

       A string quote is one which matches in pairs.   All  characters
     inside  a  pair of string quotes are treated as alphabetic except
     for the character quote, which retains its significance, and  can
     be used to force a string quote or character quote into a string.

       A  comment  starter  is taken to start a comment, which ends at
     the next comment ender, suppressing  the  normal  syntax  of  all
     characters  between.   Only the indentation commands give special
     treatment to these two syntax codes; all other commands  consider
     them  the same as Space (nonsignificant character).  The commands
     specifically  for  comments  use  the  variables  Comment  Start,
     Comment  Begin,  and  Comment End to detect comments.  This is so
     that the comment delimiters can be multi-character strings.

       The  third  character  in   each   group   controls   automatic
     parenthesis  matching display.  It is defined only for characters
     which have the Lisp syntax of close parentheses, and for them  it
     should   contain   the   appropriate  matching  open  parenthesis
     character (or a space).    If  you  insert  a  close  parenthesis
     character  which is matched by the wrong kind of open parenthesis
     142                                 EMACS Manual for TWENEX Users



     character,  it  rings  the  bell.    If  the  third  syntax table
     character of a close parenthesis is a space, any open parenthesis
     is allowed to match it.

       The fourth and fifth characters in each group should always  be
     spaces, for now.  They are not used.  The reason they exist is so
     that  word-wise  indexing can be used on the PDP-10 to access the
     syntax of a character given in an accumulator.

       Edit Syntax Table displays the  syntax  table  broken  up  into
     labeled  five-character  groups.    You  can  see easily what the
     syntax of any character is.    You  are  not  editing  the  table
     immediately,  however.   Instead, you are asked for the character
     whose syntax you  wish  to  edit.    After  typing  it,  you  are
     positioned  at  that character's five-character group.  Overwrite
     mode is on, so you can simply type the  desired  syntax  entries,
     which  replace  the old ones.  You can also do arbitrary editing,
     but be careful not to change the  position  of  anything  in  the
     buffer.  When you exit the recursive editing level, you are asked
     for  another  character to position to.  An Altmode at this point
     exits and makes the changes.   A  C-]  at  any  time  aborts  the
     operation.

       Many  major modes alter the syntax table.  Each such major mode
     creates its own syntax table once and reselects the  same  string
     whenever  the mode is selected, in any buffer.  Thus, all buffers
     in Text mode at any time use the same  syntax  table.    This  is
     important  because  if  you  ever  change the syntax table of one
     buffer that is in Text mode, you change them all.  It is possible
     to give one buffer a local copy with a TECO program:  


         MM Make Local Q-Register$..D$W  :G..DU..D


     The  syntax  tables  belonging  to  the  major  modes   are   not
     preinitialized  in EMACS; they are created when the major mode is
     invoked for the first time, by copying the default one and making
     specific changes.  Thus, any other changes you have made  in  the
     default   (Fundamental   mode)  syntax  table  at  the  beginning
     propagate into  all  modes'  syntax  tables  unless  those  modes
     specifically override them.

       After a major mode has created its own syntax table, that table
     is stored in the variable <modename> ..D.  This makes a different
     variable  for each major mode, since the mode name is part of the
     variable name.  Further use of the major  mode  gets  the  syntax
     table  from  that  variable.  If you create the variable yourself
     before the first use of the major mode, the value you  put  there
     will be used.
     143                                 EMACS Manual for TWENEX Users



       TECO  programs and init files can most easily change the syntax
     table with the function & Alter ..D (look at its  documentation).
     The  syntax  table  is  kept  in  the q-register named ..D, which
     explains that name.



     22.5 FS Flags


       FS flags are variables defined and implemented  by  TECO  below
     the  level  of EMACS.  Some of them are options which control the
     behavior of parts of TECO such as the display processor.  Some of
     them control the execution of TECO programs; you are  not  likely
     to  want  to change these.  Others simply report information from
     inside TECO.  The  list  of  FS  flags  is  fixed  when  TECO  is
     assembled and each one exists for a specific purpose.

       FS  flags  are  used mostly by the TECO programmer, but some of
     them are of interest to the EMACS user doing minor customization.
     For example, FS ECHO LINES$ is the number of lines  in  the  echo
     area.   By setting this flag you can make the echo area bigger or
     smaller.  Many FS flags useful for customization  are  controlled
     by  EMACS  variables; instead of setting the FS flag, you can set
     the  EMACS  variable  like  any  other.    Setting  the  variable
     automatically  sets  the FS flag as well.  Here is a list of such
     variables which control flags:



         Auto Save Interval             FS ^R MDLY$
         Bottom Display Margin          FS %BOTTOM$
         Case Search                    FS BOTHCASE$
         Cursor Centering Point         FS %CENTER$
         Display Mode Line Inverse      FS INVMOD$
         Display Overprinting           FS ^H PRINT$ and FS ^M PRINT$
         Echo Area Height               FS ECHO LINES$
         End of Buffer Display Margin   FS %END$
         Error Messages in Echo Area    FS ECHO ERRORS$
         Fill Column                    FS ADLINE$
         Overwrite Mode                 FS ^R REPLACE$
         SAIL Character Mode            FS SAIL$
         System Output Holding          FS TT PAGE$
         Top Display Margin             FS %TOP$



     Setting one of these variables causes the flag to be set, but not
     vice versa.  To avoid confusion, always set these flags using the
     144                                 EMACS Manual for TWENEX Users



     associated  variables,  never  directly,  unless you are changing
     them temporarily during one command and the user  will  not  have
     the opportunity to notice the confusion.

       To  get  the  value  of  an  FS  flag,  use the TECO command FS
     followed by the name of  the  flag,  terminated  by  an  Altmode.
     Spaces  in  the name of the flag are completely ignored, and case
     does not matter.  Thus, FS Tab Width$= executed in the minibuffer
     prints the number of columns between tab stops used  for  display
     of  tab characters.  See section 23 [Minibuffer], page 157.  This
     works only for flags with numeric values.   The  easiest  way  to
     examine a flag's value with EMACS commands is 


         C-M-X View Variable<cr> (FS Tab Width$)<cr>


     This works for both numeric and string values.

       To  set the flag, give the FS command a numeric argument (which
     must be a string pointer, if the intended  value  is  a  string).
     For example, in the minibuffer or an init file, do 


         10FS Tab Width$


     Be  warned that FS always returns a value, so put a CRLF after it
     to discard the value if necessary.

       It is possible to make an FS flag's value local  to  a  buffer.
     See the file INFO:CONV.INFO, node Vars.

       The  documentation  of individual FS flags can be found through
     Help T.  Help T FS Echo Lines<cr> prints the  description  of  FS
     ECHO  LINES$.    Spaces  are not significant in Help T either.  A
     list of just the names of all FS flags is printed by the function
     List TECO FS Flags, found in the library PURIFY.



     22.6 Init Files and EMACS.VARS Files


       EMACS is designed to be customizable; each user  can  rearrange
     things to suit his taste.  Simple customizations are primarily of
     two  types:   moving functions from one character to another, and
     setting variables which functions refer to so as to direct  their
     actions.  Beyond this, extensions can involve redefining existing
     145                                 EMACS Manual for TWENEX Users



     functions,   or  writing  entirely  new  functions  and  creating
     sharable libraries of them.

       The most general way to customize is to write an init  file,  a
     TECO  program  which  is  executed whenever you start EMACS.  The
     init file is found by looking for a  particular  filename,  <your
     directory>EMACS.INIT.  This method is general because the program
     can  do anything.  It can ask you questions and do things, rather
     than just setting up commands for later.  However, TECO  code  is
     arcane, and only a few people learn how to write it.  If you need
     an  init  file  and don't feel up to learning to write TECO code,
     ask  a  local  expert  to  do  it  for  you.     See   the   file
     INFO:CONV.INFO, for more about init files.

       However, simple customizations can be done in a simple way with
     an  EMACS.VARS file.  Such a file serves the same sort of purpose
     as an init file, but instead of TECO code,  it  contains  just  a
     list  of  variables and values.  Each line of the EMACS.VARS file
     names one variable or one  command  character  and  says  how  to
     redefine  it.    Empty  lines,  and lines starting with spaces or
     tabs, are  ignored.    They  can  be  used  as  comments.    Your
     EMACS.VARS file is found by its filename, as an init file is, but
     it  should  be  called  EMACS.VARS instead of EMACS.INIT. You can
     have both an init file and an EMACS.VARS file  if  you  want,  as
     long as your init file calls the default init file, since that is
     what processes the EMACS.VARS file.

       To  set  a  variable,  include  in  the  EMACS.VARS file a line
     containing the name of the variable, a colon, and the value.    A
     numeric  value  is  represented by the number.  A string value is
     enclosed in double quotes.  To include a double  quote  or  a  ^]
     character  in  the  value  of the string, precede it with a ^] to
     quote it.  You can also simply give the  string  value,  with  no
     quotes,  as  long  as  it  is  not ambiguous (does not consist of
     digits or start with a double quote); however, in this case,  any
     spaces  following  the  colon  become  part  of  the value of the
     variable.  They are not ignored.  Examples:  


         Comment Column: 70
         Comment Start: ";"
         MM Foo:FTFOO$


     The last line defines a variable named  MM  Foo,  which  has  the
     effect  of defining a function named Foo with the specified value
     as its definition.

       To redefine a command character is a little  more  complicated.
     146                                 EMACS Manual for TWENEX Users



     Instead of the name of a variable, give a ^R (control-R) followed
     by  the  character.  Since the general Control and Meta character
     cannot be part of a file, all Control  and  Meta  characters  are
     represented  in a funny way:  after the ^R put the residue of the
     character after removing the Control and Meta, and before the  ^R
     put  periods,  one  for  Control,  two  for  Meta,  and three for
     Control-Meta.  Thus, C-D is represented by ".^RD"  and  C-M-;  is
     represented  by  "...^R;".  Lower case characters such as C-a are
     usually defined as "execute the  definition  of  the  upper  case
     equivalent".    Therefore, by redefining the C-A command you also
     change C-a; but if you redefine C-a, by saying ".^Ra" instead  of
     ".^RA", you will not change C-A.  So be careful about case.

       Instead  of  the  value  of  a  variable, for command character
     redefinition you must give a TECO  expression  that  returns  the
     desired  definition.  This is to make it easy to use any function
     whose name you  know,  because  M.MFOO$  is  an  expression  that
     returns  the  definition of the function FOO.  Do not enclose the
     TECO expression in quotes. Example:  


         .^RK: M.M^R Kill Line$


     would give C-K the definition that it  normally  has.    Remember
     that  in  names of functions the "^R" is actually a "^" and an R,
     not a control-R.  The  space  before  the  M.M  is  part  of  the
     expression, but it is ignored when the expression is executed.

       Some  non-printing  characters are a little tricky to redefine.
     For example, you must know that Return, Linefeed, Tab,  Backspace
     and  Altmode  are not the same in TECO's command character set as
     C-M, C-J, C-I, C-H  and  C-[,  even  though  in  ASCII  they  are
     synonymous.    By saying .^RJ you will redefine C-J; by saying ^R
     followed by a Linefeed (which you must insert in  the  EMACS.VARS
     file   by   typing  C-Q  Linefeed)  you  can  redefine  Linefeed.
     Normally, C-J is defined as "execute the definition of Linefeed",
     so you are better off redefining Linefeed.

       You can also redefine a subcommand of a prefix  character  such
     as  C-X.    For  this,  you  have  to  know where the character's
     dispatch table is stored.  For C-X, the location of the  dispatch
     is called ".X"; you won't have any other prefix characters unless
     you  define  them  yourself.    See the file INFO:CONV.INFO, node
     Prefix.  Knowing the location,  you  specify  the  subcommand  by
     writing  :location(^^character).    This looks silly, but it is a
     TECO expression with the right meaning.  For example,  redefining
     C-X C-S, the location is ".X" and the character is ^S, so we say
     147                                 EMACS Manual for TWENEX Users



         :.X(^^^S): M.M^R Save File$


     This  gives  C-X  C-S  the  definition that it normally has.  The
     subcommand character (^S in this case) can  represent  itself  in
     the  EMACS.VARS  file  with  no need for dots, because subcommand
     characters are just ASCII, with no Meta allowed.

       You can include arbitrary TECO code in an  EMACS.VARS  file  by
     writing  a  definition  for "*".  The definition is executed as a
     TECO expression but the value is ignored.    Thus,  to  load  the
     library FOO, do 


         *: MM Load Library$FOO$


     Once  the  library is loaded, you can connect the functions in it
     to commands as described above.

       Please refrain from giving newcomers to EMACS a  copy  of  your
     own  init  file  before  they  understand what it does.  Everyone
     prefers his own customizations, and there is always a tendency to
     proselytize, but by the same token your protege's tastes  may  be
     different  from  yours.   If you offer him your customizations at
     the time when he is ready to understand what difference they make
     and decide for himself what he prefers, then you  will  help  him
     get  what  he  wants.   Tell him about each individual change you
     made, and let him judge them one by one.  There is no reason  for
     him to choose all or nothing.


     22.6.1 EMACS.VARS File Examples


       Here are some examples of how to do various useful things in an
     EMACS.VARS file.

       This causes new buffers to be created in Lisp mode:  


         Default Major Mode: "LISP"


       This causes new buffers to have Auto Fill mode turned on:  


         Buffer Creation Hook: "1M.L Auto Fill Mode$"
     148                                 EMACS Manual for TWENEX Users



       This causes all Text mode buffers to have Auto Fill mode turned
     on:  


         Text Mode Hook: "1M.L Auto Fill Mode$"


       This  causes C-M-G to be undefined by copying the definition of
     C-| (which is undefined):  


         ...^RG: Q.^R|


       This redefines C-S to be a single character search command, and
     M-S to be a non-incremental string search:  


         .^RS: M.M ^R Character Search$
         ..^RS: M.M ^R String Search$


       This redefines C-X V to run View File:  


         :.X(^^V): M.M View File$


       This makes M-M a prefix character and defines M-M W to  mark  a
     word  and  M-M  P  to  mark  a paragraph.  It stores the dispatch
     vector for the prefix character in the variable M-M Dispatch.


         ..^RM: MM Make Prefix Character$^]$M-M Dispatch^]$$
         Temp: "M-M  $M-M Dispatch$
         "
            Append the line in Temp to Prefix Char List.
         *: Q$Prefix Char List$[1 Q$Temp$[2 :i$Prefix Char List$^]1^]2$
         :$M-M Dispatch$(^^W): M.M ^R Mark Word$
         :$M-M Dispatch$(^^P): M.M ^R Mark Paragraph$


       This loads the library LUNAR and defines C-Q to  run  a  useful
     function found in that library:  


         *: MM Load Library$LUNAR$
         .^RQ: M.M ^R Various Quantities$
     149                                 EMACS Manual for TWENEX Users



       This causes Auto Save mode to save under the visited filenames:
     


         Auto Save Visited File: 1


       This causes TAGS to bring new files into separate buffers:  


         TAGS Find File: 1


       This  prevents  the default init file from printing the message
     "EMACS version nnn.  Type ... for Help".  


         Inhibit Help Message: 1


       This redefines the list syntax of "%" to be  ";"  for  "comment
     starter", and that of ";" to be "A" for "alphabetic":  


         *: 1mm& Alter ..D$%;;A$


     22.6.2 Init File Examples


       Here  are  the  ways  to  do exactly the same things in an init
     file.  Don't put more than one of these  TECO  expressions  on  a
     line, or the first may leave behind a value which will affect the
     operation of the second!

       This causes new buffers to be created in Lisp mode:  


         :I$Default Major Mode$LISP$


       This causes new buffers to have Auto Fill mode turned on:  


         :I* 1M.L Auto Fill Mode^]$ $ M.VBuffer Creation Hook$


     It  is  different  because  the  variable does not already exist.
     Note the ^] used for getting the Altmode into the value.
     150                                 EMACS Manual for TWENEX Users



       This causes all Text mode buffers to have Auto Fill mode turned
     on:  


         :I* 1M.L Auto Fill Mode^]$ $ M.VText Mode Hook$


       This  causes C-M-G to be undefined by copying the definition of
     C-| (which is undefined):  


         Q.^R| U...^RG


       This redefines C-S to be a single character search command, and
     M-S to be a non-incremental string search:  


         M.M ^R Character Search$ U.^RS
         M.M ^R String Search$ U..^RS


       This redefines C-X V to run View File:  


         M.M View File$ U:.X(^^V)


       This makes M-M a prefix character and defines M-M W to  mark  a
     word  and  M-M  P  to  mark  a paragraph.  It stores the dispatch
     vector for the prefix character in the variable M-M Dispatch.


         MM Make Prefix Character$.Y$U..^RM
         Q$Prefix Char List$[1
         :i$Prefix Char List$^]1M-M  ^]$M-M Dispatch^]$
         $ ]1
         M.M ^R Mark Word$ U:$M-M Dispatch$(^^W)
         M.M ^R Mark Paragraph$ U:$M-M Dispatch$(^^P)


       This loads the library LUNAR and defines C-Q to  run  a  useful
     function found in that library:  


         MM Load Library$LUNAR$
         M.M ^R Various Quantities$ U.^RQ
     151                                 EMACS Manual for TWENEX Users



       This causes Auto Save mode to save under the visited filenames:
     


         1U$Auto Save Visited File$


     Compare  this  and  the next example with the first two, in which
     string values are used.

       This causes TAGS to bring new files into separate buffers:  


         1M.VTAGS Find File$


       This prevents the default init file from printing  the  message
     "EMACS version nnn.  Type ... for Help".  


         1M.VInhibit Help Message$


       This  redefines  the  list syntax of "%" to be ";" for "comment
     starter", and that of ";" to be "A" for "alphabetic":  


         1mm& Alter ..D$%;;A$



     22.7 Local Variables in Files


       By specifying local modes in a file you can cause certain major
     or minor modes to be set, or certain  character  commands  to  be
     defined,  whenever  you  are visiting it.  For example, EMACS can
     select Lisp mode for that file, set up a special Comment  Column,
     or put a special command on the character C-M-Comma.  Local modes
     can  specify  the  major mode, and the values of any set of named
     variables and command characters.  Local modes apply  only  while
     the buffer containing the file is selected; they do not extend to
     other files loaded into other buffers.

       The  simplest  kind  of  local mode specification sets only the
     major mode.  You put  the  mode's  name  in  between  a  pair  of
     "-*-"'s,  anywhere  on  the first nonblank line of the file.  For
     example, the first  line  of  this  file  contains  -*-Scribe-*-,
     implying  that  this  file  should be edited in Scribe mode.  The
     152                                 EMACS Manual for TWENEX Users



     -*- can appear on the first nonblank line after the edit history,
     if somebody insists on putting in an edit history.

       Often,  EMACS  is  able  to determine the best major mode for a
     file by looking at the file's extension.    If  this  works,  you
     don't  need  to  worry  about  specifying the major mode.  If the
     extension of the file does not inform EMACS correctly,  then  you
     need  an explicit local modes specification.  The functions which
     implement this are called  &  <extension>  Mode,  in  the  TWENEX
     library.

       To  specify more that just the major mode, you must use a local
     modes list, which goes in the last page of the file (it  is  best
     to  put it on a separate page).  The local modes list starts with
     a line containing the string "Local Modes:", and ends with a line
     containing the string "End:".  In between come the variable names
     and values, just as in an EMACS.VARS  file.    See  section  22.6
     [EMACS.VARS files], page 144.

       The line which starts the local modes list does not have to say
     just  "Local  Modes:".    If  there  is  other text before "Local
     Modes:", that text is called the prefix, and if  there  is  other
     text  after,  that  is  called the suffix.  If these are present,
     each entry in the local modes list should have the prefix  before
     it  and the suffix after it.  This includes the "End:" line.  The
     prefix and suffix are included to disguise the local  modes  list
     as  a  comment so that the compiler or text formatter will not be
     perplexed by it.  If you do not need to disguise the local  modes
     list  as  a comment in this way, do not bother with a prefix or a
     suffix.

       Aside from the "Local Modes:" and the "End:",  and  the  prefix
     and  suffix  if  any, a local modes list looks like an EMACS.VARS
     file.  However, comments lines are not allowed,  and  you  cannot
     redefine  C-X  subcommands  due to fundamental limitations of the
     data structure used to remember local variables.  Sorry.

       The major mode can  be  set  by  specifying  a  value  for  the
     variable "Mode" (don't try setting the major mode this way except
     in  a  local  modes  list!).  It should be the first thing in the
     local modes list, if it appears at all.  A function M-X  Foo  can
     be  defined  locally by putting in a local setting for a variable
     named "MM Foo".  See section 5.2 [Functions], page 23.
     153                                 EMACS Manual for TWENEX Users



       Here is an example of a local modes list:  


         ;;; Local Modes: ***
         ;;; Mode:Mumble ***
         ;;; Comment Column:0 ***
         ;;; Comment Start: ";;; "  ***
         ;;; Comment End:"***" ***
         ;;; ..^R/: m.m^R My Funny Meta-Slash$ ***
         ;;; End: ***


       Note  that the prefix is ";;; " and the suffix is " ***".  Note
     also that comments in the file begin with ";;;  "  and  end  with
     "***".  Presumably the file contains code in the language Mumble,
     in  which  comments  must start and end that way.  The prefix and
     suffix are used in the local modes list to make the  list  appear
     as comments when the file is read by the Mumble compiler.

       The last page of the file must be no more than 10000 characters
     long  or  the  local  modes list will not be recognized.  This is
     because EMACS finds the local modes list by  scanning  back  only
     10000  characters from the end of the file for the last formfeed,
     and then looking forward for the "Local  Modes:"  string.    This
     accomplishes  these goals: a stray "Local Modes:" not in the last
     page is not noticed; and visiting a long file  that  is  all  one
     page  and has no local mode list need not take the time to search
     the whole file.



     22.8 Keyboard Macros


             C-X (       Start defining a keyboard macro.
             C-X )       End the definition of a keyboard macro.
             C-X E       Execute the most recent keyboard macro.
             C-U C-X (   Re-execute last keyboard macro and append  to
                         its definition.
             C-X Q       Ask  for confirmation when the keyboard macro
                         is executed.
             C-U C-X Q   Allow the user to edit for a while, each time
                         the keyboard macro is executed.
             M-X Name Kbd Macro
                         Make the most recent keyboard macro into  the
                         permanent definition of a command.
             M-X Write Kbd Macro
                         Save a keyboard macro in a file.  
     154                                 EMACS Manual for TWENEX Users



       A keyboard macro is a command defined by the user to abbreviate
     a sequence of other commands.  If you discover that you are about
     to  type  C-N C-D forty times, you can define a keyboard macro to
     do C-N C-D and call it with a repeat count of forty.

       Keyboard macros differ from ordinary EMACS  commands,  in  that
     they  are  written  in  the EMACS command language rather than in
     TECO.  This makes it easier for the novice  to  write  them,  and
     makes  them  more  convenient  as  temporary hacks.  However, the
     EMACS command language is not powerful enough  as  a  programming
     language  to  be  useful  for  writing  anything  intelligent  or
     general.  For such things, TECO must be used.

       EMACS functions were formerly known as macros (which is part of
     the explanation of the name  EMACS),  because  they  were  macros
     within  the  context  of TECO as an editor.  We decided to change
     the terminology because, when thinking of EMACS, we consider TECO
     a programming language rather than an editor.  The only  "macros"
     in EMACS now are keyboard macros.

       You  define a keyboard macro while executing the commands which
     are the definition.  Put  differently,  as  you  are  defining  a
     keyboard  macro,  the  definition is being executed for the first
     time.  This way, you can see what the effects  of  your  commands
     are,  so  that  you  don't  have to figure them out in your head.
     When you are finished, the keyboard macro is defined and also has
     been, in effect, executed once.  You can then do the whole  thing
     over again by invoking the macro.


     22.8.1 Basic Use


       To  start  defining  a  keyboard  macro, type the C-X ( command
     (^R Start Kbd Macro).  From then on, your commands continue to be
     executed, but also become part of the definition  of  the  macro.
     "Def" appears in the mode line to remind you of what is going on.
     When  you  are  finished,  the  C-X  ) command (^R End Kbd Macro)
     terminates the definition (without becoming part of it!).

       The macro thus defined can be invoked  again  with  the  C-X  E
     command (^R Execute Kbd Macro), which may be given a repeat count
     as a numeric argument to execute the macro many times.  C-X ) can
     also  be  given  a  repeat count as an argument, in which case it
     repeats the macro that many times right after  defining  it,  but
     defining  the  macro  counts as the first repetition (since it is
     executed as you define it).  So, giving C-X ) an  argument  of  2
     executes  the macro immediately one additional time.  An argument
     of zero to C-X E or C-X ) means  repeat  the  macro  indefinitely
     (until it gets an error).
     155                                 EMACS Manual for TWENEX Users



       If  you  want to perform an operation on each line, then either
     you should start by positioning point on the line above the first
     one to be processed and then begin the macro  definition  with  a
     C-N,  or  you should start on the proper line and end with a C-N.
     Either way, repeating the macro will operate on successive lines.

       After you have terminated the definition of a  keyboard  macro,
     you  can  add  to  the end of its definition by typing C-U C-X (.
     This is equivalent to plain C-X ( followed by retyping the  whole
     definition  so far.  As a consequence it re-executes the macro as
     previously defined.

       If you wish to save a keyboard macro for longer than until  you
     define the next one, you must give it a name.  If you do M-X Name
     Kbd Macro$FOO<cr>, the last keyboard macro defined (the one which
     C-X  E would invoke) is turned into a function and given the name
     FOO.  M-X FOO will from then on  invoke  that  particular  macro.
     Name  Kbd  Macro  also  reads  a  character from the keyboard and
     redefines that character command to invoke the macro.    You  can
     use  a  bit  prefix  character in specifying the command; you can
     also type a C-X command to be redefined.  When you have  finished
     typing the command characters, Name Kbd Macro asks you whether it
     should go ahead and redefine the character.

       To  save  a keyboard macro permanently, do M-X Write Kbd Macro.
     Supply the function name  of  the  keyboard  macro  as  a  string
     argument,  or  else  it  will ask you to type the character which
     invokes the keyboard macro.  The keyboard macro  is  saved  as  a
     library  which, when loaded, automatically redefines the keyboard
     macro.  The filename is read from the terminal.  Its second  name
     should be :EJ, like other libraries; that is the default.

       To examine the definition of a keyboard macro, use the function
     View  Kbd  Macro.    Either supply the name of the function which
     runs the macro, as a string argument, or type the  command  which
     invokes the macro when View Kbd Macro asks for it.


     22.8.2 Executing Macros with Variations


       If  you want to be allowed to do arbitrary editing at a certain
     point each time around the macro (different each  time,  and  not
     remembered  as  part  of  the  macro),  you can use the C-U C-X Q
     command (^R Kbd Macro Query).  When you are defining  the  macro,
     this  lets you do some editing, which does not become part of the
     macro.  When you are done, exit with C-M-Z to return to  defining
     the  macro.   When you execute the macro, at that same point, you
     will again be allowed to do some editing.   When  you  exit  this
     156                                 EMACS Manual for TWENEX Users



     time  with C-M-Z, the execution of the macro will resume.  If you
     abort the recursive editing level with C-], you  will  abort  the
     macro definition or execution.

       You  can  get the effect of Query Replace, where the macro asks
     you each time around whether to  make  a  change,  by  using  the
     command  C-X Q with no argument in your keyboard macro.  When you
     are defining the macro, the C-X Q  does  nothing,  but  when  the
     macro is invoked the C-X Q reads a character from the terminal to
     decide  whether  to  continue.    The  special answers are Space,
     Rubout, Altmode, C-L, C-R.  A Space means to continue.  A  Rubout
     means  to  skip  the  remainder  of this repetition of the macro,
     starting again from the beginning in the  next  repetition.    An
     Altmode ends all repetitions of the macro, but only the innermost
     macro (in case it was called from another macro).  C-L clears the
     screen and asks you again for a character to say what to do.  C-R
     enters  a  recursive  editing level; when you exit, you are asked
     again (if you type a Space, the macro will continue from wherever
     you left things when you exited the C-R).   Anything  else  exits
     all levels of keyboard macros and is reread as a command.
     157                                 EMACS Manual for TWENEX Users



                           CHAPTER TWENTY-THREE
                              THE MINIBUFFER



       The  minibuffer  is a facility by means of which EMACS commands
     can read input from the  terminal,  allowing  you  to  use  EMACS
     commands  to  edit the input while you are typing it.  Usually it
     is used to read a TECO program to be executed.


             M-Altmode   Invokes an empty minibuffer.
             M-%         Invokes a minibuffer initialized with a Query
                         Replace.
             C-X Altmode Re-execute a recent minibuffer command.
             C-X ^       Add more lines to the minibuffer.
             C-\         Meta-prefix for use in the minibuffer.
             C-Z C-Y     Rotate ring of recent minibuffer commands.  


       The primary use of the minibuffer is for editing and  executing
     simple TECO programs such as 


         MM Query Replace$FOO
         $BAR
         $


     (which  could not be done with M-X Query Replace because when M-X
     is used Return terminates the arguments).

       You can always tell when you are in a minibuffer,  because  the
     mode   line   contains   something   in   parentheses,   such  as
     "(Minibuffer)" or "(Query Replace)".  There is  also  a  line  of
     dashes  across  the  screen  a  few lines from the top.  Strictly
     speaking, the minibuffer is actually the region of  screen  above
     the line of dashes, for that is where you edit the input that the
     minibuffer  is asking you for.  Editing has been limited to a few
     lines so that most of the screen can continue to  show  the  file
     you are visiting.

       If  you want to type in a TECO command, use the minibuffer with
     the command Meta-Altmode, (^R  Execute  Minibuffer).    An  empty
     minibuffer  will  appear,  into  which  you  should type the TECO
     command string.  Exit with Altmode  Altmode,  and  remember  that
     neither  of  the  two Altmodes is inserted into your TECO command
     although the first one may appear to be.  When the  TECO  command
     is  executed,  "the  buffer"  will  be  the text you were editing
     before you invoked the minibuffer.
     158                                 EMACS Manual for TWENEX Users



       Often,  a  minibuffer  starts  out  with some text in it.  This
     means that you are supposed to add to that text,  or,  sometimes,
     to  delete some of it so as to choose among several alternatives.
     For example, Meta-%  (^R  Query  Replace)  provides  you  with  a
     minibuffer  initially  containing the string "MM Query Replace$".
     The cursor comes at the end.  You are then supposed to add in the
     arguments to the Query Replace.

       In a  minibuffer,  you  can  edit  your  input  until  you  are
     satisfied  with  it.    Then  you  tell EMACS you are finished by
     typing two Altmodes.  An Altmode not followed by another  Altmode
     is  simply  inserted in the buffer.  This is because it is common
     to want to  put  Altmodes  into  the  minibuffer,  which  usually
     contains  a  string  of  TECO  commands.   For example, in Meta-%
     (^R Query Replace) each argument must be  ended  by  an  Altmode.
     However, when you type two Altmodes in a row, neither one remains
     in  the  buffer.   The two Altmodes do nothing to the text in the
     minibuffer, they just exit.

       Since Altmode is self-inserting, typing Meta characters can  be
     a  problem.  You can do it by using C-\ instead of Altmode as the
     Meta-prefix.  If  you  type  a  Control-Meta  character  on  your
     keyboard,  the  corresponding ASCII control character is inserted
     in the minibuffer.  This is because the Lisp commands are  rarely
     useful   when   editing  TECO  code,  but  insertion  of  control
     characters is frequent.  If you really want to use a Control-Meta
     EMACS command, you must use C-Z to type it.  You cannot  use  C-\
     C-A  to  type  C-M-A,  because  C-\  (unlike Altmode) ignores the
     Control bit of the following character, so you must use C-Z  C-A.
     The  motivation  for this quirk of C-\ is that C-\ C-B (to obtain
     M-B) is easier to type than C-\ B,  especially  if  it  is  typed
     several times in a row.

       You  can  cancel  your input in a minibuffer and start all over
     again by typing C-G.  That kills all the text in the  minibuffer.
     A  C-G  typed when the minibuffer is already empty exits from the
     minibuffer.  Usually, this aborts whatever command was using  the
     minibuffer,  so  it will return without doing anything more.  For
     example, if you type two C-G's at Meta-%'s minibuffer,  you  will
     return  to top level and no Query Replace will be done.  Typing a
     single C-G at a preinitialized minibuffer to empty the buffer  is
     not  very  useful, since you would have to retype all the initial
     text.

       The last five distinct minibuffer commands or M-X commands  you
     have  issued  are  remembered  in a ring buffer in q-register .M.
     The C-X Altmode command (^R  Re-execute  Minibuffer)  re-executes
     the  last  command  in  the  ring.    With  an  argument  <n>, it
     re-executes the <n>'th previous command.  The command is  printed
     159                                 EMACS Manual for TWENEX Users



     out  (only  the  first  40 characters or so) and you are asked to
     confirm with "Y" or "N".

       You can also get your previous minibuffer and M-X commands back
     into the minibuffer to be edited and  re-executed  with  changes.
     Giving  M-Altmode  an  argument,  as in C-U M-Altmode, causes the
     minibuffer to be loaded up with the last command in the ring,  as
     if you had typed it in again from scratch.  You can then edit it,
     execute it by typing two Altmodes, or cancel it with C-G.  To get
     an earlier command string instead of the most recent one, use the
     command  C-Z  C-Y  once  you are in the minibuffer.  This command
     "rotates" the ring of saved commands much as M-Y rotates the ring
     of killed text.  Each C-Z C-Y reveals an earlier command  string,
     until the ring has rotated all the way around and the most recent
     one reappears.  C-Z C-Y is actually a way of saying C-M-Y, but in
     the  minibuffer  that's  the  only  way to type it, since Altmode
     inserts  itself  and  Control-Meta  characters   insert   control
     characters.

       If  you  exit from Meta-Altmode with a C-G, nothing is executed
     and the previous minibuffered command string is still  remembered
     as the last one.

       While in a minibuffer, if you decide you want the minibuffer to
     use  more lines on the screen, you can use C-X ^ (^R Grow Window)
     to get more.  It gets one more line, or  as  many  lines  as  its
     argument says.
     160                                 EMACS Manual for TWENEX Users



                            CHAPTER TWENTY-FOUR
                  CORRECTING MISTAKES AND EMACS PROBLEMS



       If  you  type  an EMACS command you did not intend, the results
     are often mysterious.  This chapter tells  what  you  can  do  to
     cancel  your  mistake  or  recover  from  a mysterious situation.
     EMACS bugs and system crashes are also considered.



     24.1 Quitting and Aborting


             C-G     Quit.  Cancel running or partially typed command.
             C-]     Abort recursive  editing  level  and  cancel  the
                     command which invoked it.
             M-X Top Level
                     Abort all recursive editing levels and subsystems
                     which are currently executing.  


       There  are  three  ways  of  cancelling  commands which are not
     finished executing: quitting with C-G, and aborting with  C-]  or
     M-X  Top Level.  Quitting is cancelling a partially typed command
     or one which is  already  running.    Aborting  is  cancelling  a
     command which has entered a recursive editing level or subsystem.

       Quitting  with C-G is used for getting rid of a partially typed
     command, or a numeric argument that you  don't  want.    It  also
     stops  a  running command in the middle in a relatively safe way,
     so you can use it if you accidentally give a command which  takes
     a  long  time.  In particular, it is safe to quit out of killing;
     either your text will all still be there, or it will  all  be  in
     the  kill  ring  (or maybe both).  Quitting an incremental search
     does special things documented under searching;  in  general,  it
     may  take  two  successive C-G's to get out of a search.  C-G can
     interrupt EMACS at any time, so it is not an ordinary command.

       Aborting with C-] (Abort Recursive Edit) is used to get out  of
     a  recursive  editing  level and cancel the command which invoked
     it.  Quitting with C-G cannot be used for  this,  because  it  is
     used  to  cancel  a  partially typed command within the recursive
     editing level.  Both operations are useful.  For example, if  you
     are  editing  a message to be sent, C-G can be used to cancel the
     commands you use to edit the message, and C-] cancels sending the
     message.  C-] either tells you how to resume the aborted  command
     or queries for confirmation before aborting.
     161                                 EMACS Manual for TWENEX Users



       When  you  are  in  a  position to use M-X, you can use M-X Top
     Level.  This is equivalent to "enough" C-] commands  to  get  you
     out  of all the levels of subsystems and recursive edits that you
     are in.  C-] gets you out one level at a time, but M-X Top  Level
     goes out all levels at once.  Both C-] and M-X Top Level are like
     all  other  commands,  and unlike C-G, in that they are effective
     only when EMACS is listening.



     24.2 Dealing with Common Forms of EMACS Lossage


       This section describes various conditions which can cause EMACS
     not to work, or cause it to display strange things, and  how  you
     can correct them.


     24.2.1 Error Message


       When EMACS prints an error message, it occupies the top line of
     the screen, ends with a "?", and is accompanied by the ringing of
     the  bell.    Space  causes the error message to disappear and be
     replaced by the first line of text again.  Any other  command  is
     executed  normally  as  if  there  had been no error message (the
     error message disappears during the redisplay after the command).
     However, "?" enters the error  handler,  which  can  be  used  to
     inspect  the  function  call  stack.    Most  users  will  not be
     interested in doing this.  Type Help inside the error handler  to
     get its documentation, or C-] to exit it.

       If  you  prefer to have echo messages printed in the echo area,
     set the variable Error Messages in Echo Area nonzero.


     24.2.2 Subsystems and Recursive Editing Levels


       Subsystems and  recursive  editing  levels  are  important  and
     useful  features of EMACS, but they can seem like malfunctions to
     the user who does not understand them.

       If the mode line starts with a bracket  "["  or  a  parenthesis
     "(",  or  does  not  start  with  the word "EMACS", then you have
     entered a subsystem (See section 6.1 [Subsystems], page 27.) or a
     recursive editing  level  (See  section  6.2  [Recursive  Editing
     Levels], page 28.).
     162                                 EMACS Manual for TWENEX Users



       In  such  a situation, first try typing C-].  This will get out
     of any recursive editing level and most subsystems.    The  usual
     mode  line  and text display will reappear.  If C-] does not seem
     to have worked, type the Help character.    Instead  of  printing
     "Doc (Type ? for Help)" in the echo area, it will print a list of
     the  subsystem's  commands.   One of these should be a command to
     exit or abort.

       If the above  techniques  fail,  try  restarting  (see  section
     24.2.7).


     24.2.3 Garbage on the Screen


       If  the data on the screen looks wrong, it could be due to line
     noise on input or output, a bug in the terminal, a bug  in  EMACS
     redisplay,  or  a  bug  in an EMACS command.  To find out whether
     there is really anything wrong with your text, the first thing to
     do is type C-L.  This is  a  command  to  clear  the  screen  and
     redisplay  it.    Often  this will display the text you expected.
     Think of it as getting an opinion from another doctor.


     24.2.4 Garbage Displayed Persistently


       If EMACS persistently displays garbage on the screen, or if  it
     outputs  the  right  things  but  scattered  around all the wrong
     places on the screen, it may be that EMACS has the wrong idea  of
     your  terminal  type.    The first thing to do in this case is to
     exit from EMACS and restart it.  Each time EMACS is restarted  it
     asks  the  system what terminal type you are using.  Whenever you
     detach and move to a terminal of  a  different  type  you  should
     restart  EMACS  as a matter of course.  If you stopped EMACS with
     the exit command, or by interrupting it when it  was  awaiting  a
     command, then this is sure to be safe.

       The  system itself may not know what type of terminal you have.
     You should try telling the system with the TERMINAL TYPE  command
     in EXEC.  If your terminal is compatible with one of the standard
     types  but  has a different size screen, you must tell the system
     the size with the TERMINAL LENGTH and  TERMINAL  WIDTH  commands,
     because  EMACS  uses  whatever  size  the  system  says it knows.
     Alternatively, you can use Set Terminal Type.   See  section  I.4
     [Terminal Types], page 190, for more information.
     163                                 EMACS Manual for TWENEX Users



     24.2.5 URK Error (Address Space Exhausted)


       If attempting to visit a file or load a library causes an "URK"
     error, it means you have filled up the address space; there is no
     room  inside  EMACS  for  any  more  files or libraries.  In this
     situation EMACS will try to run the function Make Space for  you.
     If  EMACS is unable to do it for you, you may still be able to do
     M-X Make Space yourself.  This command compacts the  data  inside
     EMACS to free up some space.  It also offers to discard data that
     may  be  occupying  a  lot  of  space, such as the kill ring (See
     section  9.1  [Killing],  page  42.),  the   undo   memory   (See
     section  24.3 [Undo], page 164.), and buffers created by TAGS and
     INFO.  Another way of freeing space is to kill buffers  with  M-X
     Kill  Some Buffers (See section 14 [Buffers], page 83.) or unload
     libraries with M-X Kill Libraries (See section 22.2  [Libraries],
     page 136.).

       Use  the command M-X What Available Space to find out how close
     you are to running out of space.  It tells  you  how  many  K  of
     space you have available for additional files or libraries.

       Visiting a file causes an URK error if the file does not fit in
     the  available  virtual  memory  space,  together  with the other
     buffers and the libraries loaded.  A big enough  file  causes  an
     URK  error  all by itself.  For editing such large files, use the
     command Split File (in  the  SPLIT  library)  to  break  it  into
     subfiles.    These  will be fairly large files still, but not too
     large to edit.  After editing one or more of  the  subfiles,  use
     the  command  Unsplit  File  (also  in  SPLIT)  to  put them back
     together again.

       M-X Split File takes the name  of  the  file  to  split  as  an
     argument.    The  file is split into subfiles with the same first
     name as the original file, but with extensions  "1",  "2",  etc.,
     for  as  many subfiles as are needed depending on the size of the
     original file.  These numeric extensions should not  be  confused
     with  version  numbers;  a  subfile  FOO.1  would be created with
     version 1, and after editing you might get up to FOO.1.3.    This
     has nothing to do with the third subfile, FOO.3, which would have
     its own version number (perhaps FOO.3.2).

       M-X Unsplit File takes the name of the file to merge into as an
     argument.    It  finds the subfiles the same way Split File makes
     them, by  taking  successive  numbers  as  extensions.    When  a
     nonexistent extension is reached, Unsplit File assumes that means
     it  has  already  processed  all  the  subfiles  and  that  it is
     finished.
     164                                 EMACS Manual for TWENEX Users



     24.2.6 All Type-in Echoes and Nothing Else Happens


       If  you  find  that  EMACS  is  not responding to your commands
     except for  echoing  them  all  at  the  bottom  of  the  screen,
     including  the  Return  character,  and that Rubout causes erased
     characters to be retyped instead of erased, then you have managed
     to exit from EMACS back to TECO.  Often this follows an "Error in
     error handler" message which indicates that a condition arose  in
     which  the  error  handler  could not function.  You can get back
     into EMACS by typing :M..L$$, or by restarting (see below).    If
     you ever want to exit back to TECO, you can do M-X Top Level with
     an  argument greater than zero.  Before using :M..L$$, get rid of
     any other characters you have typed by mistake by typing a C-G.


     24.2.7 EMACS Hung and Not Responding


       Sometimes EMACS gets hung and C-G does  not  work.    The  more
     drastic  procedure  of  restarting  EMACS may work at such times.
     C-G can fail to work because it only  takes  effect  between  the
     TECO commands which make up an EMACS program, never in the middle
     of  one (only a few TECO commands allow quitting at any time), so
     as to prevent  TECO's  internal  data  structures  from  becoming
     inconsistent.  If EMACS is hung inside a TECO command, C-G is not
     noticed, but restarting can still be tried.

       To  restart  EMACS,  type  Control-C  twice to stop EMACS, then
     START to restart it.   While  restarting  TECO  in  this  way  is
     usually  safe (especially at times when TECO is doing I/O), there
     are certain times at which it will cause the TECO data structures
     to be inconsistent, so do not try it unless other  measures  have
     failed.

       Your  ultimate safeguard against a wedged EMACS is to save your
     work frequently.



     24.3 Undoing Changes to the Buffer


       If you mistakenly issue commands that make a  great  change  to
     the  buffer, you can often undo the change without having to know
     precisely how it came about.  This is done  by  using  M-X  Undo.
     Type  M-X  Undo<cr> and the change is undone.  It does not matter
     if you have moved the cursor since you made  the  change;  it  is
     undone where it was originally done.
     165                                 EMACS Manual for TWENEX Users



       The  first  thing  Undo does is tell you what kind of change it
     plans to undo (kill, fill, undo, case-convert,  etc).    Then  it
     asks whether to go ahead.  If you say "Y", the change is actually
     undone.

       Not  all  changes  to  the  buffer  can be undone: deletion (as
     opposed to killing) can't be, and changes  in  indentation  can't
     be, nor can many forms of insertion (but they aren't as important
     since they don't destroy information).  Also, a Replace String or
     Query  Replace  can't be undone, which is a shame.  The reason is
     that actually they make many small changes, and Undo  only  knows
     how to remember one contiguous change.  Perhaps someday I will be
     able to fix this.

       As  a  result,  when  you say Undo, it may undo something other
     than the latest change if the latest  change  was  not  undoable.
     This  might seem to pile one disaster on another, but it doesn't,
     because you can always Undo the Undo if it didn't help.  But  you
     can  avoid  even  having  to do that, if you look at what type of
     change Undo says it will undo.

       If you want to undo a considerable amount of editing, not  just
     the  last change, the Undo command can't help you, but M-X Revert
     File (See section 13.2 [Revert], page 74.) might be able to.   If
     you   have   been  writing  a  journal  file  (See  section  24.4
     [Journals], page 165.), you can replay the journal after deleting
     the part that you don't want.



     24.4 Journal Files


       A journal file is a record of all the commands you type  during
     an  editing  session.    If  you lose editing because of a system
     crash, an EMACS bug, or a mistake on your part, and you have made
     a journal file, you can replay the  journal  or  part  of  it  to
     recover  what  you  lost.   Journal files offer an alternative to
     auto saving, using less time and disk space if there is no crash,
     but requiring more time when you  recover  from  a  crash.    See
     section 13.3 [Auto Save], page 74.


     24.4.1 Writing Journal Files


       In  order  to  make  a  journal file, you must load the JOURNAL
     library and then execute M-X Start  Journal  File$<filename><cr>.
     Immediately,  most  of the current status of EMACS is recorded in
     166                                 EMACS Manual for TWENEX Users



     the  journal  file,  and  all subsequent commands are recorded as
     they are typed.   This  happens  invisibly  and  silently.    The
     journal  file  is  made  fully up to date on the disk after every
     50th character, so the last 50 characters of type in is the  most
     you can lose.

       The  default  filenames for the journal file are EMACS.JOURNAL.
     There is rarely a reason to use any other name, because you  only
     need  one  journal file unless you are running two EMACSes at the
     same time.


     24.4.2 Replaying Journal Files


       To replay the journal file, get a fresh  EMACS,  load  JOURNAL,
     and  do M-X Replay Journal File$<filename><cr>.  The filename can
     usually be omitted since normally you will have used the defaults
     when creating the journal.

       After a delay while the files, buffers and libraries are loaded
     as they were when the journal file was written, EMACS will  begin
     replaying  the  commands  in  the  journal before your very eyes.
     Unlike keyboard macros, which execute invisibly  until  they  are
     finished,  journal  files  display  as  they  are executed.  This
     allows you to see how far the replay has gone.  You can stop  the
     process  at  any time by typing C-G.  Aside from that, you should
     not type anything on the keyboard while the replay is going on.

       If the need for a replay is the result of  a  system  crash  or
     EMACS  crash,  then  you  probably want to replay the whole file.
     This is what happens naturally.  If you are replaying because you
     made a great mistake, you probably want to stop the replay before
     the mistake.  This is when it becomes useful to type C-G to  stop
     the  replay.    Alternatively, you can edit the journal file, and
     delete everything from the point  of  the  mistake  to  the  end,
     before you replay it.

       Once  the  replay is complete, save all your files immediately.
     Don't tempt fate!

       If you quit with C-G in the middle of a command while writing a
     journal file, there is no way to record in the journal  file  how
     much  of  the  command  has already been completed.  So, when the
     journal is replayed, EMACS has to ask you to fill in for it.  The
     command which was interrupted will  be  replayed  to  completion;
     then, you are given a recursive editing level in which to restore
     the  file  to  the  desired  state.  This happens only if the C-G
     originally interrupted  an  executing  command.    C-G  typed  to
     167                                 EMACS Manual for TWENEX Users



     discard an argument or partial command while EMACS is waiting for
     input  can  be  and  is replayed correctly without asking you for
     help.


     24.4.3 Journal File Format


       To edit a journal file, you  must  know  the  format.    It  is
     designed to be mostly transparent.

       The  primary problem which the journal file format has to solve
     is how to represent 9-bit command characters in a file which  can
     contain  only  7-bit ASCII characters.  (We could have filled the
     journal file with 9-bit characters, but then  you  would  not  be
     able  to  print it out or edit it).  The solution we have used is
     to represent each command by two characters in the file.

       So, a  Control  character  is  represented  by  a  caret  ("^")
     followed  by the basic character, as in "^E" for Control-E.  This
     was chosen to be mnemonically significant.  A Meta  character  is
     represented  by  "+"  followed  by  the  basic character, so that
     Meta-[ is represented by  "+[".    A  Control-Meta  character  is
     represented  by  "*"  followed by the basic character, as in "*X"
     for C-M-X.

       A command which is not Control or  Meta  is  represented  as  a
     space  followed  by  the  command  itself,  except that Return is
     represented by a CRLF rather than a space and a carriage  return.
     This  prevents  the  journal  file  from being one huge line, and
     makes insertion of text  very  recognizable:  the  text  inserted
     appears in the journal file alternating with spaces.

       The  Help  character,  which  is  not  covered by the scheme as
     described so far, is represented by "??".

       An asynchronous quit, which is  a  problem  for  replaying,  is
     represented  by  a  single  character,  a ^G, while a synchronous
     quit, which can be replayed reliably, is  represented  by  ":^G".
     EMACS  considers a quit synchronous, and uses ":^G" to record it,
     if EMACS was waiting for terminal input when the C-G was typed.

       Your commands themselves are not the only  information  in  the
     journal file.  EMACS records other information which is necessary
     in  replaying  the  journal  properly.    The colon character ":"
     indicates a block of such information.  Usually the extent of the
     block is easily recognizable because its contents do not resemble
     the representations of commands described above.  A  large  block
     of  information starting with a colon appears at the beginning of
     every journal file.
     168                                 EMACS Manual for TWENEX Users



       Colons  are  also used to record the precise effects of certain
     commands such as C-V whose actions depend on  how  the  text  was
     displayed  on the screen.  Since the effects of such commands are
     not completely determined by  the  text,  replaying  the  command
     could produce different results, especially if done on a terminal
     with  a different screen size.  The extra information recorded in
     the journal makes it  possible  to  replay  these  commands  with
     fidelity.

       A  semicolon in the journal file begins a comment, placed there
     for the benefit of a human looking at the journal.   The  comment
     ends at the beginning of the following line.


     24.4.4 Warnings


       Proper  replaying  of  a  journal  file  requires  that all the
     surrounding circumstances be unchanged.

       In particular, replaying begins by visiting all the files  that
     were  visited when the writing of the journal file began; not the
     latest versions of these files, but the versions which  were  the
     latest  at  the  earlier  time.   If those versions, which may no
     longer be the  latest,  have  been  deleted,  then  replaying  is
     impossible.

       If  your init file has been changed, the commands when replayed
     may not do what they did before.

       These are the only things that can interfere with replaying, as
     long as you start writing  the  journal  file  immediately  after
     starting  EMACS.    But  as an editing session becomes longer and
     files are saved, the journal file contains increasing amounts  of
     waste  in  the form of commands whose effects are already safe in
     the newer versions of the edited files.   Replaying  the  journal
     will  replay  all  these  commands  wastefully  to generate files
     identical to those already saved, before coming to the last  part
     of   the   session  which  provides  the  reason  for  replaying.
     Therefore it becomes very desirable to start a new journal  file.
     However,  many  more  precautions  must be taken to insure proper
     replaying of a journal file which is started after EMACS has been
     used for a while.  These precautions are described here.  If  you
     cannot  follow  them,  you  must  make  a journal checkpoint (see
     below).

       If any buffer contains text which is not saved in a file at the
     time the journal file is started, it is impossible to replay  the
     journal correctly.  This problem cannot possibly be overcome.  To
     169                                 EMACS Manual for TWENEX Users



     avoid  it,  M-X  Start  Journal  File  offers to save all buffers
     before actually starting the journal.

       Another problem comes from the kill ring and the other ways  in
     which EMACS remembers information from previous commands.  If any
     such  information  which  originated  before starting the journal
     file is used after  starting  it,  the  journal  file  cannot  be
     replayed.    For  example,  suppose you fill a paragraph, start a
     journal file, and  then  do  M-X  Undo?    When  the  journal  is
     replayed, it will start by doing M-X Undo, but it won't know what
     to  undo.    It  is up to you not to do anything that would cause
     such a problem.  It should not be hard.  It would be possible  to
     eliminate  this  problem by clearing out all such data structures
     when a journal file is started, if users would prefer that.

       A more difficult problem comes  from  customization.    If  you
     change  an  option  or  redefine  a command, then start a journal
     file, the journal file will have no record of  the  change.    It
     will  not  replay  correctly unless you remember to make the same
     change beforehand.  Customizations made in an init  file  do  not
     cause  a problem because the init file has also been run when the
     journal file is replayed.  Customizations made  directly  by  the
     user  while the journal file is being written are also no problem
     because replaying will make the same changes at the right  times.
     However,  a  customization  made  while  a  journal file is being
     written will be a problem if a new journal file is started.


     24.4.5 Journal Checkpoints


       The only cure  for  the  problems  of  starting  a  journal  in
     mid-session  is to record the complete state of EMACS at the time
     the journal is begun.  This is not done normally  because  it  is
     slow;  however,  you  can do this if you wish by giving M-X Start
     Journal File a numeric argument.  This writes the complete  state
     of  EMACS  into  the  file ESAVE.EXE.  To replay the journal, run
     ESAVE, the saved checkpoint, instead of EMACS; then load  JOURNAL
     and  do  M-X  Replay Journal File as described above.  Be sure to
     delete the checkpoint if you are finished with it, since it tends
     to be large.  Delete them also  when  you  log  out;  it  may  be
     possible  to have a command file which deletes them automatically
     when you log out.  Checkpoint files more than a day  old  may  be
     deleted by others without notice; but don't leave it up to them.
     170                                 EMACS Manual for TWENEX Users



     24.5 Reporting Bugs


       Sometimes  you will encounter a bug in EMACS.  To get it fixed,
     you must report it.  It is your duty to do so; but you must  know
     when to do so and how if it is to be constructive.


     24.5.1 When Is There a Bug


       If  EMACS  executes  an  illegal  instruction,  or dies with an
     operating system error message that indicates a  problem  in  the
     program (as opposed to "disk full"), then it is certainly a bug.

       If  EMACS updates the display in a way that does not correspond
     to what is in the buffer, then it is  certainly  a  bug.    If  a
     command  seems  to  do the wrong thing but the problem is gone if
     you type C-L, then it is a case of incorrect display updating.

       Taking forever to complete a command can be a bug, but you must
     make certain that it was really EMACS's  fault.    Some  commands
     simply  take  a long time.  Quit or restart EMACS and type Help L
     to see whether the keyboard or line noise garbled the  input;  if
     the  input  was  such that you know it should have been processed
     quickly, report a bug.  If you don't know, try  to  find  someone
     who does know.

       If  a  command  you  are  familiar  with  causes an EMACS error
     message in  a  case  where  its  usual  definition  ought  to  be
     reasonable, it is probably a bug.

       If  a command does the wrong thing, that is a bug.  But be sure
     you know for certain what it ought to have done.  If  you  aren't
     familiar  with  the  command,  or  don't know for certain how the
     command is supposed to work, then it might  actually  be  working
     right.    Rather than jumping to conclusions, show the problem to
     someone who knows for certain.

       Finally, a command's intended definition may not  be  best  for
     editing  with.   This is a very important sort of problem, but it
     is also a matter of judgement.  Also, it is easy to come to  such
     a  conclusion  out of ignorance of some of the existing features.
     It is probably best not to complain about such  a  problem  until
     you  have  checked  the documentation in the usual ways (INFO and
     Help), feel confident  that  you  understand  it,  and  know  for
     certain  that  what  you  want  is  not  available.   If you feel
     confused about the documentation instead,  then  you  don't  have
     grounds  for an opinion about whether the command's definition is
     171                                 EMACS Manual for TWENEX Users



     optimal.    Make  sure you read it through and check the index or
     the  menus  for  all  references  to  subjects  you  don't  fully
     understand.    If  you  have  done  this diligently and are still
     confused, or if you finally understand but think you  could  have
     said  it  better,  then you have a constructive complaint to make
     about the documentation.  It  is  just  as  important  to  report
     documentation bugs as program bugs.


     24.5.2 How to Report a Bug


       When  you decide that there is a bug, it is important to report
     it and to report it in a way which  is  useful.    What  is  most
     useful  is  an  exact  description  of  what  commands  you type,
     starting with a  fresh  EMACS  just  loaded,  until  the  problem
     happens.    Send the bug report to BUG-EMACS@MIT-AI if you are on
     the Arpanet, or to the author (see the preface for the address).

       The most important principle in reporting a bug  is  to  report
     facts,  not  hypotheses  or  conditions.   It is always easier to
     report the facts, but people seem to prefer to strain to think up
     explanations and report them instead.  If  the  explanations  are
     based  on  guesses  about  how EMACS is implemented, they will be
     useless; we will have to try to figure out what  the  facts  must
     have  been  to  lead  to  such  speculations.   Sometimes this is
     impossible.  But in any case, it is unnecessary work for us.

       For example, suppose that you type C-X C-V  <GLORP>BAZ.UGH<cr>,
     visiting  a file which (you know) happens to be rather large, and
     EMACS prints out "I feel pretty today".  The best way  to  report
     the  bug  is  with  a sentence like the preceding one, because it
     gives all the facts and nothing but the facts.

       Do not assume that the problem is due to the size of  the  file
     and  say  "When  I  visit  a large file, EMACS prints out 'I feel
     pretty today'".  This is what we mean by "guessing explanations".
     The problem is just as likely to be due to the fact that there is
     a "Z" in the filename.  If this is so,  then  when  we  got  your
     report,  we  would  try  out  the  problem  with some "big file",
     probably with no "Z" in its name, and not  find  anything  wrong.
     There  is  no way in the world that we could guess that we should
     try visiting a file with a "Z" in its name.

       Alternatively, the problem might be due to the  fact  that  the
     file  starts with exactly 25 spaces.  For this reason, you should
     make sure that you don't change the file until we have looked  at
     it.   Suppose the problem only occurs when you have typed the C-X
     C-A command previously?  This is why we ask you to give the exact
     sequence of characters you typed since loading the EMACS.
     172                                 EMACS Manual for TWENEX Users



       You  should  not  even say "visit the file ..." instead of "C-X
     C-V" unless you know that it makes no difference  which  visiting
     command  is used.  Similarly, rather than saying "if I have three
     characters on the line", say "after I type <cr> A B C <cr>  C-P",
     if  that  is  the  way  you  entered  the  text.   A journal file
     containing the commands you typed to reproduce the bug is a  very
     good form of report.

       If you are not in Fundamental mode when the problem occurs, you
     should say what mode you are in.

       Be  sure to say what version of EMACS and TECO are running.  If
     you don't know, type Meta-Altmode Q$EMACS Version$= FS  Version$=
     $$  and  EMACS  will  print  them  out.    (This  is a use of the
     minibuffer.  See section 23 [Minibuffer], page 157.)

       If the bug occurred in a  customized  EMACS,  or  with  several
     optional  libraries loaded, it is helpful to try to reproduce the
     bug in a more standard EMACS with fewer libraries loaded.  It  is
     best  if you can make the problem happen in a completely standard
     EMACS with no optional libraries.  If the problem does not  occur
     in  a  standard  EMACS, it is very important to report that fact,
     because otherwise we will try to debug it in  a  standard  EMACS,
     not find the problem, and give up.  If the problem does depend on
     an  init  file,  then you should make sure it is not a bug in the
     init file by complaining to the person who wrote the file, first.
     He should check over his code, and verify the definitions of  the
     TECO  commands  he is using by looking in INFO:TECORD.INFO.  Then
     if he verifies that the bug is in EMACS he should report it.   We
     cannot be responsible for maintaining users' init files; we might
     not even be able to tell what they are supposed to do.

       If  you  can tell us a way to cause the problem without reading
     in any files, please do so.  This makes it much easier to  debug.
     If  you  do need files, make sure you arrange for us to see their
     exact contents.  For example, it can often matter  whether  there
     are  spaces  at  the ends of lines, or a line separator after the
     last line in the buffer (nothing ought to care whether  the  last
     line  is  terminated,  but  tell  that  to the bugs).  If you are
     reporting the bug from a non-Arpanet site, keep the files  small,
     since  we  may  have to type them in, unless you send them on mag
     tape.

       If EMACS gets an operating system error message, such as for an
     illegal instruction, then you can probably recover by  restarting
     it.    But  before doing so, you should make a dump file.  If you
     restart or continue the EMACS before making the dump,  the  trail
     will be covered and it will probably be too late to find out what
     happened.    Use  the SAVE command to do this; however, this does
     173                                 EMACS Manual for TWENEX Users



     not record the contents of the accumulators.  To do that, use the
     EXEC  commands  EXAMINE  0,  EXAMINE 1, etc., through EXAMINE 17.
     Include the numbers printed by these commands as part of your bug
     report.

       A dump is also useful if EMACS gets  into  a  wedged  state  in
     which commands that usually work do strange things.
     174                                 EMACS Manual for TWENEX Users



                            CHAPTER TWENTY-FIVE
                          WORD ABBREVIATION INPUT



       Word  Abbrev  mode  allows you to abbreviate text with a single
     "word", with EMACS expanding the  abbreviation  automatically  as
     soon as you have finished the abbreviation.

       Abbrevs  are  also useful for correcting commonly misspelled or
     mistyped  words  ("thier"  could  expand  to  "their"),  and  for
     uppercasing  words  like  "EMACS" (abbrev "emacs" could expand to
     "EMACS").

       To use this mode, just do M-X Word Abbrev Mode<cr>.    (Another
     M-X Word Abbrev Mode<cr> will turn the mode off; it toggles.)

       For  example,  in  writing  this  documentation  we  could have
     defined "wam" to be  an  abbreviation  for  "word  abbrev  mode".
     After typing just the letters "wam", we see just that, "wam", but
     if we then finish the word by typing space or period or any other
     punctuation,  the  "wam" is replaced by (and redisplays as) "word
     abbrev mode".  If we capitalize the abbrev, "Wam", the  expansion
     is  capitalized:  "Word abbrev mode".  If we capitalize the whole
     abbrev, WAM", each word in the expansion  is  capitalized:  "Word
     Abbrev  Mode".    In  this  particular  example, though, we would
     define "wam" to expand to "Word Abbrev mode" since it  is  always
     to be capitalized that way.

       Thus,  typing  "I  am in wam now" produces "I am in Word Abbrev
     mode now".

       Word Abbrev mode does not  interfere  with  the  use  of  major
     modes,  such  as  Text,  Lisp, TECO, PL1, or minor modes, such as
     Auto Fill.  Those modes (or the user) may redefine what functions
     are connected to characters; this does  not  hamper  Word  Abbrev
     mode.

       There  are two kinds of word abbreviations: mode and global.  A
     mode word abbrev applies only in one  major  mode  (for  instance
     only in Text mode), while a global word abbrev applies regardless
     of  major  mode.    If some abbrev is defined both as a mode word
     abbrev for the current mode and as a global word abbrev, the mode
     word abbrev expansion takes precedence.

       For instance, you might want an abbrev "foo"  for  "find  outer
     otter"     in     Text     mode,     an    abbrev    "foo"    for
     "FINAGLE-OPPOSING-OPINIONS" in Lisp,  and  an  abbrev  "foo"  for
     "meta-syntactic  variable"  in  any  other  mode (the global word
     abbrev).
     175                                 EMACS Manual for TWENEX Users



       Word  abbrevs  can be defined one at a time (adding them as you
     think of them), or many at a time (from a definition list).   You
     can  save  them  in a file and read them back later.  If you turn
     off Word Abbrev mode, abbrevs stop expanding  automatically,  but
     their  definitions  are  remembered  in case you turn Word Abbrev
     mode back on.



     25.1 Basic Usage


             C-X C-A     Define a mode abbrev  for  some  text  before
                         point.
             C-X +       Define  a  global abbrev for some text before
                         point.
             C-X C-H     Define  expansion  for  mode  abbrev   before
                         point.
             C-X -       Define  expansion  for  global  abbrev before
                         point.
             C-M-Space   Expand abbrev without inserting anything.
             M-'         Mark a  prefix  to  be  glued  to  an  abbrev
                         following.
             C-X U       Unexpand the last abbrev, or undo a C-X U. 


     M-X List Word Abbrevs<cr>
                     Shows definitions of all abbrevs.

     M-X Edit Word Abbrevs<cr>
                     Lets you edit the definition list directly.

     M-X Read Word Abbrev File$<filename><cr>
                     Defines word abbrevs from a definition file.

     M-X Write Word Abbrev File$<filename><cr>
                     Makes  a  definition  file  from  current  abbrev
                     definitions.

     Readable Word Abbrev Files
                     Option variable to control abbrev file format.  


       This section describes the most common use of Word Abbrev mode.
     If you don't read any more than this,  you  can  still  use  Word
     Abbrev mode quite effectively.

       Note  that  each of the above commands will also work when Word
     Abbrev mode is turned off, unlike the automatic  expanders  (such
     176                                 EMACS Manual for TWENEX Users



     as  Space  or Period), allowing you to manually define and expand
     abbrevs.  (If you want to do this, you might  also  see  the  M-X
     Expand Word Abbrevs in Region command's self-documentation.)


     25.1.1 Adding Word Abbrevs


       C-X C-A (^R Add Mode Word Abbrev) defines a mode abbrev for the
     word  before point (this does not include any punctuation between
     that word and point, though).  It prints the word before point in
     the echo area and asks you for that word's  abbreviation.    Type
     the abbrev (which you may edit with Rubout and C-U) followed by a
     Return.    The  abbrev  must  be  a  "word": it must contain only
     letters and digits; the case of the letters is  irrelevant.    If
     you'd  rather  define  a  global abbrev, use C-X + (^R Add Global
     Word Abbrev), which works similarly.

       You can redefine an abbrev with C-X C-A  or  C-X  +.    If  the
     abbrev  already has a definition, it tells you what that was, and
     asks for confirmation.

       To define an abbrev for more than one word of  text,  give  C-X
     C-A  or  C-X  +  a  numeric argument:  an argument greater than 0
     means the expansion is that many words before point; an  argument
     of 0 means to use the region (between point and mark).  (By using
     the region specification you can make an abbrev for any text, not
     just a sequence of words.)  The message in the echo area provides
     you  with  confirmation  of  just what the expansion will be; you
     might see:


         Text Abbrev for "this is the expansion":


       Sometimes you may think you already  had  an  abbrev  for  some
     text,  use  it, and see that it didn't expand.  In this case, the
     C-X C-H (^R Inverse Add Mode Word Abbrev) or C-X  -  (^R  Inverse
     Add  Global  Word  Abbrev) commands are helpful:  they ask you to
     type in an expansion rather than  an  abbrev.    In  addition  to
     defining  the  abbrev,  they  also expand it.  If you give them a
     numeric argument, n, they use the nth word before  point  as  the
     abbrev.

       You can kill abbrevs (cause them to no longer expand) by giving
     a  negative  numeric argument to C-X C-A or C-X +.  For instance,
     to kill the global abbrev "foo" type C-U - C-X + foo<cr>.
     177                                 EMACS Manual for TWENEX Users



     25.1.2 Controlling Abbrev Expansion


       When  an abbrev expands, the capitalization of the expansion is
     determined by the capitalization of the abbrev:  If the abbrev is
     all lowercase, the expansion is as  defined.    If  the  abbrev's
     first  letter  is uppercase, the expansion's first letter is too.
     If the abbrev is all uppercase, there are two possibilities:   if
     the  expansion is a single word, it is all-uppercased; otherwise,
     each of its words has its first letter uppercased  (such  as  for
     use  in  a  title).   (If you don't like this distinction between
     single-word and multi-word expansions, set  the  variable  WORDAB
     All  Caps  to 1.  Then an all-uppercase abbrev will always result
     in an all-uppercase expansion.)

       Abbrevs  normally  expand  when  you  type   some   punctuation
     character;  the  abbrev  expands and the punctuation character is
     inserted.  There are other ways of expanding abbrevs:   C-M-Space
     (^R Abbrev Expand Only) causes the abbrev just before point to be
     expanded  without  inserting any other character.  C-M-Space will
     expand abbrevs even if Word Abbrev mode is  currently  off;  this
     can  be  useful  if  the  system  is  slow,  and you just want to
     manually expand a few abbrevs.  M-' (^R Word Abbrev Prefix  Mark)
     allows you to "glue" an abbrev onto any prefix:  suppose you have
     the   abbrev   "comm"   for   "committee",  and  wish  to  insert
     "intercommittee "; type "inter", M-' (you will now see "inter-"),
     and then "comm "; "inter-comm " becomes "intercommittee ".    M-X
     Expand  Word Abbrevs in Region checks each word in the region and
     offers to expand each word abbrev found; for more details see its
     self-documentation.  (It is similar  to  the  M-X  Query  Replace
     command.)


     25.1.3 Unexpanding Abbrevs


       C-X  U  (^R  Unexpand  Last Word) "unexpands" the last abbrev's
     expansion, replacing the last  expansion  with  the  abbrev  that
     caused it.  If any auto-filling was done because of the expansion
     (you  had  Auto  Fill  mode on), that too is undone.  If you type
     another C-X U, the first  one  is  "undone"  and  the  abbrev  is
     expanded   again.    Only  the  last  expansion  can  be  undone.
     Sometimes you may find that C-X U unexpands an abbrev later  than
     the one you're looking at.  In this case, do another C-X U and go
     back and manually correct the earlier expansion.

       If  you  know  beforehand  that a word will expand, and want to
     prevent it, you can simply "quote" the punctuation character with
     C-Q.  For example, typing "comm",  a  C-Q,  and  then  "."  gives
     "comm." without expanding.
     178                                 EMACS Manual for TWENEX Users



     25.1.4 Listing Abbrevs


       M-X  List Word Abbrevs<cr> shows all currently defined abbrevs.
     An abbrev "foo" that expands to "this is an abbrev" in Text  mode
     and has been expanded 3 times, is listed as:


         foo:    (Text)  3       "this is an abbrev"


       An  abbrev "gfoo" which expands to "this is a global abbrev" in
     all modes, expanded 11 times, is listed as:


         gfoo:           11      "this is a global abbrev"


       Note that any use of the double-quote character (")  inside  an
     expansion  is  doubled,  to  distinguish the use of " from the "s
     that surround the whole expansion.  Thus  if  the  global  abbrev
     'helpc' expands to 'the "Help" character', it is listed as:


         helpc:           3       "the ""Help"" character"


     25.1.5 Editing the Definition List


       M-X  Edit Word Abbrevs places you in a recursive editing level,
     editing the current word abbrev definition  list.    The  abbrevs
     appear  in  the  same format used by M-X List Word Abbrevs.  When
     you exit (via C-M-Z), the current word abbrevs are redefined from
     the edited definition list: any abbrevs that  have  been  deleted
     from the list are killed, new ones added to the list are defined,
     and  old ones changed are modified.  In effect, after exiting the
     Edit Word  Abbrev  editing  level,  all  previously-defined  word
     abbrevs  are  killed,  and  the edited list is used to define new
     abbrevs.  Typing C-] (Abort  Recursive  Edit)  aborts  Edit  Word
     Abbrevs, without killing or redefining any abbrevs.


     25.1.6 Saving Abbrev Definitions


       M-X  Write  Word  Abbrev  File$<filename><cr> writes an "abbrev
     definition file"  which  contains  the  definitions  of  all  the
     abbrevs   in   your   EMACS   now.      M-X   Read   Word  Abbrev
     179                                 EMACS Manual for TWENEX Users



     File$<filename><cr> reads in such a file and defines the abbrevs.
     (Other  abbrevs  already defined are not affected unless the file
     redefines them.)  If you don't supply a filename, the  last  file
     you  used  in  either of these commands is used again, originally
     defaulting to WORDAB.DEFNS.  With these  two  commands,  you  can
     save  the  abbrevs  you  defined in one EMACS and restore them in
     another  EMACS  another  day.    If  you  want  abbrevs   to   be
     automatically  saved when you exit EMACS (with C-X C-Z (^R Return
     to Superior)), set the option variable Save Word  Abbrevs  to  1.
     (They are saved only if the definitions have changed.)

       The format of the definition file is designed for fast loading,
     not  ease  of  human  readability.   (But if you have to, you can
     figure it out enough to read or even edit it.)  If you  want  M-X
     Write Word Abbrev File to write a human-readable version instead,
     set  the  option Readable Word Abbrev Files to 1.  (M-X Read Word
     Abbrev File will be able to read this format, but not as fast.)

       If you have an EVARS file, you might want to put the  following
     lines  into  it  in  order to turn on Word Abbrev mode, have your
     abbrev definition file automatically read when EMACS  starts  up,
     and enable automatic exit-saving:


         *: 1 MM Word Abbrev Mode$

         *: MM Read Word Abbrev File$WORDAB.DEFNS$
         Save Word Abbrevs:1


       Or if you have an init file, use the following Teco code:


         1 MM Word Abbrev Mode$

         MM Read Word Abbrev File$WORDAB.DEFNS$
         1u$Save Word Abbrevs$



     25.2 Advanced Usage


       The  use  of  Word  Abbrev  mode  as  discussed in the previous
     section suffices for most users.  However,  some  users  who  use
     Word  Abbrev  mode a lot or have highly tailored environments may
     desire more flexibility or need  more  power  to  handle  extreme
     situations than the basic commands provide.
     180                                 EMACS Manual for TWENEX Users



     25.2.1 Alternatives and Customizations


     M-X Make Word Abbrev$<abbrev>$<expansion>$<mode><cr>

     M-X Kill All Word Abbrevs<cr>

     M-X Make These Characters Expand$<characters><cr>

     M-X Attach Word Abbrev Keyboard Macro

     ^R Kill Mode Word Abbrev

     ^R Kill Global Word Abbrev

     Only Global Abbrevs
                     Set this option if you only use globals.

     Additional Abbrev Expanders
                     Variable for adding a few more expanders.

     WORDAB Ins Chars
                     Variable for replacing entire set of expanders.  


       The  basic commands for defining a new mode abbrev, C-X C-A (^R
     Add Mode Word Abbrev) and C-X  C-H  (^R  Inverse  Add  Mode  Word
     Abbrev),  work  only in the current mode.  A more general command
     is M-X Make Word Abbrev which takes three string arguments:   the
     first  is  the abbrev, the second is the expansion, and the third
     is the mode (such as "Text").    This  command  can  also  define
     global abbrevs, by providing "*" as the mode name.

       M-X  Kill  All  Word Abbrevs<cr> is a very quick way of killing
     every abbrev currently defined.  After this  command,  no  abbrev
     will  expand.    (A  slower but more careful way is with M-X Edit
     Word Abbrevs.)

       The functions ^R Kill Mode Word Abbrev and ^R Kill Global  Word
     Abbrev  exist,  but are not connected to any commands by default.
     If you find having to  specify  negative  arguments  to  C-X  C-A
     (^R  Add  Mode Word Abbrev) and C-X + (^R Add Global Word Abbrev)
     inconvenient, you should connect  these  functions  to  commands.
     (See section 5.2 [Set Key], page 23.  Or See section 22.6 [Init],
     page 144.)

       If  you  prefer  to use only global abbrevs then you should set
     the option variable Only Global Abbrevs to 1.  You  can  do  this
     after  or  before  turning  on  Word  Abbrev  mode;  it  makes no
     181                                 EMACS Manual for TWENEX Users



     difference.    This causes the global abbrev definers which would
     otherwise be on C-X + (^R Add  Global  Word  Abbrev)  and  C-X  -
     (^R  Inverse  Add Global Word Abbrev) to be on the easier to type
     characters C-X C-A and C-X C-H.  In addition, the  checking  done
     whenever you type an expander character (a punctuation character)
     is  about  three times faster for the no-expansion case, which is
     what happens most of the time.

       Normally, the following characters cause expansion (followed by
     whatever they would normally do were Word Abbrev mode  off;  such
     as,   insert  themselves):  !~@#;$%^&*-_=+[]()\|:`"{},<.>'/?  and
     Space, Return, Linefeed, and Tab.    You  can,  however,  specify
     additional  characters  to cause expansion (digits, for instance,
     or greek letters on keyboards with Top-keys).    M-X  Make  These
     Characters  Expand$<characters><cr>  adds  the  characters in the
     string argument to the list of expanders.  Alternatively, you can
     set the variable  Additional  Abbrev  Expanders  to  contain  the
     string of characters.  (This is particularly useful in an init or
     EVARS  file.)    If  you  wish  to  completely replace the set of
     characters that cause expansion,  set  the  variable  WORDAB  Ins
     Chars  in your init file.  See section 22.6 [init], page 144, for
     details on setting variables in init and EVARS files.


     25.2.2 Manipulating Definition Lists


       One reason you might want to manipulate the definition lists is
     to provide more structure to the definition environment than just
     the mode vs. global structure provided normally, such as to group
     together in a file those abbrevs pertaining to one topic.

       M-X Insert Word Abbrevs<cr> inserts into the buffer a  list  of
     the  current word abbrev definitions, in the format that M-X List
     Word Abbrevs uses.  M-X Insert Word Abbrevs$<string><cr>  inserts
     some  of  the  abbrevs'  definitions;  See  section  25.2.3 [Many
     Abbrevs], page 182, for details.

       M-X Define Word Abbrevs<cr> defines a set of word abbrevs  from
     a  definition  list  in the buffer.  There should be nothing else
     besides the definition list in the buffer; or, if there  is,  you
     must  narrow  the  buffer  to  just  the  definition  list.   See
     section 17 [Narrowing], page 93.
     182                                 EMACS Manual for TWENEX Users



     25.2.3 Dealing with Many Abbrevs


       Some  users  build  up  a  very  large number of abbrevs.  This
     causes a couple of problems:  First, defining all  those  abbrevs
     when  EMACS  starts  up  can  become  too  slow;  this problem is
     discussed in the next section.  Second, the  commands  that  deal
     with the entire definition list become unwieldy.

       M-X List Word Abbrevs$<string><cr> shows you the definitions of
     just  the  abbrev definitions containing <string> (in the abbrev,
     in the mode, or in the expansion).  The argument  is  actually  a
     TECO  search  string  (See  section  19.3  [TECO search strings],
     page 101.).  If you want to see the abbrevs which contain  either
     <string1>  or  <string2>,  separate the strings with a ^O; to see
     abbrev definitions containing either "defn" or "wab", do M-X List
     Word Abbrevs$defn^Owab<cr>.

       You can provide M-X List  Word  Abbrevs  with  an  argument  to
     control  whether  the filtering string applies to just the abbrev
     (C-U 1), just the expansion (C-U 2), just the mode  (C-U  4),  or
     any  combination (the sum).  C-U 3 M-X List Word Abbrevs$lisp<cr>
     will match "lisp" against abbrevs and expansions, but not modes.

       M-X  Insert  Word  Abbrevs$<string><cr>  works  similarly,  but
     inserts the list into the buffer instead of typing it out.


     25.2.4 Dumped EMACS Environments


     M-X Write Word Abbrev File$<filename><cr>
                     Writes  a  file of all abbrev definitions, before
                     dumping.

     M-X Read Word Abbrev File$<filename><cr>
                     Reads file of abbrev definitions at init-time.

     M-X Write Incremental Word Abbrev File$<filename><cr>
                     Writes a file of abbrev definitions changed since
                     dumping.

     M-X Read Incremental Word Abbrev File$<filename><cr>
                     Reads  file  of  changed  abbrev  definitions  at
                     startup-time.  


       Some  users  with  highly  customized EMACS environments (their
     init  files  take  a  long  time  to  run)   "dump   out"   their
     183                                 EMACS Manual for TWENEX Users



     environments,  in effect creating another EMACS-like program (the
     "dump") which starts up much faster.    (For  instance,  1.7  cpu
     seconds   instead   of   70.5   cpu   seconds.     See  the  file
     INFO:MKDUMP.INFO, for details about a simple  method  of  dumping
     environments.    See  the  file INFO:CONV.INFO, for details about
     more general environment dumping.)  Since the dumped  environment
     contains  word  abbrev  definitions,  a  dumped  environment with
     hundreds of abbrevs can start just as quickly as if it had  none.
     (But  reading all these abbrevs with M-X Read Word Abbrev File in
     the init file originally took a long time.)  For these  users  it
     is important, at dump-startup time, to read in only those abbrevs
     which  were  changed  or defined since the environment was dumped
     out.  A file which contains only these new  abbrev's  definitions
     is  called an incremental word abbrev file.  (It also can specify
     that certain abbrevs are to be killed if they were  defined  when
     the environment was dumped out, but subsequently killed.)

       The  startup  for the dump should use the Read Incremental Word
     Abbrev File function instead of Read Word Abbrev File.  It  takes
     the  filename  as a string argument, which defaults to INCABS..0.
     The command M-X Write Incremental Word Abbrev File$<filename><cr>
     writes such a file, writing out those abbrevs  more  recent  than
     the dump (ones read by Read Incremental Word Abbrev File and ones
     defined in the current editing session).

       Setting  Save  Word  Abbrevs  to  -1  will cause an incremental
     abbrev file to be automatically written, if necessary, when EMACS
     is exited.

       When you want to dump out a new  EMACS,  first  create  a  new,
     complete  word abbrev definition file using M-X Write Word Abbrev
     File.  This file now has all abbrevs in  it,  and  you  can  thus
     delete  any incremental definition files you have.  Then start up
     the new EMACS from scratch, using the init  file,  and  dump  it.
     (The  init  file in general should call Read Word Abbrev File and
     then also call Read Incremental Word Abbrev File,  just  in  case
     there  are  both  kinds  of files around.  The startup calls only
     Read Incremental Word Abbrev File.)  Note  that  these  functions
     will  return  without  error  if  their  files  don't exist, as a
     convenience.



     25.3 Teco Details for Extension Writers


       This section documents  some  details  that  users  programming
     extensions  may  need to know, in order to interact properly with
     Word Abbrev mode operation or to build upon it.
     184                                 EMACS Manual for TWENEX Users



       The  variable WORDAB Setup Hook, if non-0, is executed when the
     WORDAB library is loaded and sets itself up.   (M-X  Word  Abbrev
     Mode<cr>  in  the default EMACS environment auto-loads the WORDAB
     library.)  If there is no hook, the normal key  connections  (C-X
     C-A,  C-X  U,  etc.) are made; if there is a hook, it must do the
     connections.

       The  variable  Word  Abbrevs  Modified  is  non-0  when  abbrev
     definitions   have   changed.     This  is  used  to  signal  the
     abbrev-saving mechanism.

       The abbrev definers, such as C-X C-A (^R Add Mode Word Abbrev),
     check to see if the volatile TECO mark, FS ^R Mark$, is  set;  if
     it  is,  then the region between point and FS ^R Mark$ is used as
     the expansion.  The intention  is  to  provide  a  mechanism  for
     simple  but safe expansion marking.  See section 22.5 [FS Flags],
     page 143.

       Finally, the general way that Word Abbrev mode works  is  this:
     at  certain  times,  when  characters  are  likely  to  have been
     reconnected, a Word Abbrev mode subroutine looks at each  of  the
     expander  characters  to  see  if they are running an expander or
     have been reconnected.  If they don't have  expanders,  they  are
     connected  to  an  expander  function  (which  first  checks  for
     expansion and then calls the "old" function, what  the  character
     was  connected  to before).  The problem is that it is not really
     possible to efficiently catch all the times  that  characters  of
     interest  are reconnected.  So, as a good guess, Word Abbrev mode
     looks at these characters when the & Set Mode  Line  function  is
     called.    This  happens  when  major or minor modes change, when
     buffer switching happens, and when Set Key is used.    These  are
     the  standard  times  that connections are changed.  However, the
     extension writer must  be  careful  about  reconnecting  expander
     characters.  If an extension might do this, it should do 1FS Mode
     Change$ to cause expansions to be redefined.
     185                                 EMACS Manual for TWENEX Users



                            CHAPTER TWENTY-SIX
            THE PICTURE SUBSYSTEM, AN EDITOR FOR TEXT PICTURES



       If  you  want  to  create a picture made out of text characters
     (for example, a picture  of  the  division  of  a  register  into
     fields,  as a comment in a program), the PICTURE package can make
     it easier.

       Do M-X Load Lib$PICTURE<cr>,  and  then  M-X  Edit  Picture  is
     available.    Do M-X Edit Picture with point and mark surrounding
     the picture to be  edited.    Edit  Picture  enters  a  recursive
     editing  level  (which  you  exit  with C-M-Z, as usual) in which
     certain commands are  redefined  to  make  picture  editing  more
     convenient.

       While you are inside Edit Picture, all the lines of the picture
     are   padded   out  to  the  margin  with  spaces.    This  makes
     two-dimensional  motion  very  convenient;  C-B  and   C-F   move
     horizontally,  and  C-N  and  C-P  move  vertically  without  the
     inaccuracy of a ragged right margin.  When  you  exit  from  Edit
     Picture,  spaces at the ends of lines are removed.  Nothing stops
     you from moving outside the bounds of the  picture,  but  if  you
     make any changes there slightly random things may happen.

       Edit  Picture  makes  alteration  of  the picture convenient by
     redefining the way printing characters and Rubout work.  Printing
     characters  are  defined  to  replace  (overwrite)  rather   than
     inserting  themselves.    Rubout  is  defined  to undo a printing
     character:  it replaces the previous character with a space,  and
     moves back to it.

       Return  is  defined  to move to the beginning of the next line.
     This makes it usable for moving to the next apparently blank (but
     actually filled with nothing but spaces) line, just  as  you  use
     Return  normally  with  lines that are really empty.  C-O creates
     new blank lines after point, but they are created full of spaces.

       Tab  is  redefined  to  indent  (by  moving  over  spaces,  not
     inserting  them)  to  under  the  first non-space on the previous
     line.  Linefeed is as usual equivalent to Return followed by Tab.

       Four movement-control commands exist to aid in drawing vertical
     or horizontal lines: If you  give  the  command  M-X  Up  Picture
     Movement,  each  character  you  type  thereafter  will cause the
     cursor to move up instead of to the right.  Thus if you  want  to
     draw  a line of dashes up to some point, you can give the command
     Up Picture Movement, type enough dashes to  make  the  line,  and
     186                                 EMACS Manual for TWENEX Users



     then  give  the command Right Picture Movement to put things back
     to normal.  Similarly, there are functions to cause downward  and
     leftward   movement:  Down  Picture  Movement  and  Left  Picture
     Movement.  These commands remain in effect only  until  you  exit
     the  Edit  Picture  function,  (One final note: you can use these
     cursor movement commands outside of Edit Picture too,  even  when
     not in Overwrite mode.  You have to be somewhat careful though.)

       Possible  future  extensions include alteration of the kill and
     un-kill commands to replace instead of  deleting  and  inserting,
     and to handle rectangles if two corners are specified using point
     and the mark.

       The DRAW library is a user-contributed library containing other
     commands useful for editing pictures.
     187                                 EMACS Manual for TWENEX Users



                           CHAPTER TWENTY-SEVEN
                             SORTING FUNCTIONS



       The  SORT  library  contains  functions called Sort Lines, Sort
     Paragraphs and Sort Pages, to sort the region alphabetically line
     by line, paragraph by paragraph or page by page.    For  example,
     Sort Lines rearranges the lines in the region so that they are in
     alphabetical order.

       Paragraphs   are   defined   in   the   same  way  as  for  the
     paragraph-motion  functions  (See  section   11.2   [Paragraphs],
     page  55.)  and pages are defined as for the page motion commands
     (See section 18 [Pages], page 94.).  All of these  functions  can
     be   undone  by  the  Undo  command  (See  section  24.3  [Undo],
     page 164.).  A numeric argument tells them to sort  into  reverse
     alphabetical order.

       You can rearrange pages to any way you like using the functions
     Make  Page  Permutation Table and Permute Pages From Table.  Make
     Page Permutation Table starts you editing a table containing  the
     first  line  of  each page.  This table is kept in a buffer named
     *Permutation Table*.  You specify the new ordering for the  pages
     by  rearranging  the first lines into the desired order.  You can
     also omit or duplicate  pages  by  omitting  or  duplicating  the
     lines.

       When  you are finished rearranging the lines, use Permute Pages
     From Table to rearrange the entire original file  the  same  way.
     Reselect  the  original  buffer  first.   The permuted version is
     constructed in a buffer named  *Permuted  File*.    The  original
     buffer  is  not  changed.   You can use Insert Buffer to copy the
     data into the original buffer.
     188                                 EMACS Manual for TWENEX Users



                                APPENDIX I
                       PARTICULAR TYPES OF TERMINALS



     I.1 Ideal Keyboards


       An  ideal  EMACS  keyboard  can  be recognized because it has a
     Control key and a Meta key on each side, with another key labeled
     Top above them.

       On an ideal keyboard,  to  type  any  character  in  the  9-bit
     character  set,  hold  down  Control or Meta as appropriate while
     typing the key for the rest of the character.    To  type  C-M-K,
     type K while holding down Control and Meta.

       The  "bit  prefix"  characters  that  you  must  use  on  other
     terminals are also available on terminals with Meta keys, in case
     you find them more convenient or get into habits on  those  other
     terminals.

       To  type  numeric arguments on these keyboards, type the digits
     or minus sign while holding down either Control or Meta.



     I.2 Keyboards with an "Edit" key


       Keyboards with  Edit  keys  probably  belong  to  Datamedia  or
     Teleray terminals.  The Edit and Control keys are a pair of shift
     keys.    Use  the  Control key to type Control characters and the
     Edit key  to  type  Meta  characters.    Thus,  the  9-bit  EMACS
     character  C-M-Q  is  typed by striking the "Q" key while holding
     down "Edit" and "Control".

       While the Edit key is a  true  independent  bit  which  can  be
     combined  with anything else you can type, the Control key really
     means "ASCII control".  Thus, the only Control characters you can
     type are those which exist in ASCII.  This includes C-A, C-B, C-D
     through C-Z, C-], C-@, C-\, and C-^.  C-C can  be  typed  on  the
     terminal  but  it  is  intercepted  by  the  operating system and
     therefore unavailable as EMACS command.   C-[  is  not  available
     because  its  spot  in  ASCII  is  pre-empted  by  Altmode.   The
     corresponding Control-Meta commands are also hard to  type.    If
     you  can't  type  C-;  directly,  then  you also can't type C-M-;
     directly.
     189                                 EMACS Manual for TWENEX Users



       Though  you can't type C-; directly, you can use the bit prefix
     character C-^ and type C-^ ;.  Similarly, while  you  can't  type
     C-M-;,  you  can  use the Control-Meta prefix C-Z and type C-Z ;.
     Because C-^ is itself awkward, we have designed the EMACS command
     set so that the hard-to-type Control  (non-Meta)  characters  are
     rarely needed.

       To  type  numeric  arguments,  it is best to type the digits or
     minus sign while holding down the Edit key.



     I.3 ASCII Keyboards


       An ASCII keyboard allows you to type in one keystroke only  the
     command characters with equivalents in ASCII.  No Meta characters
     are possible, and not all Control characters are possible either.
     The  Control characters which you can type directly are C-A, C-B,
     C-D through C-Z, C-], C-@, C-\, and C-^.  C-C can be typed on the
     terminal but it  is  intercepted  by  the  operating  system  and
     therefore  unavailable  as  EMACS  command.  C-[ is not available
     because its spot in ASCII is pre-empted by Altmode.

       Those characters which you can't type directly can be typed  as
     two  character sequences using the bit prefix characters Altmode,
     C-Z and C-^.  Altmode turns on the Meta bit of the character that
     follows it.  Thus, M-A can be typed as Altmode A,  and  C-M-A  as
     Altmode  C-A.    Altmode  can  be  used  to get almost all of the
     characters that can't be typed directly.  C-Z can be used to type
     any Control-Meta character, including a few that Altmode can't be
     used for because the corresponding non-Meta  character  isn't  on
     the  keyboard.    Thus,  while  you  can't  type C-M-; as Altmode
     Control-;, since there is no Control-; in  ASCII,  you  can  type
     C-M-; as C-Z ;.  The Control (non-Meta) characters which can't be
     typed  directly  require  the  use of C-^, as in C-^ < to get the
     effect of C-<.  Because C-^ by itself is hard to type, the  EMACS
     command  set  is arranged so that most of these non-ASCII Control
     characters are not very important.  Usually  they  have  synonyms
     which  are  easier  to  type.    In fact, in this manual only the
     easier-to-type forms are usually mentioned.

       On ASCII keyboards, you can type a numeric argument  by  typing
     an  Altmode followed by the minus sign and/or digits.  Then comes
     the command for which the argument is  intended.    For  example,
     type  Altmode 5 C-N to move down five lines.  If the command is a
     Meta command, it must have an Altmode of its own, as in Altmode 5
     Altmode F to move forward five words.
     190                                 EMACS Manual for TWENEX Users



       Note  to  customizers:  this  effect  requires  redefining  the
     Meta-digit commands, since the Altmode and the first digit amount
     to a Meta-digit character.  The new definition is ^R Autoarg, and
     the redefinition is done by the default init file.

       If you use numeric arguments very often, and you dislike having
     to start one with an Altmode, you might enjoy using Autoarg mode,
     in which you can specify a numeric argument by  just  typing  the
     digits.  See section 4 [Arguments], page 18, for details.



     I.4 Specifying Terminal Type


       To  make  the  EMACS  display  work  properly, you must specify
     somehow what sort of terminal you are using, because  each  brand
     of  display  terminal requires different control codes.  The best
     way to do this is to tell EXEC, if your terminal is a  type  that
     EXEC knows about.  Otherwise, you must tell EMACS itself.

       To tell EXEC your terminal type, use the TERMINAL TYPE command.
     Type  "?"  after that command to see the alternatives.  Then type
     the alternative which is right, if one of them is.  Your terminal
     may not actually  be  one  of  those  types,  but  may  still  be
     compatible  with  one.   If it is compatible in command codes but
     its screen width or height is not the same, you must specify them
     with the TERMINAL HEIGHT and TERMINAL WIDTH commands.

       If EXEC does not know a terminal  compatible  with  yours,  you
     must tell EMACS yourself.  Use the M-X Set Terminal Type command,
     with a string argument which is an EMACS terminal type name.  Do 


         M-X List Library$TRMTYP


     to  see  a  list  of  the  EMACS  terminal  type  names and their
     meanings.  Even though you set the terminal type explicitly,  the
     screen  width  and  height are still obtained from the system, so
     you must use the EXEC commands TERMINAL HEIGHT and TERMINAL WIDTH
     to specify them, even though you cannot tell  EXEC  the  terminal
     type.

       Restarting  EMACS  as  an  emergency  abort does not forget the
     settings you have established with Set Terminal Type, because  if
     the  system  reports  the  same  information as before, and EMACS
     knows that you overrode the system before, it continues  to  obey
     your Set Terminal Type rather than the system's terminal type.
     191                                 EMACS Manual for TWENEX Users



     I.4.1. More Advanced Terminal Options


       If  your  terminal  is  not  precisely compatible with what you
     specified, you may need to turn off  the  use  of  some  terminal
     features  that don't work right.  This is done by setting several
     FS flags.  See section 22.5 [FS Flags], page 143.

       The flag FS I&D CHAR$ controls the use of the insert and delete
     character operations.  They are used if it is nonzero.  The  flag
     FS  I&D  Line$ controls use of insert and delete line operations.
     They are used if the flag is positive.  If the flag is  negative,
     then  region-scrolling  operations are used instead.  These flags
     are set automatically according to the terminal  type  specified,
     and  reflect  what  is expected to work on that type of terminal.
     You need to change them only if your  terminal  does  not  really
     handle what it is supposed to.

       FS  TTYFCI$  controls whether EMACS thinks you have a Meta key.
     It should be negative for terminals which have  ideal  keyboards,
     and positive for terminals with a Meta key which encode it as the
     200  bit in an 8-bit character.  Frequently terminals of the same
     model differ in whether they have a Meta key.

       You can specify the terminal type  code  number  explicitly  by
     giving  an  argument  to  FS TTY INIT$.  This is how Set Terminal
     Type works.  You can specify the  terminal  width  explicitly  by
     setting FS WIDTH$.


     I.4.2. Padding and Flow Control


       EMACS  normally  turns  off page mode, and causes the system to
     treat the input characters ^S and ^Q as ordinary input instead of
     stopping and starting output.  This is so that they can  be  used
     as  commands.  Then EMACS pads output so as to try to prevent the
     terminal from ever generating ^S and ^Q for  flow  control.    If
     this does not work, you need to fiddle around until it does.

       FS  PAD CHR$ specifies the character used to do padding.  0 and
     127 are useful characters to try.  If it is negative, actual time
     delays  are  used  instead  of  padding  characters.    Otherwise
     compatible terminals often require different padding.  FS OSPEED$
     tells  EMACS  what  the  speed  of  the line is, and controls the
     amount of padding used.  By setting it to a value larger than the
     truth you can increase the amount of padding used.  The  original
     value is obtained from the system, but sometimes the system fails
     to know the correct value.
     192                                 EMACS Manual for TWENEX Users



       If  you cannot manage to make padding work well enough to avoid
     terminal-generated ^S and ^Q characters, then  you  may  need  to
     re-enable  their use for flow control.  Do this by setting FS TTY
     PAGE$ nonzero.  You will have to  do  without  the  C-S  and  C-Q
     commands, though.



     I.5 Upper-case-only Terminals


       On terminals lacking the ability to display or enter lower case
     characters,  a  special input and output case-flagging convention
     has been defined for  editing  files  which  contain  lower  case
     characters.

       The  customary  escape  convention is that a slash prefixes any
     upper case letter; all unprefixed letters are lower case (but see
     below  for  the  "lower  case  punctuation  characters").    This
     convention  is chosen because lower case is usually more frequent
     in files containing any lower case at all.   Upper  case  letters
     are  displayed  with  a  slash  ("/")  in  front.  Typing a slash
     followed by a letter is a  good  way  to  insert  an  upper  case
     letter.    Typing  a  letter without a slash inserts a lower case
     letter.  For the most part, the buffer  will  appear  as  if  the
     slashes had simply been inserted (type /A and it inserts an upper
     case  A,  which  displays as /A), but cursor-motion commands will
     reveal that the slash and the A are really  just  one  character.
     Another  way  to  insert an upper-case letter is to quote it with
     C-Q.

       Note that this escape convention applies only to display of the
     buffer and insertion in  the  buffer.    It  does  not  apply  to
     arguments  of  commands (it is hardly ever useful for them, since
     case is ignored in command names and most  commands'  arguments).
     Case  conversion  is  performed  when  you type commands into the
     minibuffer, but not when the commands are actually executed.

       The ASCII character set includes several punctuation characters
     whose codes fall in the lower case  range  and  which  cannot  be
     typed  or  displayed  on  terminals that cannot handle lower case
     letters.  These are the curly braces ("{" and "}"), the  vertical
     bar  ("|"),  the  tilde ("~"), and the accent grave ("`").  Their
     upper case equivalents are,  respectively,  the  square  brackets
     ("["  and  "]"),  the  backslash  ("\"), the caret ("^"), and the
     atsign ("@").  For these punctuation characters, EMACS  uses  the
     opposite convention of that used for letters: the ordinary, upper
     case punctuations display as and are entered as themselves, while
     the  lower  case  forms are prefixed by slashes.  This is because
     193                                 EMACS Manual for TWENEX Users



     the "lower case" punctuations are much less frequently used.  So,
     to insert an accent grave, type "/@".

       When  the  slash  escape  convention  is  in effect, a slash is
     displayed and entered as two slashes.

       This slash-escape convention is not normally  in  effect.    To
     turn  it  on,  the  TECO  command -1$ (minus one dollar sign, not
     Altmode!) must be executed.  The easiest way to do this is to use
     the minibuffer:  Altmode Altmode -1$ Altmode Altmode.    To  turn
     off the escape convention (for editing a file of all upper case),
     the  command  is  0$  (zero  dollar  sign), or Altmode Altmode 0$
     Altmode Altmode.  If you use such a bad terminal frequently,  you
     can  define  yourself  an  EMACS  extension,  a  command  to turn
     slash-escape on and off.

       The lower case editing feature is actually more  flexible  than
     described  here.  Refer to the TECO commands F$ (dollar sign) and
     FS CASE$, using M-X TECDOC, for full details.  See  section  22.5
     [FS Flags], page 143.



     I.6 The SLOWLY Package for Slow Terminals


       The  SLOWLY  library  is  intended  as  an aid for people using
     display terminals at slow speeds.  It provides means of  limiting
     redisplay  to  smaller  parts  of the screen, and for turning off
     redisplay for a time while you edit.

       To use SLOWLY, do M-X  Load  Library$SLOWLY<cr>,  and  if  your
     terminal  is  a display operating at 1200 baud or less (or if its
     speed is unknown) SLOWLY will set up the commands described here.

       Comments, bugs, and suggestions via Arpanet mail to RWK@MIT-MC,
     or by US mail or phone to the author of this manual.


     I.6.1. Brief Description


       SLOWLY  provides  an  alternate  version  of  the   incremental
     searching  commands  on  C-S and C-R, ^R Edit Quietly on C-X Q, a
     way to shrink the screen at either the top or the bottom on  M-O,
     and  more  flexibility  in  where  minibuffers get displayed.  If
     SLOWLY is  loaded,  it  redefines  these  commands  only  if  the
     terminal speed is 1200 baud or less.
     194                                 EMACS Manual for TWENEX Users



     I.6.2. SLOWLY Commands


       The commands provided are:


     M-O  (^R Set Screen Size) 
                     This  function  reduces  the amount of the screen
                     used for displaying your  text,  down  to  a  few
                     lines  at  the  top  or  the  bottom.   If called
                     without an argument, it will use the same size as
                     last time (or 3 if it hasn't been called before).
                     If given a positive argument, that is taken to be
                     the number of lines to use  at  the  top  of  the
                     screen.    If  given  a  negative argument, it is
                     taken to be the number of lines at the bottom  of
                     the  screen.    If  given  an  argument  of 0, it
                     returns to the use of the  entire  screen.    The
                     section   of   the  screen  that  is  in  use  is
                     (defaultly) delimited by  a  line  of  6  dashes.
                     This  command  sets  the  variable  Short Display
                     Size.

     C-S  (^R Slow Display I-Search) 
                     This function is just like the usual  incremental
                     search,  except  if  the search would run off the
                     screen and cause  a  redisplay,  it  narrows  the
                     screen  to  use  only  a  few lines at the top or
                     bottom of the screen  to  do  the  redisplay  in.
                     When the search is exited, use of the full screen
                     resumes.    The  size  of the window used for the
                     search is the value of the variable  Slow  Search
                     Lines.    If  it is positive, it is the number of
                     lines at top of screen; if negative,  it  is  the
                     number of lines at bottom of screen.  The default
                     is   1.    The  variable  Slow  Search  Separator
                     contains the string used to show the end  of  the
                     search window.  By default it is six dashes.  See
                     section 10 [Search], page 49.

     C-R  (^R Slow Reverse Display I-Search) 
                     This  searches  in  backwards  in the style of ^R
                     Slow Display I-Search.

     C-X Q  (^R Edit Quietly) 
                     This function enters a  recursive  editing  level
                     with  redisplay  inhibited.  This means that your
                     commands are carried out but the screen does  not
                     change.  C-L with no argument redisplays.  So you
     195                                 EMACS Manual for TWENEX Users



                     can  update  the  screen  when  you want to.  Two
                     C-L's in a row clear the  screen  and  redisplay.
                     C-L  with  an argument repositions the window, as
                     usual (See section 15 [C-L], page 87.).  To  exit
                     and resume continuous redisplay, use C-M-Z.


     I.6.3. Minibuffers


       SLOWLY  provides  control  over how minibuffers display on your
     screen.  The variable Minibuffer Size specifies how many lines it
     takes up.  If this is made negative, the minibuffer  will  appear
     at the bottom of the screen instead of the top.  Thus one mode of
     operation  which some people like is to use ^R Set Screen Size to
     set up to not use the bottom 3  lines  of  the  screen,  and  set
     Minibuffer  Size to -3.  This will permanently reserve 3 lines at
     the bottom of the screen for the  minibuffer.    See  section  23
     [Minibuffer], page 157.

       The  variable  Minibuffer  Separator  holds  the string used to
     separate the minibuffer area from the rest of  the  screen.    By
     default, this is six dashes.

       SLOWLY  installs  its  minibuffer by defining the variable MM &
     Minibuffer.


     I.6.4. SLOWLY Options


       The simplest way to run SLOWLY is to simply load  it,  and  use
     the  default  key  assignments,  etc.    SLOWLY sets up those key
     assignments only if your terminal is no faster than 1200 baud.

       If you want SLOWLY to not  set  up  these  things  unless  your
     terminal  is  running  at  300  baud  or  slower  (ugh!), set the
     variable SLOWLY Maximum Speed  to  the  highest  speed  at  which
     SLOWLY is desired.  Put the following in your EMACS init file:  


         300 M.VSLOWLY Maximum Speed$


       If you don't like the command assignments set up by SLOWLY, you
     can  override  them  by  defining  the variable SLOWLY Setup Hook
     before loading SLOWLY.  The value  should  be  TECO  commands  to
     define the command assignments you wish.
     196                                 EMACS Manual for TWENEX Users



       SLOWLY  normally  uses lines of six dashes to separate areas of
     the screen.  You can tell  it  to  use  something  else  instead.
     Minibuffers  use  the value of Minibuffer Separator, searches use
     the value  of  Slow  Search  Separator.    If  one  of  these  is
     unspecified  (the  variable does not exist), the value of Default
     Separator is used.  The separator for small screen mode is always
     the value of Default Separator.  If the value  specified  is  the
     null  string,  a  blank  line is used.  If the value specified is
     zero, nothing (not even a blank line) is used.   This  is  useful
     for  searches,  since you aren't going to be doing any editing in
     the search window.

       Even though SLOWLY does not redefine the  commands  on  a  fast
     terminal,  you  might  wish  to load it only on slow terminals to
     save address space the rest of the time.  This can be done in  an
     init file with 


         fsospeed$-1200:"g m(m.mLoad Library$)SLOWLY$'
     197                                 EMACS Manual for TWENEX Users



                                APPENDIX II
                   USE OF EMACS FROM PRINTING TERMINALS



       While  EMACS  was  designed to be used from a display terminal,
     you can use it effectively from a printing terminal.  You cannot,
     however, learn EMACS using one.

       All EMACS commands have the same editing effect from a printing
     terminal as they do from a display.  All that is different is how
     they try to show what they have done.  EMACS attempts to make the
     same commands that you would use on a display terminal  act  like
     an  interactive  line-editor.    It  does not do as good a job as
     editors designed originally for that  purpose,  but  it  succeeds
     well  enough  to  keep  you  informed  of  what your commands are
     accomplishing, provided you know what they are supposed to do and
     know how they would look on a display.

       The usual buffer display convention for  EMACS  on  a  printing
     terminal  is  that the part of the current line before the cursor
     is printed out, with the cursor following (at the right  position
     in  the  line).    What  follows  the  cursor  on the line is not
     immediately visible, but normally you will have a printout of the
     original contents of the line a little ways back  up  the  paper.
     For  example, if the current line contains the word "FOOBAR", and
     the cursor is after the "FOO", just "FOO"  would  appear  on  the
     paper,  with  the cursor following it.  Typing the C-F command to
     move over the "B" would cause "B" to  be  printed,  so  that  you
     would  now  see  "FOOB"  with  the  cursor  following  it.    All
     forward-motion commands  that  move  reasonably  short  distances
     print out what they move over.

       Backward  motion  is handled in a complicated way.  As you move
     back, the terminal backspaces to the correct  place.    When  you
     stop  moving  back  and  do something else, a linefeed is printed
     first thing so that  the  printing  done  to  reflect  subsequent
     commands  does  not  overwrite  the  text you moved back over and
     become garbled by it.  The  Rubout  command  acts  like  backward
     motion,  but  also  prints a slash over the character rubbed out.
     Other backwards deletion commands act like backward motion;  they
     do not print slashes (it would be an improvement if they did).

       One  command  is  different  on a printing terminal: C-L, which
     normally means  "clear  the  screen  and  redisplay".    With  no
     argument,  it retypes the entire current line.  An argument tells
     it to retype the specified number of  lines  around  the  current
     line.
     198                                 EMACS Manual for TWENEX Users



       On  printing  terminals,  C-S  (^R Incremental Search) does not
     print out the context automatically.  To see what you have  found
     at any stage, type C-L.  This types out the current line but does
     not  exit  the  search.  All the normal facilities of incremental
     searching are available for finding something else if you had not
     found the right place initially.

       Unfortunately, EMACS cannot perfectly attain its goal of making
     the text printed on the current line reflect the current line  in
     the  buffer,  and  keeping  the horizontal position of the cursor
     correct.  One reason is that  it  is  necessary  for  complicated
     commands  to echo, but echoing them screws up the "display".  The
     only solution  is  to  type  a  C-L  whenever  you  have  trouble
     following  things  in your mind.  The need to keep a mental model
     of the text being edited is, of course, the fundamental defect of
     all printing terminal editors.

       Note:  it is possible to make a specific  command  print  on  a
     printing  terminal  in  whatever way is desired, if that is worth
     while.  For example, Linefeed knows  explicitly  how  to  display
     itself,  since the general TECO redisplay mechanism isn't able to
     handle it.  Suggestions for how individual commands  can  display
     themselves  are  welcome,  as long as they are algorithmic rather
     than simply of the form "please do the right thing".
     199                                 EMACS Manual for TWENEX Users



                                 GLOSSARY



     Aborting        Aborting  a  recursive editing level (q.v.) means
                     canceling the command which invoked the recursive
                     editing.  For example, if  you  abort  editing  a
                     message  to  be  sent,  the  message is not sent.
                     Aborting is done  with  the  command  C-].    See
                     section 24.1 [Aborting], page 160.

     Altmode         Altmode  is  a character, labelled Escape on some
                     keyboards.  It is the bit prefix character (q.v.)
                     used to enter Meta-characters when  the  keyboard
                     does  not  have a Meta (q.v.) key.  See section 2
                     [Characters], page 9.  Also, it  delimits  string
                     arguments  to  extended  commands.  See section 5
                     [Extended Commands], page 20.

     Balance Parentheses 
                     EMACS  can  balance   parentheses   manually   or
                     automatically.    You  can  ask  to move from one
                     parenthesis   to   the   matching   one.      See
                     section  20.6.1  [Lists],  page  111.    When you
                     insert a close parenthesis, EMACS  can  show  the
                     matching  open.    See  section  20.4 [Matching],
                     page 106.

     Bit Prefix Character 
                     A  bit  prefix  character  is  a  command   which
                     combines  with  the  next character typed to make
                     one character.  They  are  used  for  effectively
                     typing  commands which the keyboard being used is
                     not  able  to  send.    For  example,  to  use  a
                     Meta-character  when  there is no Meta key on the
                     keyboard, the bit prefix character Altmode (q.v.)
                     is needed.  See section 2 [Characters], page 9.

     Buffer          The buffer is the basic editing unit; one  buffer
                     corresponds  to  one  piece of text being edited.
                     You can have several buffers, but at any time you
                     are editing  only  one,  the  "selected"  buffer,
                     though  two can be visible when you are using two
                     windows.  See section 14 [Buffers], page 83.

     C-              C is an abbreviation for Control, in the name  of
                     a character.  See section 2 [Characters], page 9.

     C-M-            C-M-  is an abbreviation for Control-Meta, in the
     200                                 EMACS Manual for TWENEX Users



                     name of a character.  See section 2 [Characters],
                     page 9.

     Comment         A  comment is text in a program which is intended
                     only for  humans  reading  the  program,  and  is
                     marked specially so that the compiler will ignore
                     it.    EMACS offers special commands for creating
                     and  killing  comments.      See   section   20.5
                     [Comments], page 107.

     Command         A   command   is   a  character  or  sequence  of
                     characters which, when typed by the  user,  fully
                     specifies  one  action  to be performed by EMACS.
                     For example, "X" and "Control-F" and "Meta-X Text
                     Mode<cr>"  are   commands.      See   section   2
                     [Characters],   page  9.    Sometimes  the  first
                     character of a multi-character  command  is  also
                     considered  a  command:  M-X  Text  Mode<cr> is a
                     command (an extended command), and M-X is also  a
                     command  (a  command  to read a function name and
                     invoke the function).  See  section  5  [Extended
                     Commands], page 20.

     Completion      Completion   is   what   EMACS   does   when   it
                     automatically  fills  out  the  beginning  of  an
                     extended  command  name into the full name, or as
                     much  of  it  as  can  be  deduced  for  certain.
                     Completion  occurs  when Altmode, Space or Return
                     is typed.  See  section  5  [Extended  Commands],
                     page 20.

     Connected       A  character  command in EMACS works by calling a
                     function   which   it    is    "connected"    to.
                     Customization   often   involves   connecting   a
                     character to a different function.  See "Dispatch
                     table".  See section 2 [Characters], page 9.

     Continuation Line 
                     When a line of text is longer than the  width  of
                     the screen, it is displayed on more than one line
                     of  screen.    We say that the line is continued,
                     and that all screen lines used but the first  are
                     called  continuation lines.  See section 3 [Basic
                     Editing], page 14.

     Control         Control is the name of a bit which  each  command
                     character   does   or   does   not  contain.    A
                     character's name includes the word Control if the
                     Control bit is part of that character.   Ideally,
     201                                 EMACS Manual for TWENEX Users



                     this  means that the character is typed using the
                     Control key: Control-A is  typed  by  typing  "A"
                     while  holding  down  Control.  On most keyboards
                     the Control key works in  only  some  cases;  the
                     rest  of  the time, a bit prefix character (q.v.)
                     must  be  used.    See  section  2  [Characters],
                     page 9.

     Control-Character 
                     A Control character is a character which includes
                     the Control bit.

     Control-X Command 
                     A  Control-X  command  is a two-character command
                     whose first character  is  the  prefix  character
                     Control-X.  See section 2 [Characters], page 9.

     <cr>            <cr> stands for the carriage return character, in
                     contexts   where   the  word  "Return"  might  be
                     confusing.  See section 2 [Characters], page 9.

     CRLF            CRLF stands for the sequence of  two  characters,
                     carriage  return  followed  by linefeed, which is
                     used to separate lines in files and in text being
                     edited in EMACS.   See  section  2  [Characters],
                     page 9.

     Cursor          The  cursor  is  the  object  on the screen which
                     indicates the position  called  point  (q.v.)  at
                     which  insertion  and  deletion takes place.  The
                     cursor is part of the terminal, and often  blinks
                     or  underlines the character where it is located.
                     See section 1 [Screen], page 5.

     Customization   Customization is making minor changes in the  way
                     EMACS  works.    It  is  often  done  by  setting
                     variables   (See   section   22.3    [Variables],
                     page  138.)  or  by  reconnecting  commands  (See
                     section 5.2 [Functions], page 23.).

     Defun           A defun is a  list  at  the  top  level  of  list
                     structure  in  a  Lisp  program.   It is so named
                     because most such lists are  calls  to  the  Lisp
                     function  defun.    See  section 20.6.2 [Defuns],
                     page 115.

     Delete          This is the label used on some keyboards for  the
                     Rubout character.
     202                                 EMACS Manual for TWENEX Users



     Deletion        Deletion  means  erasing  text without saving it.
                     EMACS deletes text only when it is  expected  not
                     to  be  worth saving (all whitespace, or only one
                     character).  The alternative is  killing  (q.v.).
                     See section 9.1 [Killing], page 42.

     Dispatch Table  The   dispatch   table   is   what   records  the
                     connections (q.v.)  from  command  characters  to
                     functions.    Think  of  a  telephone switchboard
                     connecting   incoming   lines    (commands)    to
                     telephones (functions).  A standard EMACS has one
                     set  of  connections; a customized EMACS may have
                     different   connections.      See   section   5.2
                     [Functions], page 23.

     Echo Area       The  echo  area  is the bottom three lines of the
                     screen,  used  for  echoing  the   arguments   to
                     commands,  for  asking  questions,  and  printing
                     brief messages.  See section 1 [Screen], page 5.

     Echoing         Echoing is acknowledging the receipt of  commands
                     by  displaying  them  (in  the  echo area).  Most
                     programs  other  than  EMACS   echo   all   their
                     commands.    EMACS  never echoes single-character
                     commands; longer commands echo only if you  pause
                     while typing them.

     Error Messages  Error messages are single lines of output printed
                     by EMACS when the user or a TECO program asks for
                     something  impossible.  They appear at the top of
                     the screen and end with a question mark.

     Escape          Escape is the label used on  some  keyboards  for
                     the Altmode character.

     Exiting         Exiting   EMACS   means   returning   to  EMACS's
                     superior,  normally  EXEC.    See   section   6.3
                     [Exiting],  page 29.  Exiting a recursive editing
                     level (q.v.) means  allowing  the  command  which
                     invoked   the   recursive   editing  to  complete
                     normally.  For example,  if  you  are  editing  a
                     message  to be sent, and you exit, the message is
                     sent.

     Extended Command 
                     An extended command is a command  which  consists
                     of  the  character Meta-X followed by the command
                     name (really, the name of a function (q.v.)).  An
                     extended command requires several  characters  of
     203                                 EMACS Manual for TWENEX Users



                     input,  but its name is made up of English words,
                     so it  is  easy  to  remember.    See  section  5
                     [Extended Commands], page 20.

     Extension       Extension  means making changes to EMACS which go
                     beyond the bounds  of  mere  customization.    If
                     customization is moving the furniture around in a
                     room,  extension  is building new furniture.  See
                     the file INFO:CONV.INFO.

     Filling         Filling text means moving text from line to  line
                     so  that all the lines are approximately the same
                     length.  See section 11.4 [Filling], page 59.

     Function        A function is a named subroutine of EMACS.   When
                     you  type  a  command,  EMACS executes a function
                     which  corresponds  to  the  command,   and   the
                     function  does  the work.  Character commands are
                     connected to functions through the dispatch table
                     (q.v.).  Extended commands contain  the  name  of
                     the  function  to  be  called; this allows you to
                     call any  function.    See  section  5  [Extended
                     Commands], page 20.

     Global          The  global  value  of a variable or of a command
                     character definition applies to all  buffers  and
                     all  files  (except  those  which  have their own
                     local values of the variable or definition).  See
                     section 22.3 [Variables], page 138.

     Grinding        Grinding means reformatting a program so that  it
                     is  indented  according  to  its  structure.  See
                     section 20.7 [Grinding], page 115.

     Help            You can type the Help character at  any  time  to
                     ask  what  options  you  have, or to ask what any
                     command does.  See section 7 [Help], page 36.

     Home Directory  Your home directory is the one on which your mail
                     and your init files are stored.  Twenex does  not
                     distinguish   this  from  the  working  directory
                     (connected directory).

     INFO            INFO    is    the    subsystem    for    perusing
                     tree-structured   documentation   files.      The
                     documentation in INFO includes a version  of  the
                     EMACS manual.

     ITS             ITS   is   the  Incompatible  Timesharing  System
     204                                 EMACS Manual for TWENEX Users



                     written  at  the MIT Artificial Intelligence Lab.
                     EMACS was first developed on this system.    Just
                     what  it  is  incompatible  with has changed from
                     year to year.

     Kill Ring       The kill ring is where killed text is saved.   It
                     holds  the last nine or so blocks of killed text.
                     It is called a ring because you can bring any  of
                     the  saved  blocks  to  the front by rotating the
                     ring.  See section 9.2 [Un-Killing], page 44.

     Killing         Killing means erasing text and saving  it  inside
                     EMACS  to  be  recovered  later if desired.  Most
                     EMACS commands  to  erase  text  do  killing,  as
                     opposed  to  deletion  (q.v.).    See section 9.1
                     [Killing], page 42.

     List            A list is, approximately, a text string beginning
                     with an open  parenthesis  and  ending  with  the
                     matching  close  parenthesis.  See section 20.6.1
                     [Lists], page 111.   Actually  there  are  a  few
                     complications  to the syntax, which is controlled
                     by the syntax table (See section  22.4  [Syntax],
                     page 140.).

     Local           A  local  value  of  a  variable  or of a command
                     character definition applies to only  one  buffer
                     or file.  See section 22.7 [Locals], page 151.

     Local Modes List 
                     A  local  modes list appears in a file to specify
                     local values for variables or  command  character
                     definitions,  to be in effect while visiting that
                     file.

     M-              M- in the name of a character is an  abbreviation
                     for Meta.

     M-X             M-X  is  the  character  which begins an extended
                     command (q.v.).  Extended commands have  come  to
                     be   known   also   as  "M-X  commands",  and  an
                     individual extended command is often referred  to
                     as  "M-X  such-and  such".   See section 5 [M-X],
                     page 20.

     Major Mode      The major modes are a mutually exclusive  set  of
                     options  which  configure  EMACS  for  editing  a
                     certain sort of text.  Ideally, each  programming
                     language   has   its   own   major   mode.    See
                     section 20.1 [Major Modes], page 102.
     205                                 EMACS Manual for TWENEX Users



     Mark            The  mark points, invisibly, to a position in the
                     text.  Many commands operate on the text  between
                     point  and  the mark (known as the region, q.v.).
                     See section 8 [Mark], page 39.

     Meta            Meta refers to the Meta key.  A character's  name
                     includes  the  word  Meta if the Meta key must be
                     held down in order to type  the  character.    If
                     there  is no Meta key, then the Altmode character
                     is used as a  prefix  instead.    See  section  2
                     [Characters], page 9.

     Meta Character  A  Meta  character  is  one  whose character code
                     includes the Meta bit.  These characters  can  be
                     typed  only by means of a Meta key or by means of
                     the metizer command (q.v.).

     Metizer         The metizer is another term for  the  bit  prefix
                     character  for  the  Meta  bit;  namely,  Altmode
                     (q.v.).

     Minibuffer      The minibuffer is a facility for editing and then
                     executing  a  TECO  program.    See  section   23
                     [Minibuffer], page 157.

     Minor mode      A  minor  mode  is  an  optional feature of EMACS
                     which can be switched on or off independently  of
                     all  other features.  Each minor mode is both the
                     name of an option  (q.v.)  and  the  name  of  an
                     extended   command   to  set  the  option.    See
                     section 22.1 [Minor Modes], page 134.

     MM-command      This  is  an  obsolete  synonym   for   "extended
                     command".

     Mode line       The  mode line is a line just above the echo area
                     (q.v.),  used  for  status  information.      See
                     section 1.1 [Mode Line], page 6.

     Narrowing       Narrowing  means  limiting editing to only a part
                     of the text in the buffer.    Text  outside  that
                     part  is  inaccessible  to  the  user  until  the
                     boundaries are widened again,  but  it  is  still
                     there,  and  saving  the  file saves it all.  See
                     section 17 [Narrowing], page 93.

     Node            The node is the unit of structure of INFO  (q.v.)
                     files.  When referring to documentation contained
                     only  in INFO files, we sometimes refer to a node
     206                                 EMACS Manual for TWENEX Users



                     of  a  specific  name,  in a specific file, as in
                     "See the file INFO:CONV.INFO, node Hooks".

     Numeric Argument
                     A numeric argument is a number specified before a
                     command to change  the  effect  of  the  command.
                     Often  the  numeric  argument  serves as a repeat
                     count.    See  section  4  [Numeric   Arguments],
                     page 18.

     Option          An option is a variable which exists to be set by
                     the   user   to  change  the  behavior  of  EMACS
                     commands.    This  is  an  important  method   of
                     customization.    See  section  22.3 [Variables],
                     page 138.

     Parse           We say that EMACS parses words or expressions  in
                     the  text being edited.  Really, all it knows how
                     to do  is  find  the  other  end  of  a  word  or
                     expression.  See section 22.4 [Syntax], page 140.

     Point           Point  is  the  place  in  the  buffer  at  which
                     insertion  and  deletion   occur.      Point   is
                     considered  to  be between two characters, not at
                     one character.    The  terminal's  cursor  (q.v.)
                     indicates  the  location of point.  See section 3
                     [Basic], page 14.

     Prefix Character 
                     A  prefix  character  is  a  command  whose  sole
                     function is to introduce a set of multi-character
                     commands.      Control-X   (q.v.)   is  a  prefix
                     character.  The bit prefix characters (q.v.)  are
                     other examples.

     Prompt          A  prompt is text printed in the echo area to ask
                     the user for input.  Printing a prompt is  called
                     "prompting".    EMACS  can  prompt when a command
                     requires an argument, or  when  only  part  of  a
                     command has been typed.  However, the prompt will
                     not  appear unless you pause in your typing.  See
                     section 5 [Extended Commands], page 20.

     Q-Registers     Q-registers are internal TECO variables which can
                     be used by EMACS or by the user to store text  or
                     numbers.      See  section  9.3.2  [Q-Registers],
                     page 48.

     Quitting        Quitting means interrupting a  command  which  is
     207                                 EMACS Manual for TWENEX Users



                     partially  typed  in or already executing.  It is
                     done  with   Control-G.      See   section   24.1
                     [Quitting], page 160.

     Quoting         Quoting  means depriving a character of its usual
                     special significance.  It is  usually  done  with
                     Control-Q.  What constitutes special significance
                     depends  on  the  context and on convention.  For
                     example, an  "ordinary"  character  as  an  EMACS
                     command  inserts  itself;  so  you can insert any
                     other character, such as Rubout, by quoting it as
                     in Control-Q Rubout.    Not  all  contexts  allow
                     quoting.  See section 3 [Basic Editing], page 14.

     Recursive Editing Level 
                     A  recursive  editing  level  is a state in which
                     part of  the  execution  of  a  command  involves
                     asking the user to edit some text.  This text may
                     or  may  not be the same as the text to which the
                     command was applied.   The  mode  line  indicates
                     recursive  editing  levels  with  square brackets
                     ("["  and  "]").    See  section  6.2  [Recursive
                     Editing Level], page 28.

     Redisplay       Redisplay  is the process of correcting the image
                     on the screen to correspond to changes that  have
                     been   made  in  the  text  being  edited.    See
                     section 1 [Screen], page 5.

     Region          The region is the text between point  (q.v.)  and
                     the mark (q.v.).  The terminal's cursor indicates
                     the location of point, but the mark is invisible.
                     Many  commands operate on the text of the region.
                     See section 8 [Mark], page 39.

     Return          Return is the carriage return character, used  as
                     input  to  EMACS.  Return is used as a command in
                     itself to insert  a  line  separator.    It  also
                     terminates  arguments  for  most  commands.   See
                     section 2 [Characters], page 9.

     Rubout          Rubout  is  a   character,   sometimes   labelled
                     "Delete".   It is used as a command to delete one
                     character of text.  It also deletes one character
                     when an EMACS command is reading an argument.

     S-expression    An s-expression is the basic  syntactic  unit  of
                     Lisp:    either a list, or a symbol containing no
                     parentheses (actually, there are a few exceptions
     208                                 EMACS Manual for TWENEX Users



                     to  the  rule, based on the syntax of Lisp).  See
                     section 20.6.1 [Lists], page 111.

     Selecting       Selecting a buffer (q.v.)  means  making  editing
                     commands  apply  to that buffer as opposed to any
                     other.  At all times one buffer is  selected  and
                     editing   takes   place  in  that  buffer.    See
                     section 14 [Buffers], page 83.

     Self-documentation 
                     Self-documentation is the feature of EMACS  which
                     can tell you what any command does, or give you a
                     list  of  all  commands  related  to  a topic you
                     specify.  You ask for self-documentation with the
                     Help character.  See section 7 [Help], page 36.

     String Argument 
                     A string argument is an  argument  which  follows
                     the command name in an extended command.  In "M-X
                     Apropos$word<cr>", "Word" is a string argument to
                     the  Apropos  command.    See section 5 [Extended
                     Commands], page 20.

     Subsystem       A subsystem of EMACS is an EMACS  command  which,
                     itself,  reads commands and displays the results.
                     Examples  are  INFO,  which   is   for   perusing
                     documentation;   DIRED,   which  is  for  editing
                     directories; BABYL,  which  is  for  reading  and
                     editing  mail.  The word "subsystem" implies that
                     it offers many independent commands which can  be
                     used  freely.  If an EMACS function asks specific
                     questions, we do not call it a subsystem.

                     Usually  the  subsystem  continues  in  operation
                     until a specific command to exit (usually "Q") is
                     typed.    The  commands  for  a  subsystem do not
                     usually resemble ordinary EMACS  commands,  since
                     editing  text  is  not  their  purpose.  The Help
                     character   should   elicit    the    subsystem's
                     documentation.    See  section  6.1 [Subsystems],
                     page 27.

     Syntax Table    The syntax table tells EMACS which characters are
                     part of a word,  which  characters  balance  each
                     other  like  parentheses,  etc.  See section 22.4
                     [Syntax], page 140.

     Tailoring       This is a synonym for customization (q.v.).
     209                                 EMACS Manual for TWENEX Users



     TECO Search String 
                     A TECO search string is a sort of pattern used by
                     the  TECO  search  command,  and  also by various
                     EMACS commands which use the TECO search command.
                     See section 19.3 [TECO search strings], page 101.

     Top Level       Top level is the normal state of EMACS, in  which
                     you  are  editing  the  text of the file you have
                     visited.  You are at top level whenever  you  are
                     not  in  a recursive editing level or a subsystem
                     (q.v.).

     Twenex          Twenex is the operating system which DEC likes to
                     call "TOPS-20".  However, a person should not  be
                     forced  to  call a system "tops" unless he really
                     thinks so.  Come now, DEC, don't you think people
                     will praise your products voluntarily?  The  name
                     "Twenex"  is also more appropriate because Twenex
                     was developed from the Tenex system, and  has  no
                     relationship  to  "TOPS-10".    What's more, it's
                     very euphonious.

     Typeout         Typeout  is  a  message,  printed  by  an   EMACS
                     command,  which overwrites the area normally used
                     for displaying the text being edited,  but  which
                     does  not  become  part  of the text.  Typeout is
                     used for messages which might be too long to  fit
                     in the echo area (q.v.).  See section 1 [Screen],
                     page 5.

     Undo            Undo  is a command which undoes the effect on the
                     buffer of a previous command.  Only some commands
                     are undoable and only the  most  recent  undoable
                     command  can be undone.  See section 24.3 [Undo],
                     page 164.

     Un-killing      Un-killing  means  reinserting  text   previously
                     killed.   It can be used to undo a mistaken kill,
                     or for copying or moving text.  See  section  9.2
                     [Un-killing], page 44.

     User Name       Your user name is the name you use to log in.  It
                     identifies you as opposed to all the other users.
                     It may be the same as your home directory's name.

     Variable        A  variable is a name with which EMACS associates
                     a value, which can be a number or a string.   See
                     section   22.3   [Variables],  page  138.    Some
                     variables ("options") are intended to be used  or
     210                                 EMACS Manual for TWENEX Users



                     set  by  the user; others are for purely internal
                     purposes.

     Virtual Boundaries
                     The virtual  boundaries  delimit  the  accessible
                     part  of  the buffer, when narrowing (q.v.) is in
                     effect.  See section 17 [Narrowing], page 93.

     Visiting        Visiting a file means loading its contents into a
                     buffer (q.v.) where they  can  be  edited.    See
                     section 13.1 [Visiting], page 71.

     Wall Chart      The  wall  chart  is a very brief EMACS reference
                     sheet giving one line of information  about  each
                     short command.

     Whitespace      Whitespace  is  any run of consecutive formatting
                     characters   (space,   tab,   carriage    return,
                     linefeed, and backspace).

     Widening        Widening  is the operation which undoes narrowing
                     (q.v.).  See section 17 [Narrowing], page 93.

     Window          A window is a region of the screen in which  text
                     being  edited is displayed.  EMACS can divide the
                     screen  into  two  windows.    See   section   16
                     [Windows],  page 90.  "The window" also means the
                     position in the buffer which is at the top of the
                     screen.  See section 15 [Display], page 87.

     Working Directory 
                     This is another term for the  directory  you  are
                     connected  to,  a  term  which  is  used on other
                     systems besides Twenex.

     Yanking         This is a synonym for un-killing (q.v.).

     ^R              The string "^R" is the beginning of many function
                     names.  See section 5.2 [Functions], page 23.

     ^R Mode         ^R mode is the real time editing  mode  of  TECO.
                     EMACS always operates in this mode.
     211                                 EMACS Manual for TWENEX Users



                              COMMAND SUMMARY



       This  summary contains brief descriptions with cross references
     for all commands, grouped by topic.  Within each topic, they  are
     in  alphabetical order.  Our version of alphabetical order places
     non-control non-meta characters first, then  control  characters,
     then  meta  characters,  then control-meta characters.  Control-X
     and Meta-X commands come last.    Not  all  Meta-X  commands  are
     included.



     Prefix Characters


     Altmode   (^R Prefix Meta) 
                     Altmode  is a bit prefix character which turns on
                     the Meta  bit  in  the  next  character.    Thus,
                     Altmode  F  is equivalent to the single character
                     Meta-F, which is useful if your keyboard  has  no
                     Meta key.  See section 2 [Characters], page 9.

     Control-^   (^R Prefix Control) 
                     Control-^  is  a bit prefix character which turns
                     on the Control bit in  the  following  character.
                     Thus,  Control-^  <  is  equivalent to the single
                     character Control-<.  See section 2 [Characters],
                     page 9.

     Control-Z   (^R Prefix Control-Meta) 
                     Control-Z is a bit prefix character  which  turns
                     on  the  Control  bit  and  the  Meta  bit in the
                     following  character.    Thus,  Control-Z  ;   is
                     equivalent to the single character Control-Meta-;
                     .  See section 2 [Characters], page 9.

     Control-Q   (^R Quoted Insert) 
                     Control-Q  inserts the following character.  This
                     is a way of inserting control  characters.    See
                     section 3 [Basic Editing], page 14.

     Control-U   (^R Universal Argument) 
                     Control-U is a prefix for numeric arguments which
                     works  the  same on all terminals.  See section 4
                     [Arguments], page 18.

     Control-X 
     212                                 EMACS Manual for TWENEX Users



                     Control-X  is  a  prefix character which begins a
                     two-character  command.    Each  combination   of
                     Control-X  and  another character is a "Control-X
                     command".  Individual Control-X  commands  appear
                     in this summary according to their uses.

     Meta-X   (^R Extended Command) 
                     Meta-X  is a prefix character which introduces an
                     extended command name.  See section  5  [Meta-X],
                     page 20.

     Control-Meta-X   (^R Instant Extended Command) 
                     Control-Meta-X  is  another  way  of  invoking an
                     extended  command.    Instead  of   putting   the
                     arguments  in  the same line as the command name,
                     the command reads  the  arguments  itself.    See
                     section 5 [Meta-X], page 20.

     Control-digits, Meta-digits, Control-Meta-digits 
                     These all specify a numeric argument for the next
                     command.  See section 4 [Arguments], page 18.

     Control-Minus, Meta-Minus, Control-Meta-Minus 
                     These  all  begin a negative numeric argument for
                     the next command.   See  section  4  [Arguments],
                     page 18.



     Simple Cursor Motion


     Control-A   (^R Beginning of Line, built-in function) 
                     Control-A  moves  to  the  beginning of the line.
                     See section 3 [Basic Editing], page 14.

     Control-B   (^R Backward Character, built-in function) 
                     Control-B moves  backward  one  character.    See
                     section 3 [Basic Editing], page 14.

     Control-E   (^R End of Line, built-in function) 
                     Control-E  moves  to  the  end  of the line.  See
                     section 3 [Basic Editing], page 14.

     Control-F   (^R Forward Character, built-in function) 
                     Control-F  moves  forward  one  character.    See
                     section 3 [Basic Editing], page 14.

     Control-H   (^R Backward Character, built-in function) 
     213                                 EMACS Manual for TWENEX Users



                     Control-H  moves  backward  one  character.   See
                     section 3 [Basic Editing], page 14.

     Control-N   (^R Down Real Line) 
                     Control-N moves vertically straight  down.    See
                     section 3 [Basic Editing], page 14.

     Control-P   (^R Up Real Line) 
                     Control-P  moves  vertically  straight  up.   See
                     section 3 [Basic Editing], page 14.

     Control-R   (^R Reverse Search) 
                     Control-R  is   like   Control-S   but   searches
                     backward.  See section 10 [Search], page 49.

     Control-S   (^R Incremental Search) 
                     Control-S  searches  for  a string, terminated by
                     Altmode.    It  searches  as  you  type.      See
                     section 10 [Search], page 49.

     Meta-<   (^R Goto Beginning) 
                     Meta-< moves to the beginning of the buffer.  See
                     section 3 [Basic Editing], page 14.

     Meta->   (^R Goto End) 
                     Meta->  moves  to  the  end  of  the buffer.  See
                     section 3 [Basic Editing], page 14.

     Control-X Control-N   (^R Set Goal Column) 
                     Control-X Control-N sets a  horizontal  goal  for
                     the Control-N and Control-P commands.  When there
                     is a goal, those commands try to move to the goal
                     column instead of straight up or down.



     Lines


     Return   (^R CRLF) 
                     Return inserts a line separator, or advances onto
                     a  following  blank  line.   See section 3 [Basic
                     Editing], page 14.

     Control-O   (^R Open Line, built-in function) 
                     Control-O inserts a  line  separator,  but  point
                     stays  before it.  See section 3 [Basic Editing],
                     page 14.
     214                                 EMACS Manual for TWENEX Users



     Meta-=   (^R Count Lines Region) 
                     Meta-=  prints  the number of lines between point
                     and mark.  See section 8 [Mark], page 39.

     Control-X Control-O   (^R Delete Blank Lines) 
                     Control-X Control-O deletes all but  one  of  the
                     blank lines around point.  If the current line is
                     not  blank,  all  blank  lines  following  it are
                     deleted.  See section 3 [Basic Editing], page 14.

     Control-X Control-T   (^R Transpose Lines) 
                     Control-X Control-T transposes  the  contents  of
                     two  lines.    See  section  12  [Fixing  Typos],
                     page 67.



     Killing and Un-killing


     Rubout   (^R Backward Delete Character, built-in function) 
                     Rubout  deletes  the  previous  character.    See
                     section 3 [Basic Editing], page 14.

     Control-Rubout   (^R   Backward  Delete  Hacking  Tabs,  built-in
                     function) 
                     Control-Rubout deletes  the  previous  character,
                     but converts a tab character into several spaces.
                     See section 20.6 [Lisp], page 110.

     Control-D   (^R Delete Character, built-in function) 
                     Control-D   deletes  the  next  character.    See
                     section 3 [Basic Editing], page 14.

     Control-K   (^R Kill Line) 
                     Control-K kills to the end of the  line,  or,  at
                     the end of a line, kills the line separator.  See
                     section 9.1 [Killing], page 42.

     Control-W   (^R Kill Region) 
                     Control-W  kills  the  region,  the  text between
                     point and the mark.  See section  9.1  [Killing],
                     page 42.  See section 8 [Region], page 39.

     Control-Y   (^R Un-kill) 
                     Control-Y  reinserts  the  last  saved  block  of
                     killed  text.    See  section  9.2  [Un-Killing],
                     page 44.
     215                                 EMACS Manual for TWENEX Users



     Meta-W   (^R Copy Region) 
                     Meta-W  saves  the  region  as  if it were killed
                     without  removing  it  from  the  buffer.     See
                     section 9.2 [Un-Killing], page 44.

     Meta-Y   (^R Un-kill Pop) 
                     Meta-Y  rolls  the  kill  ring  to reinsert saved
                     killed text older than the most recent kill.  See
                     section 9.2 [Un-Killing], page 44.

     Control-Meta-W   (^R Append Next Kill) 
                     Control-Meta-W causes  an  immediately  following
                     kill command to append its text to the last saved
                     block   of   killed   text.     See  section  9.2
                     [Un-Killing], page 44.

     Control-X G   (^R Get Q-reg) 
                     Control-X G inserts in the buffer the contents of
                     a q-register.  See section  9.3.2  [Q-registers],
                     page 48.

     Control-X T   (^R Transpose Regions) 
                     Control-X  T  transposes  two  arbitrary  regions
                     defined by point and the last three marks.    See
                     section 12 [Fixing Typos], page 67.

     Control-X X   (^R Put Q-reg) 
                     Control-X X inserts in the buffer the contents of
                     a  q-register.   See section 9.3.2 [Q-registers],
                     page 48.

     M-X Overwrite Mode 
                     M-X Overwrite Mode turns  Overwrite  mode  on  or
                     off.    In  Overwrite  mode,  printing characters
                     overwrite existing text instead of pushing it  to
                     the  right.    See  section  22.1  [Minor Modes],
                     page 134.



     Scrolling and Display Control


     Control-Alpha   (SAIL Character Mode) 
                     Control-Alpha toggles SAIL Character mode.   When
                     this mode is on, control characters in the buffer
                     are  displayed  as  themselves.    See  section 1
                     [Screen], page 5.
     216                                 EMACS Manual for TWENEX Users



     Control-L   (^R New Window) 
                     Control-L  clears the screen and centers point in
                     it.  With an argument, it  can  put  point  on  a
                     specific  line  of  the  screen.   See section 15
                     [Display], page 87.

     Control-V   (^R Next Screen) 
                     Control-V scrolls the text upward by a  screenful
                     or  several  lines.    See  section 15 [Display],
                     page 87.

     Meta-R   (^R Move to Screen Edge) 
                     Meta-R moves point to beginning of the text on  a
                     specified  line  of  the  screen.  See section 15
                     [Display], page 87.

     Meta-V   (^R Previous Screen) 
                     Meta-V scrolls downward by a screenful or several
                     lines.  See section 15 [Display], page 87.

     Control-Meta-R   (^R Reposition Window) 
                     Control-Meta-R tries to center on the screen  the
                     function  or  paragraph  you are looking at.  See
                     section 15 [Display], page 87.

     Control-Meta-V   (^R Scroll Other Window) 
                     Control-Meta-V scrolls the  other  window  up  or
                     down,  when  you  are  in  two  window mode.  See
                     section 16 [Windows], page 90.

     M-X View Buffer 
                     M-X  View  Buffer  skips  through  a  buffer   by
                     screenfuls.  See section 15 [Display], page 87.

     M-X View File 
                     M-X  View  File  lets  you  move  through  a file
                     sequentially by screenfuls forward and back.  See
                     section 13.7 [View File], page 81.



     The Mark and the Region


     Control-Space   (^R Set/Pop Mark) 
                     Control-Space sets  the  mark  or  moves  to  the
                     location  of  the  mark.    See section 8 [Mark],
                     page 39.
     217                                 EMACS Manual for TWENEX Users



     Control-<   (^R Mark Beginning) 
                     Control-<  sets  the mark at the beginning of the
                     buffer.  See section 8 [Mark], page 39.

     Control->   (^R Mark End) 
                     Control-> sets the mark at the end of the buffer.
                     See section 8 [Mark], page 39.

     Control-@   (^R Set/Pop Mark) 
                     Control-@ sets the mark or moves to the  location
                     of the mark.  See section 8 [Mark], page 39.

     Meta-@   (^R Mark Word) 
                     Meta-@ puts the mark at the end of the next word.
                     See section 11.1 [Words], page 53.

     Meta-H   (^R Mark Paragraph) 
                     Meta-H   puts  point  at  the  beginning  of  the
                     paragraph  and  the  mark  at  the  end.      See
                     section 11.2 [Sentences], page 55.

     Control-Meta-@   (^R Mark Sexp) 
                     Control-Meta-@  puts  the  mark at the end of the
                     next s-expression.  See section  20.6.1  [Lists],
                     page 111.

     Control-Meta-H   (^R Mark Defun) 
                     Control-Meta-H puts point at the beginning of the
                     current  Defun  and  the  mark  at  the end.  See
                     section 20.6.2 [Defuns], page 115.

     Control-X H   (^R Mark Whole Buffer) 
                     Control-X H puts point at the  beginning  of  the
                     buffer  and  the  mark at the end.  See section 8
                     [Mark], page 39.

     Control-X Control-P   (^R Mark Page) 
                     Control-X Control-P puts point at  the  beginning
                     of the current page and the mark at the end.  See
                     section 18 [Pages], page 94.

     Control-X Control-X   (^R Exchange Point and Mark) 
                     Control-X Control-X sets point where the mark was
                     and  the  mark  where  point  was.  See section 8
                     [Mark], page 39.
     218                                 EMACS Manual for TWENEX Users



     Whitespace and Indentation


     Tab   (^R Indent According to Mode) 
                     Tab either adjusts the indentation of the current
                     line  or  inserts some indentation, in a way that
                     depends on the major  mode.    See  section  20.3
                     [Indenting Programs], page 104.  See section 11.3
                     [Indenting Text], page 57.

     Linefeed   (^R Indent New Line) 
                     Linefeed is equivalent to Return followed by Tab.
                     It moves to a new line and indents that line.  If
                     done  in the middle of a line, it breaks the line
                     and  indents  the   new   second   line.      See
                     section 11.3 [Indenting Text], page 57.

     Meta-Tab   (^R Tab to Tab Stop) 
                     Meta-Tab  indents  to  the next EMACS-defined tab
                     stop.    See  section  11.3   [Indenting   Text],
                     page 57.

     Meta-M   (^R Back to Indentation) 
                     Meta-M  positions  the cursor on the current line
                     after  any  indentation.     See   section   11.3
                     [Indenting Text], page 57.

     Meta-\   (^R Delete Horizontal Space) 
                     Meta-\  deletes  all  spaces  and  tab characters
                     around point.  See section 11.3 [Indenting Text],
                     page 57.

     Meta-^   (^R Delete Indentation) 
                     Meta-^ joins two lines, replacing the indentation
                     of the  second  line  with  zero  or  one  space,
                     according  to  the  context.    See  section 11.3
                     [Indenting Text], page 57.

     Control-Meta-O   (^R Split Line) 
                     Control-Meta-O  breaks  a  line,  preserving  the
                     horizontal   position   of  the  second  half  by
                     indenting it to its old starting position.    See
                     section 11.3 [Indenting Text], page 57.

     Control-Meta-\   (^R Indent Region) 
                     Control-Meta-\  indents  each line in the region,
                     either by applying Tab to each line, or by giving
                     each the same specified  amount  of  indentation.
                     See section 11.3 [Indenting Text], page 57.
     219                                 EMACS Manual for TWENEX Users



     Control-X Tab   (^R Indent Rigidly) 
                     Control-X  Tab shifts all the lines in the region
                     right or left the same number of  columns.    See
                     section 11.3 [Indenting Text], page 57.

     M-X Edit Indented Text 
                     M-X Edit Indented Text enters a recursive editing
                     level  designed  for  editing  text in which each
                     line is indented.  See  section  11.4  [Filling],
                     page 59.

     M-X Edit Tab Stops 
                     M-X  Edit  Tab  Stops lets you edit the tab stops
                     used by ^R Tab to Tab Stop.    See  section  11.3
                     [Indenting Text], page 57.

     M-X Edit Tabular Text 
                     M-X  Edit Tabular Text enters a recursive editing
                     level designed for editing  text  arranged  in  a
                     table.  See section 11.4 [Filling], page 59.

     M-X Indent Tabs Mode 
                     M-X Indent Tabs Mode turns Indent Tabs mode on or
                     off.      When   Indent  Tabs  mode  is  on,  the
                     indentation  commands  use  tab  characters   for
                     indentation  whenever  possible.   Otherwise they
                     use only spaces.  See section 22.1 [Minor Modes],
                     page 134.

     M-X Tabify 
                     M-X Tabify converts spaces after  point  to  tabs
                     when  that  can  be  done  without  changing  the
                     appearance.  See section 11.3  [Indenting  Text],
                     page 57.

     M-X Untabify 
                     M-X  Untabify  converts  all  tabs after point to
                     spaces.  A numeric argument says  how  far  apart
                     the  tab  stops are, which is good for converting
                     files brought from  systems  with  tab  stops  at
                     intervals   other  than  8.    See  section  11.3
                     [Indenting Text], page 57.
     220                                 EMACS Manual for TWENEX Users



     Words, Sentences and Paragraphs


     Meta-A   (^R Backward Sentence) 
                     Meta-A  moves  to  the beginning of the sentence.
                     See section 11.2 [Sentences], page 55.

     Meta-B   (^R Backward Word) 
                     Meta-B moves backward one word.  See section 11.1
                     [Words], page 53.

     Meta-D   (^R Kill Word) 
                     Meta-D kills one word forward.  See section  11.1
                     [Words], page 53.

     Meta-E   (^R Forward Sentence) 
                     Meta-E  moves  to  the  end of the sentence.  See
                     section 11.2 [Sentences], page 55.

     Meta-F   (^R Forward Word) 
                     Meta-F moves forward one word.  See section  11.1
                     [Words], page 53.

     Meta-H   (^R Mark Paragraph) 
                     Meta-H  puts  point  at  the front of the current
                     paragraph  and  the  mark  at  the  end.      See
                     section 11.2 [Sentences], page 55.

     Meta-K   (^R Kill Sentence) 
                     Meta-K  kills  to  the  end of the sentence.  See
                     section 11.2 [Sentences], page 55.

     Meta-T   (^R Transpose Words) 
                     Meta-T transposes two  consecutive  words.    See
                     section 11.1 [Words], page 53.

     Meta-[   (^R Backward Paragraph) 
                     Meta-[  moves  to the beginning of the paragraph.
                     See section 11.2 [Sentences], page 55.

     Meta-]   (^R Forward Paragraph) 
                     Meta-] moves to the end of the  paragraph.    See
                     section 11.2 [Sentences], page 55.

     Meta-Rubout   (^R Backward Kill Word) 
                     Meta-Rubout   kills   the  previous  word.    See
                     section 11.1 [Words], page 53.

     Control-X Rubout   (^R Backward Kill Sentence) 
     221                                 EMACS Manual for TWENEX Users



                     Control-X  Rubout  kills back to the beginning of
                     the sentence.    See  section  11.2  [Sentences],
                     page 55.

     M-X Atom Word Mode 
                     M-X  Atom  Word  Mode  turns Atom Word mode on or
                     off.   In  Atom  Word  mode,  the  word  commands
                     consider  an  entire  Lisp atom as one word.  See
                     section 22.1 [Minor Modes], page 134.

     M-X Edit Syntax Table 
                     M-X Edit Syntax Table  allows  you  to  edit  the
                     syntax  table  for word and list delimiters.  See
                     section 22.4 [Syntax Table], page 140.



     Filling Text


     Meta-G   (^R Fill Region) 
                     Meta-G fills the region, treating it (usually) as
                     one  paragraph.    See  section  11.4  [Filling],
                     page 59.

     Meta-Q   (^R Fill Paragraph) 
                     Meta-Q  fills the current or next paragraph.  See
                     section 11.4 [Filling], page 59.

     Meta-S   (^R Center Line) 
                     Meta-S   centers   the   current   line.      See
                     section 11.4 [Filling], page 59.

     Control-X .   (^R Set Fill Prefix) 
                     Control-X  .  specifies the fill prefix, which is
                     used for filling indented text.  See section 11.4
                     [Filling], page 59.

     Control-X F   (^R Set Fill Column) 
                     Control-X F sets the variable Fill  Column  which
                     controls  the  margin  for filling and centering.
                     See section 11.4 [Filling], page 59.

     M-X Auto Fill Mode 
                     M-X Auto Fill Mode turns Auto  Fill  mode  on  or
                     off.    In  Auto Fill mode, long lines are broken
                     between words automatically.   See  section  11.4
                     [Filling], page 59.
     222                                 EMACS Manual for TWENEX Users



     Exiting, Quitting


     Control-G 
                     Control-G  quits, interrupting a running command,
                     or discarding any partially typed command.    See
                     section 24.1 [Quitting], page 160.

     Control-]   (Abort Recursive Edit) 
                     Control-]  aborts a recursive editing level; that
                     is to say, exits it without allowing the  command
                     which  invoked  it  to  finish.  See section 24.1
                     [Quitting], page 160.

     Control-Meta-Z   (^R Exit, built-in function) 
                     Control-Meta-Z exits  from  a  recursive  editing
                     level  and  allows  the command which invoked the
                     recursive editing level to finish.  At top level,
                     it exits from EMACS to its superior  fork.    See
                     section 6.3 [Exiting], page 29.

     Control-X Control-Z   (^R Return to Superior) 
                     Control-X  Control-Z  returns  from  EMACS to its
                     superior fork, even if EMACS is currently  inside
                     a   recursive  editing  level.    In  that  case,
                     re-entering EMACS will find it still  within  the
                     recursive   editing   level.    See  section  6.3
                     [Exiting], page 29.

     M-X Compile 
                     M-X Compile recompiles the file you are visiting,
                     in a manner that depends on the major mode.   See
                     section 20.2 [Compile], page 103.

     M-X Rerun CCL 
                     M-X  Rerun  CCL  exits from EMACS and repeats the
                     most recent COMPILE-class command  in  the  EXEC.
                     See section 20 [Programs], page 102.

     M-X Top Level 
                     M-X  Top  Level  returns  to  the top level EMACS
                     command loop  or  to  TECO.    See  section  24.1
                     [Quitting], page 160.

     M-X Undo 
                     M-X Undo retracts the last undoable change to the
                     buffer.  See section 24.2 [Lossage], page 161.
     223                                 EMACS Manual for TWENEX Users



     Pages


     Control-X L   (^R Count Lines Page) 
                     Control-X  L  prints  the  number of lines on the
                     current page, and how many come before point  and
                     how  many  come  after.   See section 18 [Pages],
                     page 94.

     Control-X P   (^R Narrow Bounds to Page) 
                     Control-X P narrows the virtual boundaries to the
                     current  page.    See  section  17   [Narrowing],
                     page 93.

     Control-X [   (^R Previous Page) 
                     Control-X  [  moves backward to the previous page
                     boundary.  See section 18 [Pages], page 94.

     Control-X ]   (^R Next Page) 
                     Control-X  ]  moves  forward  to  the  next  page
                     boundary.  See section 18 [Pages], page 94.

     Control-X Control-P   (^R Mark Page) 
                     Control-X  Control-P  puts point at the beginning
                     and the mark at the end of the current page.  See
                     section 18 [Pages], page 94.

     M-X View Page Directory (in PAGE) 
                     M-X View Page Directory prints a directory of the
                     pages of the file.    See  section  18.1  [PAGE],
                     page 96.

     M-X What Page 
                     M-X  What  Page  prints the current page and line
                     number in the file.    See  section  18  [Pages],
                     page 94.



     Lisp


     Meta-(   (^R Make ()) 
                     Meta-(  places  a  pair of parentheses around the
                     next several s-expressions.  See  section  20.6.1
                     [Lists], page 111.

     Meta-)   (^R Move Over )) 
                     Meta-)  moves past the next close parenthesis and
     224                                 EMACS Manual for TWENEX Users



                     adjusts  the  indentation  of the following line.
                     See section 20.6.1 [Lists], page 111.

     Control-Meta-Tab   (^R Indent for Lisp) 
                     Control-Meta-Tab adjusts the indentation  of  the
                     current   line   for  proper  Lisp  style.    See
                     section 20.3 [Indenting], page 104.

     Control-Meta-(   (^R Backward Up List) 
                     Control-Meta-( moves backward  up  one  level  of
                     list  structure.    See  section  20.6.1 [Lists],
                     page 111.

     Control-Meta-)   (^R Up List) 
                     Control-Meta-) moves forward up one level of list
                     structure.  See section 20.6.1 [Lists], page 111.

     Control-Meta-@   (^R Mark Sexp) 
                     Control-Meta-@ puts the mark at the  end  of  the
                     next   s-expression.     See  section  8  [Mark],
                     page 39.

     Control-Meta-A   (^R Beginning of Defun) 
                     Control-Meta-A moves  to  the  beginning  of  the
                     current  Defun.    See  section  20.6.2 [Defuns],
                     page 115.

     Control-Meta-B   (^R Backward Sexp) 
                     Control-Meta-B   moves    backward    over    one
                     s-expression.      See  section  20.6.1  [Lists],
                     page 111.

     Control-Meta-D   (^R Down List) 
                     Control-Meta-D moves forward and down a level  in
                     list  structure.    See  section  20.6.1 [Lists],
                     page 111.

     Control-Meta-E   (^R End of Defun) 
                     Control-Meta-E moves to the end  of  the  current
                     Defun.  See section 20.6.2 [Defuns], page 115.

     Control-Meta-F   (^R Forward Sexp) 
                     Control-Meta-F    moves    forward    over    one
                     s-expression.    See  section   20.6.1   [Lists],
                     page 111.

     Control-Meta-G   (^R Format Code) 
                     Control-Meta-G   grinds  the  s-expression  after
                     point.  See section 20.7 [Grinding], page 115.
     225                                 EMACS Manual for TWENEX Users



     Control-Meta-H   (^R Mark Defun) 
                     Control-Meta-H  puts  point  before  and the mark
                     after  the  current   or   next   Defun.      See
                     section 20.6.2 [Defuns], page 115.

     Control-Meta-K   (^R Kill Sexp) 
                     Control-Meta-K  kills the following s-expression.
                     See section 20.6.1 [Lists], page 111.

     Control-Meta-N   (^R Next List) 
                     Control-Meta-N  moves  forward  over  one   list,
                     ignoring atoms before the first open parenthesis.
                     See section 20.6.1 [Lists], page 111.

     Control-Meta-P   (^R Previous List) 
                     Control-Meta-P  moves  backward  over  one  list,
                     ignoring atoms reached  before  the  first  close
                     parenthesis.      See   section  20.6.1  [Lists],
                     page 111.

     Control-Meta-Q   (^R Indent Sexp) 
                     Control-Meta-Q adjusts the indentation of each of
                     the lines in the following s-expression, but  not
                     the  current line.  See section 20.3 [Indenting],
                     page 104.

     Control-Meta-T   (^R Transpose Sexps) 
                     Control-Meta-T   transposes    two    consecutive
                     s-expressions.     See  section  20.6.1  [Lists],
                     page 111.

     Control-Meta-U   (^R Backward Up List) 
                     Control-Meta-U moves backward  up  one  level  of
                     list  structure.    See  section  20.6.1 [Lists],
                     page 111.



     Files


     Meta-.   (^R Find Tag) 
                     Meta-. moves to  the  definition  of  a  specific
                     function,  switching  files  if  necessary.   See
                     section 21 [TAGS], page 122.

     Meta-~   (^R Buffer Not Modified) 
                     Meta-~ clears the flag which says that the buffer
                     contains changes that have not been saved.    See
                     section 13.1 [Visiting], page 71.
     226                                 EMACS Manual for TWENEX Users



     Control-X Control-F   (Find File) 
                     Control-X  Control-F  visits  a  file  in its own
                     buffer.  See section 14 [Buffers], page 83.

     Control-X Control-Q   (^R Set File Read Only) 
                     Control-X Control-Q makes the  visited  fie  read
                     only,  or  no longer read only.  See section 13.1
                     [Visiting], page 71.

     Control-X Control-S   (^R Save File) 
                     Control-X Control-S saves the visited file.   See
                     section 13.1 [Visiting], page 71.

     Control-X Control-V   (^R Visit File) 
                     Control-X   Control-V   visits   a   file.    See
                     section 13.1 [Visiting], page 71.

     Control-X Control-W   (Write File) 
                     Control-X Control-W saves the  file,  asking  for
                     names  to  save  it  under.    See  section  13.7
                     [Advanced File Commands], page 81.

     M-X Append to File 
                     M-X Append to File appends the  contents  of  the
                     region  to  the  end  of  a  specified file.  See
                     section 13.7 [Advanced File Commands], page 81.

     M-X Auto Save Mode 
                     M-X Auto Save Mode turns Auto  Save  mode  on  or
                     off.  See section 13.3 [Auto Save], page 74.

     M-X Copy File 
                     M-X  Copy  File copies a file to a new name.  See
                     section 13.7 [Advanced File Commands], page 81.

     M-X Delete File 
                     M-X Delete File deletes a file.  See section 13.7
                     [Advanced File Commands], page 81.

     M-X Insert File 
                     M-X Insert File inserts the contents  of  a  file
                     into  the buffer (within the existing text).  See
                     section 13.7 [Advanced File Commands], page 81.

     M-X Prepend to File 
                     M-X Prepend to File appends the contents  of  the
                     region  to  the  start  of a specified file.  See
                     section 13.7 [Advanced File Commands], page 81.
     227                                 EMACS Manual for TWENEX Users



     M-X Rename File 
                     M-X  Rename File changes the name of a file.  See
                     section 13.7 [Advanced File Commands], page 81.

     M-X Revert File 
                     M-X Revert File  undoes  changes  to  a  file  by
                     reading   in   the   previous   version.      See
                     section 13.2 [Revert File], page 74.

     M-X Save All Files 
                     M-X Save All Files offers to write  back  buffers
                     which  may  need  it.   See section 14 [Buffers],
                     page 83.

     M-X Set Visited Filename 
                     M-X Set  Visited  Filename  changes  the  visited
                     filename,   without   writing   a   file.     See
                     section 13.7 [Advanced File Commands], page 81.

     M-X Write Region 
                     M-X Write  Region  writes  the  contents  of  the
                     region  into  a file.  See section 13.7 [Advanced
                     File Commands], page 81.



     File Directories


     Control-X D   (^R DIRED) 
                     Control-X D invokes the directory  editor  DIRED,
                     useful for deleting many files.  See section 13.6
                     [DIRED], page 78.

     Control-X Control-D   (^R Directory Display) 
                     Control-X   Control-D  displays  a  subset  of  a
                     directory.    See  section  13.4   [Directories],
                     page 77.

     M-X Clean Directory 
                     M-X  Clean  Directory  deletes  all  but the most
                     recent versions of every  file  in  a  directory.
                     See section 13.5 [Cleaning Directories], page 77.

     M-X List Files 
                     M-X  List  Files prints a very brief listing of a
                     directory, listing only  the  filenames,  several
                     files  per line.  See section 13.4 [Directories],
                     page 77.
     228                                 EMACS Manual for TWENEX Users



     M-X Reap File 
                     M-X  Reap  File  deletes  all but the most recent
                     versions of a file.  See section  13.5  [Cleaning
                     Directories], page 77.

     M-X View Directory 
                     M-X  View Directory prints a file directory.  See
                     section 13.4 [Directories], page 77.



     Buffers


     Control-X Control-B   (List Buffers) 
                     Control-X Control-B prints a list of all buffers,
                     their  major  modes  and  the  files   they   are
                     visiting.  See section 14 [Buffers], page 83.

     Control-X A   (^R Append to Buffer) 
                     Control-X  A adds the text of region into another
                     buffer.  See section 9.3 [Copying], page 47.

     Control-X B   (Select Buffer) 
                     Control-X B  is  the  command  for  switching  to
                     another   buffer.    See  section  14  [Buffers],
                     page 83.

     Control-X K   (Kill Buffer) 
                     Control-X K kills  a  buffer.    See  section  14
                     [Buffers], page 83.

     M-X Insert Buffer 
                     M-X Insert Buffer inserts the contents of another
                     buffer  into  the  existing  text of this buffer.
                     See section 14 [Buffers], page 83.

     M-X Kill Some Buffers 
                     M-X Kill Some Buffers offers to kill each buffer.
                     See section 14 [Buffers], page 83.

     M-X Make Space 
                     M-X Make Space tries  to  free  up  space  inside
                     EMACS   for  more  libraries  or  buffers.    See
                     section 24.2.5 [Storage Exhausted], page 163.

     M-X Rename Buffer 
                     M-X Rename Buffer changes the name of the current
                     buffer.  See section 14 [Buffers], page 83.
     229                                 EMACS Manual for TWENEX Users



     M-X What Available Space 
                     M-X  What  Available  Space  prints the amount of
                     space left inside EMACS  for  more  libraries  or
                     buffers.  See section 24.2.5 [Storage Exhausted],
                     page 163.



     Comments


     Meta-Linefeed   (^R Indent New Comment Line) 
                     Meta-Linefeed moves to a new line and indents it.
                     If  point  had  been  within a comment on the old
                     line, a new comment is started on  the  new  line
                     and indented under the old one.  See section 20.5
                     [Comments], page 107.

     Meta-;   (^R Indent for Comment) 
                     Meta-; inserts a properly indented comment at the
                     end   of   the   current  line,  or  adjusts  the
                     indentation  of  an  existing   comment.      See
                     section 20.5 [Comments], page 107.

     Meta-N   (^R Down Comment Line) 
                     Meta-N  moves  down  a line and starts a comment.
                     See section 20.5 [Comments], page 107.

     Meta-P   (^R Up Comment Line) 
                     Meta-P moves down a line and  starts  a  comment.
                     See section 20.5 [Comments], page 107.

     Control-Meta-;   (^R Kill Comment) 
                     Control-Meta-;  kills  any comment on the current
                     line.  See section 20.5 [Comments], page 107.

     Control-X ;   (^R Set Comment Column) 
                     Control-X ; sets the column at which comments are
                     indented, from an argument, the  current  column,
                     or  the  previous  comment.    See  section  20.5
                     [Comments], page 107.



     Case Conversion


     Meta-C   (^R Uppercase Initial) 
                     Meta-C makes the next  word  lower  case  with  a
     230                                 EMACS Manual for TWENEX Users



                     capital  initial.    It moves over the word.  See
                     section 11.5 [Case], page 61.

     Meta-L   (^R Lowercase Word) 
                     Meta-L moves over a word converting it  to  lower
                     case.  See section 11.5 [Case], page 61.

     Meta-U   (^R Uppercase Word) 
                     Meta-U  moves  over a word converting it to upper
                     case.  See section 11.5 [Case], page 61.

     Control-X Control-L   (^R Lowercase Region) 
                     Control-X Control-L  converts  the  text  of  the
                     region  to  lower case.  See section 11.5 [Case],
                     page 61.

     Control-X Control-U   (^R Uppercase Region) 
                     Control-X Control-U  converts  the  text  of  the
                     region  to  upper case.  See section 11.5 [Case],
                     page 61.



     Minor Corrections


     Meta-$   (^R Correct Word Spelling) 
                     Meta-$ (Dollar sign, not Altmode) passes the word
                     before point to the ISPELL program.  If it is not
                     a  correct  spelling,  you  have  the  option  of
                     replacing  it  with  a  corrected  spelling.  See
                     section 12 [Fixing Typos], page 67.

     Meta-'   (^R Upcase Digit) 
                     Meta-' converts a digit before point on the  same
                     or  previous  line  to  a  punctuation character,
                     assuming that you failed to type  the  shift  key
                     and  thus  typed  the  digit  by  mistake.    See
                     section 12 [Fixing Typos], page 67.

     Meta-_   (^R Underline Word) 
                     Meta-_  inserts  underlining  commands  good  for
                     certain  text  justifiers  around  a  word.   See
                     section 11.6 [Underlining], page 62.

     Control-X _   (^R Underline Region) 
                     Control-X _ inserts underlining commands good for
                     certain text justifiers around the region.    See
                     section 11.6 [Underlining], page 62.
     231                                 EMACS Manual for TWENEX Users



     Windows


     Control-Meta-V   (^R Scroll Other Window) 
                     Control-Meta-V  scrolls  the  other  window up or
                     down.  See section 15 [Display], page 87.

     Control-X 1   (^R One Window) 
                     Control-X 1 returns  to  one-window  mode.    See
                     section 16 [Windows], page 90.

     Control-X 2   (^R Two Windows) 
                     Control-X  2  splits the screen into two windows.
                     See section 16 [Windows], page 90.

     Control-X 3   (^R View Two Windows) 
                     Control-X 3 splits the screen  into  two  windows
                     but   stays  in  window  one.    See  section  16
                     [Windows], page 90.

     Control-X 4   (^R Visit in Other Window) 
                     Control-X 4 displays two windows  and  selects  a
                     buffer or visits a file in the other window.  See
                     section 16 [Windows], page 90.

     Control-X O   (^R Other Window) 
                     Control-X  O  switches  from  one  window  to the
                     other.  See section 16 [Windows], page 90.

     Control-X ^   (^R Grow Window) 
                     Control-X ^  changes  the  allocation  of  screen
                     space  to  the  two  windows.    See  section  16
                     [Windows], page 90.

     M-X Compare Windows 
                     M-X Compare Windows compares the text  in  window
                     one  after  point  with  that in window two after
                     point.  It advances point in both windows to  the
                     first   non-matching   text.     See  section  16
                     [Windows], page 90.



     Narrowing


     Control-X N   (^R Narrow Bounds to Region) 
                     Control-X N narrows the virtual boundaries to the
                     region.  See section 17 [Narrowing], page 93.
     232                                 EMACS Manual for TWENEX Users



     Control-X P   (^R Narrow Bounds to Page) 
                     Control-X P narrows the virtual boundaries to the
                     current page.  See section 18 [Pages], page 94.

     Control-X W   (^R Widen Bounds) 
                     Control-X W widens the virtual boundaries back to
                     the  entire  buffer.  See section 17 [Narrowing],
                     page 93.



     Status Information


     Control-X =   (What Cursor Position) 
                     Control-X =  prints  information  on  the  screen
                     position  and  character  position of the cursor,
                     the size of the file, and the character after the
                     cursor.  See section 11.4 [Filling], page 59.

     Control-X L   (^R Count Lines Page) 
                     Control-X L prints the number  of  lines  in  the
                     current  page,  and how many come before or after
                     point.  See section 18 [Pages], page 94.

     M-X List Loaded Libraries 
                     M-X List Loaded Libraries lists the names of  all
                     loaded  libraries.  See section 22.2 [Libraries],
                     page 136.

     M-X List Variables 
                     M-X List Variables lists the names and values  of
                     all  variables, or of those whose names contain a
                     specified string.  See section 22.3  [Variables],
                     page 138.

     M-X List Redefinitions 
                     M-X  List  Redefinitions  describes  all the ways
                     which the major  mode  and  local  modes  of  the
                     selected  buffer  modify the standard EMACS.  See
                     section 20.1 [Major Modes], page 102.

     M-X What Page 
                     M-X What Page prints the page and line number  of
                     point.  See section 18 [Pages], page 94.
     233                                 EMACS Manual for TWENEX Users



     Keyboard Macros


     Control-X (   (^R Start Kbd Macro) 
                     Control-X  (  begins  defining  a keyboard macro.
                     See section 22.8 [KBDMAC], page 153.

     Control-X )   (^R End Kbd Macro) 
                     Control-X  )  terminates  the  definition  of   a
                     keyboard  macro.    See  section  22.8  [KBDMAC],
                     page 153.

     Control-X E   (^R Call Last Kbd Macro) 
                     Control-X E executes the  most  recently  defined
                     keyboard  macro.    See  section  22.8  [KBDMAC],
                     page 153.

     Control-X Q   (^R Kbd Macro Query) 
                     Control-X Q in a keyboard macro can ask the  user
                     whether  to  continue  or  allow  him  to do some
                     editing  before  continuing  with  the   keyboard
                     macro.  See section 22.8 [KBDMAC], page 153.

     M-X Name Kbd Macro 
                     M-X  Name Kbd Macro gives a permanent name to the
                     last keyboard macro defined.   See  section  22.8
                     [KBDMAC], page 153.

     M-X View Kbd Macro 
                     M-X  View  Kbd  Macro  prints the definition of a
                     keyboard  macro.    See  section  22.8  [KBDMAC],
                     page 153.



     Libraries


     M-X Kill Libraries 
                     M-X Kill Libraries discards one or more libraries
                     from   core.     See  section  22.2  [Libraries],
                     page 136.

     M-X List Library 
                     M-X  List  Library  describes  briefly  all   the
                     functions   in  a  library.    See  section  22.2
                     [Libraries], page 136.

     M-X Load Library 
     234                                 EMACS Manual for TWENEX Users



                     M-X  Load Library loads one library, permanently.
                     See section 22.2 [Libraries], page 136.

     M-X Run Library 
                     M-X Run  Library  loads  a  library  temporarily,
                     invokes  a  function in it, and then discards the
                     library.  See section 22.2 [Libraries], page 136.



     Variables


     M-X Edit Options 
                     M-X Edit Options lets you edit,  in  a  recursive
                     editing level, the values of many variables.  See
                     section 22.3 [Variables], page 138.

     M-X Kill Local Q-register 
                     M-X  Kill  Local Q-register makes a q-register or
                     command character definition no longer  local  to
                     the    selected    buffer.       See   the   file
                     INFO:CONV.INFO, node Vars.

     M-X Kill Local Variable M-X Kill Local Variable makes a  variable
                     value  no  longer  local  to the selected buffer.
                     See the file INFO:CONV.INFO, node Vars.

     M-X Kill Variable 
                     M-X  Kill  Variable   eliminates   a   particular
                     variable.      See   section   22.3  [Variables],
                     page 138.

     M-X Make Local Q-register  M-X  Make  Local  Q-register  makes  a
                     q-register  or command character definition local
                     to  the  selected   buffer.      See   the   file
                     INFO:CONV.INFO, node Vars.

     M-X  Make Local Variable M-X Make Local Variable makes a variable
                     value local to the selected buffer.  See the file
                     INFO:CONV.INFO, node Vars.

     M-X Set Key 
                     M-X Set Key connects  a  function  to  a  command
                     character.    See  section  5.2  [M-X  Commands],
                     page 23.

     M-X Set Variable 
                     M-X Set Variable sets the value  of  a  variable.
                     See section 22.3 [Variables], page 138.
     235                                 EMACS Manual for TWENEX Users



     M-X View Variable 
                     M-X  View Variable displays the value and comment
                     of a variable.   See  section  22.3  [Variables],
                     page 138.



     Mail


     Control-X M   (Send Mail) 
                     Control-X M allows you to edit and send a message
                     using  your  favorite  mail-reading program.  The
                     default is MM.  See section 6.5 [Mail], page 34.

     Control-X R   (Read Mail) 
                     Control-X R  runs  your  choice  of  mail-reading
                     program  to read and edit your mail.  The default
                     is MM.  See section 6.5 [Mail], page 34.

     M-X Check Mail 
                     M-X Check Mail tells you whether you have any new
                     mail  to  be  read.    See  section  6.5  [Mail],
                     page 34.



     Minibuffer


     Control-%   (^R Replace String) 
                     Control-%  invokes a minibuffer containing a call
                     to Replace String.  You fill  in  the  arguments.
                     See section 19 [Replace], page 98.

     Meta-Altmode   (^R Execute Minibuffer) 
                     Meta-Altmode  invokes  an  empty minibuffer which
                     you can  fill  in  with  a  TECO  program  to  be
                     executed.  See section 23 [Minibuffer], page 157.

     Meta-%   (^R Query Replace) 
                     Meta-%  invokes a minibuffer containing a call to
                     Query Replace.  You fill in the arguments.    See
                     section 19 [Replace], page 98.

     Control-X Altmode   (^R Re-execute Minibuffer) 
                     Control-X  Altmode  re-executes  a  TECO  program
                     previously executed in the minibuffer.    It  can
                     also   re-execute   an  extended  command.    See
                     section 23 [Minibuffer], page 157.
     236                                 EMACS Manual for TWENEX Users



                           CATALOG OF LIBRARIES



     Libraries Used Explicitly


       These   are  libraries  which  you  must  load  with  M-X  Load
     Library$<libname><cr> to use.  If no  cross-reference  is  given,
     the  only documentation for the library is the self-documentation
     contained in it.  Use M-X List Library$<libname><cr> to  print  a
     brief  description  of  each  function  in the library.  For more
     detailed information, load the library and use  M-X  Describe  on
     individual functions.


     ABSTR           contains commands for making documentation files:
                     wall charts, and abstracts of libraries.  See the
                     file INFO:CONV.INFO.

     BABYL           is  a  subsystem for reading, sending and editing
                     mail.  See the file INFO:BABYL.INFO.

     BBNLIB          contains a few commands that people at BBN like.

     BSHACK          has functions for operating on  lines  containing
                     overprinting.

     BUGHUNT         contains commands for putting your name into each
                     comment  you edit.  This is to record who changed
                     what.

     CACHE           implements  a  cache  for   speeding   up   EMACS
                     subroutine calls.

     CHESS           implements commands for editing pictures of chess
                     boards.

     COBOL           implements COBOL mode.

     COLUMNS         implements  commands for converting single-column
                     text into double-column text and vice versa.

     COMPLT          provides completion for buffer names and variable
                     names.

     DELIM           implements  commands  for  moving  over  balanced
                     groupings of various kinds of parentheses.  There
                     are  a  pair  of  commands for square brackets, a
                     pair for angle brackets, etc.
     237                                 EMACS Manual for TWENEX Users



     DM              redefines  commands to be convenient on Datamedia
                     2500 terminals.

     DM3025          redefines commands to be convenient on  Datamedia
                     3025 terminals.

     DOCLSP          prints documentation from the MacLisp manual on a
                     specified Lisp function.

     DOCOND          is a macro processor and conditionalizer for text
                     files,  useful  for maintaining multiple versions
                     of documents with one source.

     DOCTOR          contains DOCTOR mode, a psychiatrist.

     DRAW            offers functions for  editing  pictures  made  of
                     characters.      These  partially  duplicate  the
                     facilities of the PICTURE  library,  but  contain
                     other distinct features.

     EAKMACS         EAK's personal library, useful as an example.

     EFORK           implements commands for running other programs in
                     separate forks inferior to EMACS.

     FDB             has functions for examine file descriptor blocks.

     FIXLIB          has  functions  for  examining and patching EMACS
                     functions.

     FTPLIB          provides commands for finding new EMACS files and
                     copying them across the Arpanet.  Used for  EMACS
                     maintenance on Arpanet sites.

     HAZ1510         redefines  commands to be convenient on Hazeltine
                     1510 terminals.

     IBM370          implements IBM370 mode, for editing 370 assembler
                     code.

     INFO            peruses tree-structured documentation files.

     INTER           is  the  EMACS  side  of  the  EMACS-to-Interlisp
                     interface.  See the file INFO:INTER.INFO.

     INTERLISP-MODE  is  an  alternate  Interlisp Mode, different from
                     the default one.

     IVORY           is EAK and ECC's alternate  generator  for  EMACS
     238                                 EMACS Manual for TWENEX Users



                     libraries,  which  uses  a  slightly  nonstandard
                     input  format.    The  libraries  BABYL,  BABYLM,
                     CACHE,  EAKMACS,  FIXLIB,  IVORY, LONG-FILENAMES,
                     MKDUMP, OUTLINE-MODE, PL1, TEACH-C100, TMACS  and
                     WORDAB  are  generated  with IVORY.  See the file
                     INFO:IVORY.INFO.

     JOURNAL         implements  journal  files.    See  section  24.4
                     [Journals], page 165.

     JUSTIFY         implements  an  auto-justfy  mode similar to auto
                     fill mode.

     LABELS          has functions for arranging a file  of  addresses
                     for printing mailing labels.

     LEDIT           is   the   EMACS  side  of  the  EMACS-to-MacLisp
                     interface.  See the file INFO:LEDIT.INFO.

     LONG-FILENAMES  provides help in handling files which  have  long
                     names  (on  Twenex).    It implements a different
                     type of filename  completion  than  the  standard
                     GTJFN system call.

     LSPUTL          contains   a   couple  of  useful  functions  for
                     searching and manipulating Lisp code.

     LUNAR           is Moon's personal library, which  contains  some
                     useful commands.

     MACCNV          does part of the work of converting MACRO-10 code
                     to MIDAS code.

     MAICHK          checks  for  arrival of mail.  If this library is
                     loaded,   EMACS   will   check   frequently   and
                     automatically  for  new  mail and notify you when
                     any arrives.

     MAZLIB          is a game for solving mazes.  It's fun to play.

     MKDUMP          aids in dumping your own customized  environment.
                     See the file INFO:MKDUMP.INFO.

     MODE2           implements  a  second  additional  mode line with
                     additional information.

     MODLIN          implements a fancier mode line display.

     MOVE            provides  commands  specially  for  copying   and
     239                                 EMACS Manual for TWENEX Users



                     moving  many  pieces  of  text  from  one file to
                     another.

     MQREPL          works with TAGS to perform several Query Replaces
                     on each of the files in a tag table.

     NCOLUMNS        has functions for turning single-column text into
                     many columns, but not vice-versa.

     NOVICE          implements  restricted  subsets  of  EMACS,   for
                     beginners.    The beginner can turn commands back
                     on  when  he  feels  ready.      See   the   file
                     INFO:CONV.INFO, node Novice.

     NVT100          defines  the arrow keys and numeric keypad of the
                     VT-100 terminal to perform editing functions.

     NVT132          is like NVT100 but for the VT-132.

     NVT52           defines the arrow keys and numeric keypad of  the
                     VT-52 terminal to perform editing functions.

     OUTLINE         implements Outline Mode, for editing outlines.

     OUTLINE-MODE    implements a different flavor of Outline Mode.

     PAGE            defines commands for viewing only one page of the
                     file  at  a  time.    See  section  18.1  [PAGE],
                     page 96.

     PERSONAL        has functions for keeping notes on  your  current
                     projects.

     PHRASE          has  commands for moving over and killing phrases
                     of text.

     PICTURE         contains Edit Picture, the  command  for  editing
                     text   pictures.     See  section  26  [PICTURE],
                     page 185.

     PRINT           contains the function Print File which formats  a
                     file and sends it to a printer.

     PURIFY          generates  libraries from EMACS source files, and
                     contains other functions useful for  editing  the
                     source files.  See the file INFO:CONV.INFO.

     RENUM           renumbers   figures,   equations,   theorems   or
                     chapters.
     240                                 EMACS Manual for TWENEX Users



     SCRLIN          contains  alternative  definitions of C-N and C-P
                     which move by screen lines  instead  of  by  real
                     lines.

     SEND-MAIL       sends mail to another user.

     SLOWLY          redefines  commands  and  options  to  suit  slow
                     terminals.

     SORT            implements the sorting commands.

     SPLIT           contains the commands Split File and Unsplit File
                     for breaking up large files into  subfiles  small
                     enough  to  be edited.  See section 24.2 [Split],
                     page 161.

     SYSTEM          implements   various    commands    useful    for
                     communicating with the operating system.

     TAGGEN          updates  tag tables.  This serves essentially the
                     same  function  as  the  TAGS  program,  and  may
                     someday replace it.

     TALK            initiates and accepts links with other users.

     TDEBUG          is a debugger for TECO programs.  It displays the
                     buffer  in  one  window  and  the  program in the
                     other,  while  stepping  by  lines   or   setting
                     breakpoints.  See the file INFO:TDEBUG.INFO.

     TEACH-C100      has  commands to define the programmable function
                     keys of the Concept-100 terminal.

     TIME            causes the current time of day to be displayed in
                     the mode line.

     TMACS           contains miscellaneous useful functions

     TVLIB           customizes EMACS to resemble TVEDIT.

     VT100           defines the arrow keys and numeric keypad of  the
                     VT-100  terminal  to  move  the cursor and supply
                     numeric arguments.

     VT52            defines the numeric keypad of the VT-52  terminal
                     to supply numeric arguments.

     XLISP           contains    functions    for   global   stylistic
                     transformations of Lisp code.  See  section  20.6
                     [Lisp], page 110.
     241                                 EMACS Manual for TWENEX Users



     Automatically Loaded Libraries


       These are libraries which the user need not know about to use.


     AUX             implements  several  commands  described  in  the
                     manual as part of the  standard  EMACS.    Loaded
                     automatically when needed.

     BABYLM          contains  the  part of Babyl that implements mail
                     sending.

     BARE            contains  the   definitions   of   all   built-in
                     functions.   These definitions are not needed for
                     executing the built-in functions,  only  so  that
                     Help   can   describe   them  properly.    Loaded
                     automatically  by  documentation  commands   when
                     needed.  See section 5.2 [BARE], page 23.

     BASIC20         implements BASIC20 mode.

     BCPL            implements BCPL mode.

     BLISS           implements BLISS mode.

     CLU             implements    CLU    mode.       See   the   file
                     INFO:ECLU.INFO.

     DIRED           implements the commands for editing  and  listing
                     directories.    Loaded automatically when needed.
                     See section 13.6 [DIRED], page 78.

     EINIT           is used in building and dumping EMACS.   See  the
                     file INFO:CONV.INFO.

     EMACS           is  the  main  body  of  standard  EMACS.  Always
                     loaded.

     FORTRAN         implements  FORTRAN   mode.      See   the   file
                     INFO:EFORTRAN.INFO.

     GRIND           implements  C-M-G.    Loaded  automatically  when
                     needed.  See section 20.7 [Grinding], page 115.

     HERMES          interfaces between EMACS and  a  superior  HERMES
                     fork.    Loaded automatically into an EMACS which
                     is under a HERMES.
     242                                 EMACS Manual for TWENEX Users



     KBDMAC          implements keyboard macros.  Loaded automatically
                     when needed.  See section 22.8 [Keyboard Macros],
                     page 153.

     MMAIL           interfaces  between EMACS and a superior MM fork.
                     Loaded automatically if needed.

     MUDDLE          implements Muddle mode.

     PASCAL          implements   PASCAL   mode.      See   the   file
                     INFO:EPASC.INFO.

     PCL             implements PCL mode, for editing command files.

     PL1             implements    PL1    mode.       See   the   file
                     INFO:EPL1.INFO.

     SAIL            implements SAIL mode.

     SCRIBE          implements  SCRIBE  mode.    See   section   11.7
                     [SCRIBE],  page  63.    Loaded automatically when
                     needed.

     TAGS            implements the TAGS  package.    See  section  21
                     [TAGS],  page  122.    Loaded  automatically when
                     needed.

     TEX             implements   TEX   mode.       See    the    file
                     INFO:ETEX.INFO.      Loaded   automatically  when
                     needed.

     TRMTYP          implements the Set Terminal Type command.  Loaded
                     automatically when needed.

     TWENEX          holds commands for the Twenex  version  of  EMACS
                     only.  Always loaded.

     WORDAB          implements    Word    Abbrev    mode.      Loaded
                     automatically  when  needed.    See  section   25
                     [WORDAB], page 174.
     243                                 EMACS Manual for TWENEX Users



                            INDEX OF VARIABLES



       An  option  is  a  variable whose value Edit Options offers for
     editing.  A hook variable is a variable  which  is  normally  not
     defined,  but which you can define if you wish for customization.
     Most hook variables require TECO programs as their values.

       The default value of the variable is given in parentheses after
     its name.  If no value is given, the default value is zero.    If
     the  word "nonexistent" appears, then the variable does not exist
     unless you create it.


     Abort Resumption Message 
                     This is the message to be printed by C-] to  tell
                     you  how  to resume the aborted command.  If this
                     variable is zero, there is no way to  resume,  so
                     C-]  asks  for  confirmation.    See section 24.1
                     [Quitting], page 160.

     Additional Abbrev Expanders (nonexistent) 
                     If this variable exists when Word Abbrev mode  is
                     turned  on,  it  is  a string of characters which
                     should  terminate  and  expand  an   abbrev,   in
                     addition  to  the  punctuation  characters  which
                     normally do so.  See also WORDAB Ins Chars.

     After Compilation Hook (nonexistent) 
                     If this variable exists and is nonzero,  then  it
                     is  executed as a TECO expression by the function
                     Compile, after compilation  itself  is  finished.
                     Exception:  If  the  variable  Compile Command is
                     also  nonzero,  it  overrides  this  hook.    See
                     section 20.2 [Compile], page 103.

     Atom Word Mode  The  minor  mode  Atom  Word  mode  is on if this
                     variable is nonzero.   See  section  22.1  [Minor
                     Modes], page 134.

     Auto Directory Display 
                     If  this  is  nonzero,  certain  file  operations
                     automatically display the file  directory.    See
                     section 13.4 [Directories], page 77.

     Auto Fill Mode  The  minor  mode  Auto  Fill  mode  is on if this
                     variable is nonzero.  See section 11.4 [Filling],
                     page 59.
     244                                 EMACS Manual for TWENEX Users



     Auto Push Point Notification 
                     The  value of this variable is the string printed
                     in the echo area by some commands to  notify  you
                     that the mark has been set to the old location of
                     point.  See section 10 [Search], page 49.

     Auto Push Point Option (500)
                     Searches  set the mark if they move at least this
                     many  characters.    See  section  10   [Search],
                     page 49.

     Auto Save All Buffers 
                     If  this  is nonzero, auto save saves all buffers
                     that are modified, not just the selected  buffer.
                     See section 13.3 [Auto Save], page 74.

     Auto Save Default 
                     The  minor  mode  Auto Save mode is on by default
                     for newly  visited  files  if  this  variable  is
                     nonzero.  See section 13.3 [Auto Save], page 74.

     Auto Save Filenames (<working directory>[SAVE]..) 
                     These  are  the filenames used for auto saving if
                     the visited filenames  are  not  used.    If  the
                     filename  extension  is  null,  the  name  of the
                     buffer  being  saved  is  used  instead.      See
                     section 13.3 [Auto Save], page 74.

     Auto Save Interval (500) 
                     This  is  the  number  of characters between auto
                     saves.  See section 13.3 [Auto Save], page 74.

     Auto Save Max (2) 
                     This is the maximum number of auto saves to keep.
                     See section 13.3 [Auto Save], page 74.

     Auto Save Mode  If this is nonzero, Auto Save  mode  is  enabled.
                     See section 13.3 [Auto Save], page 74.

     Auto Save Visited File 
                     If  this  is  nonzero,  auto  saving saves as the
                     visited filenames.  If this is zero, auto  saving
                     saves  as  the  names which are the value of Auto
                     Save Filenames (q.v.).  See  section  13.3  [Auto
                     Save], page 74.

     Autoarg Mode    When  Autoarg  Mode is nonzero, numeric arguments
                     can be specified just by typing the digits.   See
                     section 4 [Arguments], page 18.
     245                                 EMACS Manual for TWENEX Users



     Bottom Display Margin 
                     This  controls  the  size  of  the  region at the
                     bottom of the screen  which  the  cursor  is  not
                     allowed  to  be in.  If the cursor would normally
                     move there, the  window  is  recentered  instead.
                     The  value  is represented as a percentage of the
                     screen size, and must not  be  negative  or  more
                     than  99.  It controls the TECO flag FS %BOTTOM$.
                     See section 15 [Display], page 87.

     Buffer Creation Hook (nonexistent) 
                     If this variable exists and is nonzero, its value
                     should be a TECO program to be executed  whenever
                     a  newly created buffer is selected for the first
                     time.  See section 14 [Buffers], page 83.

     Buffer Deselection Hook (nonexistent) 
                     If this variable exists and is nonzero, its value
                     should be a TECO program to be executed  whenever
                     a   buffer  is  about  to  be  deselected.    The
                     difference between this and Buffer Selection Hook
                     is that, while both are executed (if they  exist)
                     when  you switch buffers, this is executed before
                     the switch, and Buffer Selection Hook is executed
                     after the switch.    See  section  14  [Buffers],
                     page 83.

     Buffer Selection Hook (nonexistent) 
                     If this variable exists and is nonzero, its value
                     should  be a TECO program to be executed whenever
                     a buffer is selected.  See section 14  [Buffers],
                     page 83.

     Case Replace (1) 
                     When  Case Replace is nonzero, Replace String and
                     Query Replace attempt to preserve case when  they
                     replace.  See section 19 [Replace], page 98.

     Case Search (1) 
                     If  Case Search is nonzero, searches of all sorts
                     allow upper case letters and lower  case  letters
                     to  match  each other.  It controls the TECO flag
                     FS BOTH CASE$.  See section 10 [Search], page 49.

     Collapse in Comparison (nonexistent) 
                     If this variable  exists  and  is  not  zero,  it
                     should  be a string of characters for M-X Compare
                     Windows  to  regard  as   insignificant.      See
                     section 16 [Windows], page 90.
     246                                 EMACS Manual for TWENEX Users



     Comment Begin   This  is  the  string used to start new comments.
                     If it is zero, the  value  of  Comment  Start  is
                     used.  See section 20.5 [Comments], page 107.

     Comment Column  This is the column at which comments are aligned.
                     See section 20.5 [Comments], page 107.

     Comment End     This is the string which is used to end comments.
                     It is often empty for languages in which comments
                     end  at  the  end  of the line.  See section 20.5
                     [Comments], page 107.

     Comment Multi Line (nonexistent) 
                     If this variable exists and is nonzero, then when
                     Auto Fill mode breaks a comment line, it does not
                     insert a new comment starter  on  the  new  line.
                     This is for use with languages that have explicit
                     comment   terminators,   if   you   want   single
                     multi-line  comments   instead   of   single-line
                     comments  on consecutive lines.  See section 20.5
                     [Comments], page 107.

     Comment Rounding (/8+1*8) 
                     This is the TECO  program  used  to  decide  what
                     column to start a comment in when the text of the
                     line  goes past the comment column.  The argument
                     to the program is the column at which text  ends.
                     See section 20.5 [Comments], page 107.

     Comment Start   This  is the string used for recognizing existing
                     comments, and for starting new  ones  if  Comment
                     Begin  is  zero.    If  Comment  Start  is  zero,
                     semicolon is used.  See section 20.5  [Comments],
                     page 107.

     Compile Command (nonexistent) 
                     If this variable exists and is nonzero, its value
                     should  be  a  TECO program to be used by the M-X
                     Compile  command  to  compile  the  file.     See
                     section 20.2 [Compile], page 103.

     Compiler Filename (nonexistent) 
                     If this variable exists and is nonzero, its value
                     should  be  the  name  of  the compiler to use, a
                     filename.  By default, the name of the major mode
                     is used  as  the  name  of  the  compiler.    See
                     section 20.2 [Compile], page 103.

     Compiler Switches (nonexistent) 
     247                                 EMACS Manual for TWENEX Users



                     If this variable exists and is nonzero, its value
                     is   used  as  switches  for  compilation.    See
                     section 20.2 [Compile], page 103.

     Cursor Centering Point (40) 
                     This specifies how far from the top of the screen
                     point ought to appear when a new window  position
                     is  chosen.    The  value  of the variable is the
                     percentage of the screen size.  It  must  not  be
                     negative  or  more than 99.  It controls the TECO
                     flag FS %CENTER$.    See  section  15  [Display],
                     page 87.

     Default Major Mode (Fundamental) 
                     This  is  the major mode in which new buffers are
                     created.  If it is the null string,  new  buffers
                     are  created  in  the same mode as the previously
                     selected  buffer.    See  section  14  [Buffers],
                     page 83.

     Digit Shift Table (nonexistent) 
                     If this variable exists and is nonzero, its value
                     should  be a string containing the ten characters
                     which are  the  upper  case  equivalents  of  the
                     digits  0  through  9 on the keyboard being used.
                     Meta-' (^R Upcase Digit)  uses  this  table,  and
                     reads  it  from the user if the variable does not
                     exist.  See section 12 [Fixing Typos], page 67.

     Directory Lister (& Subset Directory Listing) 
                     This is the  TECO  program  used  for  listing  a
                     directory  for  C-X  C-D  and  the Auto Directory
                     Display  option.    The  default  value  is   the
                     definition  of  the  function  & Subset Directory
                     Listing.    See   section   13.4   [Directories],
                     page 77.

     Display Matching Paren (-1) 
                     This  variable  controls automatic display of the
                     matching   open   parenthesis   when   a    close
                     parenthesis   is  inserted.    See  section  20.4
                     [Matching], page 106.

     Display Mode Line Inverse 
                     If this is nonzero, the mode line is displayed in
                     inverse  video  or  otherwise   highlighted,   on
                     terminals  which  can  support it.  This controls
                     the TECO flag FS INVMOD$.  See section 1.1  [Mode
                     Line], page 6.
     248                                 EMACS Manual for TWENEX Users



     Display Overprinting 
                     If  this  is  nonzero,  backspace  characters and
                     stray carriage return characters  in  the  buffer
                     display  as actual overprinting rather than as ^H
                     and ^M.  This variable controls the TECO flags FS
                     ^H PRINT$ and  FS  ^M  PRINT$.    See  section  2
                     [Characters], page 9.

     Echo Area Height (3) 
                     This  is  the  number  of lines in the echo area.
                     Its value should be at least one.    It  controls
                     the  TECO  flag  FS  ECHO  LINES$.  See section 1
                     [Screen], page 5.

     EMACS Version   This  variable's  value  is  the  EMACS   version
                     number.

     End of Buffer Display Margin (35) 
                     This  specifies  how far up the screen the end of
                     the buffer is placed, if it is on screen at  all,
                     when  a  new  window  position  is chosen.  It is
                     represented as a percentage of the  screen  size,
                     and  must  not  be negative or more than 99.  Its
                     value controls the  TECO  flag  FS  %END$.    See
                     section 15 [Display], page 87.

     Error Messages in Echo Area 
                     If this is nonzero, error messages are printed in
                     the  echo  area  instead  of  at  the  top of the
                     screen.   It  controls  the  TECO  flag  FS  ECHO
                     ERRORS$.  See section 24.2 [Lossage], page 161.

     EXEC Name (nonexistent) 
                     If  this  variable exists, its value, if nonzero,
                     is the filename of the program to be used by  M-X
                     Push   to  EXEC  to  serve  as  the  EXEC.    See
                     section 6.4 [Subforks], page 30.

     Exit Hook (nonexistent) 
                     If this variable exists and is nonzero, its value
                     is a TECO program to be executed  whenever  EMACS
                     is  exited, instead of the normal action of doing
                     an auto save.  The subroutine  &  Exit  EMACS  is
                     responsible  for  executing  it.  See section 6.3
                     [Exiting], page 29.

     Exit to Inferior Hook (nonexistent) 
                     If this variable exists and is nonzero, its value
                     is a TECO program to be executed  whenever  EMACS
     249                                 EMACS Manual for TWENEX Users



                     is  about  to  invoke  an  inferior  fork that is
                     likely to read from the terminal.  This  is  done
                     in addition to all normal actions.

     Exit to Superior Hook (nonexistent) 
                     If this variable exists and is nonzero, its value
                     is  a  TECO program to be executed whenever EMACS
                     is about to  return  to  its  superior  fork,  in
                     addition to all normal actions.

     Fill Column (70) 
                     The  value  of  Fill Column is the width used for
                     filling text.   It  controls  the  TECO  flag  FS
                     ADLINE$.  See section 11.4 [Filling], page 59.

     Fill Extra Space List (.?!) 
                     The  characters in this string are the ones which
                     ought to be followed by two spaces when  text  is
                     filled.  See section 11.4 [Filling], page 59.

     Fill Prefix     The value of this variable is the prefix expected
                     on  every  line of text before filling and placed
                     at the front of every line after filling.  It  is
                     usually empty, for filling nonindented text.  See
                     section 11.4 [Filling], page 59.

     Indent Tabs Mode (-1) 
                     If   Indent   Tabs  Mode  is  nonzero,  then  tab
                     characters  are  used  by  the  indent  commands.
                     Otherwise,   only   spaces   are   used.      See
                     section 11.3 [Indenting Text], page 57.

     <libname> Setup Hook (nonexistent) 
                     If this variable exists and is nonzero, its value
                     should be a TECO program to be executed when  the
                     library  <libname>  is  loaded.    The  library's
                     & Setup function is responsible for  doing  this.
                     If  the  library has no & Setup function, it will
                     not handle a setup hook either.  See section 22.2
                     [Libraries], page 136.

     <libname> Kill Hook (nonexistent) 
                     Some libraries may  execute  the  value  of  this
                     variable,  if  it exists and is nonzero, when the
                     library is being  removed  from  core  with  Kill
                     Libraries.   This is done by the library's & Kill
                     function; if the library has no & Kill  <libname>
                     Library function, it will not handle a kill hook.
                     See section 22.2 [Libraries], page 136.
     250                                 EMACS Manual for TWENEX Users



     Lisp <function> Indent 
                     This  variable  controls  the  indentation within
                     calls to the function <function>.  Actually,  the
                     variable  used  is  not  always  Lisp  <function>
                     Indent, but rather <language> <function>  Indent,
                     where  <language>  is  the  value  of Lisp Indent
                     Language.     See   section   20.3   [Indenting],
                     page 104.

     Lisp Indent DEFanything (1) 
                     The  value  of this variable controls indentation
                     within calls to functions whose names start  with
                     "def".  Actually, the variable used is not always
                     Lisp  Indent  DEFanything,  but rather <language>
                     Indent DEFanything, where <language> is the value
                     of  Lisp  Indent  Language.    See  section  20.3
                     [Indenting], page 104.

     Lisp Indent Language (Lisp) 
                     The  value of this variable is the string used as
                     the language name  when  looking  for  <language>
                     <function>  Indent  variables.   See section 20.3
                     [Indenting], page 104.

     Lisp Indent Offset 
                     If nonzero, this selects an  alternative  default
                     style  of  indentation  for  Lisp.  Actually, the
                     variable used is not always Lisp  Indent  Offset,
                     but   rather   <language>  Indent  Offset,  where
                     <language> is the value of Lisp Indent  Language.
                     See section 20.3 [Indenting], page 104.

     Mail Reader Library (nonexistent) 
                     If this variable exists and is nonzero, it is the
                     name  of  the library to be used by M-X Read Mail
                     for reading mail and by M-X Send Mail for sending
                     mail.  The former calls the function "<entry>" in
                     the library, and the latter  calls  the  function
                     "&  Mail  Message".    .  See section 6.5 [Mail],
                     page 34.

     Mail Sender Library (nonexistent) 
                     If  this  variable  exists  and  is  nonzero,  it
                     specifies the library to be used by M-X Send Mail
                     only,   overriding  Mail  Reader  Library.    See
                     section 6.5 [Mail], page 34.

     Mail Reader Program (nonexistent) 
                     If this variable exists (and Mail Reader  Library
     251                                 EMACS Manual for TWENEX Users



                     does  not),  it is the name of the the program to
                     be used  for  reading  and  sending  mail.    See
                     section 6.5 [Mail], page 34.

     <mode> ..D (nonexistent) 
                     This variable is used by the major mode <mode> to
                     record  the  syntax  table  for that mode.  It is
                     created by the first use of the mode, and if  you
                     supply  your  value,  that value will be accepted
                     instead.  For example, Text mode uses  Text  ..D.
                     Not all major modes have their own syntax tables.
                     See section 22.4 [Syntax], page 140.

     <mode> Mode Hook (nonexistent) 
                     If this variable exists and is nonzero, its value
                     is  a  TECO program to be executed when the major
                     mode <mode> is entered.  For example,  Text  Mode
                     Hook  is executed when Text mode is entered.  See
                     section 20.1 [Major Modes], page 102.

     Next Screen Context Lines (nonexistent) 
                     If this variable exists, its value specifies  the
                     number  of lines of overlap between one screenful
                     and the next, when scrolling by screens with  C-V
                     and M-V.  See section 15 [Display], page 87.

     Only Global Abbrevs (nonexistent) 
                     If this variable exists and its value is nonzero,
                     then  Word  Abbrev  Mode assumes that you are not
                     using   any   mode-specific   abbrevs.        See
                     section 25.2.1 [Customizing WORDAB], page 180.

     Overwrite Mode  If this is nonzero, the minor mode Overwrite mode
                     is  in  effect.   It controls the TECO flag FS ^R
                     REPLACE$.    See  section  22.1  [Minor   Modes],
                     page 134.

     Page Delimiter (^L)
                     This  is the TECO search string used to recognize
                     page  boundaries.    See  section   18   [Pages],
                     page 94.

     PAGE Flush CRLF 
                     If  this variable exists and is nonzero, the PAGE
                     library expects every page to start with a  blank
                     line,   which  is  not  considered  part  of  the
                     contents of the page.  See section  18.1  [PAGE],
                     page 96.
     252                                 EMACS Manual for TWENEX Users



     Paragraph Delimiter (.^O^I^O ^O')
                     This  is the TECO search string used to recognize
                     beginnings  of  paragraphs.    See  section  11.2
                     [Sentences], page 55.

     Permit Unmatched Paren (-1) 
                     Controls whether the bell is run if you insert an
                     unmatched  close  parenthesis.   See section 20.4
                     [Matching], page 106.

     Prefix Char List 
                     This variable's value is a string which lists all
                     the   prefix   characters   defined,   so    that
                     self-documentation   facilities   can   find  any
                     subcommands of prefix  characters  which  call  a
                     given  function.    See  the file INFO:CONV.INFO,
                     node Prefix.

     Quote Execute Command (nonexistent) 
                     If this variable exists and  is  zero,  then  M-X
                     does  not quote ^] characters which appear in the
                     string arguments of the command.  See section 5.2
                     [Extended Commands], page 23.

     Read Line Delay 
                     This is the  amount  of  time,  in  30'ths  of  a
                     second, which EMACS should wait after starting to
                     read  a  line  of  input,  before  it prompts and
                     starts echoing the input.

     Readable Word Abbrev Files (nonexistent) 
                     If this variable  exists  and  is  nonzero,  word
                     abbrev  files  will be written in the format that
                     M-X List Word Abbrevs uses, instead of in a  less
                     readable   but   faster   loading  format.    See
                     section 25.1.6 [Saving Abbrevs], page 178.

     Region Query Size (5000) 
                     Many commands which act  on  the  region  require
                     confirmation  if  the  region  contains more than
                     this many characters.    See  section  8  [Mark],
                     page 39.

     Return from Inferior Hook (nonexistent) 
                     If this variable exists and is nonzero, its value
                     should  be a TECO program to be executed whenever
                     an inferior fork returns  to  EMACS,  except  for
                     inferior  forks  which return nearly immediately.
                     See section 6.4 [Subforks], page 30.
     253                                 EMACS Manual for TWENEX Users



     Return from Superior Hook (nonexistent) 
                     If this variable exists and is nonzero, its value
                     should  be a TECO program to be executed whenever
                     EMACS  is  resumed  after  being  exited.     See
                     section 6.3 [Exiting], page 29.

     SAIL Character Mode 
                     If this is nonzero, characters in the buffer with
                     ASCII  codes  0  through 37 are displayed without
                     conversion.  Do  not  try  to  use  this  feature
                     except  on terminals specially equipped to handle
                     it.  The  variable  controls  the  TECO  flag  FS
                     SAIL$.     See  section  I.1  [Ideal  Keyboards],
                     page 188.

     Save Word Abbrevs (nonexistent) 
                     If this variable  exists,  its  value  determines
                     which  abbrevs will be saved upon exit from EMACS
                     when abbrevs have been modified.  Setting it to 1
                     causes  all   abbrevs   to   be   saved.      See
                     section   25.1.6   [Saving  Abbrevs],  page  178.
                     Setting it to  -1  causes  just  the  incremental
                     abbrevs  to be saved.  See section 25.2.4 [Dumped
                     Environments], page 182.

     Search Exit Char (27) 
                     This is the numeric code for the 9-bit  character
                     which should exit incremental search and not have
                     its  normal  command  meaning  in that case.  The
                     default, 27, is the code for Altmode.

     Search Exit Option (nonexistent) 
                     If  this  variable  is  0,   Control   and   Meta
                     characters  without  special meanings do not exit
                     incrementatl search; instead, they  are  part  of
                     the  string to be searched for.  If this variable
                     does  not  exist,  or  is  nonzero,  then   those
                     characters  exit  the  search and then have their
                     normal function.

     Set Mode Line Hook 
                     This is a hook which is executed every  time  the
                     mode  line  is recomputed.  It can insert text in
                     the buffer to put it in the mode line  after  the
                     minor  modes.    See  section  1.1  [Mode  Line],
                     page 6.

     SLOWLY Maximum Speed (nonexistent) 
                     If this variable is defined, it  is  the  maximum
     254                                 EMACS Manual for TWENEX Users



                     output  speed for which SLOWLY, if loaded, should
                     define its commands.  See section I.6.4 [SLOWLY],
                     page 195.

     Space Indent Flag 
                     If this flag is nonzero, then Auto  Fill  indents
                     the  new  lines which it creates, by performing a
                     Tab.  Most major modes for programming  languages
                     set  this  nonzero.   See section 11.4 [Filling],
                     page 59.

     System Output Holding 
                     If this is nonzero, then Twenex page mode is  not
                     turned  off  by  EMACS.    This  means  that  the
                     characters C-S and C-Q stop and resume output  to
                     the  terminal  from  Twenex and cannot be used as
                     EMACS commands in any way.  The variable controls
                     the TECO flag FS TT PAGE$.

     Tab Stop Definitions (a string) 
                     The value of Tab Stop  Definitions  is  a  string
                     defining  the tab stops to be used by the command
                     M-I (^R Tab to  Tab  Stop).    See  section  11.3
                     [Indenting Text], page 57.

     Tags Find File (nonexistent) 
                     If  this  variable  exists  and is not zero, TAGS
                     uses C-X C-F to switch files.    Otherwise,  TAGS
                     uses  C-X  C-V.  See section 21 [TAGS], page 122.
                     Some other things  may  decide  to  use  multiple
                     buffers   if  this  variable  is  nonzero.    See
                     section 14 [Buffers], page 83.

     Tags Search Verbose (nonexistent) 
                     If this variable exists and is zero, Tags  Search
                     does  not print out the name of each file that it
                     begins  to  search.      If   the   variable   is
                     nonexistent,  that is equivalent to a value of 1.
                     See section 21.4.3 [Tags Search], page 127.

     Temp File FN2 List (MEMO^OXGP^O ...)
                     This is a TECO search string which recognizes the
                     filenames  which  indicate  that  the   file   is
                     probably  temporary.    See  section  13.5 [Clean
                     Directory], page 77.

     Top Display Margin 
                     This controls the size of the region at  the  top
                     of  the screen which the cursor is not allowed to
     255                                 EMACS Manual for TWENEX Users



                     be  in.  If the cursor would normally move there,
                     the window is recentered instead.  The  value  is
                     represented  as  a percentage of the screen size,
                     and must not be negative or more  than  99.    It
                     controls  the TECO flag FS %TOP$.  See section 15
                     [Display], page 87.

     Underline Begin (nonexistent) 
                     If this variable exists, its value should be  the
                     character  or  string  to use to begin underlines
                     for  the  M-_  command.      See   section   11.6
                     [Underlining], page 62.

     Underline End (nonexistent) 
                     If  this variable exists, its value should be the
                     character or string to use to end underlines  for
                     the M-_ command.  See section 11.6 [Underlining],
                     page 62.

     Visit File Hook (nonexistent) 
                     If this variable exists and is nonzero, its value
                     should  be a TECO program to be executed whenever
                     a file is visited.  See section 13.1  [Visiting],
                     page 71.

     Visit File Save Old (1) 
                     This  variable  controls  whether visiting a file
                     offers to save the file previously visited in the
                     same buffer, if it has changes.  See section 13.1
                     [Visiting], page 71.

     WORDAB All Caps (nonexistent) 
                     If this variable exists and is nonzero, expanding
                     an  all-upper-case   abbrev   to   a   multi-word
                     expansion  will  cause the words in the expansion
                     to be  all-upper-case,  instead  of  just  having
                     their    first    letters    uppercased.      See
                     section 25.1.2 [Controlling Expansion], page 177.

     WORDAB Ins Chars (nonexistent) 
                     If this variable exists when Word Abbrev Mode  is
                     turned  on,  it  should  be  a  string containing
                     precisely those characters which should terminate
                     and expand an abbrev.   This  variable  overrides
                     Additional   Abbrev   Expanders   (q.v.).     See
                     section 25.2.1 [Customizing WORDAB], page 180.
     256                                 EMACS Manual for TWENEX Users



                                   INDEX



                                      Auto  Fill mode   7, 57, 59, 109,
     !   14, 99                                 134, 135, 151
                                      Auto Push Point Notification   41
     %   69                           Auto Push Point Option   41
                                      Auto Save All Buffers   76
     & (in function names)   25       Auto Save Default   74, 134
     & Alter ..D   143                Auto Save Filenames   75
     & Exit EMACS   30, 31            Auto Save Interval   76
     & Mail Message   34              Auto Save Max   76
                                      Auto Save mode   7, 74, 134
     *Permutation   Table*    (buffer)Auto Save Visited File   75
               187                    Autoarg mode   19, 189
     *Permuted File* (buffer)   187   Autoloading   137
     *Tags Search* (buffer)   128
     *TAGS* (buffer)   125, 127       Backspace   12
                                      BARE library   26
     --MORE--   8                     Bit prefix characters   189
                                      Blank  lines     17, 43, 56, 109,
     .   99                                     110
                                      Bottom Display Margin   87
     <cr>   10                        Buffers   7, 83,  92,  124,  125,
                                                128, 151
     @Begin   64                      Buggestion   66
     @End   64                        Bugs   170
                                      Built-in functions   26
     Abbrev  definition  files    178,
               182                    C-   9
     Abbrev definition lists      175,C-.   128
               178, 181, 182          C-;   107
     Abbrevs   174                    C-<   40
     Abort Recursive Edit   138, 160  C->   40
     Aborting   160                   C-@   39
     Access to Directory   34         C-A   15, 55, 105
     Accumulator   119                C-B   15, 101
     Additional Abbrev Expanders   181C-D   15, 21, 42
     Address   119                    C-E   15, 55, 105
     Altmode      10,  12, 13, 21, 99,C-F   15
               100, 142, 156, 158     C-G   21, 29, 50, 71,  158,  160,
     Append to File   47, 81                    166
     Apropos   36                     C-K   15, 42, 55
     Argument   176, 182              C-L   15, 87, 156, 197
     ASCII   9, 12                    C-M-(   112
     Atom Word mode   7, 54, 134      C-M-)   112
     Auto Directory Display   77      C-M-;   108
     Auto Fill   110                  C-M-@   40, 113
     257                                 EMACS Manual for TWENEX Users



     C-M-A   115, 119                 C-X   146, 152
     C-M-B   64, 111                  C-X 2   90
     C-M-D   64, 112, 119             C-X 3   91
     C-M-E   64, 115, 119             C-X 4   92
     C-M-F   64, 111                  C-X ;   109
     C-M-G   64, 116, 120             C-X =   61
     C-M-H   40, 64, 115              C-X A   47
     C-M-K   42, 64, 112              C-X Altmode   23, 99, 158
     C-M-L   94                       C-X B   83
     C-M-M   57, 105                  C-X C-A   176, 180, 183
     C-M-N   64, 112, 119             C-X C-B   85
     C-M-P   64, 112, 119             C-X C-D   77
     C-M-Q   64, 116                  C-X C-F   84
     C-M-R   89                       C-X C-H   176, 183
     C-M-Rubout   42, 64, 112         C-X C-L   62
     C-M-Space   177, 183             C-X C-O   17, 43
     C-M-T   113                      C-X C-P   40, 94, 96
     C-M-Tab   115                    C-X C-Q   72
     C-M-U   64, 112                  C-X C-S   16, 72, 75, 85
     C-M-V   91                       C-X C-T   68
     C-M-W   45                       C-X C-U   39, 62
     C-M-X   22                       C-X C-V   16, 71
     C-M-Z   29, 78, 138              C-X C-W   76
     C-M-[   115                      C-X C-X   40
     C-M-\   58, 116                  C-X C-Z   29, 178
     C-M-]   115                      C-X D   80
     C-M-^   105, 116                 C-X E   154
     C-N   15, 101                    C-X F   60, 134
     C-O   17, 18, 101, 105           C-X G   48
     C-P   15                         C-X H   40
     C-Q    14, 57, 94, 101, 177, 182,C-X J   97
               191                    C-X K   85
     C-R   49, 96, 99, 156, 194       C-X L   95
     C-Rubout   110                   C-X M   34
     C-S   49, 96, 191, 194           C-X N   93
     C-Space   39                     C-X O   90
     C-T   15, 68                     C-X P   93, 95, 97
     C-U   18, 21, 71, 182            C-X Q   155, 194
     C-U C-@   41, 56                 C-X R   34
     C-U C-Space   41                 C-X Rubout   42, 55, 67
     C-V   88                         C-X T   68
     C-W   42, 56, 94, 99             C-X Tab   58
     C-X   10, 101                    C-X U   183
     C-X (   154                      C-X W   93, 95, 96
     C-X )   154                      C-X X   48
     C-X +   176, 180, 183            C-X [   94, 96
     C-X -   176, 180, 183            C-X ]   94, 96
     C-X .   60                       C-X ^   91, 159
     C-X 1   90                       C-X _   63
     258                                 EMACS Manual for TWENEX Users



     C-Y   44                         Control   characters,   inserting
     C-Z   10, 158                              14
     C-Z C-Y   159                    Control-Meta   111
     C-\   158                        Copy File   82
     C-]   78, 100, 138, 142, 160     Correct Spelling   69
     C-^   10                         Count Matching Lines   100
     C-_   36                         Crashes   74
     Capitalization   177             Create File   72
     Caret   12                       CRLF   12, 14
     Case conversion     61,  68,  98,Cursor   5, 14
               174, 192               Cursor Centering Point   87
     Case Replace   98                Customization   11, 25, 117, 144,
     Case Search   50, 98                       151, 180
     Centering   60
     Character Search   51            Default Major Mode   83
     Character set   9                Default Separator   195
     Check Available   33             Define Word Abbrevs   181
     Check Batch Queue   33           Defining abbrevs   176, 178
     Check Disk   33                  Defuns   40, 115
     Check Job   33                   Delete File   82
     Check Log File   33              Delete Matching Lines   100
     Check Mail   34                  Delete  Non-Matching  Lines   80,
     Check Output Queue   33                    100
     Check Users   33                 Deletion   14, 42, 67, 100, 165
     Clean Directory   78             Describe   36, 139
     Clear screen   87                Digit Shift Table   68
     Collapse in Comparison   91      Directory   77, 80
     Comma   99                       Directory Lister   77
     Command completion   21, 25      DIRED   77, 78, 137
     Commands   20                    Disable Capabilities   33
     Comment Begin   109, 141         Disasters   74
     Comment Column   109, 152        Display Ephemeron   32
     Comment End   110, 141           Display Matching Paren   106
     Comment Start   109, 141, 152    Display Mode Line Inverse   8
     Comments   53, 97, 102, 107, 110,Display Overprinting   12
               112, 119, 141          Dissociated Press   65
     Compare Windows   91             Documentation   38
     Compile   103                    Dollar Sign   13
     Compile Command   104            Down Picture Movement   185
     Compiler Filename   104          Drastic Changes   74
     Compiler Switches   104          Dumped environments   182
     Confirmation   62,  73,  74,  79,
               158, 176               Echo area   5, 21, 61, 94, 176
     Connect to Directory   34, 78    Echo Area Height   5
     Connected   11, 25               Edit Indented Text   57
     Continuation line   14           Edit key   188, 189
     Control   9, 12, 167             Edit Options   28, 138
     Control  characters,  display  ofEdit Picture   29, 185
               12                     Edit Syntax Table   142
     259                                 EMACS Manual for TWENEX Users



     Edit Tab Stops   53, 58
     Edit Word Abbrevs   178          Help   10, 36, 167
     EFORK   31                       Home Directory   145, 166
     EMACS.VARS   135, 144, 152       Hooks   183
     Enable Capabilities   33
     End of Buffer Display Margin   87Ignoriginal   66
     Environments   63                Incremental   abbrev   definition
     Ephemerons   32                            files   182
     Error handler   5                Indent Tabs Mode   58, 135
     Error message   5                Indentation   57, 105, 107, 115
     Error Messages in Echo Area   161Inferiors   31
     EVARS files   179, 180           Init file   189
     EXEC   104, 190                  Init files   144, 179, 180
     Exec Name   31                   Insert Buffer   187
     Execute Ephemeron   32           Insert File   81
     Exit Hook   30                   Insert Page Directory   97
     Exit to Inferior Hook   31       Insert Word Abbrevs   181, 182
     Exit to Superior Hook   30       Insertion   14, 81, 94
     Exiting   29                     Instant Command Prompt   22
     Exiting EMACS   178, 183         INTER   111
     Expand  Word  Abbrevs  in  RegionInterlisp Mode   110
               177                    Ispell   69
     Expander characters   181
     Expanding abbrevs   177          Join pages   97
     Expunge Directory   78           Journal files   165
     Extended commands   20           Justification   60

     FAIL   119                       Keyboard macros   7, 153
     File dates   73                  Kill All Word Abbrevs   180
     File deletion   77, 78           Kill Buffer   85
     File directory   77              Kill Libraries   137, 163
     File Versions Kept   78          Kill ring   44, 163
     Files      7, 16, 71, 74, 81, 92,Kill Some Buffers   85, 163
               151                    Killing   42,  44,  54,  55,  67,
     Fill Column   60, 134, 138                 112, 164
     Fill Prefix   56, 60             Killing abbrevs   176, 178, 180
     Filling   59
     Find File   84, 124              Labels   119
     Find Pat   113                   LEDIT   111
     FLUSHED   8                      Left Picture Movement   185
     Forks   31                       Libraries   31, 96, 136, 174, 185
     Formatting   57, 115             Line noise   37
     Formfeed   94                    Line Numbers   72
     FS Flags   58, 87, 107, 120, 143,Line separator   12, 14
               172, 191, 193          Linefeed   12, 57, 102, 105, 116
     Functions   11, 20, 25           Linefeed, stray   12
                                      Lines   42, 187
     Global abbrevs   174, 180        Lisp   105, 134
     Grinding   115                   Lisp FOO Indent   117
     260                                 EMACS Manual for TWENEX Users



     Lisp Indent DEFAnything   117    M-E   55
     Lisp Indent Language   118       M-F   53
     Lisp Indent Offset   118         M-G   60
     Lisp Indentation Hook   118      M-H   40, 56, 60
     Lisp mode   110                  M-I   58
     Lisp PROG Indent   117           M-J   109
     Lisp Special Indent Offset   117 M-K   42, 55
     List Buffers   85                M-L   61
     List Files   77                  M-Linefeed   109
     List Handles   32                M-M   57, 105
     List Library   137               M-N   108
     List Loaded Libraries   137      M-O   194
     List Matching Lines   100        M-P   108
     List Redefinitions   103, 139    M-Q   60
     List Tags   128                  M-R   89
     List Variables   139             M-Rubout   42, 54, 67
     List Word Abbrevs   178, 181, 182M-S   60
     Lists   40, 111, 141             M-T   54
     Load Library   136               M-Tab   57
     Loading   136                    M-U   61
     Local modes lists   135          M-V   88
     Local  variables    83, 139, 140,M-W   45
               151                    M-X   20, 23
     Lowercase Lisp Buffer   113      M-Y   46
     Lowercase Lisp Region   113      M-[   56, 64, 119
     LSPUTL   113                     M-\   43, 57, 105
                                      M-]   56, 119
     M-   9                           M-^   43, 57, 105, 116
     M-"   120                        M-_   62
     M-$   69                         M-~   73
     M-%   100, 158                   M.L   139
     M-'   68, 120, 177, 183          Macro-10   119
     M-(   113                        Macsyma   116
     M-)   113                        Macsyma mode   120
     M-+   32                         MAICHK   35
     M-,   32                         Mail   34
     M-- M-C   68                     Mail Reader Library   34
     M-- M-L   68                     Mail Reader Program   34
     M-- M-U   68                     Major modes   6,  83,  102,  103,
     M-.   125                                  109, 142, 151, 174
     M-;   107                        Make Page Permutation Table   187
     M-<   15                         Make Space   163
     M->   15                         Make   These   Characters  Expand
     M-@   40, 54                               181
     M-A   55                         Make Word Abbrev   180
     M-Altmode   157                  Mark   39, 44, 45,  54,  56,  81,
     M-B   53                                   94, 113, 115, 125
     M-C   61                         Markov Chain   66
     M-D   42, 54                     Matching   106, 141
     261                                 EMACS Manual for TWENEX Users



     Meta   9, 53, 167, 188, 189      Prepend to File   47, 81
     Metizer   10, 158, 189           Preventing abbrev expansion   177
     MIDAS   105, 119                 Printing characters   14
     MIDAS mode   119                 Printing terminal   197
     Minibuffer     6, 14, 23, 29, 81,Prompting   5, 21
               87, 100, 157, 172      PURIFY library   120
     Minibuffer Separator   195       Push to EXEC   31
     Minor modes   7, 58, 134, 174
     MM   23, 48                      Q-registers   48
     MM (Mail reader)   34            Query Replace   70, 99, 156, 158
     MM Commands   20                 Quit   166
     Mode abbrevs   174, 180          Quitting   50, 160
     Mode line   6, 28, 83,  96,  103,Quote Execute Command   24
               134, 157               Quoting   14, 182
     Motion   53, 55, 94, 111, 115
     Moving text   44                 R   62
     MQREPL   128                     Read Command Prompt   21
     Muddle mode   111                Read Incremental Word Abbrev File
                                                182
     Name Kbd Macro   155             Read Mail   34
     Narrowing   61, 93, 95, 98       Read Word Abbrev File   178, 182
     Next File   126                  Read-Only Visiting   72
     Next Screen Context Lines   88   Readable Word Abbrev Files   179
     Numeric argument   176, 182      Reap File   77
     Numeric  arguments    18, 22, 24,Recursive editing level   6,  28,
               44, 46, 54, 58, 59, 62,          78,  85, 142, 160, 166,
               63, 74, 77, 88, 91, 92,          178
               98, 108, 116, 134, 138,Redefining abbrevs   176
               159, 189               Redefining commands   145, 151
                                      Region   39, 44, 45, 56, 62,  63,
     Only Global Abbrevs   180                  81,  93,  94, 115, 116,
     Options   138                              176, 187
     Outragedy   66                   Region Query Size   62
     Overprinting   12                Rename Buffer   85
     Overwrite mode   7, 135          Rename File   82
                                      Replace String   98
     PAGE   96                        Replacement   98, 100
     Page Delimiter   56, 95          Replay Journal File   166
     PAGE Flush CRLF   97             Rerun CCL   30, 104
     Pages   40, 56, 94, 96, 187      Restarting   164
     Paragraph Delimiter   56, 120    Return   10, 12, 14, 71
     Paragraphs   40, 55, 60, 64, 110,Return from Inferior Hook   31
               119, 187               Return from Superior Hook   30
     Parentheses   53, 106, 141       Return, stray   12
     Permit Unmatched Paren   106     Revert File   74, 76
     Permute Pages From Table   187   Right Picture Movement   185
     Pictures   185                   Rubout   10, 12, 14, 15, 21,  42,
     Point   5, 14                              67,  99, 102, 110, 135,
     Prefix characters   10, 146, 152           156
     262                                 EMACS Manual for TWENEX Users



     Run Library   137                SYSTAT   33

     S-expressions   111, 141         Tab    12, 53, 57, 102, 105, 110,
     SAIL Character Mode   135                  115
     SAIL characters   188            Tab Stop Definitions   58
     Save All Files   85              Tabify   59
     Save Word Abbrevs   178, 183     Tag Table Filenames   125
     Saving   71, 74                  TAGGEN   124
     Saving abbrevs   178             TAGS   84, 92, 137
     Screen   5, 87                   Tags Apropos   128
     SCRIBE   63                      Tags File List   128
     Scrolling   87, 88, 91           TAGS Find File   84, 124, 128
     Search Exit Char   50            Tags Query Replace   128
     Search Exit Option   50          Tags Rescan   128
     Searching   49, 96, 98           Tags Search   128
     Select Buffer   83               Techniquitous   66
     Send Mail   34                   TECO   21, 23, 26,  31,  48,  56,
     Sentences   55, 67                         61,  82,  87, 101, 104,
     Set Key   25, 180                          105,  106,  118,   137,
     Set Terminal Type   162, 190               139,   143,  145,  154,
     Set Variable   138                         164, 193
     Set Visited Filename   82        TECO default filenames   82
     Short Display Size   194         TECO mode   120
     Slow Search Lines   194          TECO search string   128
     Slow Search Separator   195      TECO search strings   77, 98, 101
     SLOWLY Maximum Speed   195       Temp File FN2 List   77
     Sort Lines   187                 Terminal type   162, 190
     Sort Pages   187                 Text justifiers   62
     Sort Paragraphs   187            Text mode   53, 106
     Sorting   187                    Text Mode Hook   106
     SOS   72                         Toggling   134
     Space   10, 12, 21, 59,  69,  99,Top Display Margin   87
               156                    Top level   6, 160, 164
     Space Indent Flag   57           Transposition   54, 68, 113
     Spell Program   69               TRMTYP   190
     SPLIT   163                      Two window mode   90
     Split File   163                 Typeout   5
     Split pages   97                 Typos   67, 68
     SRCCOM   73
     Start Journal File   165         Underline Begin   63
     String  arguments     22, 24, 77,Underline End   63
               138                    Underlining   62
     String Search   51               Undo   44, 62, 74, 163, 164
     Strip SOS Line Numbers   72      Unexpanding abbrevs   177
     Submode   6                      Unsplit File   163
     Subroutines   25                 Untabify   59
     Subsystem   6                    Up Picture Movement   185
     Syntax table   53, 54, 106,  110,Uparrow   12
               114, 140               Uppercase Lisp Buffer   113
     263                                 EMACS Manual for TWENEX Users



     Uppercase Lisp Region   113      ^R Append Next Kill   45
     URK   85, 163                    ^R Append to Buffer   47
     User Name   145                  ^R Back to Indentation   57
                                      ^R Backward Character   15
     Variables   12, 138, 145         ^R   Backward   Delete  Character
     View Arglist   128                         14, 42, 67, 110
     View Buffer   88                 ^R Backward Delete  Hacking  Tabs
     View Directory   77                        110
     View File   81, 89               ^R Backward Environment   64
     View Kbd Macro   155             ^R  Backward  Kill Sentence   42,
     View Page Directory   97                   55, 67
     Visit File   82                  ^R Backward Kill Sexp   42, 112
     Visit File Save Old   72         ^R Backward Kill Word    42,  54,
     Visit Tag Table   124                      67
     Visiting   16, 71, 74, 84, 92    ^R Backward List   112
                                      ^R Backward Paragraph   56, 119
     W2   90                          ^R Backward SCRIBE Paragraph   64
     What Available Space   163       ^R Backward Sentence   55
     What Cursor Position   61        ^R Backward Sexp   111
     What Page   94                   ^R   Backward   TECO  Conditional
     What Tag?   129                            120
     Windows   90                     ^R Backward Up Environment   64
     Word Abbrev Hook   183           ^R Backward Up List   112
     Word abbrev mode   7,  135,  174,^R Backward Word   53
               175, 180               ^R Beginning of Defun   115
     Word Search   51                 ^R Beginning of Line   15
     WORDAB   174                     ^R Buffer Not Modified   73
     WORDAB All Caps   177            ^R Center Line   60
     WORDAB Ins Chars   181           ^R Change Environment Name   64
     WORDAB Setup Hook   183          ^R Change Form   64
     WORDAB.DEFNS   178               ^R Commands   20
     Words     40, 53, 61, 62, 67, 68,^R Copy Region   45
               140                    ^R Correct Word Spelling   69
     Write File   76, 81              ^R Count Lines Page   95
     Write  Incremental  Word   Abbrev^R CRLF   14
               File   182             ^R Delete Blank Lines   17, 43
     Write Kbd Macro   155            ^R Delete Character   42
     Write Word Abbrev File   178, 182^R  Delete Horizontal Space   43,
                                                57, 105
     XLISP   113                      ^R Delete Indentation    43,  57,
                                                105, 116
     ^   12, 99                       ^R Directory Display   77
     ^R (in function names)   11      ^R DIRED   80
     ^R Abbrev Expand Only   177      ^R Down Comment Line   108
     ^R  Add Global Word Abbrev   176,^R Down Environment   64
               180                    ^R Down List   112
     ^R Add Mode Word Abbrev      176,^R Down Real Line   15
               180                    ^R Edit Quietly   194
     ^R Add Tag   126                 ^R End Kbd Macro   154
     264                                 EMACS Manual for TWENEX Users



     ^R End of Defun   115            ^R Join Next Page   97
     ^R End of Environment   64       ^R Kbd Macro Query   155
     ^R End of Line   15              ^R Kill Comment   108
     ^R Exchange Point and Mark   40  ^R Kill Global Word Abbrev   180
     ^R Execute Kbd Macro   154       ^R Kill Inferior   32
     ^R Execute Minibuffer   157      ^R Kill Line   42
     ^R Exit   29, 138                ^R Kill Mode Word Abbrev   180
     ^R Extract Sublist   113         ^R Kill Region   42
     ^R Fill Paragraph   60           ^R Kill Sentence   42, 55
     ^R Fill Region   60              ^R Kill Sexp   42, 112
     ^R Format Code   116             ^R Kill Terminated Word   119
     ^R Forward Character   15        ^R Kill Word   42, 54
     ^R Forward Environment   64      ^R Lowercase Region   62
     ^R Forward List   112            ^R Lowercase Word   61, 68
     ^R Forward Paragraph   56, 119   ^R Mark Beginning   40
     ^R Forward Sentence   55         ^R Mark Defun   40, 115
     ^R Forward Sexp   111            ^R Mark End   40
     ^R Forward TECO Conditional   120^R Mark Environment   64
     ^R Forward Up List   112         ^R Mark Page   40, 94
     ^R Forward Word   53             ^R Mark Paragraph   40, 56
     ^R Get Q-reg   48                ^R Mark Sexp   40, 113
     ^R Go to AC Field   119          ^R Mark Whole Buffer   40
     ^R Go to Address Field   119     ^R Mark Word   40, 54
     ^R Go to Next Label   119        ^R Move Over )   113
     ^R Go to Previous Label   119    ^R Move to Screen Edge   89
     ^R Goto Beginning   15           ^R Narrow Bounds to Page   93, 95
     ^R Goto End   15                 ^R Narrow Bounds to Region   93
     ^R Goto Next Page   96           ^R New Window   15, 87, 197
     ^R Goto Page   96                ^R Next Page   94
     ^R Goto Previous Page   96       ^R Next Screen   88
     ^R Grow Window   91, 159         ^R One Window   90
     ^R Incremental Search   49, 96   ^R Open Line   17, 18
     ^R Indent for Comment   107      ^R Other Window   90
     ^R Indent for Lisp   110, 115    ^R PAGE Widen Bounds   96
     ^R Indent Nested   120           ^R Prefix Control   10
     ^R Indent New Comment Line   109 ^R Prefix Control-Meta   10
     ^R  Indent  New  Line    57, 102,^R Prefix Meta   10
               105, 116               ^R Previous Page   94
     ^R Indent Region   58, 116       ^R Previous Screen   88
     ^R Indent Rigidly   58           ^R Put Q-reg   48
     ^R Indent Sexp   116             ^R Query Replace   100, 158
     ^R Insert ()   113               ^R Quoted Insert   14
     ^R Insert Pagemark   97          ^R Re-execute Minibuffer      23,
     ^R Instant Extended Command   22           99, 158
     ^R Inverse Add Global Word Abbrev^R Reposition Window   89
               176, 180               ^R Return to Superior   29
     ^R  Inverse  Add Mode Word Abbrev^R Reverse Search   49, 96
               176, 180               ^R Save File   16, 72, 85
     ^R Invoke Inferior   32          ^R Scroll Other Window   91
     265                                 EMACS Manual for TWENEX Users



     ^R Set Comment Column   109
     ^R Set File Read-Only   72
     ^R Set Fill Column   60, 134
     ^R Set Fill Prefix   60
     ^R Set Screen Size   194
     ^R Set/Pop Mark   39
     ^R Slow Display I-Search   194
     ^R  Slow Reverse Display I-search
               194
     ^R Start Kbd Macro   154
     ^R System Load Average   33
     ^R Tab to Tab Stop   53, 58
     ^R Transpose Characters   15, 68
     ^R Transpose Lines   68
     ^R Transpose Regions   68
     ^R Transpose Sexps   113
     ^R Transpose Words   54
     ^R Two Windows   90
     ^R Un-kill   44
     ^R Un-kill Pop   46
     ^R Underline Region   63
     ^R Underline Word   62
     ^R Universal Argument   18
     ^R Up Comment Line   108
     ^R Up Real Line   15
     ^R Upcase Digit   68
     ^R Uppercase Initial   61, 68
     ^R Uppercase Region   39, 62
     ^R Uppercase Word   61, 68
     ^R View Two Windows   91
     ^R Visit File   16, 71
     ^R Visit in Other Window   92
     ^R Widen Bounds   93, 95
     ^R Word Abbrev Prefix Mark   177
     i                                   EMACS Manual for TWENEX Users



                             TABLE OF CONTENTS



     Introduction                                                    3


     1.  The Organization of the Screen                              5

        1.1 The Mode Line                                            6


     2.  Character Sets and Command Input Conventions                9

        2.1 The 9-bit Command Character Set                          9
        2.2 Prefix Characters                                       10
        2.3 Commands, Functions, and Variables                      11
        2.4 Notational Conventions for ASCII Characters             12


     3.  Basic Editing Commands                                     14

        3.1 Inserting Text                                          14
        3.2 Moving The Cursor                                       15
        3.3 Erasing Text                                            15
        3.4 Files                                                   16
        3.5 Help                                                    16
        3.6 Using Blank Lines Can Make Editing Faster               17


     4.  Giving Numeric Arguments to EMACS Commands                 18

        4.1 Autoarg Mode                                            19


     5.  Extended (Meta-X) Commands and Functions                   20

        5.1 Issuing Extended Commands                               20
        5.2 Arcane Information about M-X Commands                   23


     6.  Moving Up And Down Levels                                  27

        6.1 Subsystems                                              27
        6.2 Recursive Editing Levels                                28
        6.3 Exiting Levels; Exiting EMACS                           29
        6.4 Running Subforks under EMACS                            30
     ii                                  EMACS Manual for TWENEX Users



        6.5 Reading Mail                                            34


     7.  Self-Documentation Commands                                36


     8.  The Mark and the Region                                    39

        8.1 Commands to Mark Textual Objects                        40
        8.2 The Ring of Marks                                       41


     9.  Killing and Moving Text                                    42

        9.1 Deletion and Killing                                    42
        9.2 Un-Killing                                              44
        9.3 Other Ways of Copying Text                              47


     10.  Searching                                                 49


     11.  Commands for English Text                                 53

        11.1 Word Commands                                          53
        11.2 Sentence and Paragraph Commands                        55
        11.3 Indentation Commands for Text                          57
        11.4 Text Filling                                           59
        11.5 Case Conversion Commands                               61
        11.6 Underlining                                            62
        11.7 SCRIBE Mode                                            63
        11.8 Dissociated Press                                      65


     12.  Commands for Fixing Typos                                 67

        12.1 Killing Your Mistakes                                  67
        12.2 Transposition                                          68
        12.3 Case Conversion                                        68
        12.4 Checking and Correcting Spelling                       69


     13.  File Handling                                             71

        13.1 Visiting Files                                         71
        13.2 How to Undo Drastic Changes to a File                  74
        13.3 Auto Save Mode: Protection Against Disasters           74
     iii                                 EMACS Manual for TWENEX Users



        13.4 Listing a File Directory                               77
        13.5 Cleaning a File Directory                              77
        13.6 DIRED, the Directory Editor Subsystem                  78
        13.7 Miscellaneous File Operations                          81


     14.  Using Multiple Buffers                                    83

        14.1 Creating and Selecting Buffers                         83
        14.2 Using Existing Buffers                                 85
        14.3 Killing Buffers                                        85


     15.  Controlling the Display                                   87


     16.  Two Window Mode                                           90

        16.1 Multiple Windows and Multiple Buffers                  92


     17.  Narrowing                                                 93


     18.  Commands for Manipulating Pages                           94

        18.1 Editing Only One Page at a Time                        96


     19.  Replacement Commands                                      98

        19.1 Query Replace                                          99
        19.2 Other Search-and-loop Functions                       100
        19.3 TECO Search Strings                                   101


     20.  Editing Programs                                         102

        20.1 Major Modes                                           102
        20.2 Compiling Your Program                                103
        20.3 Indentation Commands for Code                         104
        20.4 Automatic Display Of Matching Parentheses             106
        20.5 Manipulating Comments                                 107
        20.6 Lisp Mode and Muddle Mode                             110
        20.7 Lisp Grinding                                         115
        20.8 Editing Assembly-Language Programs                    119
        20.9 Major Modes for Other Languages                       120
     iv                                  EMACS Manual for TWENEX Users



     21.  The TAGS Package.                                        122

        21.1 How to Make a Tag Table for a Program                 122
        21.2 How to Tell EMACS You Want to Use TAGS                124
        21.3 Jumping to a Tag                                      125
        21.4 Other Operations on Tag Tables                        126
        21.5 What Constitutes a Tag                                129
        21.6 Adding or Removing Source Files                       130
        21.7 How a Tag Is Described in the Tag Table               131
        21.8 Tag Tables for INFO Structured Documentation Files    132


     22.  Simple Customization                                     134

        22.1 Minor Modes                                           134
        22.2 Libraries of Commands                                 136
        22.3 Variables                                             138
        22.4 The Syntax Table                                      140
        22.5 FS Flags                                              143
        22.6 Init Files and EMACS.VARS Files                       144
        22.7 Local Variables in Files                              151
        22.8 Keyboard Macros                                       153


     23.  The Minibuffer                                           157


     24.  Correcting Mistakes and EMACS Problems                   160

        24.1 Quitting and Aborting                                 160
        24.2 Dealing with Common Forms of EMACS Lossage            161
        24.3 Undoing Changes to the Buffer                         164
        24.4 Journal Files                                         165
        24.5 Reporting Bugs                                        170


     25.  Word Abbreviation Input                                  174

        25.1 Basic Usage                                           175
        25.2 Advanced Usage                                        179
        25.3 Teco Details for Extension Writers                    183


     26.  The PICTURE Subsystem, an Editor for Text Pictures       185


     27.  Sorting Functions                                        187
     v                                   EMACS Manual for TWENEX Users



     Appendix I. Particular Types of Terminals                     188

        I.1 Ideal Keyboards                                        188
        I.2 Keyboards with an "Edit" key                           188
        I.3 ASCII Keyboards                                        189
        I.4 Specifying Terminal Type                               190
        I.5 Upper-case-only Terminals                              192
        I.6 The SLOWLY Package for Slow Terminals                  193


     Appendix II. Use of EMACS from Printing Terminals             197


     Glossary                                                      199


     Command Summary                                               211


     Catalog of Libraries                                          236


     Index of Variables                                            243


     Index                                                         256