[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é!