public inbox for guile-emacs@sourceware.org
 help / color / mirror / Atom feed
From: Kalle Olavi Niemitalo <tosi@ees2.oulu.fi>
To: Keisuke Nishida <kxn30@po.cwru.edu>
Cc: guile-emacs@sourceware.cygnus.com
Subject: Re: special forms (save-excursion)
Date: Wed, 15 Mar 2000 05:11:00 -0000	[thread overview]
Message-ID: <iznpuswqsyf.fsf@stekt.oulu.fi> (raw)
In-Reply-To: <m3d7owlb9l.fsf@kei.cwru.edu>

Keisuke Nishida <kxn30@po.cwru.edu> writes:

> Well, in this way, you can't write this:
> 
> (let ((start (point)))
>   (save-excursion
>     (goto-char start)))

Why not?  It's expanded to:

(let ((start (point)))
  (emacs-eval `(save-excursion
                 (,(lambda ()
                     (goto-char start))))))

The lambda form is evaluated in the Scheme side because of the
comma, and it captures the current lexical environment like
Scheme procedures always do.  When Emacs calls the closure, Guile
uses the captured binding of start.

Or, that's how I think it would work.  :-)

The Emacs evaluator would have to be changed to call the
equivalent of guile-apply if the function being called is a
Scheme object.  I don't know how difficult that is.  If it is too
much work, the version with an explicit guile-eval could be used.
This is really the only difference between the versions.

> OK, I'll try to add the type soon.  I guess you can define a new
> macro `import-lisp-macro'.

That could be used for all the `save-' macros / special forms.
But others like `when' and `condition-case' take their parameters
in different ways and would have to be handled separately.
Perhaps the importing macro should be called
`import-lisp-body-macro' because it applies only to macros whose
parameters form a single body.  Then there could be
`import-lisp-1-body-macro' for things like `with-current-buffer'
which take one normal parameter and a body.

Should I use defmacro instead of syntax-rules?  I like
syntax-rules more, but it seems slower.

How do I define documentation strings for Guile macros?

>   lisp-variable-ref, lisp-variable-set!,
>   import-lisp-function, import-lisp-variable

Are they used like this?
(lisp-variable-set! (import-lisp-variable 'buffer-read-only) 't)

I think import-* and export-* names should be used for functions
which actually change bindings of symbols, not only return a
reference to the variable.  `lisp-function' would be enough for
that.

  reply	other threads:[~2000-03-15  5:11 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2000-03-14 12:46 Kalle Olavi Niemitalo
2000-03-14 13:32 ` Keisuke Nishida
2000-03-14 14:11 ` Keisuke Nishida
2000-03-14 14:17   ` Keisuke Nishida
2000-03-15  0:34   ` Kalle Olavi Niemitalo
2000-03-15  3:32     ` Keisuke Nishida
2000-03-15  5:11       ` Kalle Olavi Niemitalo [this message]
2000-03-15  5:43         ` Keisuke Nishida
2000-03-15  6:12           ` Kalle Olavi Niemitalo
2000-03-15 11:37             ` guile-emacs GC (was special forms) Kalle Olavi Niemitalo
2000-03-15 12:18               ` Keisuke Nishida
2000-03-15 13:48                 ` Jim Blandy
2000-03-15 15:14                   ` Keisuke Nishida
2000-03-15 11:30           ` special forms (save-excursion) Kalle Olavi Niemitalo
2000-03-15 12:42             ` Keisuke Nishida

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

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

  git send-email \
    --in-reply-to=iznpuswqsyf.fsf@stekt.oulu.fi \
    --to=tosi@ees2.oulu.fi \
    --cc=guile-emacs@sourceware.cygnus.com \
    --cc=kxn30@po.cwru.edu \
    /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).