unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Rupert Swarbrick <rswarbrick@gmail.com>
To: help-gnu-emacs@gnu.org
Subject: Re: Detect if Emacs is running in -nw mode
Date: Sun, 30 Mar 2008 10:10:46 -0600	[thread overview]
Message-ID: <3P2dnatDgO4bJnLanZ2dnUVZ8vOdnZ2d@giganews.com> (raw)
In-Reply-To: mailman.9641.1206888365.18990.help-gnu-emacs@gnu.org

On Sun, 30 Mar 2008 16:45:57 +0200, Lennart Borgman (gmail) wrote:
> The documentation should be exact enough to show that. If not then it is
> a documentation bug.
> 
> In this case it says "body forms", not "body form". A form is something
> inside a pair of (). So it is ok with several functions here.
> 
> If it was not you could have used progn for example.

I'm not sure and if I'm wrong, Christian, please correct me, but:

I think the problem is that Christian doesn't know what "body" means. In 
lisp, a function is defined using something called a lambda list, so I 
might define a function foo like:

(defun foo (arg1 arg2 arg3) (do-some-stuff))

In this case arg1, arg2 and arg3 are three different arguments, so we'd 
call foo like this

(foo 1 2 3)

Great. However, if you want to write a useful unless function/macro, you 
want to allow any number of elements in the list - a bit like varargs do 
in C, if you know about that.

Anyhow, you write something like

(defun bar (arg1 &rest others) (do-some-stuff))
or (pretty much equivalently)
(defun bar (arg1 &body others) (do-some-stuff))

For bar, arg1 is just a normal argument. But others is a bit magic:

(bar 1 2 3 4 5 6)

sets arg1 to 1 and others to (2 3 4 5 6)   (a list). Now, unless is 
actually a macro and the bit it does next depends on a whole new can of 
worms based on macro expansion and ,@ but I'm not going to go into that. 
The main point however is that the documentation says:

> -- 
> |unless is a Lisp macro in `subr'.
> |(unless COND &rest BODY)
>                                           |
> |If COND yields nil, do BODY, else return nil.
> -- 

So the &rest bit means that body can contain as much as you like. FWIW, 
unless executes BODY in a progn, so for example

(unless (function-returning-nil) 1 2 3)

evaluates to 3. Not that that matters in this situation.

Phew. That was more than I intended to write! Hope it makes things a 
little clearer.

Rupert


  parent reply	other threads:[~2008-03-30 16:10 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-29 22:37 Detect if Emacs is running in -nw mode Christian Herenz
2008-03-29 22:43 ` Tom Rauchenwald
     [not found] ` <mailman.9603.1206831074.18990.help-gnu-emacs@gnu.org>
2008-03-29 23:52   ` Christian Herenz
2008-03-30  0:35     ` Roland Winkler
2008-03-31  2:18       ` Barry Margolin
2008-03-30  0:44     ` Lennart Borgman (gmail)
2008-03-30  1:13       ` Drew Adams
     [not found]     ` <mailman.9613.1206837866.18990.help-gnu-emacs@gnu.org>
2008-03-30  1:10       ` Will Parsons
2008-03-30  1:22         ` Christian Herenz
2008-03-30  3:34           ` BVK
2008-03-30 11:23           ` Rupert Swarbrick
2008-03-30 12:17             ` Christian Herenz
2008-03-30 12:43               ` Lennart Borgman (gmail)
     [not found]               ` <mailman.9635.1206881018.18990.help-gnu-emacs@gnu.org>
2008-03-30 14:24                 ` Christian Herenz
2008-03-30 14:45                   ` Lennart Borgman (gmail)
2008-03-30 15:13                   ` Peter Dyballa
     [not found]                   ` <mailman.9643.1206890035.18990.help-gnu-emacs@gnu.org>
2008-03-30 15:31                     ` Christian Herenz
     [not found]                   ` <mailman.9641.1206888365.18990.help-gnu-emacs@gnu.org>
2008-03-30 16:10                     ` Rupert Swarbrick [this message]
2008-03-30 17:56                       ` Christian Herenz
2008-03-31  7:32                         ` Nuno J. Silva
2008-03-31  8:11                         ` Tim X
2008-03-31  8:34                           ` Christian Herenz
2008-03-31  2:22                   ` Barry Margolin
2008-03-31  8:38                     ` Christian Herenz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3P2dnatDgO4bJnLanZ2dnUVZ8vOdnZ2d@giganews.com \
    --to=rswarbrick@gmail.com \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).