unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Detect if Emacs is running in -nw mode
@ 2008-03-29 22:37 Christian Herenz
  2008-03-29 22:43 ` Tom Rauchenwald
       [not found] ` <mailman.9603.1206831074.18990.help-gnu-emacs@gnu.org>
  0 siblings, 2 replies; 24+ messages in thread
From: Christian Herenz @ 2008-03-29 22:37 UTC (permalink / raw)
  To: help-gnu-emacs

Hi,

How can I detect in .emacs, if emacs is running in -nw mode or in a non X 
environment?

I want to have set(menu-bar-mode nil) at start in -nw mode.

Greets,
Christian


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  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>
  1 sibling, 0 replies; 24+ messages in thread
From: Tom Rauchenwald @ 2008-03-29 22:43 UTC (permalink / raw)
  To: help-gnu-emacs

Christian Herenz <herenz@physik.hu-berlin.de> writes:

> Hi,
>
> How can I detect in .emacs, if emacs is running in -nw mode or in a
> non X environment?
>
> I want to have set(menu-bar-mode nil) at start in -nw mode.

(when (window-system)
      (menu-bar-mode -1))

or similiar should work

> Greets,
> Christian

Tom

-- 
Then I drew in a breath, and my renewed will with it, lifted the rod
in my right hand, murmured a phrase in a language I didn't know, and
blew the tires off his fucking truck.
        -- Harry Dresden





^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
       [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
                       ` (2 more replies)
  0 siblings, 3 replies; 24+ messages in thread
From: Christian Herenz @ 2008-03-29 23:52 UTC (permalink / raw)
  To: help-gnu-emacs

Tom Rauchenwald schrieb:

>> I want to have set(menu-bar-mode nil) at start in -nw mode.
> 
> (when (window-system)
>       (menu-bar-mode -1))
> 
> or similiar should work
> 

Is there something when NOT, so that I could set
[PSEUDO-CODE]:
(when not (window-system)
	(menu-bar-mode nil)
	(other commands i want to use when not windowed))


Greets,
Christian



^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  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)
       [not found]     ` <mailman.9613.1206837866.18990.help-gnu-emacs@gnu.org>
  2 siblings, 1 reply; 24+ messages in thread
From: Roland Winkler @ 2008-03-30  0:35 UTC (permalink / raw)
  To: help-gnu-emacs

Christian Herenz <herenz@physik.hu-berlin.de> writes:
> Is there something when NOT, so that I could set
> [PSEUDO-CODE]:
> (when not (window-system)
> 	(menu-bar-mode nil)
> 	(other commands i want to use when not windowed))

You can test whether the DISPLAY environment variable is set using

(getenv "DISPLAY")

In this way you can distinguish between emacs -nw running in an X
or a "pure tty" environment. Is that what you want?

Roland


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  2008-03-29 23:52   ` Christian Herenz
  2008-03-30  0:35     ` Roland Winkler
@ 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>
  2 siblings, 1 reply; 24+ messages in thread
From: Lennart Borgman (gmail) @ 2008-03-30  0:44 UTC (permalink / raw)
  To: Christian Herenz; +Cc: help-gnu-emacs

Christian Herenz wrote:
> Tom Rauchenwald schrieb:
> 
>>> I want to have set(menu-bar-mode nil) at start in -nw mode.
>>
>> (when (window-system)
>>       (menu-bar-mode -1))
>>
>> or similiar should work
>>
> 
> Is there something when NOT, so that I could set
> [PSEUDO-CODE]:
> (when not (window-system)
>     (menu-bar-mode nil)
>     (other commands i want to use when not windowed))
> 
> 
> Greets,
> Christian

There is (not ...)  ;-)

(when (not (window-system))
    ...)




