home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / apps / text_ed / documnts / st_emacs.doc < prev    next >
Text File  |  1992-07-19  |  45KB  |  894 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.                               Using  Emacs  18.58
  14.  
  15.                              on  the  Atari  ST/TT
  16.  
  17.                                    family  of
  18.  
  19.                               Personal  Computers
  20.  
  21.                             Scott J. Kolodzieski (1)
  22.                         (scott@sparc1.stevens-tech.edu)
  23.  
  24.                                    July 12, 1992
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.      
  52.          (1) I am greatly in debt to a number of people who have made Emacs
  53.      a real winner on  the  ST/TT.   They  are Jwahar Bammi,  Edgar Roeder,
  54.      Michal  Jaegermann,  Lewis  Lasser   and  many  other  people  in  the
  55.      ST(internet)  community who have given  me a great  deal  of technical
  56.      assistance, bug reports, and general suggestions.
  57.  
  58.      
  59.      
  60.      
  61.      
  62.      
  63.  Contents
  64.      
  65.  1    Prerequisites                                                          2
  66.      
  67.  2    Introduction                                                           2
  68.      
  69.  3    The Design Philosophy of Emacs                                         2
  70.    3.1    Implementation  ...... ..........................................  2
  71.    3.2    The "dumping" concept  ..........................................  3
  72.      
  73.  4    Installation of Emacs                                                  3
  74.    4.1    Required Files and Directories  .................................  4
  75.    4.2    Setting the Environment  ........................................  4
  76.    4.3    Creating a Dumped Emacs  ........................................  5
  77.    4.4    Running Emacs  ..................................................  5
  78.      
  79.  5    Customization                                                          6
  80.    5.1    Example "emacs.rc" file  ........................................  6
  81.    5.2    Hard Key Bindings  ..............................................  7
  82.      
  83.  6    Differences from UNIX Emacs                                            8
  84.      
  85.  7    Advanced ST/TT features                                                8
  86.    7.1    Spawning External commands with output to a buffer  .............  8 
  87.    7.2    Compilation of source code from within Emacs  ...................  8
  88.    7.3    Suspending Emacs ................................................  9
  89.    7.4    Dos-Mode files   ................................................  10
  90.      
  91.  8    Changes from previous versions                                         10
  92.    8.1    Since version 18.57  ............................................  10
  93.      
  94.  9    Suggestions, Comments and Bug Reports                                  11
  95.      
  96.  10   Wish list for future versions                                          11
  97.      
  98.  11   References                                                             11
  99.      
  100.  Appendices                                                                  12
  101.       Appendix I - Unixmode  .............................................   12
  102.       Appendix II - Memory Usage  ........................................   13
  103.       Appendix III - Disk Space Requirements  ............................   13
  104.       Appendix IV - Manual Dumping  ......................................   14
  105.      
  106.                                                                 1
  107.      
  108.    1       Prerequisites
  109.      
  110.      This  brief document  is  intended  as  an introduction to  the  Emacs
  111.      editor,  including  its  installation and usage,  on the  Atari  ST/TT
  112.      family  of  computers.   It  is  written  for   users  who  have  some
  113.      familiarity  with ideas  and  concepts  such  as  Unix,  Command  Line
  114.      Interpreter,  Shell, Environment Variables and  the like.   If you are
  115.      not familiar with these concepts then I  am afraid that  this document
  116.      may not be self explanatory.
  117.      
  118.           At the  end of  this manual there is a  brief introduction to the
  119.      Unixmode extended file naming convention (Appendix  I).  It  is a good
  120.      idea  to become familiar with this extension  to  the Atari filesystem
  121.      (it can be very useful), so it is suggested  that  you read Appendix I
  122.      on the Unixmode standard before continuing.
  123.      
  124.    2       Introduction
  125.      
  126.      Emacs is  a  totally customizable, self documenting  editor  that  was
  127.      developed in the mid- seventies by Richard M.  Stallman (rms) at  MIT.
  128.      Because of  its extreme  flexibility and power  it quickly  became the
  129.      editor of choice at a large number of college and university computing
  130.      centers.  Over  the past two decades  Emacs has  grown  and changed to
  131.      adapt to the needs of programmers  worldwide.  The most popular of the
  132.      many   versions  of  Emacs  is  known  as  GNU-Emacs,  and  is  freely
  133.      distributed by  the Free  Software  Foundation  (FSF).   GNU-Emacs  is
  134.      currently  at version  18.58, and  that is the version  that has  been
  135.      ported  to the Atari ST/TT, and is described in  this document.   From
  136.      this point on  Emacs will refer to the Atari ST/TT  port of  GNU-Emacs
  137.      18.58.  (See  the  section on changes from previous  versions,  mainly
  138.      version 18.57)
  139.      
  140.           Emacs allows  simple editing of files, and much  more.   One  can
  141.      simultaneously   edit  several  files,  each  in   separate   windows,
  142.      manipulate characters, words, lines, and paragraphs all  with relative
  143.      ease.  Emacs  also has custom modes that enable  programmers  to  edit
  144.      text files containing source code written  in any of the  more popular
  145.      programming languages in a language sensitive manner.  It  allows  the
  146.      programmer  the flexibility of compiling programs without leaving  the
  147.      editor, and of  having compiler error messages appear, along  with the
  148.      corresponding source code to a program currently under development, in
  149.      a  split  window environment.  If all this  is not enough Emacs allows
  150.      the user  almost  infinite  flexibility  in  defining  new  modes  and
  151.      commands to  customize the  editor in  any way  that one  desires.  It
  152.      should be  made clear  that, in general, this is not a skill that  one
  153.      can learn overnight.  While the basics  of editing in Emacs (it  comes
  154.      with a tutorial) can be mastered rather quickly, the advanced features
  155.      and the customization of Emacs requires serious study of the editor.
  156.      
  157.    3       The  Design  Philosophy  of  Emacs
  158.      
  159.    3.1       Implementation
  160.      
  161.      Emacs is  implemented  using a two tier  program structure.   The most
  162.      fundamental parts of Emacs are  written in C, while  many of  the more
  163.      sophisticated editor commands and
  164.      
  165.                                                                 2
  166.  
  167.      language-mode  extensions are  written  in  "e-lisp".  "e-lisp"  is  a
  168.      dialect  of  the  programming  language Lisp that is particularly well
  169.      suited for data handling.  One can argue that Emacs is actually a fast
  170.      "e-lisp" interpreter that  was designed  with the  handling of windows
  171.      and  screens  in mind.  It is  this two  tier design philosophy, basic
  172.      commands  in  the  C  source,  and most  editor  features  written  in
  173.      "e-lisp", that makes Emacs so powerful and easy to extend.
  174.      
  175.           One  should  not  have  to   modify  the  C  source  code  to  do
  176.      customizations, that would necessitate a  recompilation of the  source
  177.      code  for the  changes to take effect.   Instead the run-time loadable
  178.      "e-lisp" functions allow for the  extension and embellishment of Emacs
  179.      without the need to deal directly with the compilation process.
  180.      
  181.    3.2       The  "dumping"  concept
  182.      
  183.      Many of the  more  sophisticated  commands in Emacs are implemented in
  184.      "e-lisp" code  and are not part of the actual  Emacs source code.  For
  185.      example the incremental search command of Emacs  is nothing but a call
  186.      to an "e-lisp" function defined in the "isearch.el" file.  Since  such
  187.      a large part of  Emacs,  roughly 150k,  is external "e-lisp" functions
  188.      which are not part of the basic Emacs executable, the loading of these
  189.      functions at  run-time  can take  a considerable  amount of  time  and
  190.      system resources.  For this reason Emacs must be Dumped.  This dumping
  191.      process need only be performed once  during  the installation  of  the
  192.      editor.
  193.      
  194.           Dumping is a process  where  Emacs is run non-interactively, then
  195.      after it  has loaded all the supporting "e-lisp" code, a complete dump
  196.      of the memory occupied by Emacs, and  all the "e-lisp" code it loaded,
  197.      is written  out to  disk.  Ideally  one  would like to now  be able to
  198.      execute  this  dumped  image  of  Emacs  since  it  contains  all  the
  199.      pre-loaded "e-lisp" code.   This is in fact what happens, but with one
  200.      small proviso.  For  technical reasons (the relocation of  addresses),
  201.      this dumping procedure must  be done  twice.  Then the  two  resulting
  202.      memory images will be compared to produce a executable Emacs that  has
  203.      all the required "e-lisp" code built into it.  This at first  may seem
  204.      like a rather  sizable task for the installation of an editor, but  it
  205.      is a small  price to pay  for the host  of  advanced features that are
  206.      available in Emacs.  With  the Atari ST/TT  version of Emacs  come two
  207.      support programs  that  actually  make  this  dumping  process  almost
  208.      effortless  for  the end user.   Instructions  on  how  to  use  these
  209.      programs to produce a  working dumped  Emacs are  found  in  the  next
  210.      section "Installing Emacs".
  211.      
  212.    4       Installation  of  Emacs
  213.      
  214.      This section will  lead you through  all the  steps needed  to  get  a
  215.      working, dumped Emacs up and running on the Atari ST/TT.  Once again I
  216.      suggest you read  the appendix  on the Unixmode  standard since I will
  217.      use many  of its features in  the following examples and descriptions.
  218.      [Note: the two main  Unixmode features  that I use are: (1) the use of
  219.      "/" instead of "\" as a directory separator, and (2) the use of /dev/X
  220.      instead of X: to reference drive X.]
  221.      
  222.                                                                 3
  223.  
  224.    4.1       Required  Files  and  Directories
  225.      
  226.      Emacs uses three subdirectories to store all of its related  files.  I
  227.      shall call  these directories  e-bin/,  e-lisp/,  and  e-etc/ in  this
  228.      manual.   In  the  next  section  you  will  see  how  to  name  these
  229.      directories in environment  variables  so they  can be rooted  on  any
  230.      filesystem (drive) and have whatever names you choose.
  231.      
  232.        o e-bin/  -  This  directory  holds  the  undumped  raw  Emacs
  233.          executable  file  called  "temacs".   The two  support files
  234.          "dumpemac.ttp" and "dumpfix.ttp",  that are only used in the
  235.          dumping process, are also stored here.
  236.      
  237.        o e-lisp/ - This directory and it subdirectories, e-lisp/term/
  238.          and e-lisp/st/, hold all the "e-lisp" code that defines both
  239.          the  basic and advanced features found in the Emacs  editor.
  240.          It should be noted that  some of the files in this directory
  241.          are only used in the dumping of Emacs but others are  loaded
  242.          and used in the normal execution of the dumped  Emacs image.
  243.          If you are  short on disk space some of these "e-lisp" files
  244.          may be deleted (see Appendix III-Disk Space Requirements).
  245.      
  246.        o e-etc/  -   This   directory   holds   the   on-line   Emacs
  247.          documentation  file along  with  a number of other  document
  248.          files and utility programs for document generation.
  249.      
  250.           It should be noted  that  the binary distribution of Emacs  18.58
  251.      contained in the distribution archive  "1858b-d3.zoo", has  the  above
  252.      directory structure built into it, and all files will be placed in the
  253.      correct  directories  if  extracted  with  the  command "zoo  -extract
  254.      1858b-d3.zoo".
  255.      
  256.    4.2       Setting  the  Environment
  257.      
  258.      Essential Environment Variables
  259.      
  260.       o  EMACSLOADPATH  =  <full path to e-bin/ directory>
  261.      
  262.       o  EMACSLIB  =  <full path to e-lisp/ directory>
  263.      
  264.       o  EMACSDOC  =  <full path to e-etc/ directory>
  265.      
  266.       o  HOME  =  <full path to users home directory>
  267.      
  268.       o  UNIXMODE  =  .,/LAHdb
  269.      
  270.      Optional Environment variables
  271.      
  272.       o  TERMCAP  =  <full path to termcap file>
  273.      
  274.       o  TERM  =  <an entry in the above termcap file>
  275.      
  276.                                                                 4
  277.  
  278.      
  279.           The  reason that the TERM and  TERMCAP variables  are optional is
  280.      that Emacs, by default, has a built-in  vt52 terminal description that
  281.      was designed to work  with the Atari.   However, if you like,  you can
  282.      set these  variables  to use  your personal  terminal descriptions,  a
  283.      feature which can be rather useful for the advanced  user.  There is a
  284.      sample termcap  file  distributed with Emacs (directory  examples/) to
  285.      serve as an example of some of the possible customizations.
  286.      
  287.           As an example, I use the  following  environment variable setting
  288.      on  my system.  In  fact they are set in my login script under Bash so
  289.      that whenever I enter my shell Emacs is ready to go.
  290.      
  291.               EMACSLOADPATH=/dev/D/gnu/e-bin
  292.               EMACSLIB=/dev/D/gnu/e-lisp
  293.               EMACSETC=/dev/D/gnu/e-etc
  294.               TERMCAP=/dev/C/etc/termcap
  295.               TERM=vt52
  296.               UNIXMODE=/.,rCLAHdb
  297.               HOME=/dev/F/usr/sjk
  298.      
  299.    4.3       Creating  a  Dumped  Emacs
  300.      
  301.      Please now read Appendix II on  memory  usage so  you can determine an
  302.      appropriate stack size for  your dumped Emacs.  The stack size  may be
  303.      altered before dumping.
  304.      
  305.           Once the  correct environment variables are set,  it is very easy
  306.      to create a dumped version of Emacs.   Just  change  to the  directory
  307.      e-bin/ and run the  program  "dumpemac.ttp".  This program will do the
  308.      two dumps of Emacs then call "dumpfix.ttp", which must also be in this
  309.      directory, to produce a fully functional executable version of Emacs.
  310.      
  311.           After "dumpemac.ttp" is finished there will be three new files in
  312.      your binary directory,  "emacs.ttp", "xemacs.1", and  "xemacs.2".  The
  313.      latter  two may be deleted as they were  created by the dump procedure
  314.      and  are  no  longer  needed.   The  file  "emacs.ttp"  is  the  fully
  315.      functional Emacs executable.
  316.      
  317.    4.4       Running  Emacs
  318.      
  319.      The HOME environment variable must  be set in  order for Emacs to find
  320.      its  default  customization  file.   Whenever  Emacs  is  executed  it
  321.      attempts to load and execute the user customizations found in the file
  322.      "$HOME/emacs.rc".  In the  directory examples/ is a  sample "emacs.rc"
  323.      file that should be copied into your home directory before you execute
  324.      Emacs.   See  the  section  on   customization  for  more  information
  325.      concerning the contents of the "emacs.rc" file.
  326.      
  327.           It should  be mentioned that  the  ".rc" in "emacs.rc" stands for
  328.      "read  commands"  and  is  a  subject of Unix folklore.   Also  it  is
  329.      possible do customizations in a slightly different place.  If there is
  330.      a file called "e-lisp/default.el", then any commands contained in this
  331.      file will be executed as soon as Emacs starts and before "emacs.rc" is
  332.      read.  The difference
  333.      
  334.                                                                 5
  335.  
  336.      between  the two methods  is that with the "emacs.rc" one has slightly
  337.      more control  over the customizations  in that  one may  have  several
  338.      "emacs.rc" files  in different directories and choose  the one to load
  339.      before  executing  Emacs by setting  the HOME  environment variable to
  340.      point to the correct place.
  341.      
  342.           Now  all you have to do  is  execute the file "emacs.ttp" and you
  343.      should be set.  I usually create  an  alias  in my  shell  of the form
  344.      "alias emacs=/dev/D/gnu/e-bin/emacs.ttp" so that I do not  have to add
  345.      the e-bin/  directory  to  my path.  As an alternative,  you  can copy
  346.      "emacs.ttp" into a directory you have in your shells PATH  environment
  347.      variable, or add the e-bin/ directory to your path.
  348.      
  349.           NOTE:  I  have  not  tried  to  run "emacs.ttp" from the  desktop
  350.      directly, nor do I ever intend to try this.  It should work if all the
  351.      correct environment variables are set,  however I make  no promises or
  352.      guarantees.
  353.      
  354.    5       Customization
  355.      
  356.      There is  a complete description of all the "e-lisp" commands that are
  357.      available  for customization of the editor along with a description of
  358.      the  internal  workings of  the  "e-lisp" interpreter in a  500+  page
  359.      "Emacs  Lisp  Reference  Manual"  that  is  available  from the public
  360.      internet site prep.ai.mit.edu.   Also  at  this site  is  the raw (non
  361.      ST/TT specific) source code to Emacs and a "Emacs Users Manual".
  362.      
  363.           There  are several  ST/TT  specific "e-lisp" functions that  have
  364.      been  written to  take advantage of certain facets of the Atari ST/TT.
  365.      These ST/TT specific extensions are covered in the section on advanced
  366.      features, however simple customizations may be done  in the "emacs.rc"
  367.      file.  Most often these customizations  take  the form  of  simple key
  368.      bindings.  Let us look  at a sample "emacs.rc" file before  discussing
  369.      key bindings any further.
  370.      
  371.    5.1       Example  "emacs.rc"  file
  372.      
  373.      ;;  emacs.rc  --  initialization  file  for  gnu-emacs
  374.      ;;
  375.      
  376.      (setq  default-major-mode  'text-mode)    ; major mode is text mode
  377.      (setq  ctl-arrow  "dummy")                ; non-nil for 8 bit chars
  378.      (setq  meta-flag  't)                     ; Allow <alt> to be <meta>
  379.      (load  "/dev/D/gnu/e-lisp/term/atari.el") ; define function keys 
  380.      (load  "/dev/D/gnu/e-lisp/st/dos-mode.el"); load messy-dos-mode 
  381.      
  382.      ;;  define  utility  functions
  383.      ;;
  384.      (defun  toggle-dos-mode  ()  ;  used in binding of DOS mode to F10
  385.         (interactive)
  386.           (setq  dos-mode  (not  dos-mode))
  387.           (set-buffer-modified-p  (buffer-modified-p)))
  388.      
  389.                                                                 6
  390.      
  391.      (defun  display-mem  ()
  392.         (interactive)
  393.         (message  "Memory usage: %d bytes free, %d bytes used (%d%%)"
  394.             data-bytes-free  data-bytes-used
  395.                (/ (* data-bytes-used)
  396.                   (/ (+ data-bytes-used data-bytes-free) 100))))
  397.      
  398.      ;; Do keyboard binadings, Must be done after term/atari is loaded
  399.      ;;
  400.      (define-key  function-keymap  "\C-a" 'display-mem)     ; F1   key
  401.      (define-key  function-keymap  "\C-b" 'goto-line)       ; F2   key
  402.      (define-key  function-keymap  "\C-c" 'what-line)       ; F3   key
  403.      (define-key  function-keymap  "\C-j" 'toggle-dos-mode) ; F10  key
  404.      (define-key  function-keymap  "I"    'overwrite-mode)  ; Ins  key
  405.      
  406.           Unless  one  is  familiar with the Lisp programming language then
  407.      most  of  the preceding file will  not make much  sense.   However one
  408.      important part  of  this file is  the binding of arbitrary commands to
  409.      the function keys.  This will be discussed in the next section.
  410.      
  411.    5.2       Hard  Key  Bindings
  412.      
  413.      In this section we will discuss how hard keys, i.e. the function keys,
  414.      arrow keys and right keypad keys, may be  easily bound  to any command
  415.      available in Emacs.
  416.      
  417.           The   first   thing   to   do    is    to   examine    the   file
  418.      "e-lisp/term/atari.el", which is  autoloaded  by the sample "emacs.rc"
  419.      file.  In  this  file  the  only important thing to  note is  the  one
  420.      character  code that is  assigned to  each hard key.   The code is the
  421.      character following the ?  in the section that starts with the command
  422.      "setup-terminal-keymap st-map".  An excerpt from this file looks likes
  423.      this:
  424.      
  425.             (setup-terminal-keymap  st-map
  426.                      '(("H"  .  ?u)                     ; up arrow
  427.                         ("P"  .  ?d)                    ; down-arrow
  428.                         ("M"  .  ?r)                    ; right-arrow
  429.                         ("K"  .  ?l)                    ; left-arrow
  430.                         ("G"  .  ?h)                    ; Home
  431.      
  432.                              ...
  433.      
  434.                         (";"  .  ?\C-a)                 ; F1
  435.                         ("<"  .  ?\C-b)                 ; F2
  436.      
  437.                              ...
  438.      
  439.                         ("\C-r"  .          ; C-Insert -> insert line key
  440.                         ("R"     .  ?I)     ; Insert
  441.                         ("\C-p"  .  ?N)     ; C-downarrow -> next page key
  442.                         ("\C-h"  .  ?P)     ; C-uparrow -> prev page key
  443.                         ("a"     .  ?U)))   ; Undo
  444.      
  445.           Note that the  entry for  the Insert  key  is  ("R".  ?I)  so the
  446.      assigned code (It is an internal Emacs code), is "I".
  447.      
  448.           Secondly we will examine an excerpt from the "emacs.rc" file.  At
  449.      the bottom of the file you will see some code that looks like:
  450.      
  451.                                                                 7
  452.  
  453.      (define-key  function-keymap  "\C-a" 'display-mem)     ; F1     key
  454.      (define-key  function-keymap  "\C-b" 'goto-line)       ; F2     key
  455.      (define-key  function-keymap  "\C-c" 'what-line)       ; F3     key
  456.      (define-key  function-keymap  "\C-j" 'toggle-dos-mode) ; F10    key
  457.      (define-key  function-keymap  "I"    'overwrite-mode)  ; Insert key
  458.      
  459.           These  (define-key ...  )  statements  are  used  to  bind  Emacs
  460.      commands to hard-keys.  The  general syntax for a command of this form
  461.      is:
  462.      
  463.            (define-key  function-keymap  "<internal  code>" 'command)
  464.      
  465.      The sample from "emacs.rc" given above shows five examples of bindings
  466.      of  this sort.   So to bind a  key add  a line  to  the  bottom of the
  467.      "emacs.rc" file with the correct values for the  internal code and the
  468.      command.
  469.      
  470.           The general rule for customizations is, "Get the E-Lisp Reference
  471.      Manual", read, and experiment.  The manual contains a  vast wealth  of
  472.      useful  commands  and  is  essential for  any serious  and  nontrivial
  473.      customizations.
  474.      
  475.    6       Differences  from  UNIX  Emacs
  476.      
  477.      The only real difference between Emacs running on a Unix based  system
  478.      and  one  running on the the Atari  ST/TT is  the  lack of support for
  479.      asynchronous processes.  This means that Emacs  cannot start a process
  480.      (another program) and do input and output with the process at the same
  481.      time.   The  Atari  ST/TT  version  of Emacs  can,  however, start  an
  482.      external process and receive  output  from it, optionally placing this
  483.      output  in an  Emacs  buffer.   This  will  be elaborated  in the next
  484.      section on advanced features.  Also it  may be  noted that the default
  485.      cutomization file "emacs.rc" is called  ".emacs" on  Unix systems. The
  486.      name was changed to make it TOS conformant.
  487.      
  488.    7       Advanced  ST/TT  features
  489.      
  490.      There  are  several advanced features of Emacs that  have been  shaped
  491.      into a more Atari friendly form.  For Emacs to take advantage of these
  492.      features one must use  the  "e-lisp"  files  that are distributed with
  493.      this Atari ST/TT port  of Emacs.  There have been numerous changes and
  494.      additions  to the  standard "e-lisp" files that come with the raw  FSF
  495.      version of  Emacs.  Also, several "e-lisp" files have changed since my
  496.      last  port of Emacs  18.57 for the Atari  ST/TT, so be sure to install
  497.      the   "e-lisp"  files   that   come   in   the  distribution   archive
  498.      "1858b-d3.zoo".
  499.      
  500.    7.1       Spawning  External  commands  with  output  to  a  buffer
  501.      
  502.      This is done via the "M-x shell-command"  command.  After  typing "M-x
  503.      shell-command  <return>" you will be prompted for a command to execute
  504.      in  an  inferior  shell.  An  example of a command  might be  "ls  -la
  505.      <return>".  After  doing this, Emacs should launch the  command in the
  506.      inferior shell,  and when the  command  has finished,  put all  of its
  507.      output
  508.      
  509.                                                                 8
  510.  
  511.      into a Emacs buffer named "*Shell Command Output*".  A requirement for
  512.      this feature to work is that you set the environment variable SHELL to
  513.      be  the  full  path,  including file  name,  of  a valid command  line
  514.      interpreter.  I personally use the command:
  515.      
  516.                 export  SHELL=/dev/D/gnu/bin/bash.ttp
  517.      
  518.           The  power of executing  shell commands from  within Emacs should
  519.      not be underestimated.  The  only thing that you must be  aware of  is
  520.      that the command  that you execute should not require  any interactive
  521.      input or Emacs will become terminally confused.
  522.      
  523.    7.2       Compilation  of  source  code  from  within  Emacs
  524.      
  525.      This feature is most useful if  you have at  least  four  megabytes of
  526.      memory  and do  a lot  of programming  in  C. There  is a command  for
  527.      compiling a C program that you are currently working on in Emacs.  The
  528.      beauty of this is that not  only do you not  have to  leave the editor
  529.      but Emacs will put all compilation error messages on the bottom of the
  530.      Emacs screen  while  the  source  code to your  program resides in the
  531.      upper  portion of the screen.  In  addition, there is  also  a command
  532.      that examines the  errors reported by  the C  compiler and places  the
  533.      cursor on the offending line in your source code.  All of this is best
  534.      illustrated by an example.
  535.      
  536.           First  make  sure  your  shell is set up  correctly so  that  the
  537.      compiler would run in  a normal  fashion if invoked  from  the  shell.
  538.      This usually involves correctly setting certain environment variables.
  539.      
  540.           Now  suppose that you are editing a a  C program  called "test.c"
  541.      and you want to compile it  from within Emacs.   Just type the command
  542.      "M-x compile <return>" and you will be prompted by a line of the form:
  543.      
  544.                          Compile  Command:   gcc
  545.      
  546.           Just type the command line to "gcc" that you would type from your
  547.      SHELL, e.g. "Compile Command: gcc -o test test.c -lpml <return>". This
  548.      should  immediately  create  a  new  window   that   states  that  the
  549.      compilation is  in  progress.  When  compilation is complete, the  new
  550.      window  will  either  contain the  error  messages  generated  by  the
  551.      compiler, or a message saying that compilation was successful.  In the
  552.      former  case the cursor  will be  left  on  the offending line  in the
  553.      source  window.   To  move  to  the next  error  use the  command "M-x
  554.      next-error".
  555.      
  556.           At  the  "Compile Command: gcc"  prompt one can delete the  "gcc"
  557.      part and instead type "make" if that option is required.
  558.      
  559.    7.3       Suspending  Emacs
  560.      
  561.      If your SHELL environment variable is correctly set to a valid command
  562.      line  interpreter,  Emacs  may be temporarily  suspended at  any  time
  563.      during editing by simple hitting the "^z" key.  This will launch a new
  564.      copy of your shell  and  leave you  in it.  You  may  operate  in this
  565.      subshell for as long as you want, then simply exit the shell to return
  566.      to Emacs.
  567.      
  568.                                                                 9
  569.  
  570.    7.4       Dos-Mode  files
  571.      
  572.      Many  people in the Atari ST/TT  community  use  text files  that  use
  573.      <cr><lf> as line terminators instead of the Unix standard <lf>.  There
  574.      is a  compatibility mode  that  allows  almost  effortless  conversion
  575.      between  the  two  modes.  In the "emacs.rc" file that comes with this
  576.      distribution of  Emacs there  is  a  file called "dos-mode.el" that is
  577.      always loaded  on startup.  This file supports an  automatic detection
  578.      of  files  that are line  delimited by <cr><lf>  and  sets up Emacs to
  579.      handle such files in a transparent manner.  If you load such a file it
  580.      will look normal in the editor window, but in the Emacs status line on
  581.      the bottom of the screen you  will see the word DOS. It is possible to
  582.      manually force a file  to be written with  <cr><lf>'s  as end of  line
  583.      delimiters by entering DOS mode  manually once the file is loaded into
  584.      Emacs.   There  is  a  convenient  key  binding  in   the  distributed
  585.      "emacs.rc"  file  that does  this,  the  binding  is "F10",  and  this
  586.      function key toggles between standard and DOS modes.
  587.      
  588.    8       Changes  from  previous  versions
  589.      
  590.      Since this  document describes Emacs version 18.58, I  will  enumerate
  591.      the  major differences  from  previous  versions.  For  the  technical
  592.      details  on the  changes  made to the C  source code,  get the  source
  593.      distribution archive and read the file "chng-log" from the source code
  594.      directory.   For   changes  in   the  "e-lisp"  code   see  the   file
  595.      "e-lisp/chng-log".
  596.      
  597.    8.1       Since  version  18.57
  598.      
  599.       o  Screen update speed has been improved by a factor of three.
  600.      
  601.       o  Much   improved  memory  management.   This  includes  Emacs
  602.          tracking used and available memory and reporting warnings to
  603.          the user at the 75, 85, and 95 percent used levels.
  604.      
  605.       o  All support  files  found in the e-lisp/ directory, have had
  606.          their names truncated to meet the 8.3 specifications  of the
  607.          Atari file system.  This should  ensure that Emacs runs even
  608.          if Unixmode is not active.
  609.      
  610.       o  A  bug has been fixed where spawned  external  commands that
  611.          wrote to stderr were not being redirected properly.
  612.      
  613.       o  Support  for  "M-x compile"  and "M-x grep" commands,  along
  614.          with  general  support   for  launching  external   programs
  615.          directly,  without  the need for an interactive  shell.  See
  616.          the     support     files     "e-lisp/st/compile.el"     and
  617.          "e-lisp/st/process.el" for in depth information.
  618.      
  619.       o  Switch  Termcap  support  from  Emacs internal  routines  to
  620.          "termcap.olb" that comes with  the port  of  Gnu  C for  the
  621.          Atari ST/TT.  This has  the  advantage  of having  a default
  622.          termcap  entry built in.  Also this termcap library supports
  623.          termcap files that  have either  <lf>  or <cr><lf>  as  line
  624.          delimiters.
  625.      
  626.                                                                 10
  627.      
  628.       o  Paths in all environment  variables may now be  specified in
  629.          either of the two formats, X:\<path> or /dev/X/<path>.
  630.      
  631.       o  When Emacs launches external executables it now searches for
  632.          the files along the PATH environment variable and checks for
  633.          files  with  the  standard Atari ST/TT  extensions  (".ttp",
  634.          ".tos", and " .prg").
  635.      
  636.       o  The custimation file ".emacs" has been renamed to "emacs.rc"
  637.          for TOS file name compatibility.
  638.      
  639.      
  640.    9       Suggestions,  Comments  and  Bug  Reports
  641.      
  642.      I will entertain most suggestions  and  comments that are not  of  the
  643.      form: "Emacs should more fully support the special features of MiNT.".
  644.      A fully MiNT and Unixmode  aware version of Emacs would be ideal, thus
  645.      this is the direction that this port will most likely move in. However
  646.      there  is no rush for me  to  do this, as this version of Emacs  works
  647.      perfectly under MiNT, although there  is no support for MiNT's ability
  648.      to handle asynchronous processes.
  649.      
  650.           Please send  me a  report on any  bugs that you  find.  If it  is
  651.      truly a bug and not  a feature  then I will  do my best to fix  it.  I
  652.      find Emacs  to  be very  stable.  I  use it  extensively  for  program
  653.      development, text entry and even some  lisp programming and  find that
  654.      it is relatively easy to use and customize.
  655.      
  656.    10        Wish  list  for  future  versions
  657.      
  658.       o  Make  Emacs run in TT-ram.  It is a puzzle  to  me  why this
  659.          does  not  currently  work.  I will however continue to look
  660.          into this  and  hopefully have  a  solution  in the  not  so
  661.          distant future.
  662.      
  663.       o  Add some sort of mouse support to Emacs  on the Atari.  This
  664.          should not be too hard, but I am not so sure as to  what the
  665.          mouse buttons should do?  Any comments would be appreciated.
  666.      
  667.       o  Make  Emacs  auto  detect MiNT, thus do the right thing when
  668.          the  multitasking  kernel  is  loaded  but  remain  backward
  669.          compatible to  plain TOS.  Note  that keeping Emacs Unixmode
  670.          aware is a big plus in my eyes.
  671.      
  672.       o  Get a TeX  mode  up and running.  It  would  be easy  if one
  673.          could run TeX with a switch that only prints errors and does
  674.          not stop for input on errors.
  675.      
  676.                 
  677.    11        References
  678.      
  679.      The following references may prove helpful:
  680.      
  681.         o  "GNU Emacs Manual, Sixth Edition, Version 18 for Unix Users", 
  682.        February 1988, Richard Stallman.
  683.      
  684.                                                                 11
  685.  
  686.         o  "Emacs Lisp Reference Manual, Version 18 for Unix Users", 
  687.            June 1989, Edition 0.1 beta, Bil Lewis, Dan LaLiberte, and 
  688.            the GNU Manual Group.
  689.      
  690.         o  "Reference Card for GNU Emacs Version 18 on Unix Systems", 1987, 
  691.            Stephen Gildea.
  692.      
  693.    Appendices
  694.      
  695.    Appendix  I  -  The  Unixmode  standard
  696.      
  697.      Because the native  TOS operating system on the Atari ST/TT limits the
  698.      naming of files to a  maximum  of  11 characters, (an 8 character file
  699.      name, followed by a  `.', then an  optional 3  character extension), a
  700.      software extension to this file system has been implemented in the Gnu
  701.      C run time support library (hereby referred to as the RTL).  What this
  702.      amounts to is the  following, when a  program that  has been  compiled
  703.      with the RTL is executed, the C startup code checks the system for the
  704.      presence of an environment variable named Unixmode.  If found, it then
  705.      modifies the standard C file/directory functions based on the contents
  706.      of  the  Unixmode  environment  variable.   The  Unixmode  environment
  707.      variable  may contain  a  series  of  characters, each  character  (or
  708.      sequence of  characters)  indicates how  the standard C file/directory
  709.      functions are  modified.  A complete  specification  of  the  Unixmode
  710.      environment  variable  looks  as  follows :  UNIXMODE="/.<x>r<y>LAHdb"
  711.      where <x> and  <y> represent single characters.  The meanings of these
  712.      options are described briefly in the following table.
  713.      
  714.     _________________________________________________________________________
  715.     |  character  sequence  |        meaning                                |
  716.     |_______________________|_______________________________________________|
  717.     |   /                   | allow  /  or  \  to  separate  subdirectories.|
  718.     |_______________________|_______________________________________________|
  719.     |  .<x>                 | use <x> as replacement for `.' in  filenames  |
  720.     |                       | with more than one `.'  in their name.        |
  721.     |_______________________|_______________________________________________|
  722.     |  r<y>                 | use <y> as the root drive.                    |
  723.     |_______________________|_______________________________________________|
  724.     |   L                   | allow  symbolic  links.                       |
  725.     |_______________________|_______________________________________________|
  726.     |   A                   | allow  auto  creation  of  links.             |
  727.     |_______________________|_______________________________________________|
  728.     |   H                   | hide  the special  `.dir'  file.              |
  729.     |_______________________|_______________________________________________|
  730.     |   d                   | allow  /dev/<x>  in  addition  to  <x>:       |
  731.     |_______________________|_______________________________________________|
  732.     |   b                   | open  files  in  binary  mode                 |
  733.     |_______________________|_______________________________________________|
  734.      
  735.           A few points should be made before continuing with our discussion
  736.      of the  Unixmode extension.   First,  all  of these  options need  not
  737.      always  be  set.   One  usually  just picks  the  extensions that  are
  738.      required,  puts the relevant characters into the Unixmode variable and
  739.      then  executes the desired  program.   Of course  there  is no harm in
  740.      setting Unixmode once, with  all possible options. In fact one can set
  741.      up Unixmode for maximum Unix compatibility and forget about  it.   The
  742.      second point that should be made is  that the entire Unixmode standard
  743.      is implemented in software, It  is only an extension to the high level
  744.      i/o  subsystem of the C  runtime  library.  The TOS  level bios/gemdos
  745.      calls  do not  know  about  the Unixmode extensions!   This is  not  a
  746.      problem as Emacs 18.58 is fully Unixmode
  747.      
  748.                                                                 12
  749.  
  750.      aware.  This  port  of Emacs  will  create/edit long file  names,  and
  751.      follow Unixmode  symbolic links with  no difficulty.  However for ease
  752.      of installation  all  file required  by  Emacs  have been renamed in a
  753.      consistent  manner  so they  conform to  the ST/TT's  native  8+3 file
  754.      naming requirement.
  755.      
  756.           The  above  options are  best described  by an example.   Suppose
  757.      Unixmode is  set  to  the string "/.,rCLAHdb",  before one starts some
  758.      program compiled with the RTL. That  program may now use extended file
  759.      names, even those with multiple occurrences of the "."  character, the
  760.      RTL  will  do the necessary file  name conversions to  keep TOS happy.
  761.      Because of the presence of the "/" character one may refer to files as
  762.      "c:\path\foo" as "c:/path/foo",  also because of the "C" following the
  763.      "r", "C:" was  selected as the root drive, thus  the above  path could
  764.      even be abbreviated as "/path/foo".  The presence of the "d" character
  765.      in the Unixmode variable allows one to access  drive  <X> as /dev/<x>/
  766.      instead of the more conventional X:\.
  767.      
  768.           For the other options that are not described in the above example
  769.      I refer you to  the documentation that comes with the RTL source code.
  770.      This source is freely available from atari.archive.umich.edu
  771.      
  772.    Appendix  II  -  Memory  Usage
  773.      
  774.      Emacs is big.  There is nothing that can be done about that.  There is
  775.      absolutely no hope  of running it in 512k of ram.  One megabyte is the
  776.      absolute minimum memory configuration.  The executable is 550k and may
  777.      eat up between 128k  and 3500k in  additional  space depending on  the
  778.      memory configuration you choose.
  779.      
  780.           The raw undumped "temacs" executable is set to have a 512k  stack
  781.      space.   If  nothing fancy  is  being done  in Emacs  this  should  be
  782.      adequate and it can be  left  unmodified.  If you like you may use the
  783.      program "fixstk.ttp" distributed with Emacs  to  change the stack size
  784.      before you  create your dumped version.  The format  for  this command
  785.      is:
  786.                       fixstk  <xxx>k  temacs
  787.      
  788.      Where <xxx> iws a  number between 128 and 3500 representing  the  size
  789.      (in  k) of the stack.  There is also the option of setting <xxx> to -1
  790.      thus telling emacs to use  all the available memory for its stack when
  791.      it is run.  This option  (-1), does not allow any process creation  to
  792.      be  done by  Emacs  so  most of the items  in the section on  Advanced
  793.      Features will not work.  I personally suggest a stack size of 512k, if
  794.      you have at least two megabytes of ram.
  795.      
  796.           There  is a memory tracking  feature  built into Emacs.  It  will
  797.      provide warnings to you if, in the course of editing a large document,
  798.      you  use  up the majority of the  working  memory.   The  warnings are
  799.      issued at the 75, 85, and  95 percent used  levels.  If you get one of
  800.      these warnings follow the instructions printed on the screen.
  801.      
  802.           Also in the  distributed "emacs.rc" file  the <F1>  is bound to a
  803.      command that  displays the amount of  memory available and the  amount
  804.      used.  This can be an invaluable tool.
  805.      
  806.                                                                 13
  807.  
  808.    Appendix  III  -  Disk  Space  Requirements
  809.      
  810.      The distribution file "1858b-d3.zoo" when unpacked, expands to roughly
  811.      two  and a half megabytes on disk.   The  whole  installation  process
  812.      requires  approximately another one  and a half megabytes, but most of
  813.      that  is reclaimed after the installation is complete  (in the instal-
  814.      lation section  it is mentioned that  some files can  be deleted after
  815.      the run of "dumpemac.ttp").
  816.      
  817.           If you do  not have enough free space  then you may be  forced to
  818.      prune  back  the  number of "e-lisp" files in the "e-lisp/" directory.
  819.      First  delete   any  files  named   "<something>.elc"  that   have   a
  820.      corresponding "<something>.el" version also.  The  ".elc" version is a
  821.      byte compiled version  of  the  ".el"  files.   They are  functionally
  822.      equivalent, but the ".elc" loads and executes a bit faster.  As a note
  823.      any ".el" can be used to  produce a byte compiled version ".elc"  from
  824.      within  Emacs  by using the "M-x  byte-compile-file" command.   If you
  825.      still  do not  have enough space,  then  read  the  next  appendix  on
  826.      manually dumping Emacs.
  827.      
  828.    Appendix  IV  -  Manual  Dumping
  829.      
  830.      This appendix is to help out those who are really tight on disk space.
  831.      The  process  of  dumping  Emacs,  as described in the  body  of  this
  832.      document, makes use of a program called "dumpemac.ttp".  This  program
  833.      is called  two times,  each time  reading  in  the  file  "temacs" and
  834.      producing a file  called "xemacs.<x>", where <x> is  either a "1" or a
  835.      "2"  depending  on  which  dump  it is  doing.   After  "dumpemac.ttp"
  836.      finishes  producing these two memory dumps,  it calls a program called
  837.      "dumpfix.ttp" that  reads  in  the  two  memory dumps, "xemacs.1"  and
  838.      "xemacs.2" to produce the final executable file "emacs.ttp".  The only
  839.      problem  with  using "dumpemac.ttp" is that it  requires an additional
  840.      one  and a half  megabytes of storage (roughly 600k for "xemacs.1" and
  841.      "xemacs.2" and  a  little  less  for  "emacs.ttp") in order  to create
  842.      Emacs.
  843.      
  844.           It is possible to dump Emacs manually  with as little  as 700k of
  845.      free space on your hard disk, however one must  perform all  the above
  846.      steps manually.  Here is an outline of how to do proceed:
  847.      
  848.        1.  Change directory to "e-bin/".
  849.      
  850.        2.  Execute the  command ".\temacs  -batch  -l loadup.el  dump",
  851.            this  will  produce  a file  roughly  600k  in  size  called
  852.            "xemacs".
  853.      
  854.        3.  Rename the file "xemacs"  to "xemacs.1"  and  place it on  a
  855.            blank diskette.  It may now be deleted from your hard disk.
  856.      
  857.        4.  Start a new copy of whatever shell you are using.  Yes, this
  858.            sounds strange, but you must do it.
  859.      
  860.        5.  Repeat step 2, producing another "xemacs" file.
  861.      
  862.        6.  Rename the file "xemacs" to "xemacs.2".  You should now move
  863.            the file "temacs" to  another blank disk as it is not needed
  864.            any more.  It is not a good idea to delete the file "temacs"
  865.            as you never know when you may want to again dump an Emacs.
  866.      
  867.                                                                 14
  868.      
  869.        7.  Now exit from the second shell you started in step 4.
  870.      
  871.        8.  Execute  the  command  ".\dumpfix  -n  a:\xemacs.1  xemacs.2
  872.            emacs.ttp".  This  will  produce  a fully dumped version  of
  873.            Emacs called "emacs.ttp".
  874.      
  875.        9.  Remove the file "xemacs.2" from  you hard  disk, and now you
  876.            are done.
  877.      
  878.       10.  Go to the store and buy a larger hard disk.
  879.      
  880.                                                                 15
  881.      
  882.      
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.