<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8">
</head>
<body>
<div style="font-family:sans-serif"><div style="white-space:normal">
<p dir="auto">Hello,</p>

<p dir="auto">I have a small bundle I worked on for integrating <a href="https://www.gnu.org/software/emacs/" style="color:#3983C4">Emacs</a> with MailMate.</p>

<p dir="auto">Project: <a href="https://github.com/alexandru/emacs.mmbundle" style="color:#3983C4">https://github.com/alexandru/emacs.mmbundle</a></p>

<p dir="auto">It assumes the <a href="https://emacsformacosx.com/" style="color:#3983C4">Emacs for Mac OS X</a> distribution, but in case Emacs was installed using an alternative method (e.g. brew, Mac Ports, etc), then it's fine for as long as <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">emacs</code> and <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">emacsclient</code> binaries are found on this path:</p>

<pre style="background-color:#F7F7F7; border-radius:5px 5px 5px 5px; margin-left:15px; margin-right:15px; max-width:90vw; overflow-x:auto; padding:5px; color:black" bgcolor="#F7F7F7"><code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0" bgcolor="#F7F7F7"><span style="color: #996633">PATH</span><span style="color: #333333">=</span><span style="color: #996633">$HOME</span>/bin:~/Applications/Emacs.app/Contents/MacOS/bin:/Applications/Emacs.app/Contents/MacOS/bin:~/Applications/Emacs.app/Contents/MacOS:/Applications/Emacs.app/Contents/MacOS:/usr/local/bin:<span style="color: #996633">$PATH</span>
</code></pre>



<p dir="auto">For reference, some implementation details ...</p>

<p dir="auto">This was surprisingly tricky to develop, because the only reasonable way to use Emacs as an on-demand editor is through <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">emacsclient</code>, which needs an Emacs server to be active. Normally this is done by starting Emacs at boot with <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">--daemon</code> or by doing a <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">(server-start)</code> in the <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">emacs.el</code> config, or you can start the client with <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">emacsclient --alternate-editor=""</code>, which starts a daemon if one isn't available already.</p>

<p dir="auto">However starting the daemon from within a MailMate-executed script doesn't work because it is missing a TTY. I managed to work around that by starting the daemon within a <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">script -q</code>. Found the trick on StackOverflow somewhere.</p>

<p dir="auto">The other problem is that starting the daemon is too slow, might take 2-3 seconds, or even more, depending on how many plugins it has to load. So I was forced to display a notification by means of <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">osascript</code>, to let the user know that the editor is starting. But as long as a daemon is already active, opening a new Emacs window is instantaneous.</p>

<p dir="auto">Cheers,</p>

</div>
--
<br/>
Alex Nedelcu
<br/>
<a href="https://alexn.org">alexn.org</a>
<br/>


</div>
</body>
</html>