^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
       [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
  0 siblings, 1 reply; 24+ messages in thread
From: Will Parsons @ 2008-03-30  1:10 UTC (permalink / raw)
  To: help-gnu-emacs

Lennart Borgman (gmail) wrote:
> Christian Herenz wrote:
>> Tom Rauchenwald schrieb:
>> 
>>>> I want to have set(menu-bar-mode nil) at start in -nw mode.
>>>
>>> (when (window-system)
>>>       (menu-bar-mode -1))
>>>
>>> or similiar should work
>>>
>> 
>> Is there something when NOT, so that I could set
>> [PSEUDO-CODE]:
>> (when not (window-system)
>>     (menu-bar-mode nil)
>>     (other commands i want to use when not windowed))
>> 
>> 
>> Greets,
>> Christian
>
> There is (not ...)  ;-)
>
> (when (not (window-system))
>     ...)

Or how about (unless ...)

(unless (window-system)
  ...) 

-- 
Will


^ permalink raw reply	[flat|nested] 24+ messages in thread

* RE: Detect if Emacs is running in -nw mode
  2008-03-30  0:44     ` Lennart Borgman (gmail)
@ 2008-03-30  1:13       ` Drew Adams
  0 siblings, 0 replies; 24+ messages in thread
From: Drew Adams @ 2008-03-30  1:13 UTC (permalink / raw)
  To: 'Lennart Borgman (gmail)', 'Christian Herenz'
  Cc: help-gnu-emacs

> There is (not ...)  ;-)
> 
> (when (not (window-system))
>     ...)

Which is also (unless (window-system)...)





^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  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
  0 siblings, 2 replies; 24+ messages in thread
From: Christian Herenz @ 2008-03-30  1:22 UTC (permalink / raw)
  To: help-gnu-emacs

Will Parsons schrieb:

>> There is (not ...)  ;-)
>>
>> (when (not (window-system))
>>     ...)
> 
> Or how about (unless ...)
> 
> (unless (window-system)
>   ...) 
> 

So... That should do the trick. One last question, i assume that window-system 
can either be true or false. I searched the help for a variable called 
window-system but I found no explanation?
Where do I have to search for emacs "system-variables"?

Greets and thanks,
Christian


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  2008-03-30  1:22         ` Christian Herenz
@ 2008-03-30  3:34           ` BVK
  2008-03-30 11:23           ` Rupert Swarbrick
  1 sibling, 0 replies; 24+ messages in thread
From: BVK @ 2008-03-30  3:34 UTC (permalink / raw)
  To: Christian Herenz; +Cc: help-gnu-emacs

On Sun, Mar 30, 2008 at 6:52 AM, Christian Herenz
<herenz@physik.hu-berlin.de> wrote:
>
>  So... That should do the trick. One last question, i assume that window-system
>  can either be true or false. I searched the help for a variable called
>  window-system but I found no explanation?
>

C-h v window-system gave me this documentation:

window-system is a variable defined in `C source code'.
Its value is nil

