From mboxrd@z Thu Jan 1 00:00:00 1970 From: Keisuke Nishida To: Kalle Olavi Niemitalo Cc: guile-emacs@sourceware.cygnus.com Subject: Re: special forms (save-excursion) Date: Wed, 15 Mar 2000 03:32:00 -0000 Message-id: References: <87n1o1p9kt.fsf@PC486.Niemitalo.LAN> X-SW-Source: 2000-q1/msg00011.html Kalle Olavi Niemitalo writes: > Should the macros be in module (emacs import), if they correspond to > Emacs features? A new module (emacs macro) might be better. > If it were possible to pass Scheme procedure objects to Emacs Lisp and > call them from there, save-excursion could use the existing primitive: > > (define-syntax save-excursion > (syntax-rules () > ((save-excursion body ...) > (emacs-eval `(save-excursion > (,(lambda () > body ...))))))) Well, in this way, you can't write this: (let ((start (point))) (save-excursion (goto-char start))) > Here's another version which uses guile-eval instead of directly > calling the procedure from Emacs. But it too needs the new type. > > (define-syntax save-excursion > (syntax-rules () > ((save-excursion body ...) > (emacs-eval `(save-excursion > (guile-eval '(',(lambda () > body ...)))))))) This looks better in this case. Probably many of Lisp macros can be implemented this way, except some others such as `unwind-protect' (but we already have `dynamic-wind'). I guess I should add the new Lisp type, but... a problem can be we have to convert Scheme's #t and #f into the special type instead of t and nil. But this may not be a problem since we can return a symbol t or nil to Lisp anyway. (And it can be done automatically in some way.) OK, I'll try to add the type soon. I guess you can define a new macro `import-lisp-macro'. > You wrote you'd rename emacs-eval and emacs-apply. > What are the new names? New primitives will be: lisp-eval, lisp-apply, scheme-eval, scheme-apply New Scheme procedures/macros will be: lisp-true?, lisp-false?, lisp-variable-ref, lisp-variable-set!, import-lisp-function, import-lisp-variable and perhaps: define-global-varialbe, define-command In addition, I could implement import-scheme-procedure or something for Emacs Lisp. Hopefully I am releasing the next version within today.