help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: trouble writing a conditional, or with lambda


From: Oliver Scholz
Subject: Re: trouble writing a conditional, or with lambda
Date: Sat, 24 May 2003 18:08:28 +0200
User-agent: Gnus/5.090019 (Oort Gnus v0.19) Emacs/21.3.50 (windows-nt)

Florian von Savigny <florian265@uboot.com> writes:

> Sigh ...
>
>
> some basic lisp, I'm afraid, but I did consult the manual and tested
> in lisp-interaction-mode, but did not get any the wiser.
>
> I'm trying to get a function to work differently depending on whether
> emacs runs under X or on a terminal:
>
>    (if (eq window-system nil) 
>        ; running under a terminal
>        (lambda ()
>              (split-window)
>              (switch-to-buffer "*foo*")
>              )
>     ; running under a window system
>     (lambda ()
>            (select-frame (make-frame))
>            (set-frame-size (selected-frame) 50 24)
>            (set-frame-position (selected-frame) 150 120)
>            ))

Two notes:

1) You should not check the variable `window-system', if you can avoid
   it. Better check for the specific feature you need. In this case
   you could probably use the function `display-multi-frame-p'.

2) The expression above does not call `split-window', `select-frame'
   and the like, it just returns an /anonymous function/ (aka
   "lambda-function"). You could call `funcall'  the return value of
   your expression, but this is probably not what you want. I think,
   this is more likely to do what you want to achieve:

(if (display-multi-frame-p)
    ;; Running under a terminal
    (progn
      (split-window)
      (switch-to-buffer "*foo*"))
  ;; running under a window system 

  ;; (`progn' is not necessary here, because `if' accepts more than
  ;; three arguments. All arguments from the third one onward
  ;; constitute the THEN clause.)
  (select-frame (make-frame))
  (set-frame-size (selected-frame) 50 24)
  (set-frame-position (selected-frame) 150 120))

> It seems that everything in the lambda expressions is ignored
> (i.e. nothing happens).  I used these lambda expressions because
> simply putting a body of functions got error messages about "Invalid
> function"s. But it seems I don't get these right.
>
>
>        (lambda (
>               (split-window)
>               (switch-to-buffer "*foo*")
>                ))
>
> also seems to be valid syntax, but is also ignored.

No, it is not valid syntax. But it is not evaluated either, therefore
you don't get an error.

You could have a look at the "Introduction to Emacs Lisp" by Robert
Chassell, which explains some basics of Emacs Lisp.

    Oliver
-- 
5 Prairial an 211 de la Révolution
Liberté, Egalité, Fraternité!


reply via email to

[Prev in Thread] Current Thread [Next in Thread]