Documentation:
Name of window system that Emacs is displaying through.
The value is a symbol--for instance, `x' for X windows.
The value is nil if Emacs is using a text-only terminal.


-- 
bvk-chaitanya




^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  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
  1 sibling, 1 reply; 24+ messages in thread
From: Rupert Swarbrick @ 2008-03-30 11:23 UTC (permalink / raw)
  To: help-gnu-emacs

On Sun, 30 Mar 2008 03:22:55 +0200, Christian Herenz wrote:

> Will Parsons schrieb:
> 
>>> There is (not ...)  ;-)
>>>
>>> (when (not (window-system))
>>>     ...)
>> 
>> Or how about (unless ...)
>> 
>> (unless (window-system)
>>   ...)
>> 
>> 
> So... That should do the trick. One last question, i assume that
> window-system can either be true or false. I searched the help for a
> variable called window-system but I found no explanation? Where do I
> have to search for emacs "system-variables"?
> 
> Greets and thanks,
> Christian

Hi,

Two things:

1) In lisp, something referenced like (window-system) is a function 
(unless you're in a weird macro, but let's ignore that) and the statement 
`` (window-system) '' means call the function called window-system with 
no arguments and evaluate to the result(s).

In emacs, looking up functions is different from variables, and you need 
to check C-h f <function-name> (it has tab completion, just like C-h v). 
The reason that there are two different look-up commands is that in any 
lisp-2 (which includes elisp), there are two different lists of symbols: 
one for functions and one for variables. Thus I could have a function 
called x and also a variable called x and (+ 1 x) and (x "foo") would 
both do the right thing. Starting "(" tells the lisp reader that the next 
symbol name it's looking at is going to be a function.

2) However, there was actually a typo from Tom Rauchenwald's answer - in 
fact is *is* a variable called window-system (I just fired up emacs to 
check)

You might want to try C-h v window-system to read the docs for it.

And your code would be:

(unless window-system (menu-bar-mode -1))


Hope this helps!

Rupert


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  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>
  0 siblings, 2 replies; 24+ messages in thread
From: Christian Herenz @ 2008-03-30 12:17 UTC (permalink / raw)
  To: help-gnu-emacs

Rupert Swarbrick schrieb:

> And your code would be:
> 
> (unless window-system (menu-bar-mode -1))
> 
> 
> Hope this helps!
> 

Thanks for your long answer, I am beginning to understand... But I also get a 
little bit confused. As I stated before, I want to run more commannds, is this 
as simple as:

(unless window-system (menu-bar-mode -1) (color-theme-arjen))  ?

Thanks again for your answer Rupert, I really learned something.

Greets,
Christian


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  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>
  1 sibling, 0 replies; 24+ messages in thread
From: Lennart Borgman (gmail) @ 2008-03-30 12:43 UTC (permalink / raw)
  To: Christian Herenz; +Cc: help-gnu-emacs

Christian Herenz wrote:
> Rupert Swarbrick schrieb:
> 
>> And your code would be:
>>
>> (unless window-system (menu-bar-mode -1))
>>
>>
>> Hope this helps!
>>
> 
> Thanks for your long answer, I am beginning to understand... But I also 
> get a little bit confused. As I stated before, I want to run more 
> commannds, is this as simple as:
> 
> (unless window-system (menu-bar-mode -1) (color-theme-arjen))  ?


Do

   C-h f unless RET

to read the documentation for "unless". You can see there that is says 
"body forms".





^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
       [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)
                                     ` (4 more replies)
  0 siblings, 5 replies; 24+ messages in thread
From: Christian Herenz @ 2008-03-30 14:24 UTC (permalink / raw)
  To: help-gnu-emacs

Lennart Borgman (gmail) schrieb:

> 
> Do
> 
>   C-h f unless RET
> 
> to read the documentation for "unless". You can see there that is says 
> "body forms".
> 

C-h f unless RET yields here:
--
|unless is a Lisp macro in `subr'. 

|(unless COND &rest BODY) 
 
                                           |
|If COND yields nil, do BODY, else return nil.
--

But what about more than one function inside the Body?
I do it like this atm (because i dont really understand the above help):

(unless window-system (menu-bar-mode nil))
(unless window-system (color-theme-arjen))

But is it possible to do the 2 functions withe evaluating the condition only once:

(unless window-system ((menu-bar-mode nil) (color-theme-arjen)))

Sorry, its a noob question :) But I really would like to know :)

Greets,
Christian


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  2008-03-30 14:24                 ` Christian Herenz
@ 2008-03-30 14:45                   ` Lennart Borgman (gmail)
  2008-03-30 15:13                   ` Peter Dyballa
                                     ` (3 subsequent siblings)
  4 siblings, 0 replies; 24+ messages in thread
From: Lennart Borgman (gmail) @ 2008-03-30 14:45 UTC (permalink / raw)
  To: Christian Herenz; +Cc: help-gnu-emacs

Christian Herenz wrote:
> Lennart Borgman (gmail) schrieb:
> 
>>
>> Do
>>
>>   C-h f unless RET
>>
>> to read the documentation for "unless". You can see there that is says 
>> "body forms".
>>
> 
> C-h f unless RET yields here:
> -- 
> |unless is a Lisp macro in `subr'.
> |(unless COND &rest BODY)
>                                           |
> |If COND yields nil, do BODY, else return nil.
> -- 
> 
> But what about more than one function inside the Body?


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.




