SML-MODE (3.3) -- Major Emacs mode for editing Standard ML.

Files:

  sml-mode.el     (SML mode elisp code)
  sml-proc.el     (ML interaction code, defaults to SML/NJ(110))
  sml-hilite.el   (hilit19 functions)
  sml-font.el     (font-lock functions)
  sml-menus.el    (Simple menus)

  sml-poly-ml.el  (Additional library code to run Poly/ML)
  sml-mosml.el    (Additional library code to run Moscow ML)

  sml-mode.info   (Softcopy manual -- Info for (X)Emacs19)
  sml-site.el     (Simple, system-wide installation)

Extras:

  sml-mode.dvi    (Hardcopy manual)

Warning:

  Tried and sort of tested on GNU Emacs 19.3{3,4} and XEmacs 19.14.

  XEmacs 19.11 (an old one) is known to hang on sending regions to the
  interaction buffer -- so leave the variable SML-TEMP-THRESHOLD = 0.

System Installation Guide:

  If you're installing this for others in the Emacs hierarchy, either

    go to the site-lisp directory and unpack the tar file there, 

    or create a subdirectory, say site-lisp/sml-mode, and copy at
    least the sml*.el files into it.

  In either case move or copy the file sml-site.el into the site-lisp
  directory itself (or some other place that's on the user's default
  load-path) and read and edit this file. All that's really needed is
  to ensure that Emacs can find the sml*.el files and the .info file.

  Tell your eager users to

  (requite 'sml-site) 

  in their .emacses. Point them to the help file. At your option, byte
  compile the sml*.el files (and sml-site.el too, if you like).

Private Installation Guide:

  If you are having to install this in your home directory, say, create
  a directory like "/home/xxx/lib/emacs/sml-mode", if your login name
  is xxx, and copy the sml-*.el files to there. Then put:
  
  (setq load-path (cons "/home/xxx/lib/emacs/sml-mode" load-path))
  (autoload 'sml-mode "sml-mode" "Major mode for editing ML programs." t)

  in your .emacs file. Add:

  (setq auto-mode-alist
        (append '(("\\.sml$" . sml-mode) 
                  ("\\.sig$" . sml-mode) 
                  ("\\.ML$"  . sml-mode)) auto-mode-alist))

  to your .emacs so that whenever you visit a file with one of these
  extensions you will automatically be placed in sml-mode.

  Put the info file (sml-mode.info) somewhere convenient like
  "/home/xxx/lib/emacs/sml-mode/sml-mode.info", and add

  (setq sml-mode-info "/home/xxx/lib/emacs/sml-mode/sml-mode.info")

  again to your .emacs -- this gives access to on-line help. This help
  file gives lots of tips about configuring SML mode to suit your
  preferences: C-c C-i will get you there from SML mode.

  If you want SML mode to speak to Moscow ML or Poly/ML instead of
  SML/NJ, just add something like this to your .emacs:

  (defun my-mosml-setup () "Configure inferior SML mode for Moscow ML"
    (load-library "sml-mosml"))
  (add-hook 'inferior-sml-load-hook 'my-mosml-setup)

  so that when you M-x sml you'll get mosml instead.

New in SML mode Version 3.3 (feedback welcomed on this):

  1

  implemented some multi-frame handling capabilities, specifically so 
  sml runs in a dedicated window. this is more complex than it needs to
  be because of XEmacs...

  the variable SML-DEDICATED-FRAME defaults to t if running under a
  window system; set it to nil in SML-LOAD-HOOK if you want the old
  split window behaviour back.

  2

  debugged SML-NEXT-ERROR a bit, and improved it to echo the error
  message in the minibuffer (if possible) and highlight the region in
  which the error was found (if a suitable character range was given).

  the variable SML-ERROR-OVERLAY controls whether or not to highlight
  (default is yes); set this to nil in SML-MODE-HOOK to switch this
  off. 

  SML-NEXT-ERROR won't always raise the inferior ML buffer's frame; it
  only does so if there's no window already showing the buffer, or if
  there's an error message it can't understand. i think!

  3

  support for Moscow ML -- see sml-mosml.el.

  4

  forms (aka, templates or macros) insertion semantics have changed
  because there were bugs. maybe there still are, but anyway: by
  default C-c C-m inserts the macro at point, C-u C-c C-m will do a
  newline-and-indent before inserting the macro.

  abstractions are history, and you can play with extending the
  collection of builtin macros to your heart's content. lookup the
  function SML-ADDTO-FORMS-ALIST, and the variable SML-FORMS-ALIST.

  5

  drag-and-droppishness, without the drop: SML-DRAG-MOUSE is bound to
  M-S-down-mouse-1; if you drag the mouse over a region it will be
  magically sucked into the ML buffer (like C-c C-r, only you don't
  have to C-@ first). this might be flakey as it heavily depends on
  the underlying mouse-drag/track-mouse semantics of the various
  Emacses out there. can't do much about that, sorry.

  6 

  i've provided (thanks to Ken Larsen and the AUCTeX folks for the
  idea) a site configuration file to make it simpler to install
  sml-mode in the site's emacs lisp hierarch. see file sml-site.el. 

  7

  anything else i've forgotten already!

To do (still):

  0

  indentation is quirky as ever -- but because the bugs are really
  fundamental that is how it will remain. all the indentation code
  does needs attention... Ian Zimmerman's very excellent (looking)
  indentation code for caml-mode may point the way forward. or we all
  go over to programming in Lisp instead of ML...


My thanks to beta testers for their bug reports and fixes.

Matthew Morley <mjm@scs.leeds.ac.uk>
03/98
