<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<p style="margin-top:0;margin-bottom:0">HI Mike,</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<p style="margin-top:0;margin-bottom:0">I can't tell you why LOGON redefines those two macros, but note that you can see what the macro is doing by asking Emacs to evaluate for example the following:</p>
<p style="margin-top:0;margin-bottom:0">(macroexpand '(unless t t))</p>
<p style="margin-top:0;margin-bottom:0">which in the LOGON universe shows you</p>
<p style="margin-top:0;margin-bottom:0">(or t (progn t))</p>
<p style="margin-top:0;margin-bottom:0">which returns T, confirming that here you get the value of the first argument to `unless if it is non-nil, and the value of the final argument otherwise.</p>
<p style="margin-top:0;margin-bottom:0">In contrast, in unmodified Emacs, the macroexpand shows you<br>
</p>
<p style="margin-top:0;margin-bottom:0">(if t nil t)</p>
<p style="margin-top:0;margin-bottom:0">confirming that you get NIL if the first argument is non-nil, and the value of the final argument otherwise.</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<p style="margin-top:0;margin-bottom:0">As for usage, I looked at the three files in the LOGON repository with suffix &quot;.el&quot;, and reckon that the pg-interface.el file is not used by anyone but me (for the lexical database).&nbsp; Of the other two, lkb.el only calls
 'unless once, with no interest in the returned value, and tdl-mode.el makes just one call to `when, and it looks like it might matter what is returned (to set the value of 'indent-me).&nbsp;
<br>
</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<p style="margin-top:0;margin-bottom:0">So my impression is that there is no need to preserve the LOGON redefinition of 'unless, and perhaps the effect of the redefined 'when could be managed differently in the one call in tdl-mode.el without redefining the
 macro.</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<p style="margin-top:0;margin-bottom:0">&nbsp;Dan<br>
</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<br>
<br>
<div style="color: rgb(0, 0, 0);">
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" color="#000000" face="Calibri, sans-serif"><b>From:</b> developers-bounces@emmtee.net &lt;developers-bounces@emmtee.net&gt; on behalf of Michael Wayne Goodman &lt;goodmami@uw.edu&gt;<br>
<b>Sent:</b> Tuesday, December 19, 2017 1:49 PM<br>
<b>To:</b> developers<br>
<b>Subject:</b> Re: [developers] dot.emacs redefinition of 'unless' and 'when'</font>
<div>&nbsp;</div>
</div>
<div>
<div dir="ltr">
<div>
<div>
<div>Sorry, one more change to my original mail. I mistakenly assumed that 'unless' was not returning the last value when the condition was false (based on some symptoms I was seeing), but I didn't explicitly test this, and my lisp is not good enough to deduce
 this by looking at the defmacro expression in ${LOGONROOT]/dot.emacs. In fact, it *does* appear to return the last value, but the difference from the default definition is that LOGON-unless returns the value of the condition when it's non-nil, rather than
 returning nil.<br>
<br>
</div>
; standard unless<br>
</div>
(unless nil 1 2 3)&nbsp; ; returns: 3<br>
(unless 'value 1 2 3)&nbsp; ; returns: nil<br>
<br>
</div>
; LOGON unless<br>
<div>
<div>
<div>(unless nil 1 2 3)&nbsp; ; returns: 3<br>
(unless 'value 1 2 3)&nbsp; ; returns: value<br>
<div>
<div>
<div class="x_gmail_extra"><br>
</div>
<div class="x_gmail_extra">So when LOGON-unless is used in constructing a list, it will (I think) append the value of the condition to the list instead of nothing.</div>
<div class="x_gmail_extra"><br>
</div>
<div class="x_gmail_extra"><br>
<div class="x_gmail_quote">On Tue, Dec 19, 2017 at 10:18 AM, Michael Wayne Goodman
<span dir="ltr">&lt;<a href="mailto:goodmami@uw.edu" target="_blank">goodmami@uw.edu</a>&gt;</span> wrote:<br>
<blockquote class="x_gmail_quote" style="margin:0px 0px 0px 0.8ex; border-left:1px solid rgb(204,204,204); padding-left:1ex">
<div dir="ltr">
<div class="x_gmail_extra">
<div class="x_gmail_quote"><span class="x_gmail-">On Tue, Dec 19, 2017 at 8:12 AM, Michael Wayne Goodman
<span dir="ltr">&lt;<a href="mailto:goodmami@uw.edu" target="_blank">goodmami@uw.edu</a>&gt;</span> wrote:<br>
<blockquote class="x_gmail_quote" style="margin:0px 0px 0px 0.8ex; border-left:1px solid rgb(204,204,204); padding-left:1ex">
<div dir="ltr">
<div>
<div>Hi Developers,<br>
<br>
</div>
Does anyone know why ${LOGONROOT}/dot.emacs redefines the 'unless' and 'when' macros? It breaks some other Emacs packages I have that depend on the return value of the 'unless', which should be the value of the last argument. I'm aware that 'unless' and 'when'
 should be used when the return value is *not* important (according to <a href="https://www.emacswiki.org/emacs/WhenToUseIf" target="_blank">
https://www.emacswiki.org/emac<wbr>s/WhenToUseIf</a>), but do we have to enforce that suggestion by redefining the macros so they don't return the last value?<br>
<br>
</div>
Also see <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Conditionals.html" target="_blank">
https://www.gnu.org/software/e<wbr>macs/manual/html_node/elisp/Co<wbr>nditionals.html</a>, which says that 'unless' is equivalent to:<br>
<br>
&nbsp;&nbsp;&nbsp; (if condition nil<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a b c)<br clear="all">
</div>
</blockquote>
<div><br>
</div>
</span>
<div>Er... I meant that the guide says `(unless condition a b c)' is equivalent to the above, not in the general case. And I think the expected return value of the 'unless' expression would be c if condition returns nil.<br>
</div>
<span class="x_gmail-">
<div>&nbsp;</div>
<blockquote class="x_gmail_quote" style="margin:0px 0px 0px 0.8ex; border-left:1px solid rgb(204,204,204); padding-left:1ex">
<div dir="ltr">
<div>
<div>
<div>Thanks<span class="x_gmail-m_-4875101875560888905gmail-HOEnZb"><font color="#888888"><br>
</font></span></div>
<span class="x_gmail-m_-4875101875560888905gmail-HOEnZb"><font color="#888888">
<div><br>
-- <br>
<div class="x_gmail-m_-4875101875560888905gmail-m_-3669990881836768010gmail_signature">
<div dir="ltr">Michael Wayne Goodman
<div>Ph.D. Candidate, UW Linguistics</div>
</div>
</div>
</div>
</font></span></div>
</div>
</div>
</blockquote>
</span></div>
<span class="x_gmail-"><br>
<br clear="all">
<br>
-- <br>
<div class="x_gmail-m_-4875101875560888905gmail_signature">
<div dir="ltr">Michael Wayne Goodman
<div>Ph.D. Candidate, UW Linguistics</div>
</div>
</div>
</span></div>
</div>
</blockquote>
</div>
<br>
<br clear="all">
<br>
-- <br>
<div class="x_gmail_signature">
<div dir="ltr">Michael Wayne Goodman
<div>Ph.D. Candidate, UW Linguistics</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>