^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  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>
                                     ` (2 subsequent siblings)
  4 siblings, 0 replies; 24+ messages in thread
From: Peter Dyballa @ 2008-03-30 15:13 UTC (permalink / raw)
  To: Christian Herenz; +Cc: help-gnu-emacs


Am 30.03.2008 um 16:24 schrieb Christian Herenz:
> But is it possible to do the 2 functions withe evaluating the  
> condition only once:
>
> (unless window-system ((menu-bar-mode nil) (color-theme-arjen)))
>
> Sorry, its a noob question :) But I really would like to know :)


You could make a test like that:

	(unless window-system (message "Oh, no!") (message "Windows -- I  
mean: not Losedos but X11"))

--
Mit friedvollen Grüßen

   Pete

Hard Disk, n.:
	A device that allows users to delete vast quantities
	of data with simple mnemonic commands.








^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
       [not found]                   ` <mailman.9643.1206890035.18990.help-gnu-emacs@gnu.org>
@ 2008-03-30 15:31                     ` Christian Herenz
  0 siblings, 0 replies; 24+ messages in thread
From: Christian Herenz @ 2008-03-30 15:31 UTC (permalink / raw)
  To: help-gnu-emacs

Peter Dyballa schrieb:

>     (unless window-system (message "Oh, no!") (message "Windows -- I 
> mean: not Losedos but X11"))
> 

Thanks! I think I now understand (at least a little bit) how conditions work :-)

Greets,
Christian


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
       [not found]                   ` <mailman.9641.1206888365.18990.help-gnu-emacs@gnu.org>
@ 2008-03-30 16:10                     ` Rupert Swarbrick
  2008-03-30 17:56                       ` Christian Herenz
  0 siblings, 1 reply; 24+ messages in thread
From: Rupert Swarbrick @ 2008-03-30 16:10 UTC (permalink / raw)
  To: help-gnu-emacs

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


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  2008-03-30 16:10                     ` Rupert Swarbrick
@ 2008-03-30 17:56                       ` Christian Herenz
  2008-03-31  7:32                         ` Nuno J. Silva
  2008-03-31  8:11                         ` Tim X
  0 siblings, 2 replies; 24+ messages in thread
From: Christian Herenz @ 2008-03-30 17:56 UTC (permalink / raw)
  To: help-gnu-emacs

Rupert Swarbrick schrieb:

