public inbox for guile-emacs@sourceware.org
 help / color / mirror / Atom feed
From: Ken Raeburn <raeburn@raeburn.org>
To: guile-emacs@sourceware.cygnus.com
Subject: Re: interrupting the Scheme process
Date: Fri, 05 May 2000 12:08:00 -0000	[thread overview]
Message-ID: <tx1itwsg6gv.fsf@raeburn.org> (raw)
In-Reply-To: <m38zxrb8bf.fsf@kei.cwru.edu>

Keisuke Nishida <kxn30@po.cwru.edu> writes:
> I have no idea of how this can be done right now.  Emacs checks for
> quit in some loops such as eval.  When the process is in the Scheme
> interpreter, we can't use the same way; instead, we have to generate
> a user interrupt.  I guess it is possible for Guile Emacs to bind C-g
> to generate an interrupt before calling the Scheme evaluator, but I'm
> not sure about this part.  Ken, do you have any idea?

Guile has some hooks for recording that an interrupt has occurred and,
at certain times, throwing an exception of some sort.  If we could set
that flag at C-g time, if Scheme code is currently running, might that
do the trick?  Then Scheme can trap the exception if it wants, but
otherwise we throw back to the containing Lisp call.  Propagating the
unwind through possibly multiple lisp<->scheme interfaces could be
hairy though; I haven't looked very closely at that stuff.

> Also, once we come to support multi-thread programming with Emacs,
> things become more complicated.  Probably we have to maintain threads
> in the same way as shells; that is, Emacs will have a "current thread"
> and "background threads", and the user may quit only the current thread
> by typing C-g, whereas background threads must be killed by a special
> command like M-x kill-thread.

Hm...that might be a way to do it.  I also wonder if we might have
cases where we want to send the interrupt to multiple threads -- i.e.,
if the "foreground" thread is sitting around waiting for N tasks to
finish (e.g., get new news from news.mycompany.com, get email from
pop.mycompany.com, get new news from news.redhat.com, etc), might we
want to interrupt all of them and unwind the main thread only after
they've died off?

I suppose we could have a "spawn and wait for multiple threads"
function which implements all of this on top of the scheme^Wplan you
describe, by trapping the interrupt...

Ken

  parent reply	other threads:[~2000-05-05 12:08 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2000-05-03  4:52 scheme directory Satoru Takabayashi
2000-05-03 12:15 ` Kalle Olavi Niemitalo
2000-05-05 11:56   ` Ken Raeburn
2000-05-03 15:03 ` interrupting the Scheme process Keisuke Nishida
2000-05-04 10:21   ` Kalle Olavi Niemitalo
2000-05-05 12:08   ` Ken Raeburn [this message]
2000-05-06  8:00     ` Keisuke Nishida
2000-05-06 10:34       ` Ken Raeburn

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=tx1itwsg6gv.fsf@raeburn.org \
    --to=raeburn@raeburn.org \
    --cc=guile-emacs@sourceware.cygnus.com \
    /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).