MicroEMACS

                          Full Screen Text Editor
                          Reference Manual

                          Version 3.10
                          March 19, 1989

                          (C)opyright 1988, 1989 by Daniel M. Lawrence
                          Reference Manual (C)opyright 1988, 1989
                                  by  Brian  Straight  and  Daniel  M.
          Lawrence
                          All Rights Reserved

                          MicroEMACS   3.10   can   be   copied    and
          distributed freely
                          for any non-commercial  purposes. MicroEMACS
          3.10 can
                          only   be   incorporated   into   commercial
          software with
                          the permission of the current author.


































          Introduction

                  MicroEMACS is  a  tool  for  creating  and  changing
          documents,  programs,  and  other text files.   It  is  both
          relatively  easy  for  the  novice  to  use,  but also  very
          powerful  in  the  hands  of  an expert. MicroEMACS  can  be
          extensively customized for the needs of the individual user.

                  MicroEMACS allows several files to be edited  at the
          same time. The  screen  can be split into different windows,
          and text may be moved freely from one window  to  the  next.
          Depending on the  type  of file being edited, MicroEMACS can
          change  how  it  behaves to make editing  simple.    Editing
          standard text  files,  program  files  and  word  processing
          documents are all possible at the same time.

                  There  are  extensive  capabilities  to   make  word
          processing and editing easier.  These  include  commands for
          string  searching and replacing, paragraph reformatting  and
          deleting, automatic word wrapping,  word  move  and deletes,
          easy case controlling, and automatic word counts.

                  For complex  and  repetitive  editing  tasks editing
          macroes  can be written.  These macroes  allow  the  user  a
          great degree of flexibility  in  determining  how MicroEMACS
          behaves.  Also, any and all the commands can be used  by any
          keystroke  by changing, or rebinding, what commands  various
          keys invoke.

                  Special  features  are  also  available to perform a
          diverse set of operations such as file encryption, automatic
          backup  file  generation,  entabbing  and  detabbing  lines,
          executing operating system commands  and  filtering  of text
          through other programs (like SORT to allow sorting text).

          History

                  EMACS  was  originally  a  text  editor  written  by
          Richard  Stallman  at  MIT in the early  1970s  for  Digital
          Equipment  computers. Various versions, rewrites and  clones
          have made an appearance since.

                  This  version  of MicroEMACS is  derived  from  code
          written by Dave G. Conroy in 1985.  Later modifications were
          performed by Steve Wilhite and George Jones.  In December of
          1985 Daniel  Lawrence  picked  up  the  then  current source
          (version 2.0) and made extensive modifications and additions
          to it over the course of the next three years.   Updates and
          support  for  the   current  version  are  still  available.
          Commercial support and usage  licences  are  also available.
          The current program author can be contacted by writing to:

                  USMAIL: Daniel Lawrence
                          617 New York St











                          Lafayette, IN 47901

                  UUCP:   pur-ee!pur-phy!j.cc.purdue.edu!nwd
                  ARPA:   nwd@j.cc.purdue.edu
                  FIDO:   Opus 201/10 The Programmer's Room (317) 742-5533





























































          Credits

                  Many  people  have been involved  in  creating  this
          software  and we wish to credit some of  them  here.    Dave
          Conroy,  of  course,  wrote  the  very   first   version  of
          MicroEMACS, and it is  a  credit to his clean coding that so
          much  work was able to be done to expand it.  John Gamble is
          responsible for writing the MAGIC mode search  routines, and
          for maintaining  all the search code.  Dana Hoggatt supplied
          the encryption routines for encrypt  mode  and  continues to
          answer really hard questions about  MSDOS  and  UNIX.   Jeff
          Lomicka wrote the appendix on DEC VMS and has supplied a lot
          of code to support VMS and the ATARI 1040ST versions. Curtis
          Smith  wrote  the  original VMS code and  help  support  the
          Commodore AMIGA.  Also Lance Jones has done a lot of work on
          the AMIGA code.  Professor Suresh Konda at Purdue University
          has  put a lot of effort into  writing  complex  macros  and
          finding all the bugs in  the  macro  language  before anyone
          else does.

                  As   to   people   sending   source  code  and  text
          translations  over  computer  networks  like USENET and ARPA
          net, there are simply more than can be listed  here.    [The
          comments in the edit history in the main.c file mention each
          and the  piece they contributed]. All these people should be
          thanked for the hard work they have put into MicroEMACS.


                                        Daniel M. Lawrence



































               Basic Concepts                   MicroEMACS Reference Manual








                                        Chapter 1

                                      Basic Concepts


                       The  current  version  of  MicroEMACS is 3.10 (Third
               major re-write, tenth  public  release), and for the rest of
               this  document, we shall simply refer  to  this  version  as
               "EMACS". Any modifications for later versions will be in the
               file README on the MicroEMACS distribution disk.


               1.1  Keys and the Keyboard


                       Many times throughout this manual we will be talking
               about  commands  and  the keys on the keyboard needed to use
               them.  There  are  a  number  of "special" keys which can be
               used and are listed here:

               <NL>          NewLine which is  also called RETURN or ENTER,
                             this key is used to end different commands.

               ^             The  control  key   can  be  used  before  any
                             alphabetic  character  and  some symbols.  For
                             example,  ^C means to hold down the  <CONTROL>
                             key and type the C key at the same time.

               ^X            The CONTROL-X key is used at the  beginning of
                             many different commands.

               META or M-    This is a special EMACS key used to begin many
                             commands as well. This key is pressed and then
                             released before typing the next character.  On
                             most systems, this is the  <ESC>  key,  but it
                             can be changed.  (consult appendix E  to learn
                             what key is used for META on your computer).

                       Whenever  a  command  is  described, the manual will
               list the  actual keystrokes needed to execute it in boldface
               using  the  above  conventions,  and  also the name  of  the
               command in italics.








               1






               MicroEMACS Reference Manual                   Basic Concepts


               1.2  Getting Started


                       In order to use EMACS, you must call it up from your
               system  or computer's command prompt.   On  UNIX  and  MSDOS
               machines, just type "emacs" from the main command prompt and
               follow it with the <RETURN> or <ENTER> key (we will refer to
               this  key  as  <NL> for "new-line" for the remainder of this
               manual).   On the Macintosh, the Amiga,  the  ATARI  ST  and
               other icon based  operating  systems,  double  click  on the
               uEMACS icon. Shortly after this, a screen similar to the one
               below should appear.


               1.3  Parts and Pieces


                       The  screen is divided into a  number  of  areas  or
               windows.  On some systems the top window contains a function
               list of unshifted and shifted function keys. We will discuss
               these keys later. Below them is an EMACS mode line which, as
               we will see, informs you of the present mode of operation of
               the editor--for example "(WRAP)" if you set EMACS to wrap at
               the end of each line. Under the mode line is the text window
               where text appears and  is  manipulated.   Since each window
               has its own mode line, below the text window  is  it's  mode
               line.  The last line of the screen is the command line where
               EMACS takes commands and reports on what it is doing.

               ===============================================================================
               f1 search-> f2 <-search |    MicroEMACS:  Text Editor
               f3 hunt->   f4 <-hunt   |
               f5 fkeys    f6 help     |  Available function key Pages include:
               f7 nxt wind f8 pg[    ] |    WORD  BOX  EMACS  PASCAL  C
               f9 save     f10 exit    |  [use the f8 key to load Pages]
               ===============================================================================
                  MicroEMACS 3.10 ()    Function Keys
               ===============================================================================











               ===============================================================================
               ---- MicroEMACS 3.10 () -- Main
               ----------------------------------------------
               ===============================================================================



                                                                          2






          Basic Concepts                   MicroEMACS Reference Manual


                          Fig 1:  EMACS screen on an IBM-PC


          1.4  Entering Text


                  Entering  text  in  EMACS  is  simple.     Type  the
          following sentence fragment:

               Fang  Rock  lighthouse,  center  of  a  series  of
               mysterious and

          The text is displayed at the top of the text window.  Now
          type:

               terrifying events at the turn of the century

                  Notice that some of your  text  has  dissapeared off
          the  left side of the screen.   Don't  panic--your  text  is
          safe!!!  You've  just  discovered  that EMACS doesn't "wrap"
          text to the next line like most word  processors  unless you
          hit <NL>.  But since EMACS is used for both word processing,
          and text editing, it has a  bit  of a dual personality.  You
          can change the way it works by setting various  modes.    In
          this case, you need  to  set  WRAP  mode, using the add-mode
          command, by typing ^XM.  The command line at the base of the
          screen will prompt you for the  mode  you wish to add.  Type
          wrap followed by  the  <NL>  key  and any text you now enter
          will be wrapped.  However,  the  command  doesn't  wrap text
          already entered.   To  get  rid  of the long line, press and
          hold down the <BACKSPACE>  key  until the line is gone.  Now
          type in the words you deleted, watch how EMACS goes  down to
          the next  line  at  the  right  time.   (In some versions of
          EMACS, WRAP is a  default  mode in which case you don't have
          to worry about  the  instructions  relating  to  adding this
          mode.)

                  Now let's type a longer insert.  Hit  <NL>  a couple
          of  times  to  tab down from the text you just entered.  Now
          type the following paragraphs.  Press <NL> twice to indicate
          a paragraph break.

               Fang  Rock  lighthouse,  center  of  a  series  of
               mysterious and terrifying events  at  the  turn of
               the  century, is built on a  rocky  island  a  few
               miles  of  the  Channel coast.  So  small  is  the
               island that wherever you stand its  rocks  are wet
               with sea spray.

               The lighthouse  tower  is  in  the  center  of the
               island.   A steep flight of  steps  leads  to  the
               heavy door in its base.  Winding stairs lead up to
               the crew room.



          3






               MicroEMACS Reference Manual                   Basic Concepts


               1.5  Basic cursor movement


                       Now let's practice moving around in this text.
                                                               To  move the
               cursor back
               to the word "Winding," enter M-B previous-word.
                                       This   command   moves   the  cursor
               backwards by one
               word at a time.  Note you have to press the  key combination
               every time the cursor steps  back by one word.  Continuously
               pressing META and toggling B  produces an error message.  To
               move forward to the word "stairs" enter M-F next-word, which
               moves the cursor forward by one word at a time.

                       Notice  that EMACS commands are usually  mnemonic--F
               for forward, B for backward, for example.

                       To move the  cursor  up one line, enter ^P previous-
               line, down one line ^N next-line.  Practice this movement by
               moving the cursor to the  word  "terrifying"  in  the second
               line.

                       The cursor  may also be moved forward or backward in
               smaller increments.  To move forward by one character, enter
               ^F   forward-character,  to  move  backward,  ^B   backward-
               character.  EMACS also allows  you to specify a number which
               is  normally  used  to tell a command to execute many times.
               To  repeat most commands, press META  and  then  the  number
               before you enter the  command.   Thus, the command META 5 ^F
               (M-5^F) will move the  cursor  forward  by  five characters.
               Try moving around in the text by using these commands.   For
               extra  practice,  see  how  close  you can come to the  word
               "small" in the first paragraph  by giving an argument to the
               commands listed here.

                       Two other simple cursor commands that are  useful to
               help us move around in the text are M-N next-paragraph which
               moves the  cursor to the second paragraph, and M-P previous-
               paragraph which moves it  back  to  the  previous paragraph.
               The cursor may  also  be  moved  rapidly from one end of the
               line to the other.  Move the cursor to the word "few" in the
               second line.  Press ^A beginning-of-line.  Notice the cursor
               moves to the word  "events"  at  the  beginning of the line.
               Pressing ^E end-of-line moves the cursor to the  end  of the
               line.

                       Finally, the cursor  may  be moved from any point in
               the file to the end or beginning of the file.   Entering M->
               end-of-file moves the cursor to the end of  the  buffer, M-<
               beginning-of-file to the first character of the file.

                       On the IBM-PC, the ATARI ST and many other machines,
               the cursor keys can also be used to move the cursor.


                                                                          4






          Basic Concepts                   MicroEMACS Reference Manual


                  Practice moving the cursor in the text until you are
          comfortable  with  the   commands  we've  explored  in  this
          chapter.


          1.6  Saving your text


                  When  you've  finished practicing  cursor  movement,
          save  your  file.   Your file currently resides in a BUFFER.
          The buffer is a temporary storage area for your text, and is
          lost  when the computer is turned off.   You  can  save  the
          buffer  to  a  file by entering ^X^S save-file.  Notice that
          EMACS informs you that your file has no name  and  will  not
          let you save it.

                  To save your buffer to  a file with a different name
          than it's current one  (which  is  empty), press ^X^W write-
          file.  EMACS will prompt you for the filename  you  wish  to
          write.   Enter the name fang.txt and press  return.    On  a
          micro, the drive light will come on, and  EMACS  will inform
          you it  is  writing  the  file.    When it finishes, it will
          inform  you of the number of lines it  has  written  to  the
          disk.

                  Congratulations!! You've just saved your first EMACS
          file!





























          5






               MicroEMACS Reference Manual                   Basic Concepts






                                    Chapter 1 Summary


                       In chapter 1, you learned  how to enter text, how to
               use wrap mode, how to move the cursor, and to save a buffer.
               The following is a  table  of  the  commands covered in this
               chapter and their corresponding key bindings:

               Key Binding             Keystroke       Effect

               abort-command           ^G              aborts current command

               add-mode                ^XM             allows addition of EMACS
                                                       mode such as WRAP

               backward-character      ^B              moves cursor left one
                                                       character

               beginning-of-file       M-<             moves cursor to beginning of
                                                       file

               beginning-of-line       ^A              moves cursor to beginning of
                                                       line

               end-of-file             M->             moves cursor to end of file

               end-of-line             ^E              moves cursor to end of line

               forward-character       ^F              moves cursor right one
                                                       character

               next-line               ^N              moves cursor to next line

               next-paragraph          M-N             moves cursor to next paragraph

               next-word               M-F             moves cursor forward one word

               previous-line           ^P              moves cursor backward by one
                                                       line

               previous-paragraph      M-P             moves cursor to previous
                                                       paragraph

               previous-word           M-B             moves cursor backward by one
                                                       word

               save-file               ^X^S            saves current buffer to a file

               write-file              ^X^W            save current buffer under a
                                                       new name


                                                                          6






               Basic Editing--Simple Insertions and Deletions    MicroEMACS
                                                           Reference Manual








                                        Chapter 2

                      Basic Editing--Simple Insertions and Deletions


               2.1  A Word About Windows, Buffers, Screens, and Modes


                       In the  first chapter, you learned how to create and
               save a file  in  EMACS.  Let's  do some more editing on this
               file.  Call up emacs by typing in the following command.

                       emacs fang.txt

                       On icon oriented systems, double click on the uEMACS
               icon,  usually  a  file dialog box of some sort will appear.
               Choose FANG.TXT from the appropriate folder.

                       Shortly  after  you invoke EMACS,  the  text  should
               appear on the screen ready for you to edit. The text you are
               looking at currently  resides  in  a  buffer.  A buffer is a
               temporary area  of computer memory which is the primary unit
               internal to EMACS --  this  is the place where EMACS goes to
               work.  The mode line at  the  bottom of the screen lists the
               buffer  name,  FANG.TXT  and the name of the file with which
               this buffer is associated, FANG.TXT

                       The computer talks to you  through  the  use  of its
               screen.  This screen usually has an area of 24 lines each of
               80  characters  across.   You can use EMACS to subdivide the
               screen into several separate work areas, or windows, each of
               which can be  'looking  into' different files or sections of
               text.  Using windows, you  can work on several related texts
               at  one  time,  copying and moving blocks  of  text  between
               windows with ease.   To  keep track of what you are editing,
               each window is identified by a mode line on the last line of
               the window which lists the name of the buffer  which  it  is
               looking into, the file from which the text was read, and how
               the text is being edited.

                       An  EMACS mode tells EMACS how  to  deal  with  user
               input.    As  we have already seen, the mode 'WRAP' controls
               how  EMACS  deals  with  long  lines  (lines  with  over  79
               characters)  while  the  user is typing them in.  The 'VIEW'
               mode, allows you to read a file without modifying it.  Modes
               are associated with buffers and  not  with  files;  hence, a
               mode  needs  to  be explicitly set or removed every time you


               7






          MicroEMACS Reference Manual            Basic Editing--Simple
                                              Insertions and Deletions


          edit a  file.    A  new  file  read  into  a  buffer  with a
          previously specified mode will be  edited  under  this mode.
          If you use specific  modes  frequently,  EMACS allows you to
          set  the modes which are used by  all  new  buffers,  called
          global modes.


          2.2  Insertions


                  Your previously-saved text should look like this:

               Fang  Rock  lighthouse,  center  of  a  series  of
               mysterious and terrifying events  at  the  turn of
               the  century, is built on a  rocky  island  a  few
               miles  of  the  Channel coast.  So  small  is  the
               island that wherever you stand its  rocks  are wet
               with sea spray.

               The lighthouse  tower  is  in  the  center  of the
               island.   A steep flight of  steps  leads  to  the
               heavy door in its base.  Winding stairs lead up to
               the crew room.

                  Let's  assume  you  want to add a  sentence  in  the
          second paragraph after the word  "base."    Move  the cursor
          until it is on the "W" of "Winding". Now type the following:

               This gives  entry to the lower floor where the big
               steam  generator  throbs  steadily away, providing
               power for the electric lantern.

                  If the line fails to wrap and you end up with  a '$'
          sign in the  right  margin, just enter M-Q fill-paragraph to
          reformat the paragraph.    This new command attempts to fill
          out a paragraph.   Long  lines are divided up, and words are
          shuffled around to make the paragraph look nicer.

                  Notice  that all visible EMACS characters are  self-
          inserting -- all you had to do was type  the  characters  to
          insert and the existing text made space for it.  With  a few
          exceptions  discussed  later,  all  non-printing  characters
          (such as  control  or  escape  sequences)  are  commands. To
          insert spaces, simply use the space bar.  Now  move  to  the
          first line of the file and type ^O open-line (Oh, not zero).
          You've just learned how to insert a blank line in your text.


          2.3  Deletions


                  EMACS offers a  number  of  deletion  options.   For
          example, move the cursor until  it's under the period at the


                                                                     8






          Basic Editing--Simple Insertions and Deletions    MicroEMACS
                                                      Reference Manual


          end of the insertion you just did.  Press the backspace key.
          Notice the "n"  on  "lantern"  disappeared.    The backspace
          implemented  on EMACS is called a destructive  backspace--it
          removes text immediately  before the current cursor position
          from  the  buffer.    Now type ^H delete-previous-character.
          Notice that  the cursor moves back and obliterates the "r"--
          either command will backspace the cursor.

                  Type in the  two  letters you erased to restore your
          text and move the cursor to the beginning of the  buffer M->
          beginning-of-file.  Move the cursor  down  one  line  to the
          beginning of the first paragraph.

                  To  delete  the  forward  character, type ^D delete-
          next-character. The "F" of "Fang" disappears.    Continue to
          type  ^D  until  the whole word is erased EMACS also permits
          the deletion of larger elements of text.  Move the cursor to
          the  word  "center"  in  the  first line of text.   Pressing
          M-<backspace>    delete-previous-word    kills    the   word
          immediately before the cursor. M-^H has the same effect.

                  Notice that the commands  are  very  similar  to the
          control commands  you used to delete individual letters.  As
          a general rule  in  EMACS,  control  sequences  affect small
          areas  of  text,  META  sequences  larger areas.   The  word
          forward of the  cursor  position can therefore be deleted by
          typing   M-D  delete-next-word.  Now  let's  take  out   the
          remainder of the first line by typing ^K kill-to-end-of-line
          .    You now have a blank line at the top  of  your  screen.
          Typing ^K again or ^X^O delete-blank-lines deletes the blank
          line and flushes  the  second  line  to the top of the text.
          Now  exit EMACS by typing ^X^C  exit-emacs.    Notice  EMACS
          reminds you that you have not saved your buffer.  Ignore the
          warning  and  exit.    This  way you can exit EMACS  without
          saving any of the changes you just made.




















          9






               MicroEMACS Reference Manual            Basic Editing--Simple
                                                   Insertions and Deletions






                                    Chapter 2 Summary


                       In Chapter 2, you learned about the  basic 'building
               blocks' of an EMACS text file--buffers, windows, and files.

               Key binding             Keystroke       Effect
               delete-previous-character
                                       ^H              deletes character immediately
                                                       before
                                                       the current cursor position

               delete-next-character   ^D              deletes character immediately
                                                       after
                                                       current cursor position

               delete-previous-word    M-^H            deletes word immediately
                                                       before
                                                       current cursor position

               delete-next-word        M-D             deletes word immediately after
                                                       current cursor position

               kill-to-end-of-line     ^K              deletes from current cursor
                                                       position to end of line

               insert-space            ^C              inserts a space to right of
                                                       cursor

               open-line               ^O              inserts blank line

               delete-blank-lines      ^X^O            removes blank line

               exit-emacs              ^X^C            exits emacs

















                                                                         10






          Using Regions                    MicroEMACS Reference Manual








                                   Chapter 3

                                 Using Regions


          3.1  Defining and Deleting a Region


                  At this point its time to familiarize ourselves with
          two more EMACS terms--the point and the mark.  The  point is
          located  directly  behind  the  current cursor position. The
          mark (as we shall  see  shortly) is user defined.  These two
          elements together are called the  current  region  and limit
          the  region  of  text  on  which EMACS performs many of  its
          editing functions.

                  Let's begin by entering some new text.
                                                  Don't forget  to add
          wrap
          mode  if its not set on this buffer.  Start EMACS and open a
          file called PUBLISH.TXT.  Type in the following text:

               One  of  the  largest  growth  areas  in  personal
               computing  is  electronic  publishing.  There  are
               packages available for  practically  every machine
               from  elegantly simple  programs  for  the  humble
               Commodore   64   to   sophisticated   professional
               packages for PC and Macintosh computers.

               Electronic  publishing is as revolutionary in  its
               way  as the Gutenburg press. Whereas the  printing
               press allowed the mass production and distribution
               of  the  written  word, electronic publishing puts
               the means of production  in  the  hands  of nearly
               every  individual. From the class magazine to  the
               corporate   report,   electronic   publishing   is
               changing  the  way  we  produce   and  disseminate
               information.

               Personal publishing greatly increases the  utility
               of  practically  every  computer.    Thousands  of
               people who joined  the computer revolution of this
               decade only  to  hide  their  machines  unused  in
               closets have discovered  a  new  use  for  them as
               dedicated publishing workstations.

                  Now let's do some editing.  The last paragraph seems
          a little out of  place.  To see what the document looks like


          11






          MicroEMACS Reference Manual                    Using Regions


          without it we can cut it from the text by moving  the cursor
          to the beginning of the paragraph.  Enter M-<space> set-mark
          .   EMACS  will  respond  with  "[Mark  set]".  Now move the
          cursor to the end of the paragraph.  You have just defined a
          region of text.   To  remove this text from the screen, type
          ^W kill-region.  The paragraph disappears from the screen.

                  On  further  consideration,  however,  perhaps   the
          paragraph we cut wasn't  so  bad after all.  The problem may
          have  been  one  of placement. If we could tack it on to the
          end  of  the  first  paragraph  it might work quite well  to
          support and strengthen the argument.  Move the cursor to the
          end  of the first paragraph and enter  ^Y  yank.  Your  text
          should now look like this:

               One  of  the  largest  growth  areas  in  personal
               computing  is  electronic  publishing.  There  are
               packages available for  practically  every machine
               from  elegantly simple  programs  for  the  humble
               Commodore   64   to   sophisticated   professional
               packages for PC and Macintosh computers.  Personal
               publishing  greatly  increases   the   utility  of
               practically  every computer.  Thousands of  people
               who joined the  computer revolution of this decade
               only to hide their machines unused in closets have
               discovered  a  new   use  for  them  as  dedicated
               publishing workstations.

               Electronic  publishing is as revolutionary in  its
               way  as the Gutenburg press. Whereas the  printing
               press allowed the mass production and distribution
               of  the  written  word, electronic publishing puts
               the means of production  in  the  hands  of nearly
               every  individual. From the class magazine to  the
               corporate   report,   electronic   publishing   is
               changing  the  way  we  produce   and  disseminate
               information.


          3.2  Yanking a Region


                  The  text  you  cut  initially  didn't  simply  just
          disappear,  it  was  cut  into  a  buffer  that retains  the
          'killed' text appropriately  called  the  kill  buffer.   ^Y
          "yanks"  the text back from this  buffer  into  the  current
          buffer. If you have a long line (indicated, remember, by the
          "$" sign), simply hit M-Q to reformat the paragraph.

                  There are other uses to which the kill buffer can be
          put.  Using the method  we've  already  learned,  define the
          last  paragraph  as  a  region.  Now  type  M-W copy-region.
          Nothing seems to have happened; the cursor stays blinking at



                                                                    12






          Using Regions                    MicroEMACS Reference Manual


          the point. But things have  changed, even though you may not
          be able to see any alteration.

                  To see what has happened to the contents of the kill
          buffer,  move  the  cursor down a couple of lines and "yank"
          the contents of the kill buffer back with ^Y.    Notice  the
          last paragraph is now repeated.  The region  you  defined is
          "tacked on" to  the  end  of  your file because M-W copies a
          region to the kill buffer while leaving the original text in
          your  working  buffer.    Some  caution  is  needed however,
          because the contents of the kill buffer are updated when you
          delete any regions, lines or words.  If you are moving large
          quantities of text, complete the operation before you do any
          more deletions or you  could  find that the text you want to
          move  has  been  replaced  by  the  most   recent  deletion.
          Remember--a buffer is a temporary  area  of  computer memory
          that  is  lost  when the machine is powered down or switched
          off. In order to make your changes permanent,  they  must be
          saved to a file before you leave EMACS.   Let's  delete  the
          section of text we just added and save the file to disk.




                               Chapter 3 Summary


                  In Chapter 3,  you  learned  how  to  achieve longer
          insertions and deletions. The  EMACS  terms  point  and mark
          were introduced  and you learned how to manipulate text with
          the kill buffer.

          Key Binding     Keystroke       Effect

          set-mark        M-<space>       Marks the beginning of a region

          delete-region   ^W              Deletes region between point and mark
                                          and
                                          places it in KILL buffer

          copy-region     M-W             Copies text between point and mark
                                          into
                                          KILL buffer

          yank-text       ^Y              Inserts a copy of the KILL buffer into
                                          current buffer at point










          13






               MicroEMACS Reference Manual               Search and Replace








                                        Chapter 4

                                    Search and Replace


               4.1  Forward Search


                       Load EMACS and bring in  the  file  you  just saved.
               Your file should look like the one below.

                    One  of  the  largest  growth  areas  in  personal
                    computing is  electronic  publishing.    There are
                    packages available for  practically  every machine
                    from  elegantly simple  programs  for  the  humble
                    Commodore   64   to   sophisticated   professional
                    packages for PC and Macintosh computers.  Personal
                    publishing  greatly  increases   the   utility  of
                    practically  every computer.  Thousands of  people
                    who joined the  computer revolution of this decade
                    only to hide their machines unused in closets have
                    discovered  a  new   use  for  them  as  dedicated
                    publishing workstations.

                    Electronic  publishing is as revolutionary in  its
                    way  as the Gutenburg press. Whereas the  printing
                    press allowed the mass production and distribution
                    of  the  written  word, electronic publishing puts
                    the means of production  in  the  hands  of nearly
                    every  individual. From the class magazine to  the
                    corporate   report,   electronic   publishing   is
                    changing  the  way  we  produce   and  disseminate
                    information.

                       Let's   use   EMACS   to   search   for   the   word
               "revolutionary"  in  the second paragraph.    Because  EMACS
               searches from  the current cursor position toward the end of
               buffers, and we intend to search forward, move the cursor to
               the beginning of the text.  Enter ^S  search-forward.   Note
               that the command line now reads

                       "Search [] <META>:"

                       EMACS is prompting you to enter the search string --
               the text you want to find.  Enter the word revolutionary and
               hit the META key.  The cursor moves to the  end  of the word
               "revolutionary."



                                                                         14






          Search and Replace               MicroEMACS Reference Manual


                  Notice that you  must  enter the <META> key to start
          the  search.  If  you  simply  press <NL> the  command  line
          responds with "<NL>".  Although this may seem infuriating to
          users who are used to pressing the return key to execute any
          command, EMACS' use of <META> to begin searches allows it to
          pinpoint text with great accuracy.  After every line wrap or
          carriage return, EMACS 'sees' a new  line  character (<NL>).
          If  you need to search for a word at the end of a line,  you
          can specify this word uniquely in EMACS.

                  In our  sample  text  for  example,  the  word "and"
          occurs a number  of  times,  but  only  once at the end of a
          line.  To search for this particular occurrence of the word,
          move the cursor to the beginning of the buffer and  type ^S.
          Notice that EMACS stores the last specified search string as
          the default string.   If  you  press  <META> now, EMACS will
          search    for   the   default   string,   in   this    case,
          "revolutionary."

                  To  change  this  string so we can  search  for  our
          specified "and"  simply enter the word and followed by <NL>.
          The command line now shows:

                  "search [and<NL>]<META>:"

                  Press <META> and the  cursor  moves  to "and" at the
          end of the second last line.


          4.2  Exact Searches


                  If the mode  EXACT  is active in the current buffer,
          EMACS searches on a case sensitive basis.  Thus, for example
          you could search for Publishing as distinct from publishing.


          4.3  Backward Search


                  Backward  searching  is  very  similar   to  forward
          searching except  that  it  is  implemented  in  the reverse
          direction.  To  implement  a reverse search, type ^R search-
          reverse. Because EMACS  makes no distinction between forward
          and backward stored search strings, the last search item you
          entered appears as  the  default string.  Try searching back
          for any word that lies  between the cursor and the beginning
          of  the buffer.  Notice that when the  item  is  found,  the
          point moves to the beginning  of the found string (i.e., the
          cursor appears under the first letter of the search item).

                  Practice searching for other words in your text.




          15






          MicroEMACS Reference Manual               Search and Replace


          4.4  Searching and Replacing


                  Searching and replacing is a powerful and  quick way
          of making changes to your text.  Our sample  text  is  about
          electronic  publishing,  but  the  correct term is 'desktop'
          publishing.    To  make  the  necessary changes we  need  to
          replace  all  occurrences  of  the  word  "electronic"  with
          "desktop." First, move the cursor  to the top of the current
          buffer with  the M-< command.  Then type M-R replace-string.
          The command line responds:

                  "Replace []<META>:"

                  where  the  square  brackets  enclose   the  default
          string.    Type  the  word  electronic and hit <META>.   The
          command line responds:

                  "with []<META>"

                  type desktop<META>.  EMACS replaces all instances of
          the original word with your revision.  Of  course,  you will
          have to capitalize the  first  letter  of "desktop" where it
          occurs at the beginning of a sentence.

                  You  have  just  completed an unconditional replace.
          In this operation,  EMACS  replaces  every  instance  of the
          found string with the replacement string.


          4.5  Query-Replace


                  You may also replace text on a case  by  case basis.
          The M-^R query-replace-string  command causes EMACS to pause
          at each instance of the found string.

                  For   example,  assume  we  want  to  replace   some
          instances of the word "desktop" with the word "personal." Go
          back to the beginning of the current buffer and enter the M-
          ^R query-replace command. The procedure is  very  similar to
          that which you  followed in the unconditional search/replace
          option. When the search begins however, you will notice that
          EMACS pauses  at  each  instance  of  "publishing"  and asks
          whether you  wish to replace it with the replacement string.
          You have a number of options available for response:

                  Response        Effect
                  Y(es)   Make the current replacement and skip to the next
                          occurrence of the search string

                  N(o)    Do not make this replacement but continue

                  !       Do the rest of the replacements with no more queries


                                                                    16






          Search and Replace               MicroEMACS Reference Manual


                  U(ndo)  Undo just the last replacement and query for it
                          again (This can only go back ONE time)

                  ^G      Abort the replacement command (This action does not
                          undo previously-authorized replacements

                  .       Same effect as ^G, but cursor returns to the point at
                          which the replacement command was given

                  ?       This lists help for the query replacement command

                  Practice searching and searching and replacing until
          you feel comfortable with the commands and their effects.




                               Chapter 4 Summary


                  In this  chapter,  you  learned  how  to  search for
          specified strings of text in  EMACS.  The chapter also dealt
          with searching for and replacing elements within a buffer.

          Key Binding             Keystroke                        Effect

          search-forward          ^S      Searches from point to end of buffer.
                                          Point is moved from current location
          to
                                          the end of the found string

          search-backward         ^R      Searches from point to beginning of
                                          buffer.
                                          Point is moved from current location
          to
                                          beginning of found string

          replace                 M-R Replace ALL occurrences of search string
                                  with
                                          specified (null) string from point to
          the
                                          end of the current buffer

          query-replace          M-^R As above, but pause at each found string
                                          and query for action











          17






          MicroEMACS Reference Manual                          Windows








                                   Chapter 5

                                    Windows


          5.1  Creating Windows


                  We have already met windows in  an  earlier chapter.
          In this chapter, we will explore one of EMACS' more powerful
          features  --  text  manipulation through multiple windowing.
          Windows offer you a powerful and easy way to edit text.   By
          manipulating a number  of  windows and buffers on the screen
          simultaneously, you can perform complete edits and revisions
          on  the  computer  screen while having your  draft  text  or
          original data available for reference in another window.

                  You will recall that  windows  are  areas  of buffer
          text  that  you  can  see  on the screen. Because EMACS  can
          support several screen windows  simultaneously  you  can use
          them to look into different places in the same buffer.   You
          can also use them to look at text in different buffers.   In
          effect, you can edit several files at the same time.

                  Let's invoke EMACS and pull back our file on desktop
          publishing by typing

               emacs publish.txt

                  When  the text appears, type the ^X2  split-current-
          window  command.    The window splits into two windows.  The
          window where the cursor resides is called the current window
          -- in this case the bottom window.  Notice that  each window
          has a text area and  a  mode  line.    The  command  line is
          however, common to all windows on the screen.

                  The two windows on your screen are  virtually mirror
          images of each other because the new window  is  opened into
          the same buffer as the one you are  in  when  you  issue the
          open-window command.    All  commands  issued  to  EMACS are
          executed on the current buffer in the current window.

                  To move the cursor to  the  upper  window  (i.e., to
          make that window  the  current  window,  type  ^XP previous-
          window.    Notice  the cursor moves to the upper or previous
          window.   Entering ^XO next-window moves to the next window.
          Practice moving between  windows.   You will notice that you



                                                                    18






          Windows                          MicroEMACS Reference Manual


          can also move into the Function Key menu  by  entering these
          commands.

                  Now  move to the upper window.   Let's  open  a  new
          file.   On the EMACS disk is a tutorial file.  Let's call it
          into the upper window by typing:

               ^X^F

                  and press return.

                  Enter the filename emacs.tut.

                  In a short time,  the  tutorial  file will appear in
          the window.   We  now  have  two windows on the screen, each
          looking into different buffers.   We have just used the ^X^F
          find-file  command  to  find  a  file and bring it into  our
          current window.

                  You  can  scroll  any window up and  down  with  the
          cursor  keys, or with the commands  we've  learned  so  far.
          However, because the area of  visible text in each window is
          relatively small, you  can  scroll the current window a line
          at a time.

                  Type ^X^N move-window-down

                  The current window  scrolls  down by one line -- the
          top line of text scrolls out of view, and  the  bottom  line
          moves towards the top of the screen.  You  can  imagine,  if
          you like, the whole window slowly moving down to the  end of
          the  buffer in increments of one line.    The  command  ^X^P
          move-window-up scrolls the window in the opposite direction.

                  As we have seen, EMACS editing commands are executed
          in the current window, but the program does support a useful
          feature  that allows you to scroll  the  next  window.  M-^Z
          scroll-next-up scrolls the next window up, M-^V scroll-next-
          down    scrolls  it  downward.   From the  tutorial  window,
          practice scrolling the window  with  the  desktop publishing
          text in it up and down.

                  When you're finished,  exit EMACS without saving any
          changes in your files.


                  Experiment  with  splitting  the  windows   on  your
          screen.  Open windows into different buffers  and experiment
          with any other files you may have.  Try editing the  text in
          each window, but don't forget to save any  changes  you want
          to keep -- you still have to save each buffer separately.





          19






               MicroEMACS Reference Manual                          Windows


               5.2  Deleting Windows


               Windows allow you  to  perform  complex  editing  tasks with
               ease.   However,  they  become  an  inconvenience  when your
               screen is cluttered  with  open  windows  you  have finished
               using.  The simplest solution is to delete unneeded windows.
               The command ^X0 delete-window will delete the window you are
               currently working in and move you to the next window.

                       If you have a number of windows open, you can delete
               all but the current  window  by  entering  ^X1 delete-other-
               windows.


               5.3  Resizing Windows


                       During complex editing tasks, you will probably find
               it  convenient to have a number of  windows  on  the  screen
               simultaneously.   However   this   situation   may   present
               inconveniences because the  more  windows  you  have  on the
               screen the smaller they  are;  in  some  cases, a window may
               show  only  a couple of lines of  text.    To  increase  the
               flexibility  and  utility  of  the window environment, EMACS
               allows you to resize the  window you are working in (called,
               as you will recall, the current window) to a convenient size
               for  easier  editing,  and then shrink it when you no longer
               need it to be so large.

                       Let's try an example.  Load in any  EMACS  text file
               and  split  the  current   window   into   two.    Now  type
               ^X^(Shift-6), grow-window.  Your  current  window  should be
               the lower one on the screen.  Notice that  it  increases  in
               size upwards by one line.   If  you are in the upper window,
               it increases in size in a downward direction.    The command
               ^X^Z, shrink-window correspondingly decreases window size by
               one line at a time.

                       EMACS  also  allows  you  to  resize  a  window more
               precisely by entering a numeric argument specifying the size
               of  the window in lines.  To resize  the  window  this  way,
               press the META key and enter a numeric argument (remember to
               keep  it smaller than the number of  lines  on  your  screen
               display) then press ^XW resize-window.   The  current window
               will be enlarged or shrunk  to the number of lines specified
               in the numeric argument.  For example entering:

                    M-8 ^XW

               will resize the current window to 8 lines.





                                                                         20






          Windows                          MicroEMACS Reference Manual


          5.4  Repositioning within a Window


                  The  cursor  may  be  centered  within  a  window by
          entering  M-!  or  M-^L  redraw-display.    This  command is
          especially useful in  allowing  you  to  quickly  locate the
          cursor if you  are  moving frequently from window to window.
          You  can  also  use this command to move the line containing
          the cursor to any position  within the current window.  This
          is done by using a numeric argument before the command. Type
          M-<n> M-^L where <n> is the number of the  line  within  the
          window that you wish the current line to be displayed.

                  The   ^L   Refresh-screen   command  is  useful  for
          'cleaning  up' a 'messy' screen that  can  result  of  using
          EMACS  on  a  mainframe system and being  interrupted  by  a
          system message.







































          21






               MicroEMACS Reference Manual                          Windows


               Chapter 5 summary

                       In Chapter 5 you learned how  to  manipulate windows
               and the editing flexibility they offer.

               Key Binding     Keystroke       Effect

               open-window     ^X2             Splits current window into two windows
                                               if
                                               space available

               close-windows   ^X1             Closes all windows except current
                                               window

               next-window     ^XO[oh]         Moves point into next (i.e. downward)
                                               window

               previous-window ^XP             Moves point to previous (i.e. upward)
                                               window

               move-window-down ^X^N           Scrolls current window down one line

               move-window-up  ^X^P            Scrolls current window up one line

               redraw-display  M ! or          Window is moved so line with point
                               M ^L            (with cursor) is at center of window

               grow-window     M-X ^           Current window is enlarged by one
                                               line and nearest window is shrunk by
                                               one line

               shrink-window   ^X^Z            Current window is shrunk by one line
                                               and nearest window is enlarged by one
               line

               clear-and-redraw ^L             Screen is blanked and redrawn.  Keeps
                                               screen updates in sync with your
               commands

               scroll-next-up  M-^Z            Scrolls next window up by one line

               scroll-next-down M-^V           Scrolls next window down by one line

               delete-window   ^X0             Deletes current window

               delete-other-windows ^X1        Deletes all but current window

               resize-window   ^X^W            Resizes window to a given numeric
                                               argument







                                                                         22






          Using a Mouse                    MicroEMACS Reference Manual








                                   Chapter 6

                                 Using a Mouse


                  On computers equipped with a  mouse,  the  mouse can
          usually  be  used  to make editing easier.  If your computer
          has a mouse,  let's  try  using  it.    Start  MicroEMACS by
          typing:

                  emacs publish.txt

                  This brings EMACS up and  allows it to edit the file
          from the last  chapter.    If  the  function  key  window is
          visible on  the  screen,  press  the  F5  key to cause it to
          disappear.  Now use the ^X2 split-current-window  command to
          split the screen into two windows.  Next use the  ^X^F find-
          file command to read in the fang.txt file.  Now  your screen
          should have two windows looking into two different files.

                  Grab the mouse and move it around.  On the screen an
          arrow, or block of color appears.  This is called  the mouse
          cursor and can be positioned on any character on the screen.
          On some  computers,  positioning  the  mouse  cursor  in the
          extreme  upper right or left corner  may  bring  down  menus
          which   allow  you  to  access  that  computers   utilities,
          sometimes called Desk Accessories.


          6.1  Moving around with the mouse


                  Using the mouse button  (or  the  left button if the
          mouse  has  more  than one), position the  mouse  over  some
          character in the current window.    Click  the  mouse button
          once.  The point will move to where the mouse cursor is.  If
          you place the mouse cursor past the end of a line, the point
          will move to the end of that line.

                  Move the mouse  cursor  into  the  other  window and
          click  on  one  of the characters there.    MicroEMACS  will
          automatically make this window  the  current  window (notice
          that  the  mode  line changes) and position the point to the
          mouse cursor.  This makes it  very  easy to use the mouse to
          switch to a different window quickly.





          23






               MicroEMACS Reference Manual                    Using a Mouse


               6.2  Dragging around


                       Besides just using  the  mouse to move around on the
               screen, you can use the same button to move text.   Move the
               mouse cursor to a character in one of the windows, and click
               down... but don't let the button up yet! The point will move
               to where the mouse cursor is.  Now move the mouse  cursor up
               or down on the  screen,  and  release  the button. The point
               will again move to where the mouse cursor is, but  this time
               it will bring the text under it along for the ride.  This is
               called dragging, and is  how  you  can  make the text appear
               just  where you want it to.  If you try to drag text out  of
               the current window, EMACS will ignore your attempt and leave
               the point where you first clicked down.

                       Now, click down on a word in one of the windows, and
               drag it directly to the left.  Release the button  and watch
               as the entire window slides, or scrolls to the  left.    The
               missing text has not been deleted, it is simply not visible,
               off the left hand side of the screen.  Notice the  mode line
               has changed and now looks like:

               ==== MicroEMACS 3.10 [<12] () == fang.txt == File: fang.txt
               =========

                       The [] delimits a new field which indicates that the
               screen is now scrolled 12 characters from the left margin.

                       Now grab the same  text  again,  and  drag it to the
               right,  pulling  the  rest of the text back into the current
               window.   The [<] field will  disappear,  meaning  that  the
               window is no longer  scrolled  to the left.  This feature is
               very  useful  for  looking  at  wide   charts   and  tables.
               Remember,  MicroEMACS  will  only  scroll  the  text  in the
               current window sideways if you drag it straight to the side,
               otherwise it will drag the text vertically.

                       Now, place  the mouse cursor over a character on the
               upper mode line, click  down,  move  the  mouse cursor up or
               down a few lines and let  go  of  the button.  The mode line
               moves to where  you  dragged  it,   changing the size of the
               windows above and below it.  If you  try  to  make  a window
               with  less  than  one line, EMACS will not let you. Dragging
               the mode lines can make it very fast  and  easy  for  you to
               rearrange the windows as you would like.

                       If you have a number of different windows visible on
               the screen, positioning the mouse  over the mode line of one
               window and clicking  the  right mouse button will cause that
               window to be deleted.





                                                                         24






          Using a Mouse                    MicroEMACS Reference Manual


          6.3  Cut and Paste


                  If your mouse has two  buttons, then you can use the
          right button to do  some  other things as well.  Earlier, we
          learned how to define a region by using  the  M-<space> set-
          mark command.  Now, position the mouse over at the beginning
          of a region you would like to copy.    Next  click  and hold
          down the right mouse button.  Notice that the point jumps to
          the mouse cursor and  EMACS  reports  "[Mark Set]".  Holding
          the button down move the mouse to the  end  of  the text you
          wish  to  copy  and release the mouse button.  Emacs reports
          "[Region Copied]" to let you know it has  copied  the region
          into  the  KILL  buffer.  If  you now click the right  mouse
          button, without moving the  mouse,  the  region  you defined
          would be deleted or cut from the current buffer.

                  If you move the mouse  again,  and  click  the right
          mouse button down and up  without moving the mouse, the text
          in the KILL buffer gets inserted, or pasted into the current
          buffer at the point.



































          25






               MicroEMACS Reference Manual                    Using a Mouse






                                    Chapter 6 Summary


                       In  Chapter  6,  you learned how to use the mouse to
               move  the  point,  switch  windows,  drag  text,  and resize
               windows.  You also learned how to use the right mouse button
               in order to copy and delete regions and yank  them  back  at
               other places.

               Action          Mouse Directions

               Move Cursor     position mouse cursor over desired location
                               click down and up with left button

               Drag Text       position mouse cursor over desired text
                               click left button down
                               move to new screen location for text
                               release mouse button

               Resize Windows  position mouse cursor over mode line to move
                               click left button down
                               move to new location for mode line
                               release mouse button

               Delete Window   position mouse cursor over mode line of window to
                               delete
                               click right mouse button

               Resize Screen   position mouse cursor over last character on message
                               line
                               click left button down
                               move to new lower right corner of screen
                               release mouse button

               Copy Region     position mouse at beginning of region
                               click right button down
                               move to end of region
                               release mouse button

               Cut Region      position mouse at beginning of region
                               click right button down
                               move to end of region
                               release mouse button
                               click right button down and up

               Paste region    Position mouse at place to paste
                               click right button down and up





                                                                         26






          Buffers                          MicroEMACS Reference Manual








                                   Chapter 7

                                    Buffers


                  We have already learned  a  number  of  things about
          buffers. As you will recall,  they  are  the  major internal
          entities in EMACS --  the  place  where editing commands are
          executed. They  are  characterized  by  their  names,  their
          modes, and by the file with which they are associated.  Each
          buffer also "remembers" its mark and point.  This convenient
          feature allows you to go to other buffers and return  to the
          original location in the "current" buffer.

                  Advanced users of EMACS frequently have a  number of
          buffers in the computer's  memory  simultaneously.    In the
          last chapter, for  example,  you opened at least two buffers
          -- one into the text you were editing, and  the  other  into
          the EMACS on-line tutorial.  If you deal  with  complex text
          files -- say, sectioned  chapters  of  a  book, you may have
          five or six buffers  in  the  computer's  memory.  You could
          select different  buffers by simply calling up the file with
          ^X^F find-file, and let EMACS  open  or  reopen  the buffer.
          However,  EMACS  offers  fast  and  sophisticated  buffering
          techniques that you will find easy to master  and  much more
          convenient to use.

                  Let's begin  by opening three buffers.  You can open
          any three you  choose,  for example call the following files
          into  memory:  fang.txt,  publish.txt,  and emacs.tut in the
          order listed  here.    When  you've  finished  this process,
          you'll be looking at  a  screen  showing the EMACS tutorial.
          Let's assume that you want to move to  the  fang.txt buffer.
          Enter:

                  ^XX next-buffer

                  This command moves you to the next buffer.
                                                          B ec a u s e
          EMACS cycles
          through the buffer list, which is alphabetized, you will now
          be in the fang.txt buffer. Using ^XX again places you in the
          publish.txt buffer. If you  are  on  a machine that supports
          function keys, using ^XX  again  places  you in the Function
          Keys buffer. Using ^XX one last time cycles you back  to the
          beginning of the list.




          27






               MicroEMACS Reference Manual                          Buffers


                       If you have a large  number of buffers to deal with,
               this  cycling process may be slow  and  inconvenient.    The
               command ^XB select-buffer allows you to  specify  the buffer
               you wish to be switched to.  When the  command  is  entered,
               EMACS prompts,  "Use buffer:".  Simply enter the buffer name
               (NOT  the  file  name), and that buffer will then become the
               current  buffer.    If you type in part of the file name and
               press the space bar, EMACS will attempt to complete the name
               from the list of  current  buffers.  If it succeeds, it will
               print the rest of the name and you can hit <NL> to switch to
               that  buffer.  If EMACS beeps the bell,  there  is  no  such
               buffer, and you may continue editing the name on the command
               line.

                       Multiple  buffer  manipulation  and  editing   is  a
               complex  activity,  and  you  will  probably  find  it  very
               inconvenient to re-save each buffer as you modify  it.   The
               command ^X^B list-buffers creates a  new  window  that gives
               details about all  the  buffers  currently  known  to EMACS.
               Buffers  that  have  been  modified  are  identified  by the
               "buffer  changed"  indicator  (an  asterisk  in  the  second
               column). You can thus quickly  and  easily  identify buffers
               that need to be saved to files before you  exit  EMACS.  The
               buffer  window  also provides other  information  --  buffer
               specific  modes,  buffer  size,  and  buffer  name  are also
               listed.  To close this window, simply type the close-windows
               command, ^X1.

                       To delete any buffer, type ^XK delete-buffer.
                                       EMACS  prompts  you  "Kill buffer:".
               Enter the
               buffer  name you want to delete.   As  this  is  destructive
               command, EMACS will  ask  for confirmation if the buffer was
               changed and not saved.  Answer  Y(es)  or N(o).  As usual ^G
               cancels the command.





















                                                                         28






          Buffers                          MicroEMACS Reference Manual






                               Chapter 7 Summary


                  In Chapter 7 you learned how to manipulate buffers.

          Key Binding             Keystroke                      Effect
          next-buffer             ^X^X            Switch to the next buffer in
                                                  the
                                                  buffer list

          select-buffer           ^XB             Switch to a particular buffer

          list-buffers            ^X^B            List all buffers

          delete-buffer           ^XK             Delete a particular buffer if
                                                  it
                                                  is off-screen



































          29






          MicroEMACS Reference Manual                            Modes








                                   Chapter 8

                                     Modes


                  EMACS allows you to change the way it works in order
          to customized it to the style of editing you are using.   It
          does this by providing a number of different  modes.   These
          modes can effect either a single buffer, or  any  new buffer
          that is created.  To add a mode to the current  buffer, type
          ^XM add-mode.  EMACS will then prompt you for the name  of a
          mode to add.  When you type in a legal mode name, and type a
          <NL>, EMACS will add the mode name to the  list  of  current
          mode names in the mode line of the current buffer.

                  To remove an existing mode, typing the  ^X^M delete-
          mode will cause EMACS to prompt  you  for the name of a mode
          to  delete  from  the current buffer.  This will remove that
          mode from the mode list on the current mode line.

                  Global modes are the modes  which  are  inherited by
          any new buffers which are created.  For example, if you wish
          to always do  string  searching  with  character  case being
          significant, you would want global mode EXACT to  be  set so
          that any new files read in inherent the EXACT mode.   Global
          modes are set  with  the  M-M  add-global-mode  command, and
          unset with the M-^M delete-global-mode command.    Also, the
          current  global  modes  are displayed in the first line of a
          ^X^B list-buffers command.

                  On machines which  are capable of displaying colors,
          the mode commands can also set the background and foreground
          character colors.   Using  add-mode  or  delete-mode  with a
          lowercase color will set the background color in the current
          window.  An uppercase color will set the foreground color in
          the  current window.  Colors that  EMACS  knows  about  are:
          white, cyan, magenta, yellow, blue, red,  green,  and black.
          If  the  computer  you  are  running on does not have  eight
          colors, EMACS will attempt to make some intelligent guess at
          what color to use when you ask for one which is not there.


          8.1  ASAVE mode


                  Automatic Save  mode  tells  EMACS  to automatically
          write out the current  buffer  to  its  associated file on a
          regular basis.   Normally  this will be every 256 characters


                                                                    30






          Modes                            MicroEMACS Reference Manual


          typed into  the  file.    The  environment  variable $ACOUNT
          counts down to the next auto-save, and $ASAVE  is  the value
          used to reset $ACOUNT after a save occurs.


          8.2  CMODE mode


                  CMODE is useful to C  programmers.    When  CMODE is
          active, EMACS will  try  to  assist  the user in a number of
          ways.  This mode is set automatically with files that have a
          .c or .h extension.

                  The <NL> key will  normally  attempt  to  return the
          user to the next line at the same level  of  indentation  as
          the last non blank line, unless the current line ends with a
          open brace ({) in which case the new line  will  be  further
          indented by one tab position.

                  A close brace (}) will search for  the corresponding
          open brace and line up with it.

                  A pound  sign (#) with only leading white space will
          delete all  the  white  space  preceding  itself.  This will
          always bring  preprocessor  directives  flush  to  the  left
          margin.

                  Whenever any close  fence  is typed, IE )]>}, if the
          matching open fence is on  screen in the current window, the
          cursor will briefly flash to it, and then  back.  This makes
          balancing expressions, and matching blocks much easier.


          8.3  CRYPT mode


                  When  a buffer is in CRYPT  mode,  it  is  encrypted
          whenever it is written  to  a file, and decrypted when it is
          read from the file.  The encryption key can be  specified on
          the command line with the -k switch, or with  the  M-E  set-
          encryption-key command.  If you attempt to read  or  write a
          buffer in crypt  mode  and  now  key has not been set, EMACS
          will execute set-encryption-key automatically, prompting you
          for the needed key.    Whenever EMACS prompts you for a key,
          it will not echo the key to your screen as  you  type it (IE
          make SURE you get it right when you set it originally).

                  The encryption algorithm used changes all characters
          into normal printing characters, thus the resulting  file is
          suitable for sending via  electronic  mail.   All version of
          MicroEMACS  should  be   able  decrypt  the  resulting  file
          regardless of what machine  encrypted  it.    Also available
          with EMACS is the stand alone program, MicroCRYPT, which can
          en/decrypt the files produced by CRYPT mode in EMACS.


          31






          MicroEMACS Reference Manual                            Modes


          8.4  EXACT mode


                  All  string  searches  and  replacements  will  take
          upper/lower case into account. Normally the case of a string
          during a search or replace is not taken into account.


          8.5  MAGIC mode


                  In the MAGIC mode  certain  characters  gain special
          meanings when used  in  a search pattern.  Collectively they
          are know as regular expressions,  and  a  limited  number of
          them  are  supported  in  MicroEmacs.    They  grant greater
          flexibility when using the search command.  However, they do
          not affect the incremental search command.

                  The symbols that have special meaning in  MAGIC mode
          are ^, $, ., &, *, [ (and ], used with it), and \.

                  The characters ^ and $ fix the search pattern to the
          beginning and end of  line,  respectively.   The ^ character
          must appear at the beginning of the search string, and the $
          must appear at  the  end, otherwise they loose their meaning
          and are treated just like any other character.  For example,
          in MAGIC mode, searching for  the pattern "t$" would put the
          cursor at the  end  of  any  line that ended with the letter
          't'.    Note  that  this  is  different  than searching  for
          "t<NL>", that is, 't' followed  by a newline character.  The
          character $ (and ^, for that matter) matches a position, not
          a character, so the  cursor  remains at the end of the line.
          But a newline is a character that must be matched, just like
          any other character,  which  means that the cursor is placed
          just after it - on the beginning of the next line.

                  The character .   has  a  very  simple meaning -- it
          matches any single character,  except  the  newline.  Thus a
          search for "bad.er"  could match "badger", "badder" (slang),
          or up to the 'r' of "bad error".

                  The character  * is known as closure, and means that
          zero  or more of the preceding character  will  match.    If
          there is no  character  preceding, * has no special meaning,
          and since it will not match  with  a newline, * will have no
          special meaning  if preceded by the beginning of line symbol
          ^ or the literal newline character <NL>.

                  The notion of zero or more characters  is important.
          If, for example, your cursor was on the line

               This line is missing two vowels.




                                                                    32






          Modes                            MicroEMACS Reference Manual


                  and a search was made for "a*", the cursor would not
          move,  because it is guaranteed to match  no  letter  'a'  ,
          which satisfies the search conditions.    If  you  wanted to
          search for one or  more  of the letter 'a', you would search
          for "aa*", which would match the letter a, then zero or more
          of them.

                  The  character  [   indicates  the  beginning  of  a
          character  class.    It is similar to the 'any' character .,
          but  you  get  to choose which characters you want to match.
          The  character class is ended with the  character  ].    So,
          while a search for "ba.e" will match "bane", "bade", "bale",
          "bate", et cetera, you can limit it to  matching  "babe" and
          "bake"  by  searching  for  "ba[bk]e".    Only  one  of  the
          characters inside the [ and ] will match a character.  If in
          fact you want to  match  any  character  except those in the
          character class, you can put a ^ as the first character.  It
          must be the first character of the class, or else it  has no
          special meaning.  So, a search for [^aeiou]  will  match any
          character except a vowel, but  a  search  for  [aeiou^] will
          match any vowel or a ^.

                  If  you  have  a lot of characters in order that you
          want to put in the character  class,  you may use a dash (-)
          as a range character.    So, [a-z] will match any letter (or
          any lower case letter  if  EXACT  mode  is on), and [0-9a-f]
          will  match  any  digit or any letter 'a' through 'f', which
          happen to be the characters for hexadecimal numbers.  If the
          dash is at the beginning or end of a character class,  it is
          taken to be just a dash.

                  The   character  &  (ampersand)  is  a   replacement
          character,  and represents the characters which matched  the
          search string.  When used in the M-R  replace-string  or the
          M-^R   query-replace-string  commands,   the   &   will   be
          substituted for the search string.

                  The escape character  \  is for those times when you
          want to be in MAGIC mode, but also  want  to  use  a regular
          expression character to be just a character.   It  turns off
          the  special  meaning  of  the  character.  So a search  for
          "it\."  will  search  for  a  line with "it.", and not  "it"
          followed by  any other character.  The escape character will
          also let you put ^, -, or ] inside a character class with no
          special side effects.


          8.6  OVER mode


                  OVER mode stands  for  overwrite mode.  When in this
          mode, when characters are typed, instead of simply inserting
          them  into  the  file, EMACS will attempt  to  overwrite  an



          33






               MicroEMACS Reference Manual                            Modes


               existing character past the point.   This is very useful for
               adjusting tables and diagrams.


               8.7  WRAP mode


                       Wrap mode is used when  typing  in  continuous text.
               Whenever the cursor is  past  the  currently set fill column
               (72  by  default)  and the user types a space or a <NL>, the
               last word of the line is brought down to  the  beginning  of
               the  next line.  Using this, one  just  types  a  continuous
               stream of words and  EMACS  automatically  inserts  <NL>s at
               appropriate places.

                                   NOTE to programmers:

                    The EMACS variable  $wraphook contains the name of
                    the function which  executes when EMACS detects it
                    is time to wrap. This is set to the function wrap-
                    word by default, but can  be  changed  to activate
                    different functions and macros at wrap time.


               8.8  VIEW mode


                       VIEW mode disables all commands which can change the
               current buffer.  EMACS will  display  an  error  message and
               ring the bell every  time  you attempt to change a buffer in
               VIEW mode.

























                                                                         34






          Modes                            MicroEMACS Reference Manual






                               Chapter 8 Summary


                  In Chapter  8  you  learned  about  modes  and their
          effects.

          Key Binding             Keystroke                      Effect
          add-mode                ^XM             Add a mode to the current
                                                  buffer

          delete-mode             ^X^M            Delete a mode from the current
                                                  buffer

          add-global-mode         M-M             Add a global mode to the
                                                  current buffer

          delete-global-mode      M-^M            Delete a global mode from the
                                                  current buffer


































          35






          MicroEMACS Reference Manual                            Files








                                   Chapter 9

                                     Files


                  A file is simply a collection of related data.
                                                          In  EMACS we
          are dealing
          with text files -- named collections of text  residing  on a
          disk (or some other  storage  medium).  You will recall that
          the major entities EMACS deals with are buffers.  Disk-based
          versions  of files are only active in  EMACS  when  you  are
          reading into or writing out of buffers.  As we  have already
          seen, buffers and physical files  are  linked  by associated
          file  names.  For example, the  buffer  "ch7.txt"  which  is
          associated with the physical disk file  "ch7.txt."  You will
          notice that the file is  usually specified by the drive name
          or (in the case of a hard  drive)  a  path.    Thus  you can
          specify full file names in EMACS,

                  e.g. disk:\directories\filename.extension

                  If you do not  specify  a  disk and directories, the
          default disk and the current directory is used.

                  IMPORTANT -- If  you  do  not  explicitly  save your
          buffer to a file, all your edits will be lost when you leave
          EMACS (although EMACS will prompt  you when you are about to
          lose edits by exiting).  In addition, EMACS does not protect
          your disk-based files from overwriting when it  saves files.
          Thus when you instruct EMACS to save a file to disk, it will
          create a file if  the  specified  file  doesn't exist, or it
          will overwrite the previously saved version of the file thus
          replacing it.  Your old version is gone forever.

                  If you are at  all  unsure  about  your edits, or if
          (for any reason) you  wish  to  keep  previous versions of a
          file,  you  can  change the name of the associated file with
          the command ^XN  change-file-name.   When this file is saved
          to disk, EMACS will create a new physical file under the new
          name.  The earlier disk file will be preserved.

                  For example,  let's  load  the  file  fang.txt  into
          EMACS.    Now,  type  ^XN.   The EMACS command line  prompts
          "Name:".  Enter a new name  for  the file -- say new.txt and
          press <NL>.  The file will be saved under the  new filename,
          and your disk directory will show both fang.txt and new.txt.



                                                                    36






          Files                            MicroEMACS Reference Manual


                  An alternative method is to write the  file directly
          to disk under a new  filename.  Let's pull our "publish.txt"
          file into EMACS.  To write this file under another filename,
          type ^X^W  write-file.  EMACS will prompt you "write file:".
          Enter an  alternate filename -- desktop.txt.  Your file will
          be saved as the physical file "desktop.txt".

                  Note that in the examples above,  although  you have
          changed the names of the  related  files,  the  buffer names
          remain the same.  However, when you pull  the  physical file
          back  into EMACS, you will find that  the  buffer  name  now
          relates to the filename.

                  For  example  --  You  are  working  with  a  buffer
          "fang.txt" with the related file "fang.txt".  You change the
          name of the file to "new.txt".  EMACS now shows  you working
          with the buffer "fang.txt" and the  related  file "new.txt".
          Now pull the file  "new.txt"  into  EMACS.   Notice that the
          buffer name has now changed to "new.txt".

                  If  for  any  reason  a  conflict  of  buffer  names
          occurs,(if  you have files of the  same  name  on  different
          drives for example) EMACS  will  prompt  you  "use buffer:".
          Enter an alternative buffer name if you need to.

                  For a list of file related commands  (including some
          we`ve already seen), see the summary page.





























          37






               MicroEMACS Reference Manual                            Files






                                    Chapter 9 Summary


                       In Chapter 9  you  learned some of the more advanced
               concepts of file naming and manipulation.   The relationship
               between files and buffers was discussed in some detail.

               Key Binding     Keystroke       Effect

               save-file       ^X^S            Saves contents of current buffer with
                                               associated filename on default disk/
                                               directory (if not specified)

               write-file      ^X^W            Current buffer contents will be
                                               saved under specified name

               change-file-name
                               ^XN             The associated filename is changed
                                               (or associated if not previously
                                               specified) as specified

               find-file       ^X^F            Reads specified file into buffer and
                                               switches you to that buffer, or
               switches
                                               to buffer in which the file has
               previously
                                               been read

               read-file       ^X^R            Reads file into buffer thus
                                               overwriting
                                               buffer contents.  If file has already
                                               been read into another buffer, you
               will
                                               be switched to it

               view-file       ^X^V            The same as read-file except the
                                               buffer
                                               is automatically put into VIEW mode
               thus
                                               preventing any changes from being made












                                                                         38






          Screen Formatting                MicroEMACS Reference Manual








                                   Chapter 10

                               Screen Formatting


          10.1  Wrapping Text


                  As we learned in  the  introduction,  EMACS is not a
          word processor,  but  an  editor.    Some  simple formatting
          options are available however, although in  most  cases they
          will not affect the appearance  of the finished text when it
          is run through  the  formatter.  We have already encountered
          WRAP mode which wraps lines  longer  than  a  certain length
          (default  is  75  characters).  You will recall that WRAP is
          enabled by entering  ^XM  and responding to the command line
          prompt with wrap.

                  You  can  also  set your own wrap  margin  with  the
          command  ^XF set-fill-column.  Notice EMACS responds  "[Fill
          column is 1]." Now try typing some text.  You'll notice some
          very strange things happening  --  your  text wraps at every
          word!!  This  effect  occurs  because  the  set  wrap margin
          command must be preceded by a numeric argument or EMACS sets
          it to the first column. Thus any text you type  that extends
          past the first column will  wrap at the most convenient line
          break.

                  To reset the wrap column to 72 characters, press the
          <META> key and enter 72.  EMACS will respond "Arg: 72".  Now
          press ^XF.  EMACS will respond "[Fill column is 72]".   Your
          text will again wrap  at  the margin you've been using up to
          this point.


          10.2  Reformatting Paragraphs


                  After  an  intensive  editing  session, you may find
          that you  have  paragraphs  containing  lines  of  differing
          lengths.    Although  this  disparity  will  not  affect the
          formatted text, aesthetic and technical concerns may make it
          desirable to have consistent paragraph blocks on the screen.
          If you are in  WRAP  mode, you can reformat a paragraph with
          the  command  M-Q  fill-paragraph.  This command 'fills' the
          current paragraph  reformatting  it  so  all  the  lines are
          filled and wrap logically.



          39






          MicroEMACS Reference Manual                Screen Formatting


          10.3  Changing Case


                  There may be occasions when you find it necessary to
          change  the  case  of the text you've entered.  EMACS allows
          you to change the case of even large amounts  of  text  with
          ease.    Let's  try  and  convert  a  few   of   the  office
          traditionalists to the joy of  word processing.  Type in the
          following text:

               Throw away your typewriter and learn to use a word
               processor.  Word  processing is relatively easy to
               learn   and   will  increase   your   productivity
               enormously.  Enter the Computer Age  and  find out
               just how much fun it can be!!

                  Let's give it a little more  impact  by capitalizing
          the first  four  words.    The  first  step is to define the
          region  of  text just as you would  if  you  were  doing  an
          extensive  deletion.    Set the mark at the beginning of the
          paragraph with M-<space> set-mark and move the cursor to the
          space beyond "typewriter." Now enter ^X^U case-region-upper.
          Your text should now look like this:

               THROW AWAY YOUR TYPEWRITER and learn to use a word
               processor.  Word  processing is relatively easy to
               learn   and   will  increase   your   productivity
               enormously.  Enter the Computer Age  and  find out
               just how much fun it can be!!

                  If you want to change the text back  to  lower case,
          type  ^X^L  case-region-lower.    You  can  also  capitalize
          individual words.  To capitalize  the  word  "fun", position
          the cursor in front of the word and type M-U case-word-upper
          .  The word is now capitalized. To  change  it  ck  to lower
          case, move the cursor back to the beginning of the  word and
          type M-L case-word-lower.

                  You may also capitalize individual letters in EMACS.
          The  command M-C case-word-capitalize capitalizes the  first
          letter  after the point.  This  command  would  normally  be
          issued  with the cursor positioned in  front  of  the  first
          letter of the word you wish to capitalize.  If you  issue it
          in  the  middle  of a word, you can end up with some strAnge
          looking text.


          10.4  Tabs


                  Unless  your formatter is instructed to take  screen
          text  literally  (as  MicroSCRIBE  does  in  the  'verbatim'
          environment  for  example),  tabs  in EMACS generally affect
          screen formatting only.


                                                                    40






          Screen Formatting                MicroEMACS Reference Manual


                  When EMACS is first started, it sets the default tab
          to every eighth column.    As long as you stay with default,
          every  time you press the tab key a  tab  character,  ^I  is
          inserted.  This character, like other control characters, is
          invisible  --  but  it  makes  a   subtle   and  significant
          difference to your file and editing.

                  For example,  in default mode, press the tab key and
          then  type  the  word  Test.   "Test" appears at the  eighth
          column.  Move your  cursor  to the beginning of the word and
          delete the backward  character.   The word doesn't move back
          just one character, but  flushes  to  the  left margin.  The
          reason  for  this  behavior  is  easily explained.   In  tab
          default, EMACS inserts a 'real' tab character when you press
          the  tab key.  This character is  inserted  at  the  default
          position,  but  NO  SPACES  are  inserted  between  the  tab
          character and the margin  (or  previous  tab character).  As
          you will recall, EMACS only recognizes  characters  (such as
          spaces  or  letters)  and  thus  when the tab  character  is
          removed,  the text beyond the tab is  flushed  back  to  the
          margin or previous tab mark.

                  This  situation  changes if you  alter  the  default
          configuration. The default value may be changed  by entering
          a numeric argument before  pressing  the tab key.  As we saw
          earlier, pressing  the META key and entering a number allows
          you to specify how  EMACS  performs a given action.  In this
          case, let's specify an argument of 10 and hit the tab key.

                  Now hit the tab key again and type Test.  Notice the
          word now  appears  at  the  tenth  column.   Now move to the
          beginning of the word  and  delete  the  backward character.
          "Test" moves back by one character.

                  EMACS  behaves  differently in  these  circumstances
          because the ^I handle-tab function deals with tabbing in two
          distinct ways.  In default  conditions,  or  if  the numeric
          argument  of zero is used, handle-tab  inserts  a  true  tab
          character.  If,  however,  a  non-zero  numeric  argument is
          specified,  handle-tab inserts the correct number of  spaces
          needed  to position the cursor at  the  next  specified  tab
          position. It does NOT  insert  the  single tab character and
          hence any  editing  functions  should  take  account  of the
          number of spaces between tabbed columns.

                  The distance which a true  tab  character  moves the
          cursor can be modified by changing the value of the $hardtab
          environment  variable.    Initially  set  to  8,  this  will
          determine how far each tab  stop is placed from the previous
          one.  (Use  the  ^XA  set  command  to  set  the value of an
          environment variable).

                  Many times you would like  to  take  text  which has
          been  created  using  the tab character and change it to use


          41






               MicroEMACS Reference Manual                Screen Formatting


               just spaces.  The command ^X^D detab-region changes any tabs
               in the currently selected  region  into  the right number of
               spaces so the text does not change.  This is very useful for
               times  when the file must be printed  or  transferred  to  a
               machine which does not understand tabs.

                       Also, the inverse command, ^X^E entab-region changes
               multiple spaces to tabs where possible.  This is a  good way
               to shrink  the size of large documents, especially with data
               tables.  Both of these  commands can take a numeric argument
               which  will  be  interpreted  as  the  number  of  lines  to
               en/detab.

                       Another function, related to those above is provided
               for by the ^X^T trim-region  when  invoked  will  delete any
               trailing white space in  the  selected  region.  A preceding
               numeric argument will do this for that number of lines.







































                                                                         42






               Screen Formatting                MicroEMACS Reference Manual






                                    Chapter 10 Summary


                       In  Chapter  10 introduced some  of  the  formatting
               features  of  EMACS.  Text-wrap, paragraph reformatting, and
               tabs were discussed in  some  detail.    The commands in the
               following table were covered in the chapter.


               Key Binding             Keystroke                   Effect
               add-mode/WRAP           ^XM[WRAP]       Add wrap mode to current
                                                       buffer

               delete-mode/WRAP        ^X^M[WRAP]      Remove wrap mode from current
                                                       buffer

               set-fill-column         ^XF             Set fill column to given
                                                       numeric
                                                       argument

               fill-paragraph          M-Q             Logically reformats the
                                                       current
                                                       paragraph

               case-word-upper         M-U             Text from point to end of the
                                                       current word is changed to
               uppercase

               case-word-lower         M-L             Text from point to end of the
                                                       current word is changed to
               lowercase

               case-word-capitalize    M-C             First word (or letter) after
                                                       the
                                                       point is capitalized

               case-region-upper       ^X^U            The current region is
                                                       uppercased

               case-region-lower       ^X^L            The current region is
                                                       lowercased

               handle-tab              ^I              Tab interval is set to the
                                                       given
                                                       numeric argument

               entab-region            ^X^E            Changes multiple spaces to
                                                       tabs
                                                       characters where possible



               43






               MicroEMACS Reference Manual                Screen Formatting


               detab-region            ^X^D            Changes tab characters to the
                                                       appropriate number of spaces

               trim-region             ^X^T            Trims white space from the end
                                                       of the lines in the current
               region


















































                                                                         44






          Access to the Outside World      MicroEMACS Reference Manual








                                   Chapter 11

                          Access to the Outside World


                  EMACS has the ability to interface to other programs
          and the environment of  the  computer  outside of itself. It
          does this through a series of commands that allow it to talk
          to the computer's command processor  or  shell.    Just what
          this is  varies between different computers.  Under MSDOS or
          PCDOS this is the command.com command processor.  Under UNIX
          it is the csh shell.  On the  Atari  ST  is  can be the Mark
          Williams MSH or the Beckmeyer shell.  In each  case,  it  is
          the  part  of  the  computer's  operating  system   that  is
          responsible for determining  what programs are executed, and
          when.

                  The ^X! shell-command command prompts the user for a
          command line to send  out  to the shell to execute. This can
          be  very useful for doing file  listings  and  changing  the
          current directory or folder.   EMACS  gives  control  to the
          shell, which  executed the command, and then types [END] and
          waits for the user to  type a character before redrawing the
          screen and resuming editing. If the shell-command command is
          used from within the macro language, there is no pause.

                  ^X@  pipe-command command allows EMACS to execute  a
          shell command, and if  the  particular  computer  allows it,
          send  the  results  into  a  buffer  which  is automatically
          displayed  on  the  screen.  The  resulting  buffer,  called
          "command" can be manipulated  just  like  any  other editing
          buffer. Text can  be  copied  out  of  it  or  rearranged as
          needed. This buffer  is  originally created in VIEW mode, so
          remember to ^X^Mview<NL> in order to change it.

                  Many computers provide tools which will allow you to
          filter text,  making some modifications to it along the way.
          A very common tool is the SORT program which accepts a file,
          sorts it, and prints the result out.  The EMACS command, ^X#
          filter-buffer  sends  the  current  buffer  through  such  a
          filter.  Therefore, if you wished to sort the current buffer
          on a system which  supplied  a  sort  filter, you would type
          ^X#sort<NL>.    You  can  also  create your own  filters  by
          writing programs and  utilities  which  read  text  from the
          keyboard and display the  results.    EMACS  will use any of
          these which would normally  be  available  from  the current
          shell.



          45






               MicroEMACS Reference Manual      Access to the Outside World


                       If  you  would   like  to  execute  another  program
               directly, without the overhead of an intervening  shell, you
               can use  the ^X$ execute-program command. It will prompt you
               for an external program and  its  arguments  and  attempt to
               execute it.  Like when  EMACS looks for command files, EMACS
               will look first in the HOME directory, then down the execute
               PATH, and finally in the  current  directory  for  the named
               program. On some systems,  it  will  automatically  tack the
               proper extension on  the  file  name  to  indicate  it  is a
               program. On some systems that don't  support  this function,
               ^X$ will be equivalent to ^X! shell-command.

                       Sometimes, you would  like  to get back to the shell
               and execute  other  commands,  without  losing  the  current
               contents  of  EMACS.   The ^XC i-shell command shells out of
               EMACS, leaving EMACS in the computer  and  executing another
               command  shell.    Most systems would allow you to return to
               EMACS with the "exit" command.

                       On  some systems, mainly advanced versions of  UNIX,
                       you can
               direct  EMACS  to  "go  into  the background" with  the  ^XD
               suspend-emacs  command. This places EMACS in the  background
               returning you  to the original command shell. EMACS can then
               be returned to at any time with the "fg" foreground command.































                                                                         46






          Access to the Outside World      MicroEMACS Reference Manual






                               Chapter 11 Summary


                  In Chapter 11 introduced  different  ways  to access
          the computers shell or command processor from  within EMACS.
          The  commands in the following table  were  covered  in  the
          chapter.


          Key Binding             Keystroke                   Effect
          execute-program         ^X$             Execute an external program
                                                  directly

          filter-command          ^X#             Send the current buffer
                                                  through
                                                  a shell filter

          i-shell                 ^XC             Escape to a new shell

          pipe-command            ^X@             Send the results of an
                                                  external
                                                  shell command to a buffer

          shell-command           ^X!             Execute one shell command

          suspend-emacs           ^XD             Place EMACS in the background
                                                  (some UNIX systems only)

























          47






               MicroEMACS Reference Manual                  Keyboard Macros








                                        Chapter 12

                                     Keyboard Macros


                       In many applications, it may be necessary  to repeat
               a series of characters or commands frequently.  For example,
               a paper may require the  frequent  repetition  of  a complex
               formula or a long name.  You may also have a series of EMACS
               commands that you invoke frequently.  Keyboard  macros offer
               a  convenient  method   of  recording  and  repeating  these
               commands.

                       Imagine, for example, you  are  writing  a scholarly
               paper on Asplenium platyneuron, the spleenwort  fern.   Even
               the  dedicated  botanist  would  probably  find  it  a  task
               bordering  on  the  agonizing  to type Asplenium platyneuron
               frequently throughout the paper.  An  alternative  method is
               'record' the name in a keyboard macro.  Try it yourself.

                       The command ^X( begin-macro starts recording the all
               the keystrokes and  commands  you input.  After you've typed
               it, enter Asplenium platyneuron.   To  stop  recording, type
               ^X) end-macro.   EMACS has stored all the keystrokes between
               the  two  commands.   To repeat the name you've stored, just
               enter   ^XE   execute-macro,   and   the   name   "Asplenium
               platyneuron" appears.   You  can repeat this action as often
               as you want, and of course as with any  EMACS  command,  you
               may precede it with a numerical argument.

                       Because EMACS  records  keystrokes,  you  may freely
               intermix commands and text.    Unfortunately,  you  can only
               store one macro at a time.  Thus,  if  you  begin  to record
               another macro, the  previously  defined  macro  is  lost. Be
               careful to ensure that you've finished with one macro before
               defining another.  If you have a series of commands that you
               would  like to 'record' for future use,  use  the  macro  or
               procedure facilities detailed in chapter <X>.












                                                                         48






          Keyboard Macros                  MicroEMACS Reference Manual






                               Chapter 12 Summary


                  Chapter 12 covered keyboard macros.  You learned how
          to record keystrokes and how to repeat the stored sequence.

          Key Binding             Keystroke               Effect

          start-macro             ^X(             Starts recording all keyboard
                                                  input

          end-macro               ^X)             Stops recording keystrokes for
                                                  macro

          execute-macro           ^XE             Entire sequence of recorded
                                                  keystrokes is replayed




































          49






               MicroEMACS Reference Manual                MicroEMACS Macros








                                        Chapter 13

                                    MicroEMACS Macros


                       Macros are programs that are used  to  customize the
               editor and to  perform  complicated editing tasks.  They may
               be stored in files  or  buffers and may be executed using an
               appropriate  command,  or  bound  to a particular keystroke.
               Portions of the standard start-up file  are  implemented via
               macros,  as  well  as the example menu system.  The execute-
               macro-<n> commands cause  the  macro, numbered from 1 to 40,
               to  be executed.  The execute-file  command  allows  you  to
               execute  a macro stored in a disk  file,  and  the  execute-
               buffer command allows you  to  execute  a  macro stored in a
               buffer.  Macros  are  stored for easy execution by executing
               files that contain the store-macro command.

                       If you need  more  than  40  macros,  named macroes,
               called procedures, can be used.  The store-procedure command
               takes a string argument which is the name of a  procedure to
               store.  These procedures than  can be executed with the M-^E
               execute-procedure or the run  commands.    Also,  giving the
               name  of  a  stored  procedure  within  another  macro  will
               executed  that  named  procedure as if it had been called up
               with the run command.

                       Some  fairly  length  examples of MicroEMACS macroes
               can be seen by examining the standard files  that  come with
               EMACS.  The  emacs.rc  file (called .emacsrc) under UNIX) is
               the  EMACS  macro  file  which  is  executed  when EMACS  is
               normally  run.  It contains a  number  of  different  stored
               macroes  along  with  the  lines  to setup and  display  the
               Function key window and to  call up other commands and macro
               files using function keys.

                       There  are  many  different  aspects  to  the  macro
               language within MicroEMACS.  Editor commands are the various
               commands that manipulate  text, buffers, windows, et cetera,
               within the editor.  Directives  are  commands  which control
               what  lines  get  executed within a macro.  Also  there  are
               various types of variables.    Environmental  variables both
               control and  report on different aspects of the editor. User
               variables  hold  string  values  which  may  be  changed and
               inspected. Buffer variables allow  text  to  be  placed into
               variables.  Interactive variable allow the program to prompt
               the  user  for  information.    Functions  can  be  used  to
               manipulate all these variables.


                                                                         50






               MicroEMACS Macros                MicroEMACS Reference Manual


               13.1  Constants


                       All  constants  and  variable  contents in EMACS are
               stored as strings of characters. Numbers are stored digit by
               digit as characters. This allows EMACS to be "typeless", not
               having different  variables  types  be  legal  in  different
               contexts. This has  the  disadvantage of forcing the user to
               be  more  careful  about  the  context  of   the  statements
               variables  are  placed  in,  but  in  turn  gives them  more
               flexibility in where they can place  variables.  Needless to
               say, this also allows  EMACS's  expression  evaluator  to be
               both concise and quick.

                       Wherever statements need to  have  arguments,  it is
               legal  to place constants.  A constant  is  a  double  quote
               character,  followed  by  a   string   of   characters,  and
               terminated  by another double quote character. To  represent
               various special characters within a constant, the  tilde (~)
               character is used.  The  character  following  the  tilde is
               interpreted according to the following table:

               Sequence        Result
               ~n                      EMACS newline character (breaks lines)
               ~r              ^M      carriage return
               ~l              ^J      linefeed
               ~~              ~       tilde
               ~b              ^H      backspace
               ~f              ^L      formfeed
               ~t              ^I      tab
               ~"              "       quote

                       Any character not in the table which follows a tilde
               will be passed unmodified.  This action is similar to the ^Q
               quote-character command available from the keyboard.

                       EMACS   may   use   different  characters  for  line
               terminators on different computers.  The ~n combination will
               always get the  proper  line  terminating  sequence  for the
               current system.

                       The double quotes around constants are not needed if
               the constant contains no  internal  white  space and it also
               does not happen  to  meet  the  rules  for  any  other EMACS
               commands,  directives,  variables,  or  functions.  This  is
               reasonable useful for numeric constants.


               13.2  Variables


                       Variables in MicroEMACS can be used to return values
               within expressions, as repeat counts to editing commands, or
               as text to be inserted into buffers and messages.  The value


               51






               MicroEMACS Reference Manual                MicroEMACS Macros


               of these variables is set using the set (^XA) command.   For
               example, to set the  current  fill  column to 64 characters,
               the following macro line would be used:

                       set $fillcol 64

                       or to have the contents  of  %name  inserted  at the
               point in the current buffer, the command to use would be:

                       insert-string %name














































                                                                         52






               MicroEMACS Macros                MicroEMACS Reference Manual



               13.2.1  Environmental Variables


                       "What good is a quote if you can't change it?"

                       These variables are used to change different aspects
               of  the way the editor works.  Also  they  will  return  the
               current  settings  if  used as part of  an  expression.  All
               environmental variable names begin with  a  dollar  sign ($)
               and are in lower case.

               $acount       The countdown of inserted characters until the
                             next save-file

               $asave        The  number  of  inserted  characters  between
                             automatic file-saves in ASAVE mode

               $bufhook      The  function  named  in  this variable is run
                             when a buffer is entered.  It can  be  used to
                             implement  modes  which  are  specific   to  a
                             paricular file or file type.

               $cbflags      Current buffer attribute flags (See appendix G
                             for details)

               $cbufname     Name of the current buffer

               $cfname       File name of the current buffer

               $cmdhook      Name  of  function  to  run before accepting a
                             command. This is by default set to nop

               $cmode        Integer containing  the  mode  of  the current
                             buffer. (See Appendix F for values)

               $curchar      Ascii value of  the character currently at the
                             point

               $curcol       Current column of point in current buffer

               $curline      Current line of point in current buffer

               $curwidth     Number of columns used currently

               $cwline       Current display line in current window

               $debug        Flag to trigger macro debugging

               $diagflag     If set to TRUE, diagonal dragging of  text and
                             mode lines is enabled.    If  FALSE,  text and
                             modelines can only be dragged  horizontally or
                             vertically at one time.



               53






          MicroEMACS Reference Manual                MicroEMACS Macros


          $discmd       Flag to disable the echoing of messages on the
                        command line

          $disinp       Flag  to disable  the  echoing  of  characters
                        during command line input

          $exbhook      This variable holds the name of a  function or
                        macro which is  run whenever you are switching
                        out of a buffer.

          $fcol         The  current line position being displayed  in
                        the first column of the current window.

          $fillcol      Current fill column

          $flicker      Flicker Flag set to TRUE  if  IBM  CGA  set to
                        FALSE for most others

          $gflags       Global flags controlling  some  EMACS internal
                        functions (See appendix G for details)

          $gmode        Global mode flags. (See Appendix F for values)

          $hardtab      Number  of  spaces  between  hard  tab  stops.
                        Normally  8,  this   can  be  used  to  change
                        indentation only within the editor.

          $hjump        The  number  in  here  tells  EMACS  how  many
                        columns to scroll the screen horizontally when
                        a horizontal scroll is required.

          $hscroll      This flag determines  if EMACS will scroll the
                        entire  current  window  horizontally, or just
                        the current  line.  The  default  value, TRUE,
                        results in  the  entire  current  window being
                        shifted left and right  when  the  cursor goes
                        off the edge of the screen.

          $kill         This   contains   the   first  127  characters
                        currently in the kill buffer and  can  be used
                        to set the contents of the kill buffer

          $language     [READ  ONLY]Contains the name of the  language
                        which   the   current   EMACS's  message  will
                        display.   (Currently  EMACS  is  available in
                        English,   French,    Spanish,    Pig   Latin,
                        Portuguese, Dutch, German and Esperonto).

          $lastkey      [READ ONLY]Last keyboard character typed

          $lastmesg     [READ  ONLY]Contains  the  text  of  the  last
                        message which emacs wrote on the command line




                                                                    54






          MicroEMACS Macros                MicroEMACS Reference Manual


          $line         The current line in the current buffer  can be
                        retrieved  and  set   with   this  environment
                        variable

          $lwidth       [READ ONLY]Returns the number of characters in
                        the current line

          $match        [READ ONLY]Last string matched in a magic mode
                        search

          $modeflag     Determines   if   mode   lines  are  currently
                        displayed

          $msflag       If TRUE, the mouse (if present) is active.  If
                        FALSE, no mouse cursor  is  displayed,  and no
                        mouse actions are taken.

          $pagelen      Number of screen lines used currently

          $palette      string  used  to  control the palette register
                        settings  on  graphics  versions.  The usually
                        form consists of  groups of three octal digits
                        setting the red, green, and blue levels.

          $pending      [READ ONLY]Flag to determine if there are user
                        keystrokes waiting to be processed.

          $progname     [READ   ONLY]Always   contains    the   string
                        "MicroEMACS" for standard  MicroEMACS.   Could
                        be something else  if EMACS is incorporated as
                        part of someone else's program

          $readhook     This variable holds the name of a  function to
                        execute whenever a file  is  read  into EMACS.
                        Normally,  using  the  standard emacs.rc file,
                        this is bound to a function which places EMACS
                        into CMODE if the extension of  the  file read
                        is .c or .h

          $replace      Current default replace string

          $rval         This  contains the return value from the  last
                        subprocess which was invoked from EMACS

          $search       Current default search string

          $seed         Integer seed of the random number generator

          $softtab      Number of spaces inserted  by  EMACS  when the
                        handle-tab command (which is normally bound to
                        the TAB key) is invoked.

          $sres         Current  screen resolution (CGA, MONO, EGA  or
                        VGA on the IBM-PC driver.   LOW,  MEDIUM, HIGH


          55






          MicroEMACS Reference Manual                MicroEMACS Macros


                        or DENSE on the Atari  ST1040,  NORMAL  on all
                        others)

          $ssave        If TRUE,  when  EMACS  is  asked  to  save the
                        current file, it writes  all  files  out  to a
                        temporary file, deletes the original, and then
                        renames the temporary to  the  old  file name.
                        The default value of this is TRUE.

          $sscroll      Changes  EMACS, when set to TRUE, to  smoothly
                        scroll windows  (one  line  at  a  time)  when
                        cursoring off the ends of the current window.

          $status       [READ  ONLY]Status of the success of the  last
                        command (TRUE or FALSE).  This is usually used
                        with !force  to  check  on  the  success  of a
                        search, or a file operation.

          $sterm        This is the character used to terminate search
                        string  inputs.  The  default  for this is the
                        last key bound to meta-prefix

          $target       Current  target  for  line moves (setting this
                        fool's  EMACS into believing the last  command
                        was a line move)

          $time         [READ ONLY]Contains a string corresponding  to
                        the current date and time.  Usually this is in
                        a form similar to "Mon May 09  10:10:58 1988".
                        Not all operating systems will support this.

          $tpause       Controls the length of the pause to  display a
                        matched fence when the  current  buffer  is in
                        CMODE and a close fence has been typed

          $version      [READ  ONLY]Contains  the  current  MicroEMACS
                        version number

          $wline        Number of display lines in current window

          $wraphook     This variable contains the  name  of  an EMACS
                        function which is executed when a buffer is in
                        WRAP mode and  it  is time to wrap. By default
                        this is bound to wrap-word.

          $writehook    This variable contains the  name  of  an EMACS
                        function  or  macro  which is invoked whenever
                        EMACS attempts to write a  file  out  to disk.
                        This  is executed before the file is  written,
                        allowing you to process a file on the way out.

          $xpos         The column the mouse  was  at  the  last mouse
                        button press



                                                                    56






          MicroEMACS Macros                MicroEMACS Reference Manual


          $ypos         The line which the  mouse  was  on  during the
                        last mouse button press

                  Obviously,  many  more of these  variables  will  be
          available in future releases  of  MicroEMACS.  (Yes,  send a
          vote for your favorite new environmental variables today).


          13.2.2  User variables


                  User variables allow you, the user, to store strings
          and manipulate them.  These strings can be  pieces  of text,
          numbers  (in  text  form), or the logical  values  TRUE  and
          FALSE.  These variables can  be  combined,  tested, inserted
          into buffers, and otherwise used  to  control  the  way your
          macros execute.  At the moment, up to 255 user variables may
          be in use in one editing session.  All users  variable names
          must  begin  with  a  percent  sign (%) and may contain  any
          printing characters.    Only  the  first  10  characters are
          significant  (IE differences beyond the tenth character  are
          ignored).   Most operators will truncate strings to a length
          of 128 characters.


          13.2.3  Buffer Variables


                  Buffer variables are special in that  they  can only
          be queried and cannot be set.  What buffer variables  are is
          a way to take text from a buffer and place it in a variable.
          For example, if I have a  buffer  by the name of RIGEL2, and
          it contains the text:

                  Richmond
                  Lafayette
                  <*>Bloomington          (where <*> is the current point)
                  Indianapolis
                  Gary
                  =* MicroEMACS 3.10 (WRAP) == rigel2 == File: /data/rigel2.txt
          =====

                  and within a command I reference #rigel2, like:

                  insert-string #rigel2

                  MicroEMACS would start at the current  point  in the
          RIGEL2  buffer  and  grab all the text up to the end of that
          line and pass that back.  Then it would advance the point to
          the beginning of the next line. Thus, after our last command
          executes, the string "Bloomington"  gets  inserted  into the
          current buffer, and the buffer RIGEL2 now looks like this:




          57






          MicroEMACS Reference Manual                MicroEMACS Macros


                  Richmond
                  Lafayette
                  Bloomington
                  <*>Indianapolis         (where <*> is the current point)
                  Gary
                  =* MicroEMACS 3.10 (WRAP) == rigel2 == File: /data/rigel2.txt
          =====

                  as  you  have probably noticed,  a  buffer  variable
          consists of the buffer name, preceded by a pound sign (#).


          13.2.4  Interactive variables


                  Interactive  variables  are  actually  a  method  to
          prompt the user for a string.  This is done  by  using an at
          sign (@) followed either with a quoted string, or a variable
          containing a string.  The string is the placed on the bottom
          line, and the editor waits for the user to type in a string.
          Then the string  typed  in  by  the users is returned as the
          value of the interactive variable.  For example:

                  set %quest "What file? "
                  find-file @%quest

                  will ask the user for  a file name, and then attempt
          to find it. Note also  that complex expressions can be built
          up with these operators, such as:

          @&cat &cat "File to decode[" %default "]: "

                  which prompts the user with the concatenated string.


          13.3  Functions


                  Functions  can  be  used  to manipulate variables in
          various  ways.    Functions  can  have  one,  two, or  three
          arguments.   These arguments will always be placed after the
          function  on  the  current command line.  For example, if we
          wanted to increase the current  fill  column  by  two, using
          emacs's set (^XA) command, we would write:

                  set $fillcol &add $fillcol 2
                   \      \      \      \     \____second operand
                    \      \      \      \_________first operand
                     \      \      \_______________function to execute
                      \      \_____________________variable to set
                       \___________________________set (^XA) command

                  Function  names always begin with the ampersand  (&)
          character, and  are  only  significant  to  the  first three


                                                                    58






               MicroEMACS Macros                MicroEMACS Reference Manual


               characters after  the  ampersand.    Functions  will  normal
               expect  one  of  three   types   of   arguments,   and  will
               automatically convert types when needed.

               <num>         an ascii string of digits which is interpreted
                             as a numeric value.  Any string which does not
                             start with a digit or a minus sign (-) will be

               considered zero.


               <str>         An  arbitrary  string  of  characters.  At the
                             moment, strings are limited to  128 characters
                             in length.

               <log>         A  logical  value  consisting  of  the  string
                             "TRUE" or "FALSE".   Numeric strings will also
                             evaluate to "FALSE" if they are equal to zero,
                             and "TRUE" if they  are  non-zero.   Arbitrary
                             text strings will have the value of "FALSE".

                       A list of the currently available functions follows:
               (Once again, send in those votes on what  kind  of functions
               you would like to see added!) Functions are  always  used in
               lower case,  the uppercase letters in the function table are
               the short form of the function (IE &div for &divide).

               Numeric Functions:      (returns <num>)

               &ADD            <num> <num>     Add two numbers
               &SUB            <num> <num>     Subtract the second number from the
                                               first
               &TIMes          <num> <num>     Multiply two numbers
               &DIVide         <num> <num>     Divide the first number by the second
                                               giving an integer result
               &MOD            <num> <num>     Return the reminder of dividing the
                                               first number by the second
               &NEGate         <neg>           Multiply the arg by -1
               &LENgth         <str>           Returns length of string
               &SINdex         <str1> <str2>   Finds the position of <str2> within
                                               <str1>. Returns zero if not found.
               &ASCii          <str>           Return the ascii code of the first
                                               character in <str>
               &RND            <num>           Returns a random integer between 1 and
                                               <num>
               &ABS            <num>           Returns the absolute value of <num>
               &BANd           <num> <num>     Bitwise AND function
               &BOR            <num> <num>     Bitwise OR function
               &BXOr           <num> <num>     Bitwise XOR function
               &BNOt           <num>           Bitwise NOT function

               String manipulation functions:  (returns <str>)




               59






          MicroEMACS Reference Manual                MicroEMACS Macros


          &CAT            <str> <str>     Concatenate the two strings to form
                                          one
          &LEFt           <str> <num>     return the <num> leftmost characters
                                          from <str>
          &RIGht          <str> <num>     return the <num> rightmost characters
                                          from <str>
          &MID            <str> <num1> <num2>
                                          Starting from <num1> position in
          <str>,
                                          return <num2> characters.
          &UPPer          <str>           Uppercase <str>
          &LOWer          <str>           lowercase <str>
          &CHR            <num>           return a string with the character
                                          represented by ascii code <num>
          &GTC                            returns a string of characters
                                          containing a EMACS command input from
                                          the user
          &GTK                            return a string containing a single
                                          keystroke from the user
          &ENV            <str>           If the operating system is capable,
                                          this
                                          returns the environment string
          associated
                                          with <str>
          &BIND           <str>           return the function name bound to the
                                          keystroke <str>
          &XLATE          <str1> <str2> <str3>
          &FINd           <str>           Find the named file <str> along the
                                          path and return its full file
          specification
                                          or an empty string if none exists
          &TRIM           <str>           Trim the trailing whitespace from a
                                          string

          Logical Testing functions:      (returns <log>)

          &NOT            <log>           Return the opposite logical value
          &AND            <log1> <log2>   Returns TRUE if BOTH logical arguments
                                          are TRUE
          &OR             <log1> <log2>   Returns TRUE if either argument
                                          is TRUE
          &EQUal          <num> <num>     If <num> and <num> are numerically
                                          equal, return TRUE
          &LESs           <num1> <num2>   If <num1> is less than <num2>, return
                                          TRUE.
          &GREater        <num1> <num2>   If <num1> is greater than, or equal to
                                          <num2>, return TRUE.
          &SEQual         <str1> <str2>   If the two strings are the same,
                                          return
                                          TRUE.
          &SLEss          <str1> <str2>   If <str1> is less alphabetically than
                                          <str2>, return TRUE.




                                                                    60






               MicroEMACS Macros                MicroEMACS Reference Manual


               &SGReater       <str1> <str2>   If <str1> is alphabetically greater
                                               than
                                               or equal to <str2>, return TRUE.
               &EXIst          <str>           Does the named file <str> exist?

               Special Functions:

               &INDirect       <str>           Evaluate <str> as a variable.

                       This  last  function  deserves more explanation. The
               &IND function evaluates its  argument,  takes  the resulting
               string, and then uses  it  as a variable name.  For example,
               given the following code sequence:

                       ; set up reference table

                       set %one        "elephant"
                       set %two        "giraffe"
                       set %three      "donkey"

                       set %index "two"
                       insert-string &ind %index

                       the string "giraffe" would have been inserted at the
               point in the current buffer.  This indirection can be safely
               nested up to about 10 levels.


               13.4  Directives


                       Directives are commands which only operate within an
               executing  macro,  IE  they  do  not make sense as a  single
               command. As such, they cannot be called up  singly  or bound
               to keystroke. Used within macros,  they  control  what lines
               are executed and in what order.

                       Directives  always  start  with the exclamation mark
               (!) character and must be the first thing placed on  a line.
               Directives executed interactively (via the  execute-command-
               line command) will be ignored.


               13.4.1  !ENDM Directive


                       This directive is used to  terminate  a  macro being
               stored. For example, if  a  file  is being executed contains
               the text:

                       ;       Read in a file in view mode, and make the window red

                       26      store-macro
                               find-file @"File to view: "


               61






          MicroEMACS Reference Manual                MicroEMACS Macros


                          add-mode "view"
                          add-mode "red"
                  !endm

                  write-message "[Consult macro has been loaded]"

                  only  the lines between the store-macro command  and
          the !ENDM directive are stored in macro 26.    Both numbered
          macroes  and  named  procedures  (via   the  store-procedure
          command) should be terminated with this directive.


          13.4.2  !FORCE Directive


                  When  MicroEMACS  executes  a  macro, if any command
          fails, the macro is  terminated  at that point. If a line is
          preceded by a  !FORCE directive, execution continues whether
          the command succeeds or not. For example:

                  ;       Merge the top two windows

                  save-window             ;remember what window we are at
                  1 next-window           ;go to the top window
                  delete-window           ;merge it with the second window
                  !force restore-window   ;This will continue regardless
                  add-mode "red"


          13.4.3  !IF, !ELSE, and !ENDIF Directives


                  This directive allows statements only to be executed
          if a condition specified  in  the  directive  is met.  Every
          line following the  !IF  directive, until the first !ELSE or
          !ENDIF  directive,  is   only  executed  if  the  expression
          following the !IF directive evaluates  to a TRUE value.  For
          example, the following macro segment creates the  portion of
          a  text  file  automatically.  (yes believe me, this will be
          easier to understand then that last explanation....)

                  !if &sequal %curplace "timespace vortex"
                          insert-string "First, rematerialize~n"
                  !endif
                  !if &sequal %planet "earth"     ;If we have landed on earth...
                          !if &sequal %time "late 20th century"  ;and we are
          then
                                  write-message "Contact U.N.I.T."
                          !else
                                  insert-string "Investigate the
          situation....~n"
                                  insert-string "(SAY 'stay here Sara')~n"
                          !endif
                  !else


                                                                    62






          MicroEMACS Macros                MicroEMACS Reference Manual


                          set %conditions @"Atmosphere conditions outside? "
                          !if &sequal %conditions "safe"
                                  insert-string &cat "Go outside......" "~n"
                                  insert-string "lock the door~n"
                          !else
                                  insert-string "Dematerialize..try somewhen
          else"
                                  newline
                          !endif
                  !endif


          13.4.4  !GOTO Directive


                  Flow  can  be  controlled  within a MicroEMACS macro
          using the !GOTO directive. It  takes as an argument a label.
          A label consists of a line starting with an asterisk (*) and
          then an alphanumeric label.    Only  labels in the currently
          executing macro can be jumped to, and trying to  jump  to  a
          non-existing label terminates execution  of  a  macro.   For
          example..

                  ;Create a block of DATA statements for a BASIC program

                          insert-string "1000 DATA "
                          set %linenum 1000

                  *nxtin
                          update-screen           ;make sure we see the changes
                          set %data @"Next number: "
                          !if &equal %data 0
                                  !goto finish
                          !endif

                          !if &greater $curcol 60
                                  2 delete-previous-character
                                  newline
                                  set %linenum &add %linenum 10
                                  insert-string &cat %linenum " DATA "
                          !endif

                          insert-string &cat %data ", "
                          !goto nxtin

                  *finish

                          2 delete-previous-character








          63






          MicroEMACS Reference Manual                MicroEMACS Macros


                          newline


          13.4.5  !WHILE and !ENDWHILE Directives


                  This directive allows you to set up repetitive tasks
          easily and efficiently. If a  group of statements need to be
          executed while a certain  condition  is  true,  enclose them
          with a while loop. For example,

                  !while &less $curcol 70
                          insert-string &cat &cat "[" #stuff "]"
                  !endwhile

                  places items from buffer "item" in the  current line
          until the cursor is at or  past  column 70.  While loops may
          be nested and can contain and be the targets of  !GOTOs with
          no ill effects. Using  a  while  loop  to enclose a repeated
          task will run much faster than  the  corresponding construct
          using !IFs.


          13.4.6  !BREAK Directive


                  This directive allows  the  user to abort out of the
          currently  most  inner  while   loop,   regardless   of  the
          condition.  It is often used to abort  processing  for error
          conditions.  For example:

          ;       Read in files and substitute "begining" with "beginning"

                  set %filename #list
                  !while &not &seq %filename "<end>"
          !force          find-file %filename
                          !if &seq $status FALSE
                                  write-message "[File read error]"
                                  !break
                          !endif
                          beginning-of-file
                          replace-string "begining" "beginning"
                          save-file
                          set %filename #list
                  !endwhile

                  This while loop will process files until the list is
          exhausted or there is an error while reading a file.








                                                                    64






          MicroEMACS Macros                MicroEMACS Reference Manual



          13.4.7  !RETURN Directive


                  The !RETURN Directive causes  the  current  macro to
          exit,  either  returning  to  the  caller  (if  any)  or  to
          interactive mode.  For example:

                  ;       Check the monitor type and set %mtyp

                  !if &sres "CGA"
                          set %mtyp 1
                          !return
                  !else
                          set %mtyp 2
                  !endif

                  insert-string "You are on a MONOCHROME machine!~n"






































          65






          MicroEMACS Reference Manual     Debugging MicroEMACS macroes








                                   Chapter 14

                          Debugging MicroEMACS macroes


                  When  developing new macroes, it is very  convenient
          to be able  to  trace  their  execution to find errors.  The
          $debug environment variable  enables macro debugging.  While
          this variable is TRUE, emacs will stop at each macro line it
          intends to execute  and  allow  you  to view it, and issue a
          number of different commands to help determine how the macro
          is executing.

                  For example, we will step  through  the  macro which
          toggles the function key window off.  The first thing to do,
          is to set $debug, using the  ^XA  set command.  Type ^XA and
          emacs will prompt you on  the command line with "Variable to
          set: ". Type  in  "$debug"  and  press the enter key.  Emacs
          will  then  ask  "Value: ".   Type  in  "TRUE"  (in  capital
          letters) and press the enter key.

                  While macro debugging  is  enabled  (as  it  is now)
          emacs will report each time  a variable is assigned a value,
          by  displaying the variable and its  value  on  the  command
          line.  Right now,

          ((($debug <- TRUE)))

                  appears on  the command line to tell you that $debug
          now has been assigned the value of TRUE.   Press  the  space
          bar to continue.

                  Now, lets try to debug  a macro.  Press function key
          5 which normally toggles the function key window.  The first
          thing that appears is:

          <<<[Macro 01]:!if %rcfkeys>>>

                  At this point, emacs is waiting for a command.  I  t
                                                                  i  s
                                                                  prepared
          to  see  if  the user variable %rcfkeys is TRUE, and execute
          some lines if they are.  Suppose we want to see the value of
          this  variable,  type  the  letter   "e"   to   evaluate  an
          expression.     Emacs  will  prompt  with  "EXP:  ".    Type
          "%rcfkeys" followed by the enter  key.    Emacs  should then
          respond with "TRUE" to indicate that the function key window
          is currently on screen.


                                                                    66






          Debugging MicroEMACS macroes     MicroEMACS Reference Manual


                  Press the space bar  to  allow  the !if directive to
          execute.  Emacs  will  decide  that  it  is  TRUE,  and then
          display the next macro command to execute.

          <<<[Macro 01]:!goto rcfoff>>>

                  Notice emacs tells us what  macro  we  are currently
          executing  (in  this  case,  the  macro  bound  to  execute-
          macro-1).    Press  the space bar again to execute the !goto
          directive.

          <<<[Macro 01]:save-window>>>

                  Emacs is saving the position of  the  current window
          so that it can attempt to return to it after it  has brought
          up the function key window.

                  [...THIS CHAPTER IS NOT FINISHED...]






































          67






          MicroEMACS Reference Manual  Key Bindings, What they are and
                                                                   why








                                   Chapter 15

                      Key Bindings, What they are and why


                  One  of  the features which  makes  MicroEMACS  very
          adaptable is its  ability  to  use  different  keystrokes to
          execute different commands.   The  process  of  changing the
          particular command a key invokes is  called  rebinding. This
          allows us to make the editor look like other popular editors
          and programs.

                  Each command  in MicroEMACS has a name which is used
          for binding purposes.  For  example, the command to move the
          cursor down one page is  called  next-line  and  is normally
          bound to the ^N key.  If you decided that you also wanted to
          use the ^D key to move  the  cursor down one line, you would
          use the M-K  bind-to-key  command.  EMACS would respond with
          ": bind-to-key " on  the  command line and allow you to type
          in a command name.  Then type in  the  name  of  the command
          you want to change, in  this case next-line, followed by the
          <NL>  key.  EMACS will then wait for you to type in the keys
          you want to activate the named function.  Type a  single ^D.
          From now on,  typing  ^D  will  cause EMACS to move down one
          line,   rather  than  its  original  function  of   deleting
          characters.

                  To find out the name  of a command, consult the list
          of valid EMACS commands in Appendix B.  Also,  you  can  use
          the ^X? describe-key  command  to  look  up  the  name  of a
          command.  Type ^X? and then the key to use that command, and
          EMACS will show you the name of the command.

                  After  you have experimented with changing your  key
          bindings,  you  may  decide  that  you want to  change  some
          bindings permanently.  To have  EMACS  rebind  keys  to your
          pleasure each time  you  start EMACS, you can add statements
          to  the  end  of  your  startup file (emacs.rc  or  .emacsrc
          depending on the system). For example,

                  bind-to-key next-line ^D

                  Notice, that control D character in the startup file
          is  represented  visibly  as an uparrow key  followed  by  a
          capital D. To  know  how  to  represent any keys you want to
          bind, use the describe-key command on the key,  and  use the
          sequence that is displayed.


                                                                    68






          Key Bindings, What they are and why     MicroEMACS Reference
                                                                Manual


                  bind-to-key split-current-window FN1

                  This example would make function key 1  activate the
          command that splits the current window in two.

                  EMACS will let you  define  a  large number of keys,
          but will report   "Binding  table FULL!" when it runs out of
          space  to  bind  keys.  Normally  EMACS will allow up to 512
          key bindings (including approx. 300 originally  bound keys).

                  If  you want to get a current  listing  of  all  the
          commands  and  the  keys bound to them,  use  the  describe-
          bindings command.  Notice, that this command is not bound to
          any keys!









































          69






          MicroEMACS Reference Manual          MicroEMACS Command Line
                                            Switches and Startup Files








                                   Appendix A

               MicroEMACS Command Line Switches and Startup Files


                  When EMACS first executes, it always searches  for a
          file, called .emacsrc under most UNIX systems or emacs.rc on
          most other systems which it  will  execute  as  EMACS macros
          before  it  reads  in  the  named  source  files. This  file
          normally contains EMACS macroes to bind the function keys to
          useful  functions  and  load  various  useful  macros.   The
          contents  of this file will probably  vary  from  system  to
          system and can be modified by the user as desired.

                  When searching  for this file, EMACS looks for it in
          this order.  First,  it  attempts  to  find a definition for
          "HOME" in the environment.  It will look  in  that directory
          first.  Then it searches all the directories  listed  in the
          "PATH" environment variable.    Then it looks through a list
          of predefined standard directories which vary from system to
          system.  Finally,  failing  all of these, it  looks  in  the
          current directory.  This is  also the same method EMACS uses
          to look up any files to execute, and to find it's  help file
          EMACS.HLP.

                  On computers that  call  up EMACS via a command line
          process, such  as MSDOS and UNIX, there are different things
          that can be  added  to  the  command line to control the way
          EMACS  operates. These can be switches,  which  are  a  dash
          ('-') followed by a letter, and  possible  other parameters,
          or  a  startup  file specifier, which  is  an  at  sign  '@'
          followed by a file name.

          @<file>       This  causes  the named file  to  be  executed
                        instead  of the standard emacs.rc file  before
                        emacs reads in any other files.  More than one
                        of these can be placed  on  the  command line,
                        and they will be executed  in  the  order that
                        they appear.

          -C            The following source files on the command line
                        can be changed (as opposed  to  being  in VIEW
                        mode). This  is  mainly  used  to  cancel  the
                        effects of the -v  switch  used  previously in
                        the same command line.




                                                                    70






          MicroEMACS    Command    Line    Switches    and     Startup
          Files                            MicroEMACS Reference Manual


          -E            This  flag  causes  emacs to automatically run
                        the  startup  file   "error.cmd"   instead  of
                        emacs.rc. This is  used by various C compilers
                        for  error  processing   (for   example,  Mark
                        Williams C).

          -G<num>       Upon  entering  EMACS,  position the cursor at
                        the <num> line of the first file.

          -I<var> <value>
                        Initialize  an  EMACS variable  with  <value>.
                        This can  be useful to force EMACS to start in
                        a particular mode.  (For example, invoke EMACS
                        with "emacs -i$sres  VGA foo.bar" to edit file
                        foo.bar in VGA 50 line mode on an IBM-PC).

          -K<key>       This key tells emacs to place the source files
                        in CRYPT mode and  read  it  in using <key> as
                        the encryption  key.    If  no  key  is listed
                        immediately  after  the  -K switch, EMACS will
                        prompt for a key,  and  not  echo  it as it is
                        typed.

          -R            This  places EMACS in "restricted mode"  where
                        any  commands  allowing the user  to  read  or
                        write any files other than the ones  listed on
                        the  command  line  are  disabled.   Also  all
                        commands  allowing  the  user  access  to  the
                        operating  system  are  disabled.  This  makes
                        EMACS very useful  as a "safe" environment for
                        use within other  applications  and especially
                        used  as  a  remote  editor  for   a   BBS  or
                        electronic bulletin board system.

          -S<string>    After  EMACS  is  started,  it   automatically
                        searches  for <string>  in  the  first  source
                        file.

          -V            This  tells  EMACS  that  all   the  following
                        sources files on the command line should be in
                        VIEW mode to prevent any changes being made to
                        them.













          71






          MicroEMACS Reference Manual               Command Completion








                                   Chapter 16

                               Command Completion


                  Some  versions  of  MicroEMACS  will  allow  you  to
          abbrieviate buffer names, command names  and  file  names as
          you  enter  them.   To use  this,  type  in  the  first  few
          characters of the name  you  wish,  and  then hit either the
          space bar, the  META  key  or  the TAB key.  MicroEMACS will
          then attempt to look at the list of all the  availible names
          and if there is only one which will fit, it will choose that
          name.  If there  are  several  names  that quailify, as many
          characters as are common to ALL of them will be entered.  If
          there  are  no  possible  matches,  the  bell  will ring  to
          indicate MicroEMACS can not complete the command.

                  For example,  if  you  have  several  files  in your
          current directory with the following names:

                  prog1.c
                  prog1.obj
                  prog1.exe
                  prog1.doc
                  program.one
                  project.one
                  test.c
                  tes

                  and you enter the  ^X^F  find-file  command,  if you
          type 'p' and then  hit  the space bar, EMACS will respond by
          typing the 'r' that is common to all the  above  file  names
          begining with 'p'.  If you  then  type 'ogr' and hit the tab
          key, EMACS will respond with 'am.one' and  automatically hit
          the enter key for you.

                  If you were to instead type an 'a' and hit the space
          bar,  EMACS  will  beep,  informing  you  that  there is  no
          possible match.

                  If you type a 'te' and hit the space bar, EMACS will
          then type the  following  's', but it will not automatically
          enter it  because  it  is  possible  you  mean to get to the
          test.c file.

                  Buffer   name,   and   command  name  completion  is
          available  in  all  versions  of  MicroEMACS.     File  name



                                                                    72






          MicroEMACS Reference Manual              MicroEMACS commands


          completion is available on  UNIX  BSD4.3,  the Atari ST, the
          AMIGA and under MSDOS.






















































                                                                    74






               MicroEMACS commands              MicroEMACS Reference Manual








                                        Appendix B

                                   MicroEMACS commands


                       Below is a  complete  list of the commands in EMACS,
               the  keys  normally  used  to  do the command, and what  the
               command does.  Remember, on some computers there may also be
               additional ways  of using a command (cursor keys and special
               function keys for example).

               Command                         Binding         Meaning
               abort-command            ^G     This allows the user to abort out of
                                               any
                                               command that is waiting for input

               add-mode                 ^XM    Add a mode to the current buffer

               add-global-mode          M-M    Add a global mode for all new buffers

               apropos                  M-A    List out commands whose name contains
                                               the string specified

               backward-character       ^B     Move one character to the left

               begin-macro              ^X(    Begin recording a keyboard macro

               beginning-of-file        M-<    Move to the beginning of the file in
                                               the current buffer

               beginning-of-line        ^A     Move to the beginning of the current
                                               line

               bind-to-key              M-K    Bind a key to a function

               buffer-position          ^X=    List the position of the cursor in the
                                               current window on the command line

               case-region-lower        ^X^L   Make a marked region all lower case

               case-region-upper        ^X^U   Make a marked region all upper case

               case-word-capitalize     M-C    Capitalize the following word

               case-word-lower          M-L    Lower case the following word

               case-word-upper          M-U    Upper case the following word



               75






          MicroEMACS Reference Manual              MicroEMACS commands


          change-file-name         ^XN    Change the name of the file in the
                                          current buffer

          change-screen-size      (none)  Change the number of lines of the
                                          screen
                                          currently being used

          change-screen-width     (none)  Change the number of columns of the
                                          screen currently being used

          clear-and-redraw         ^L     Clear the physical screen and redraw
                                          it

          clear-message-line      (none)  Clear the command line

          copy-region              M-W    Copy the currently marked region into
                                          the kill buffer

          count-words              M-^C   Count how many words, lines and
                                          characters are in the current marked
          region

          ctlx-prefix              ^X     Change the key used as the ^X prefix

          delete-blank-lines       ^X^O   Delete all blank lines around the
                                          cursor

          delete-buffer            ^XK    Delete a buffer which is not being
                                          currently displayed in a window

          delete-mode              ^X^M   Turn off a mode in the current buffer

          delete-global-mode       M-^M   Turn off a global mode

          delete-next-character    ^D     Delete the character following the
                                          cursor

          delete-next-word         M-D    Delete the word following the cursor

          delete-other-windows     ^X1    Make the current window cover the
                                          entire
                                          screen

          delete-previous-character^H     Delete the character to the left of
                                          the
                                          cursor

          delete-previous-word     M-^H   Delete the word to the left of the
                                          cursor

          delete-window            ^X0    Remove the current window from the
                                          screen

          describe-bindings       (none)  Make a list of all legal commands


                                                                    76






               MicroEMACS commands              MicroEMACS Reference Manual


               describe-key             ^X?    Describe what command is bound to a
                                               keystroke sequence

               detab-region             ^X^D   Change all tabs in a region to the
                                               equivalent spaces

               display                 ^XG     Prompts the user for a variable and
                                               displays its current value

               dump-variables           none   Places into a buffer the current
                                               values
                                               of all environment and user variables

               end-macro                ^X)    stop recording a keyboard macro

               end-of-file              M->    Move cursor to the end of the current
                                               buffer

               end-of-line              ^E     Move to the end of the current line

               entab-region             ^X^E   Change multiple spaces to tabs where
                                               possible

               exchange-point-and-mark  ^X^X   Move cursor to the last marked spot,
                                               make the original position be marked

               execute-buffer          (none)  Execute a buffer as a macro

               execute-command-line    (none)  Execute a line typed on the command
                                               line as a macro command

               execute-file            (none)  Execute a file as a macro

               execute-macro            ^XE    Execute the keyboard macro (play back
                                               the recorded keystrokes)
               execute-macro-<n>       (none)  Execute numbered macro <N> where <N>
                                               is
                                               an integer from 1 to 40

               execute-named-command    M-X    Execute a command by name

               execute-procedure        M-^E   Execute a procedure by name

               execute-program         ^X$     Execute a program directly (not
                                               through
                                               an intervening shell)

               exit-emacs               ^X^C   Exit EMACS. If there are unwritten,
                                               changed buffers EMACS will ask to
               confirm

               fill-paragraph           M-Q    Fill the current paragraph




               77






          MicroEMACS Reference Manual              MicroEMACS commands


          filter-buffer            ^X#    Filter the current buffer through an
                                          external filter

          find-file                ^X^F   Find a file to edit in the current
                                          window

          forward-character        ^F     Move cursor one character to the right

          goto-line                M-G    Goto a numbered line

          goto-matching-fence      M-^F   Goto the matching fence

          grow-window              ^X^    Make the current window larger

          handle-tab               ^I     Insert a tab or set tab stops

          hunt-forward             A-S    Hunt for the next match of the last
                                          search string

          hunt-backward            A-R    Hunt for the last match of the last
                                          search string

          help                     M-?    Read EMACS.HLP into a buffer and
                                          display it

          i-shell                  ^XC    Shell up to a new command processor

          incremental-search       ^XS    Search for a string, incrementally

          insert-file              ^X^I   insert a file at the cursor in the
                                          current file

          insert-space             ^C     Insert a space to the right of the
                                          cursor

          insert-string           (none)  Insert a string at the cursor

          kill-paragraph           M-^W   Delete the current paragraph

          kill-region              ^W     Delete the current marked region,
                                          moving
                                          it to the kill buffer

          kill-to-end-of-line      ^K     Delete the rest of the current line

          list-buffers             ^X^B   List all existing buffers

          meta-prefix              <ESC>  Key used to precede all META commands

          mouse-move-down          MSa

          mouse-move-up            MSb

          mouse-resize-screen      MS1


                                                                    78






               MicroEMACS commands              MicroEMACS Reference Manual


               mouse-region-down        MSe

               mouse-region-up          MSf

               move-window-down         ^X^N   Move all the lines in the current
                                               window down

               move-window-up           ^X^P   Move all the lines in the current
                                               window up

               name-buffer              M-^N   Change the name of the current buffer

               narrow-to-region         ^X<    hides all text not in the current
                                               region

               newline                  ^M     Insert a <NL> at the cursor

               newline-and-indent       ^J     Insert a <NL> at the cursor and indent
                                               the new line the same as the preceding
               line

               next-buffer              ^XX    Bring the next buffer in the list into
                                               the current window

               next-line                ^N     Move the cursor down one line

               next-page                ^V     Move the cursor down one page

               next-paragraph           M-N    Move cursor to the next paragraph

               next-window              ^XO    Move cursor to the next window

               next-word                M-F    Move cursor to the beginning of the
                                               next word

               nop                     (none)  Does nothing

               open-line                ^O     Open a line at the cursor

               overwrite-string        (none)  Overwrite a string at the cursor

               pipe-command             ^X@    Execute an external command and place
                                               its output in a buffer

               previous-line            ^P     Move cursor up one line

               previous-page            ^Z     Move cursor up one page

               previous-paragraph       M-P    Move back one paragraph

               previous-window          ^XP    Move the cursor to the last window





               79






          MicroEMACS Reference Manual              MicroEMACS commands


          previous-word            M-B    Move the cursor to the beginning of
                                          the
                                          word to the left of the cursor

          print                   (none)  Display a string on the command line
                                          (a synonim to write-message)

          query-replace-string     M-^R   Replace all of one string with another
                                          string, interactively querying the
          user

          quick-exit               M-Z    Exit EMACS, writing out all changed
                                          buffers

          quote-character          ^Q     Insert the next character literally

          read-file                ^X^R   Read a file into the current buffer

          redraw-display           M-^L   Redraw the display, centering the
                                          current line

          resize-window            ^XW    Change the number of lines in the
                                          current window

          restore-window          (none)  Move cursor to the last saved window

          replace-string           M-R    Replace all occurrences of one string
                                          with another string from the cursor
                                          to the end of the buffer

          reverse-incremental-search^XR   Search backwards, incrementally

          run                      M-^E   Execute a named procedure

          save-file                ^X^S   Save the current buffer if it is
                                          changed

          save-window             (none)  Remember current window (to restore
                                          later)

          scroll-next-up           M-^Z   Scroll the next window up

          scroll-next-down         M-^V   Scroll the next window down

          search-forward           ^S     Search for a string

          search-reverse           ^R     Search backwards for a string

          select-buffer            ^XB    Select a buffer to display in the
                                          current window

          set                      ^XA    Set a variable to a value




                                                                    80






          MicroEMACS commands              MicroEMACS Reference Manual


          set-encryption-key       M-E    Set the encryption key of the current
                                          buffer

          set-fill-column          ^XF    Set the current fill column

          set-mark                        Set the mark

          shell-command            ^X!    Causes an external shell to execute
                                          a command

          shrink-window            ^X^Z   Make the current window smaller

          source                  (none)  Execute a file as a macro

          split-current-window     ^X2    Split the current window in two

          store-macro             (none)  Store the following macro lines to a
                                          numbered macro

          store-procedure         (none)  Store the following macro lines to a
                                          named procedure

          transpose-characters     ^T     Transpose the character at the cursor
                                          with the character to the left

          trim-region              ^X^T   Trim any trailing white space from a
                                          region

          unbind-key               M-^K   Unbind a key from a function

          universal-argument       ^U     Execute the following command 4 times

          unmark-buffer            M-~    Unmark the current buffer (so it is
                                          no longer changed)

          update-screen           (none)  Force a screen update during macro
                                          execution

          view-file                ^X^V   Find a file,and put it in view mode

          widen-from-region        ^X>    restores hidden text (see narrow-to-
                                          region)

          wrap-word               (none)  Wrap the current word, this is an
                                          internal function

          write-file               ^X^W   Write the current buffer under a new
                                          file name

          write-message           (none)  Display a string on the command line

          yank                     ^Y     yank the kill buffer into the current
                                          buffer at the cursor



          81






          MicroEMACS Reference Manual              MicroEMACS Bindings








                                   Appendix C

                              MicroEMACS Bindings


                  Below is a complete list of the key bindings used in
          MicroEMACS. This can be used as a wall  chart  reference for
          MicroEMACS commands.

                         Default Key Bindings for MicroEmacs 3.10

           ^A   Move to start of line           ESC A   Apropos (list some
                                                        commands)
           ^B   Move backward by characters     ESC B   Backup by words
           ^C   Insert space                    ESC C   Initial capitalize word
           ^D   Forward delete                  ESC D   Delete forward word
           ^E   Goto end of line                ESC E   Reset Encryption Key
           ^F   Move forward by characters      ESC F   Advance by words
           ^G   Abort out of things             ESC G   Go to a line
           ^H   Backward delete
           ^I   Insert tab/Set tab stops
           ^J   Insert <NL>, then indent
           ^K   Kill forward                    ESC K   Bind Key to function
           ^L   Refresh the screen              ESC L   Lower case word
           ^M   Insert <NL>                     ESC M   Add global mode
           ^N   Move forward by lines           ESC N   Goto End paragraph
           ^O   Open up a blank line
           ^P   Move backward by lines          ESC P   Goto Begining of
                                                        paragraph
           ^Q   Insert literal                  ESC Q   Fill current paragraph
           ^R   Search backwards                ESC R   Search and replace
           ^S   Search forward                  ESC S   Suspend (BSD only)
           ^T   Transpose characters
           ^U   Repeat command four times       ESC U   Upper case word
           ^V   Move forward by pages           ESC V   Move backward by pages
           ^W   Kill region                     ESC W   Copy region to kill
                                                        buffer
           ^Y   Yank back from killbuffer       ESC X   Execute named command
           ^Z   Move backward by pages          ESC Z   Save all buffers and
                                                        exit

           ESC ^C   Count words in region       ESC ~   Unmark current buffer
           ESC ^E   Execute named procedure
           ESC ^F   Goto matching fence         ESC !   Reposition window
           ESC ^H   Delete backward word        ESC <   Move to start of buffer
           ESC ^K   Unbind Key from function    ESC >   Move to end of buffer
           ESC ^L   Reposition window           ESC .   Set mark
           ESC ^M   Delete global mode          ESC space    Set mark


                                                                    82






          MicroEMACS Bindings              MicroEMACS Reference Manual


           ESC ^N   Rename current buffer       ESC rubout   Delete backward
                                                             word
           ESC ^R   Search & replace w/query        rubout   Backward delete
           ESC ^S   Source command file
           ESC ^V   Scroll next window down
           ESC ^W   Delete Paragraph
           ESC ^X   Execute command line
           ESC ^Z   Scroll next window up

           ^X <   Narrow-to-region           ^X ?   Describe a key
           ^X >   Widen-from-region          ^X !   Run 1 command in a shell
           ^X =   Show the cursor position   ^X @    Pipe shell command to
                                                     buffer
           ^X ^   Enlarge display window     ^X #   Filter buffer thru shell
                                                    filter
           ^X 0   Delete current window      ^X $   Execute an external program
           ^X 1   Delete other windows       ^X (   Begin macro
           ^X 2   Split current window       ^X )   End macro
                                             ^X A   Set variable value
           ^X ^B   Display buffer list       ^X B   Switch a window to a buffer
           ^X ^C   Exit MicroEMACS           ^X C   Start a new command
                                                    processor
           ^X ^D   Detab line                ^X D   Suspend MicroEMACS (BSD4.2
                                                    only)
           ^X ^E   Entab line                ^X E   Execute macro
           ^X ^F   Find file                 ^X F   Set fill column
           ^X ^I   Insert file
                                             ^X K   Delete buffer
           ^X ^L   Lower case region
           ^X ^M   Delete Mode               ^X M   Add a mode
           ^X ^N   Move window down          ^X N   Rename current filename
           ^X ^O   Delete blank lines        ^X O   Move to the next window
           ^X ^P   Move window up            ^X P   Move to the previous window
           ^X ^R   Get a file from disk      ^X R   Incremental reverse search
           ^X ^S   Save current file         ^X S   Incremental forward search
           ^X ^T   Trim line                 (Incremental search
           ^X ^U   Upper case region                not always available)
           ^X ^V   View file
           ^X ^W   Write a file to disk      ^X W   resize Window
           ^X ^X   Swap "." and mark         ^X X   Use next buffer
           ^X ^Z   Shrink window             ^X Z   Enlarge display window

          Usable Modes
          WRAP     Lines going past right margin "wrap" to a new line
          VIEW     Read-Only mode where no modifications are allowed
          CMODE    Change behavior of some commands to work better with C
          EXACT    Exact case matching on search strings
          OVER     Overwrite typed characters instead of inserting them
          CRYPT    Current buffer will be encrypted on write, decrypted on read
          MAGIC    Use regular expression matching in searches
          ASAVE    Save the file every 256 inserted characters

          WHITE/CYAN/MAGENTA/YELLOW/BLUE/RED/GREEN/BLACK  Sets foreground color
          white/cyan/magenta/yellow/blue/red/green/black  Sets background color


          83






          MicroEMACS Reference Manual               Supported machines








                                   Appendix D

                               Supported machines


                  The following table lists all the hardware/compilers
          for  which  I  currently support MicroEMACS.   This  is  not
          exclusive of  all machines which MicroEMACS will run on, but
          I have either run it myself,  or  had a first hand report of
          it running.

          Hardware        OS              Compiler        Comments
          VAX 780         UNIX V5         native
                          UNIX V7         native
                          BSD 4.2         native          job control supported
                          *VMS            native

          NCR Tower       UNIX V5         native

          IBM-RT PC       BSD 4.3         native

          HP9000          UNIX V5         native

          Fortune 32:16   UNIX V7         native

          IBM-PC          MSDOS           LATTICE 2.15    Large CODE/Large DATA
                           2.0 & 3.2      AZTEC 3.4e      Large CODE/Large DATA
                                          TURBO C v1.5    LARGE memory model
                                          MSC 4.0
                                          *MWC 86
                          SCO XENIX       native

          HP150           MSDOS           Lattice 2.15    Function key labels
                                                          for the touch screen

          HP110           MSDOS           Lattice 2.15
                                          Aztec 3.4e

          *Data General 10
                          MSDOS           Lattice 2.1  Texas Instruments
                                          Professional
                          MSDOS           Lattice 2.15

          Amiga           Intuition       Lattice 3.03
                                          Aztec 3.6

          ST520           TOS             Mark Williams C Spawns under MSH
                                          Lattice 3.10    (no shell commands)


                                                                    84






          Supported machines               MicroEMACS Reference Manual


          Systems to be supported (IE some code is already written:)
          Macintosh       Finder 5.0      Aztec

          *means that I do not own or have access to the listed compiler and/or
           machine and must rely upon others to help support it.



















































          85






               MicroEMACS Reference Manual                    Function Keys








                                        Appendix E

                                      Function Keys


                       On the  IBMPC, the ATARI ST, the Commodore AMIGA and
               UNIX now support  a  set of machine independant bindings for
               function keys.  Below  is  a list of these bindings (not all
               of these are supported on all systems).

                                       Function keys in MicroEmacs

                       function        Function        ^function       Alt-function
                f1)      FN1            S-FN1            FN^1            A-FN1
                f2)      FN2            S-FN2            FN^2            A-FN2
                f3)      FN3            S-FN3            FN^3            A-FN3
                f4)      FN4            S-FN4            FN^4            A-FN4
                f5)      FN5            S-FN5            FN^5            A-FN5
                f6)      FN6            S-FN6            FN^6            A-FN6
                f7)      FN7            S-FN7            FN^7            A-FN7
                f8)      FN8            S-FN8            FN^8            A-FN8
                f9)      FN9            S-FN9            FN^9            A-FN9
               f10)      FN0            S-FN0            FN^0            A-FN0

               home)     FN<                             FN^<
               CsUp)     FNP                             FN^P
               PgUp)     FNZ                             FN^Z
               CsLf)     FNB                             FN^B
                5  )
               CsRt)     FNF                             FN^F
                End)     FN>                             FN^>
               CsDn)     FNN                             FN^N
               PgDn)     FNV                             FN^V
                Ins)     FNC                             FN^C
                Del)     FND                             FN^D















                                                                         86






               Machine Dependent Notes          MicroEMACS Reference Manual








                                        Appendix F

                                 Machine Dependent Notes


                       This  appendix   lists   some   notes   specific  to
               individual implementations of MicroEMACS. Every  attempt has
               been  made  to  allow EMACS to be identical on all machines,
               but we have also tried to take advantage  of  function keys,
               cursor keys, mice, and special screen modes where possible.


               F.1  IBM-PC/XT/AT and its clones


                       The IBM-PC family of computers is  supported  with a
               variety of different display adapters.   EMACS  will attempt
               to discover what adapter is  connected  and  use  the proper
               driver  for  it.  Below is a list of the currently supported
               video adapters:

               Adapter                         $sres           Original mode used
               Monochrome Graphics Adapter     MONO            MONO
               Color Graphics Adapter          CGA             CGA
               Enhanced Graphics Adapter       EGA             CGA
               Video Graphics Adapter          VGA             CGA

                       If a driver  for  a  Microsoft  compatable  mouse is
               installed  on  the  system, EMACS will use the mouse in text
               mode and allow the  user  all  the standard mouse functions.
               The mouse cursor will appear to  be  a block of color in the
               color opposite of it's background.

                       EMACS also takes  advantage of various function keys
               and the keys on the keypad on an IBM-PC.  The  function keys
               are initially not bound to any particular  functions (except
               by  the  emacs.rc  startup  file),  but the keypad  keys  do
               default to the following:

               Keypad key      Function
               Home            beginning-of-file
               CSRS UP         previous-line
               Pg Up           previous-page
               CSRS LEFT       backward-character
               CSRS RIGHT      forward-character
               End             end-of-file
               CSRS DOWN       next-line



               87






               MicroEMACS Reference Manual          Machine Dependent Notes


               Pg Dn           Next-page

                       All  these  special  keys  are  indicated  in  EMACS
               macroes by use of the FN prefix.  Below is a list of many of
               the keys and the codes used to specify them.  Also the codes
               may  be  gotten  by using the describe-key (^X ?) command on
               the suspect key.

               Compiling under TURBO C

                       To compile MicroEMACS under TURBO C,  set  the TURBO
               integrated environment with the following options:

                       Memory model            LARGE
                       Floating point          NONE
                       Default char type       UNSIGNED
                       Data alignment          BYTE
                       Merge duplicate strings ON
                       Standard stack frame    off
                       Test stack overflow     off

                       Optimize for                    SIZE
                       Use register optimization       ON
                       Register optimization           ON
                       Jump optimization               ON

                       Initialize segments     OFF
                       Stack warnings          OFF

                       Names: Code names
                               Segment name    *

























                                                                         88






          Machine Dependent Notes          MicroEMACS Reference Manual




          F.2  HP 150


                  This machine from Hewlett  Packard  is  very unusual
          for an MSDOS machine.  It has a  touch  screen  and  is very
          function  key  oriented.    An  additional  command,  label-
          function-key allows you to place  labels  on  the  on screen
          function key labels.   A  numeric  argument  indicates which
          function  key  to  label (one through eight)  and  then  the
          program prompts for a 16 character label, which will be used
          as two lines of  eight  characters.    To label function key
          three with "save file" from a macro, you would use:

          3 label-function-key "save              file"

                  Notice the  4  spaces  after  "save".    This forces
          "file" to begin on the second line of the label.





































          89






          MicroEMACS Reference Manual          Machine Dependent Notes




          F.3  Atari 520/1040ST


                  The  ATARI  ST  family  of  computers  have  a  dual
          personality.    They  may use either a monochrome or a color
          screen.  EMACS  supports  two  screen  resolutions  on  each
          monitor.

                                      NOTE

               When you set MicroEMACS up on your  system, please
               remember to install it on  the  desktop  as  a GEM
               application.    If  you have EMACS set  as  a  TOS
               application, the mouse will not function properly,
               and  EMACS  will  alert  you  to  this  problem by
               beeping the bell.

          Monitor $sres size #color $palette format
          Color   LOW     40x25   16      000111222333444555666777
                  MEDIUM  80x25   4       000111222333
          Mono    HIGH    80x25   2       000
                  DENSE   80x50   2       000

                  The  $palette  environment  variable  can be used to
          change what color is associated  with each color name.  With
          a color monitor, each group  of  three  digits  indicates an
          octal number specifying the  RED,  GREEN  and BLUE levels of
          that color.    Each  color  digit can vary from 0 to 7.  For
          example, the initial setting of $palette  in  LOW resolution
          is:

                  000700070770007707077777

                  which broken up is:

                  000 700 070 770 007 707 077 777

                  which means:

                  000     Black
                  700     Red
                  070     Green
                  770     Yellow
                  007     Blue
                  707     Magenta
                  077     Cyan
                  777     White

                  Also the mouse buttons are bound to  mouse functions
          as described in the chapter  about mice. The cursor keys and
          the function keys are bound similarly to IBM-PC.



                                                                    90






          Machine Dependent Notes          MicroEMACS Reference Manual


                  Files  generated by EMACS on the  ATARI  ST  have  a
          single return character at the  end of each line, unlike the
          desktop files which want to  have two returns. This makes it
          display files strangely from GEM's [SHOW] option,  but makes
          the files port to other computers much nicer. When compiling
          MicroEMACS, the ADDCR symbol in estruct.h  will  cause emacs
          to generate line ending sequences compatible with GEM.

                  Currently,  when  operating  under the Mark Williams
          MSH  program,  EMACS  can  shell  out  and  perform external
          commands.  This  capability  will  be  added  later  for the
          Beckmeyer shell and under GEMDOS.












































          91






               MicroEMACS Reference Manual          Machine Dependent Notes




               F.4  Amiga 1000


                       The Commodore AMIGA  1000 version of MicroEMACS does
               fully support  the  mouse,  window  resizing  and  the close
               gadget.   It runs in medium  resolution,  using  the  colors
               defined for the workbench.

                             Note about Compiling MicroEMACS

                            If you are compiling  the  sources  on the
                    AMIGA to produce an executable image, and  you are
                    using the Lattice compiler, be  sure  to  give the
                    CLI command 'STACK 40000' before compiling to make
                    sure the compiler has  sufficient  stack  space to
                    successfully complete compilation.






































                                                                         92






          Machine Dependent Notes          MicroEMACS Reference Manual




          F.5  UNIX V5, V7, and BSD4.[23]


                  MicroEMACS  under UNIX utilizes the TERMCAP  library
          to provide machine independent screen functions.   Make sure
          that termcap is  available  and properly set on your account
          before attempting to use MicroEMACS.

                  Under systems which support job control, you can use
          the  ^XD  suspend-emacs  command  to  place  EMACS  into the
          background.   This  carries  a  much  smaller  overhead than
          bringing  up  a  new shell under EMACS.  EMACS will properly
          redraw the screen when you bring it back to the foreground.

                  If  the  symbol  VT100 has been  set  to  1  in  the
          estruct.h  options  file,   EMACS  will  recognize  the  key
          sequence <ESC>[ as the lead  in sequence for the FN function
          key prefix.

                  With the  addition  of  some  very machine/operating
          system specific code,  EMACS  can prevent two or more people
          from modifying the same  file  at  the  same time. The upper
          level of a set of functions to provide file locking exist in
          the source file LOCK.C.    It  requires two machine specific
          functions written and linked  into  EMACS  for it to operate
          properly.

                  char *dolock(fname)

                  char *fname;

                  dolock() locks a file, preventing others from modifying it. If
                  it succeeds, it returns NULL, otherwise it returns a pointer
          to
                  a string in the form "LOCK ERROR: explanation".

                  char *undolock(fname)

                  char *fname;

                  undolock() unlocks a file, allowing others to modifying it. If
                  it succeeds, it returns NULL, otherwise it returns a pointer
          to
                  a string in the form "LOCK ERROR: explanation".










          93






          MicroEMACS Reference Manual          Machine Dependent Notes




          F.6  DEC VMS operating system


          TERMINALS

                  MicroEMACS  uses  the  capabilities  of VMS SMG, and
          should  work  with  any   terminal   that   is   defined  in
          SMGTERMS.TXT or TERMTABLE.TXT.   (See  your  SMG  manual for
          more information.) Full keyboard support, with function keys
          and everything,  is  provided  for  VT100  and  VT200 series
          compatible terminals.  Mouse  support  is  provided  for the
          VSII  workstation's  VT220  terminal  emulator,   and  other
          terminal emulators that use the  same  escape  sequences for
          mouse control.  (There is some partial support  for  the BBN
          BitGraph mouse sequences in the sources, but this is not yet
          complete.)  Terminals  may  have  up  to 100 lines  and  160
          columns.

          KEYBOARD

                  The  VMS version understands the LK201 functions  of
          VT200  series,  vt300  series,  and compatible terminals and
          terminal  emulators,  and  allows  you  to bind to  them  as
          function keys.  In  addition,  the  VT100 numeric keypad, in
          application mode, is available as function keys.  MicroEMACS
          does not,  however, put the keypad into application mode for
          you.    This  is  done  by  issuing  the command  "SET  TERM
          /APPLICATION" before entering MicroEMACS.

          VT200 keys

          F6   = FN^Q     F7     = FN^R   F8     = FN^S   F9     = FN^T   F10  =
                                                                          FN^U
          F11  = FN^W     F12    = FN^X   F13    = FN^Y   F14    = FN^Z   HELP =
                                                                          FN^\
          DO   = FN^]     F17    = FN^_   F18    = "FN "  F19    = FN!    F20  =
                                                                          FN"
          FIND = FN^A     INSERT = FN^B   REMOVE = FN^C   SELECT = FN^D   PREV =
                                                                          FN^E
          NEXT = FN^F

          VT100 and VT200 Arrow keys

          Up = FNA        Down = FNB      Right = FNC     Left = FND

          VT100 and VT200 numeric keypad in SET TERM /APPLICATION mode

          PF1 = FNP9      PF2 = FNQ       PF3 = FNR       PF4   = FNS
          7   = FNw       8   = FMx       9   = FNy       -     = FNm
          4   = FNt       5   = FNu       6   = FNv       ,     = FNl
          1   = FNq       2   = FNr       3   = FNs       ENTER = FNM



                                                                    94






               Machine Dependent Notes          MicroEMACS Reference Manual


               0   = FNp       .   = FNn

                                         WARNING

                            The   VMS   version  contains   code   for
                    interpreting  function keys that are sent as  Ansi
                    sequences  that  begin  with  the  ESC  character.
                    Because  of this,  MicroEMACS  cannot  process  an
                    incoming ESC until it knows what character follows
                    it.    This can cause  problems  with  terminating
                    search and  replace strings. If you use ESC as the
                    meta-prefix  character (which is the default)  you
                    must  type one additional keystroke following  ESC
                    before  emacs will recognize that you have  edited
                    the search  command  prompt,  and  are continuing.
                    (The additional character is processed normally be
                    MicroEMACS, it is NOT discarded.)

               Flow control

                       Some terminals will require the use of XON/XOFF flow
               control when  used  with  MicroEMACS.    When  XON/XOFF flow
               control is used, you will not be able to use functions bound
               to  ^S  or  ^Q, and should  use  bind-to-key  to  put  these
               functions on other keys.   MicroEMACS  does  not  change the
               flow control characteristics of your terminal line  while it
               is running.  If your  terminal  requires  flow  control, you
               should:

                       $ SET TERM/HOSTSYNC/TTSYNC

                       before entering MicroEMACS.   If  you  are on a VSII
               emulated  workstation  terminal, are using  the  SSU  multi-
               session protocol  (VT330 and VT340 with SSU enabled), or are
               certain that your terminal does  not  require  XON/XOFF flow
               control, you should

                       $ SET TERM /HOSTSYNC/NOTTSYNC

                       This will allow you to  use ^S and ^Q for MicroEMACS
               commands. Note that if you are using a VSII with VWS V3.2 or
               later, you must leave the /HOSTSYNC enabled in order for the
               cross/session cut and paste capability to work properly.


               Search List for EMACS.RC

                       VMS  MicroEMACS  will  first  search   logical  name
               MICROEMACS$LIB:,  and  then  "sys$sysdevice:[vmstools]" when
               looking for startup files or help files.

                       Please use MICROEMACS$LIB:, and allow  the secondary
               search  of  [vmstools]  to  become  archaic.    If  desired,
               MICROEMACS$LIB may be defined to be a VMS  search  list that


               95






          MicroEMACS Reference Manual          Machine Dependent Notes


          first  searches  a  user  directory,  and   then   a  system
          directory.

                  Generally, you  should  create  a  private directory
          where  you  keep  all your .CMD files, and in your LOGIN.COM
          $DEFINE a logical name to point to this area.

          Using MicroEMACS with VMS MAIL and NOTES

                  There are two ways of using MicroEMACS with MAIL and
          NOTES.    The  first way requires the  cooperation  of  your
          system  manager, but is faster and  less  taxing  on  system
          resources.  The second way can be done by  any  random  user
          that has PRCLM quota that is greater than 1, but  it creates
          a new subprocess each time  MicroEMACS is called up from the
          application, and is  therefore  slower  to  invoke  and more
          demanding on  system resources.  Obviously, the first way is
          recommended.

          First way

          1. $ SET PROC/PRIV=ALL
          2. $ Copy MESHR.EXE SYS$SHARE:MESHR.EXE/PROT=WO:RE
          3. $ INSTALL :== $INSTALL
          4. $ INSTALL/COMMAND ADD SYS$SHARE:MESHR.EXE

                  Step 4, and possibly step  3,  must  be incorporated
          into  the   system-wide   startup   command   file,  usually
          SYS$MANAGER:SYSTARTUP.COM,  so  that   MicroEMACS   will  be
          installed  each  time  the  system  boots.    Note that  the
          filename MUST be "MESHR.EXE".

          5. $ DEFINE MAIL$EDIT CALLABLE_ME

                  Step 5 must be added to the LOGIN.COM  of  each user
          that  wishes  to  have  MicroEMACS  as  their  MAIL  editor.
          Additionally, they may  wish  to  have  the  line  $  ME :==
          $SYS$SHARE:MESHR.EXE, which will allow them to use  the "ME"
          command for invoking MicroEMACS from DCL.

          6. $ NOTES
          NOTES> SET PROFILE/EDIT=(ME,CALL)

                  Step 6 must be performed by each user that wishes to
          have MicroEMACS as their NOTES editor.

                  NOTE: If you already have  a  version  of MicroEMACS
          installed, and you  wish  to  install  a  new  version  in a
          running system, you must  REMOVE  the  old image and INSTALL
          the  new one before MAIL or NOTES will  recognize  it.    To
          perform the upgrade, use following sequence of commands:

          $ install :== $install
          $ set proc /priv=all


                                                                    96






               Machine Dependent Notes          MicroEMACS Reference Manual


               $ install/command remove sys$share:meshr.exe
               $ copy meshr.exe sys$share:/log/prot=wo:re
               $ install/command add sys$share:meshr.exe

               Second way

                       In the event that you cannot get your system manager
               to  INSTALL  MicroEMACS  as  known  image, you can  use  the
               following technique:

               1. In MICROEMACS$LIB:MEMAIL.COM, put the following command file:

               $! Use on VAX/VMS as MAIL$EDIT for using MicroEMACS as mail editor.
               $ if "''P1'" .NES. "_NL:" then if "''P1'" .NES. "" then copy 'P1' 'P2'
               $ define/user sys$input sys$output
               $ me 'P2'
               $ exit

               This file may have come with your MicroEMACS kit.

               2. In your LOGIN.COM, put the following lines:

               $       me :== $MICROEMACS$LIB:MESHR.EXE ! Assumes meshr.exe is there
               $       define mail$edit microemacs$lib:me_edit.com

               3. In NOTES, give the command

               NOTES> SET PROFILE/EDIT=(@MicroEMACS$lib:me_edit.com,SPAWN)

               Building MicroEMACS for VMS

               The configuration options are set in file estruct.h:

               - Under the category of "Machine/OS definitions", set VMS to "1" and
               all
               others to "0".

               - Under "Compiler definitions", set all selections to "0".  Selecting
               VMS implies that you are using VAXC.

               - Under "Special keyboard definitions", be sure "VT100" is set to "0".
               This option is not required for the VMS version, it is for versions
               linked with ANSI terminal support.  VMSVT already handles the special
               characteristics of Ansi keyboards.

               - Under "Terminal Output definitions", set VMSVT to "1" and all others
               to "0".

               - Under "Configuration options", you may select as you wish, with the
               following notes:

                   - COLOR     support does not exist for VMS, even when using
                               color workstations.



               97






               MicroEMACS Reference Manual          Machine Dependent Notes


                   - MOUSE     support should be enabled if you have any VSII
                               workstations

                       If  you  have  MMS,  you   can   use   the  supplied
               DESCRIP.MMS  to  build  MicroEMACS.  If you do not have MMS,
               simply  compile each module with "CC",  and  link  with  the
               command:

                       $ LINK MESHR/OPTION/SHARE

                       Note that the executable filename must end  in "SHR"
               in order for MicroEMACS to be used as a callable editor from
               MAIL or NOTES.  (Method 1 above.)

                       If you edit any of  the Emacs sources, note that any
               global or external data must  be  declared  as  "noshare" in
               order for  the VMS callable editor support to work properly.
               This applies to all global data used in the VMS version, but
               not  to  routines  or  to  "static  "data.    The  "noshare"
               declaration is #define'd away  on  non-VMS  systems.  If you
               fail  to  do  this,  VMS  will  not  allow  you  to  INSTALL
               MicroEMACS as a sharable library.


































                                                                         98






               Mode Flags                       MicroEMACS Reference Manual








                                        Appendix G

                                        Mode Flags


                       The  two  environment  variables, $cmode and $gmode,
               contain  a  number  the corresponds to the modes set for the
               current buffer and the editor  as a whole. These are encoded
               as the sum of the following numbers for each of the possible
               modes:

               WRAP      1             Word wrap
               CMODE     2             C indentation and fence match
               SPELL     4             Interactive spell checking (Not Implemented
                                       Yet)
               EXACT     8             Exact matching for searches
               VIEW     16             Read-only buffer
               OVER     32             Overwrite mode
               MAGIC    64             Regular expressions in search
               CRYPT   128             Encryption mode active
               ASAVE   256             Auto-save mode

                       So, if you wished to  set the current buffer to have
               CMODE,  EXACT, and MAGIC on, and all  the  others  off,  you
               would add up the values for those three, CMODE 2  +  EXACT 8
               +  MAGIC 64 = 74, and use a statement like:

                       set $cmode 74

                       or,  use  the  binary  or  operator  to  combine the
               different modes:

                       set $cmode &bor &bor 2 8 64

               Internal Flags

                       Some  of  the   ways  EMACS  controls  its  internal
               functions  can  be  modified  by  the value in  the  $gflags
               environment variable.  Each bit  in  this  variable  will be
               used to control a different function.










               99






               MicroEMACS Reference Manual                       Mode Flags


               GFFLAG          1       If this bit is set to zero, EMACS will not
                                       automatically switch to the buffer of the
                                       first file after executing the startup macros.

               Current buffer flags

                       The $cbflags environment variable allows the user to
               modify some of the characteristics  of  the  current buffer.
               The various characteristics are  encoded  as  the sum of the
               following numbers:

               BFINVS          1       Internal invisible buffer
               BFCHG           2       Changed since last write
               BFTRUNC         4       buffer was truncated when read
               BFNAROW         8       buffer has been narrowed

                       Only the invisible and changed flags can be modified
               by setting the $cbflags  variable.  The  truncated  file and
               narrowed flags are read only.





































                                                                        100






               Index                            MicroEMACS Reference Manual








                                             Index


                       $cbflags 99               cut 25
                       $debug 66
                       $gflags 99                D
                       .emacsrc 50, 70           debugging 66
                       <NL> 15                   default string 15
                                                 delete-blank-lines
                       A                              9
                       add-global-mode 30        delete-buffer 28
                       add-mode 3, 30            delete-global-mode
                       ASAVE mode 30                  30
                                                 delete-mode 30
                       B                         delete-next-
                       backward-character             character 9
                            4                    delete-next-word 9
                       BBS 71                    delete-previous-
                       begin-macro 48                 character 9
                       beginning-of-file         delete-previous-
                            4, 9                      word 9
                       beginning-of-line         describe-bindings
                            4                         69
                       bind-to-key 68            describe-key 68
                       buffer 5, 7, 27           desk accessories
                                                      23
                       C                         detab-region 42
                       case-region-lower         dragging 24
                            40
                       case-word-                E
                            capitalize 40        emacs.rc 50, 70
                       case-word-lower 40        encryption 31
                       case-word-upper 40        end-macro 48
                       change-file-name          end-of-file 4
                            36                   end-of-line 4
                       CMODE mode 31             entab-region 42
                       color 30                  error parsing 71
                       color pallette 55         EXACT mode 32
                       command.com 45            execute-buffer 50
                       command line 18           execute-file 50
                       command processor         execute-macro 48
                            45                   execute-macro-<n>
                       control-x 1                    50
                       control key 1             execute-procedure
                       copy-region 12                 50
                       CRYPT mode 31, 71         execute-program 46
                       cshell 45                 exit-emacs 9
                       cursor keys 4


               101






          MicroEMACS Reference Manual                            Index


                                            next-buffer 27
                  F                         next-line 4
                  file locking 93           next-paragraph 4
                  fill-paragraph 8,         next-word 4
                       39
                  fill column 34            O
                  filter 45                 open-line 8
                  filter-buffer 45          open-window 18
                  find-file 19, 27          OVER mode 33
                  forward-character
                       4                    P
                  function key              paste 25
                       window 50            PATH environment
                                                 variable 70
                  G                         pipe-command 45
                  grow-window 20            point 11
                                            previous-line 4
                  H                         previous-paragraph
                  handle-tab 41                  4
                  Help File 70              previous-window 18
                  HOME environment          previous-word 4
                       variable 70          procedures 50
                  horizontal
                       scrolling 24         Q
                                            query-replace 16
                  I                         query-replace-
                  i-shell 46                     string 16, 33

                  K                         R
                  kill-region 12            rebinding 68
                  kill-to-end-of-           redraw-display 21
                       line 9               refresh-screen 21
                  kill buffer 12            region 25
                                            replace-string 16,
                  L                              33
                  label-function-key        resize-window 20
                       89                   restricted mode 71
                  list-buffers 28,          run 50
                       30
                                            S
                  M                         save-file 5
                  MAGIC mode 32             screen 7
                  mark 11                   screen resolution
                  meta key 1                     56
                  mode line 2, 7            scroll-next-down
                  modes 3, 30                    19
                  mouse 23, 55              scroll-next-up 19
                  mouse cursor 23           search-forward 14
                  move-window-down          search-reverse 15
                       19                   select-buffer 28
                  move-window-up 19         set 41
                                            set-encryption-key
                  N                              31
                  newline 1                 set-fill-column 39


                                                                   102






               Index                            MicroEMACS Reference Manual


                       set-mark 12               VIEW mode 34
                       shell 45
                       shell-command 45          W
                       shrink-window 20          window 7
                       special keys 1            windows 2, 18
                       split-current-               Creating 18
                            window 18               Deleting 20
                       startup files 70             Resizing 20
                       store-procedure 50        wrap-word 34
                       suspend-emacs 46,         WRAP mode 34
                            93                   wrapping text 39
                       switches 70               write-file 5
                                                 writefile 37
                       T
                       tab handling 41           Y
                       tabs 54, 55               yank 12
                       termcap 93
                       text window 2
                       trim-region 42

                       V
                       vertical scrolling
                            24

































               103












                                      Table of Contents





                    Chapter 1  Basic Concepts                        1
                       1.1  Keys and the Keyboard  . . . . . . . . . 1
                       1.2  Getting Started  . . . . . . . . . . . . 1
                       1.3  Parts and Pieces . . . . . . . . . . . . 2
                       1.4  Entering Text  . . . . . . . . . . . . . 3
                       1.5  Basic cursor movement  . . . . . . . . . 4
                       1.6  Saving your text . . . . . . . . . . . . 5

                    Chapter 2  Basic Editing--Simple Insertions and
                       Deletions                                     7
                       2.1  A Word About Windows, Buffers, Screens,
                       and Modes . . . . . . . . . . . . . . . . . . 7
                       2.2  Insertions . . . . . . . . . . . . . . . 8
                       2.3  Deletions  . . . . . . . . . . . . . . . 8

                    Chapter 3  Using Regions                        11
                       3.1  Defining and Deleting a Region . . . .  11
                       3.2  Yanking a Region . . . . . . . . . . .  12

                    Chapter 4  Search and Replace                   14
                       4.1  Forward Search . . . . . . . . . . . .  14
                       4.2  Exact Searches . . . . . . . . . . . .  15
                       4.3  Backward Search  . . . . . . . . . . .  15
                       4.4  Searching and Replacing  . . . . . . .  16
                       4.5  Query-Replace  . . . . . . . . . . . .  16

                    Chapter 5  Windows                              18
                       5.1  Creating Windows . . . . . . . . . . .  18
                       5.2  Deleting Windows . . . . . . . . . . .  20
                       5.3  Resizing Windows . . . . . . . . . . .  20
                       5.4  Repositioning within a Window  . . . .  21

                    Chapter 6  Using a Mouse                        23
                       6.1  Moving around with the mouse . . . . .  23
                       6.2  Dragging around  . . . . . . . . . . .  24
                       6.3  Cut and Paste  . . . . . . . . . . . .  25

                    Chapter 7  Buffers                              27

                    Chapter 8  Modes                                30
                       8.1  ASAVE mode . . . . . . . . . . . . . .  30
                       8.2  CMODE mode . . . . . . . . . . . . . .  31
                       8.3  CRYPT mode . . . . . . . . . . . . . .  31
                       8.4  EXACT mode . . . . . . . . . . . . . .  32
                       8.5  MAGIC mode . . . . . . . . . . . . . .  32


                                             i








                  8.6  OVER mode . . . . . . . . . . . . . . . 33
                  8.7  WRAP mode . . . . . . . . . . . . . . . 34
                  8.8  VIEW mode . . . . . . . . . . . . . . . 34

               Chapter 9  Files                                36

               Chapter 10  Screen Formatting                   39
                  10.1  Wrapping Text  . . . . . . . . . . . . 39
                  10.2  Reformatting Paragraphs  . . . . . . . 39
                  10.3  Changing Case  . . . . . . . . . . . . 40
                  10.4  Tabs . . . . . . . . . . . . . . . . . 40

               Chapter 11  Access to the Outside World         45

               Chapter 12  Keyboard Macros                     48

               Chapter 13  MicroEMACS Macros                   50
                  13.1  Constants  . . . . . . . . . . . . . . 51
                  13.2  Variables  . . . . . . . . . . . . . . 51
                     13.2.1  Environmental Variables . . . . . 53
                     13.2.2  User variables  . . . . . . . . . 57
                     13.2.3  Buffer Variables  . . . . . . . . 57
                     13.2.4  Interactive variables . . . . . . 58
                  13.3  Functions  . . . . . . . . . . . . . . 58
                  13.4  Directives . . . . . . . . . . . . . . 61
                     13.4.1  !ENDM Directive . . . . . . . . . 61
                     13.4.2  !FORCE Directive  . . . . . . . . 62
                     13.4.3  !IF, !ELSE, and !ENDIF
                     Directives  . . . . . . . . . . . . . . . 62
                     13.4.4  !GOTO Directive . . . . . . . . . 63
                     13.4.5  !WHILE and !ENDWHILE Directives . 64
                     13.4.6  !BREAK Directive  . . . . . . . . 64
                     13.4.7  !RETURN Directive . . . . . . . . 64

               Chapter 14  Debugging MicroEMACS macroes        66

               Chapter 15  Key Bindings, What they are and why 68

               Appendix A  MicroEMACS Command Line Switches and
                  Startup Files                                70

               Chapter 16  Command Completion                  72

               Appendix B  MicroEMACS commands                 75

               Appendix C  MicroEMACS Bindings                 82

               Appendix D  Supported machines                  84

               Appendix E  Function Keys                       86

               Appendix F  Machine Dependent Notes             87
                  F.1  IBM-PC/XT/AT and its clones . . . . . . 87
                  F.2  HP 150  . . . . . . . . . . . . . . . . 89
                  F.3  Atari 520/1040ST  . . . . . . . . . . . 90


                                       ii








                       F.4  Amiga 1000 . . . . . . . . . . . . . .  92
                       F.5  UNIX V5, V7, and BSD4.[23] . . . . . .  93
                       F.6  DEC VMS operating system . . . . . . .  94

                    Appendix G  Mode Flags                          99




















































                                            iii