> (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

Yeah-- You wrote much, and I think you missed the point a little bit..

(unless nil (do-stuff) (do-other-stuff)) ... this would only do-stuff?

(unless nil ((do-stuff) (do-other-stuff)) would do-stuff and do-other-stuff?

That was my actual question.

Greets,
Christian


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  2008-03-30  0:35     ` Roland Winkler
@ 2008-03-31  2:18       ` Barry Margolin
  0 siblings, 0 replies; 24+ messages in thread
From: Barry Margolin @ 2008-03-31  2:18 UTC (permalink / raw)
  To: help-gnu-emacs

In article <m34papoxpo.fsf@tfkp07.physik.uni-erlangen.de>,
 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de> wrote:

> Christian Herenz <herenz@physik.hu-berlin.de> writes:
> > Is there something when NOT, so that I could set
> > [PSEUDO-CODE]:
> > (when not (window-system)
> > 	(menu-bar-mode nil)
> > 	(other commands i want to use when not windowed))
> 
> You can test whether the DISPLAY environment variable is set using
> 
> (getenv "DISPLAY")
> 
> In this way you can distinguish between emacs -nw running in an X
> or a "pure tty" environment. Is that what you want?

There are other window systems besides X.

-- 
Barry Margolin, barmar@alum.mit.edu
Arlington, MA
*** PLEASE post questions in newsgroups, not directly to me ***
*** PLEASE don't copy me on replies, I'll read them in the group ***


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  2008-03-30 14:24                 ` Christian Herenz
                                     ` (3 preceding siblings ...)
       [not found]                   ` <mailman.9641.1206888365.18990.help-gnu-emacs@gnu.org>
@ 2008-03-31  2:22                   ` Barry Margolin
  2008-03-31  8:38                     ` Christian Herenz
  4 siblings, 1 reply; 24+ messages in thread
From: Barry Margolin @ 2008-03-31  2:22 UTC (permalink / raw)
  To: help-gnu-emacs

In article <fso7rr$io2$1@registered.motzarella.org>,
 Christian Herenz <herenz@physik.hu-berlin.de> wrote:

> Lennart Borgman (gmail) schrieb:
> 
> > 
> > Do
> > 
> >   C-h f unless RET
> > 
> > to read the documentation for "unless". You can see there that is says 
> > "body forms".
> > 
> 
> C-h f unless RET yields here:
> --
> |unless is a Lisp macro in `subr'. 
> 
> |(unless COND &rest BODY) 
>  
>                                            |
> |If COND yields nil, do BODY, else return nil.
> --
> 
> But what about more than one function inside the Body?
> I do it like this atm (because i dont really understand the above help):

Do you understand what "&rest" means?  It means that there can be an 
arbitrary number of arguments there.

> 
> (unless window-system (menu-bar-mode nil))
> (unless window-system (color-theme-arjen))

Even if only one form were allowed, why wouldn't you use progn to 
combine multiple forms into one:

(unless window-system
  (progn
    (menu-bar-mode nil)
    (color-theme-arjen)))

-- 
Barry Margolin, barmar@alum.mit.edu
Arlington, MA
*** PLEASE post questions in newsgroups, not directly to me ***
*** PLEASE don't copy me on replies, I'll read them in the group ***


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  2008-03-30 17:56                       ` Christian Herenz
@ 2008-03-31  7:32                         ` Nuno J. Silva
  2008-03-31  8:11                         ` Tim X
  1 sibling, 0 replies; 24+ messages in thread
From: Nuno J. Silva @ 2008-03-31  7:32 UTC (permalink / raw)
  To: help-gnu-emacs

Christian Herenz <herenz@physik.hu-berlin.de> writes:

> Rupert Swarbrick schrieb:
>
>> (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
>
> Yeah-- You wrote much, and I think you missed the point a little bit..
>
> (unless nil (do-stuff) (do-other-stuff)) ... this would only do-stuff?

This will do-stuff and do-other-stuff.

> (unless nil ((do-stuff) (do-other-stuff)) would do-stuff and
> do-other-stuff?

And this will raise an error, I'm afraid.

>
> That was my actual question.


-- 
Nuno J. Silva (aka njsg)
LEIC student at Instituto Superior Técnico
Lisbon, Portugal
Homepage: http://njsg.no.sapo.pt/
Gopherspace: gopher://sdf-eu.org/11/users/njsg
Registered Linux User #402207 - http://counter.li.org

-=-=-
A computer is like an air conditioner, it stops working when you open
Windows.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  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
  1 sibling, 1 reply; 24+ messages in thread
From: Tim X @ 2008-03-31  8:11 UTC (permalink / raw)
  To: help-gnu-emacs

Christian Herenz <herenz@physik.hu-berlin.de> writes:

> Rupert Swarbrick schrieb:
>
>> (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
>
> Yeah-- You wrote much, and I think you missed the point a little bit..
>
> (unless nil (do-stuff) (do-other-stuff)) ... this would only do-stuff?
>
> (unless nil ((do-stuff) (do-other-stuff)) would do-stuff and do-other-stuff?
>
> That was my actual question.
>
> Greets,
> Christian

When working with any form of lisp, code formatting is the secret. In
fact, its probably more important in lisp languages because unlike other
languages, code and data are pretty much the same thing. 

So, in your current situation ....

(unless condition
  body)

means unless the condition is true, execute body.

Now body can consist of more than one form, i.e.

(unless condition
  (do-thing-1 arg1)
  (do-thing-2)
  (do-thing-3 arg1 arg2))

would execute 'do-thing-1' with one argument arg1
              'do-thing-2' with no arguments
              'do-thing-3' with two arguments arg1 and arg2

All of the body forms will be executed if any of them are executed and
you can have as many as you like. 

If you want to execute some forms if the condition is true and execute
other forms if it is not, then you want either 'if' or 'cond'. 

Note that 'if' only allows for one form in the first part e.g. 

(if window-system
    (do-true-thing)
  (do-false-thing))

You can use progn to add morre forms to the first part, but that is
generally considered poor lisp style e.g.

(if window-system
    (progn
      (do-thing-1)
      (do-thing-2))
  (do-other-else-thing

Note that the else part can either be absent or contain multiple forms
to be evaluated.

In the case where you want to execute multiple forms for the 'true'
part, you often see a cond used (cond = conditional). cond is
particularly useful wehn you have more than a true/false
situation. Often, the last condition in a cond is 't', which evaluates
to true - think of it as the 'catch-all'. If none of the other tests
match, this one will. The cond can be useful if you run on multiple
platforms e.g.

(cond
 ((eq window-system 'x)
  (do-something-for-x-1)
  (do-something-for-x-2))
 ((eq eindow-system 'windows)
   (do-soemthing-for-windows-1)
   (do-something-for-windows-2))
 (t
   (do-this-if-not-x-or-windows-1)
   (do-this-if-not-x-or-windows-2)))

I highly recommend you read the Introduction to Emacs Lisp as this will
make it clear.

Tim



-- 
tcross (at) rapttech dot com dot au


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  2008-03-31  8:11                         ` Tim X
@ 2008-03-31  8:34                           ` Christian Herenz
  0 siblings, 0 replies; 24+ messages in thread
From: Christian Herenz @ 2008-03-31  8:34 UTC (permalink / raw)
  To: help-gnu-emacs

Tim X schrieb:

> (unless condition
>   (do-thing-1 arg1)
>   (do-thing-2)
>   (do-thing-3 arg1 arg2))
> 

OK!

> (if window-system
>     (do-true-thing)
>   (do-false-thing))

See! That was what confused me, I thought unless works like if, but obviously 
there is a difference.

Thank you very much :-)

Greets,
Christian


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: Detect if Emacs is running in -nw mode
  2008-03-31  2:22                   ` Barry Margolin
@ 2008-03-31  8:38                     ` Christian Herenz
  0 siblings, 0 replies; 24+ messages in thread
From: Christian Herenz @ 2008-03-31  8:38 UTC (permalink / raw)
  To: help-gnu-emacs

Barry Margolin schrieb:

> (unless window-system
>   (progn
>     (menu-bar-mode nil)
>     (color-theme-arjen)))
> 

In a post above TimX wrote:

> Now body can consist of more than one form, i.e.
> 
> (unless condition
>   (do-thing-1 arg1)
>   (do-thing-2)
>   (do-thing-3 arg1 arg2))


However, since I have "now finally" a little bit structure in my .emacs I have 
seperated parts about general appereance and color themes - which makes this 
just an intersting "theoretical" conversation, but is at the moment not of 
practiacal use for me :-)

Greets,
Christian


^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2008-03-31  8:38 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
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

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).