<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="AsciiDoc 8.6.9">
<title>Emacs</title>
<link rel="stylesheet" href="./asciidoc.css" type="text/css">
<link rel="stylesheet" href="./pygments.css" type="text/css">


<script type="text/javascript" src="./asciidoc.js"></script>
<script type="text/javascript">
/*<![CDATA[*/
asciidoc.install();
/*]]>*/
</script>
<link rel="stylesheet" href="./mlton.css" type="text/css">
</head>
<body class="article">
<div id="banner">
<div id="banner-home">
<a href="./Home">MLton 20180207</a>
</div>
</div>
<div id="header">
<h1>Emacs</h1>
</div>
<div id="content">
<div class="sect1">
<h2 id="_sml_modes">SML modes</h2>
<div class="sectionbody">
<div class="paragraph"><p>There are a few Emacs modes for SML.</p></div>
<div class="ulist"><ul>
<li>
<p>
<span class="monospaced">sml-mode</span>
</p>
<div class="ulist"><ul>
<li>
<p>
<a href="http://www.xemacs.org/Documentation/packages/html/sml-mode_3.html">http://www.xemacs.org/Documentation/packages/html/sml-mode_3.html</a>
</p>
</li>
<li>
<p>
<a href="http://www.smlnj.org/doc/Emacs/sml-mode.html">http://www.smlnj.org/doc/Emacs/sml-mode.html</a>
</p>
</li>
<li>
<p>
<a href="http://www.iro.umontreal.ca/%7Emonnier/elisp/">http://www.iro.umontreal.ca/%7Emonnier/elisp/</a>
</p>
</li>
</ul></div>
</li>
<li>
<p>
<a href="https://github.com/MLton/mlton/blob/master/ide/emacs/mlton.el"><span class="monospaced">mlton.el</span></a> contains the Emacs lisp that <a href="StephenWeeks">StephenWeeks</a> uses to interact with MLton (in addition to using <span class="monospaced">sml-mode</span>).
</p>
</li>
<li>
<p>
<a href="http://primate.net/%7Eitz/mindent.tar">http://primate.net/%7Eitz/mindent.tar</a>, developed by Ian Zimmerman, who writes:
</p>
<div class="quoteblock">
<div class="content">
<div class="paragraph"><p>Unlike the widespread <span class="monospaced">sml-mode.el</span> it doesn&#8217;t try to indent code
based on ML syntax.  I gradually got skeptical about this approach
after writing the initial indentation support for caml mode and
watching it bloat insanely as the language added new features.  Also,
any such attempts that I know of impose a particular coding style, or
at best a choice among a limited set of styles, which I now oppose.
Instead my mode is based on a generic package which provides manual
bindable commands for common indentation operations (example: indent
the current line under the n-th occurrence of a particular character
in the previous non-blank line).</p></div>
</div>
<div class="attribution">
</div></div>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_mlb_modes">MLB modes</h2>
<div class="sectionbody">
<div class="paragraph"><p>There is a mode for editing <a href="MLBasis"> ML Basis</a> files.</p></div>
<div class="ulist"><ul>
<li>
<p>
<a href="https://github.com/MLton/mlton/blob/master/ide/emacs/esml-mlb-mode.el"><span class="monospaced">esml-mlb-mode.el</span></a> (plus other files)
</p>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_definitions_and_uses">Definitions and uses</h2>
<div class="sectionbody">
<div class="paragraph"><p>There is a mode that supports the precise def-use information that
MLton can output.  It highlights definitions and uses and provides
commands for navigation (e.g., <span class="monospaced">jump-to-def</span>, <span class="monospaced">jump-to-next</span>,
<span class="monospaced">list-all-refs</span>).  It can be handy, for example, for navigating in the
MLton compiler source code.  See <a href="EmacsDefUseMode">EmacsDefUseMode</a> for further
information.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_building_on_the_background">Building on the background</h2>
<div class="sectionbody">
<div class="paragraph"><p>Tired of manually starting/stopping/restarting builds after editing
files?  Now you don&#8217;t have to.  See <a href="EmacsBgBuildMode">EmacsBgBuildMode</a> for further
information.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_error_messages">Error messages</h2>
<div class="sectionbody">
<div class="paragraph"><p>MLton&#8217;s error messages are not among those that the Emacs <span class="monospaced">next-error</span>
parser natively understands.  The easiest way to fix this is to add
the following to your <span class="monospaced">.emacs</span> to teach Emacs to recognize MLton&#8217;s
error messages.</p></div>
<div class="listingblock">
<div class="content"><div class="highlight"><pre><span class="p">(</span><span class="nb">require</span> <span class="ss">&#39;compile</span><span class="p">)</span>
<span class="p">(</span><span class="nv">add-to-list</span> <span class="ss">&#39;compilation-error-regexp-alist</span> <span class="ss">&#39;mlton</span><span class="p">)</span>
<span class="p">(</span><span class="nv">add-to-list</span> <span class="ss">&#39;compilation-error-regexp-alist-alist</span>
             <span class="o">&#39;</span><span class="p">(</span><span class="nv">mlton</span>
               <span class="s">&quot;^[[:space:]]*\\(\\(?:\\(Error\\)\\|\\(Warning\\)\\|\\(\\(?:\\(?:defn\\|spec\\) at\\)\\|\\(?:escape \\(?:from\\|to\\)\\)\\|\\(?:scoped at\\)\\)\\): \\(.+\\) \\([0-9]+\\)\\.\\([0-9]+\\)\\(?:-\\([0-9]+\\)\\.\\([0-9]+\\)\\)?\\.?\\)$&quot;</span>
               <span class="mi">5</span> <span class="p">(</span><span class="mi">6</span> <span class="o">.</span> <span class="mi">8</span><span class="p">)</span> <span class="p">(</span><span class="mi">7</span> <span class="o">.</span> <span class="mi">9</span><span class="p">)</span> <span class="p">(</span><span class="mi">3</span> <span class="o">.</span> <span class="mi">4</span><span class="p">)</span> <span class="mi">1</span><span class="p">))</span>
</pre></div></div></div>
</div>
</div>
</div>
<div id="footnotes"><hr></div>
<div id="footer">
<div id="footer-text">
</div>
<div id="footer-badges">
</div>
</div>
</body>
</html>
