[slime-devel] Handling Slime interrupts

Helmut Eller heller at common-lisp.net
Sun Jun 10 20:03:56 UTC 2012


* Zach Kost-Smith [2012-06-10 14:17] writes:

> However, when the user interrupt initiates from the Slime repl, this handler
> is bypassed entirely and my wrapper code isn't run.  I don't know enough
> about the way Slime/Swank uses conditions to understand what is happening
> here.  Does anybody know how I can successfully handle a user interrupt that
> is initiated from within Emacs, either via changing my code or hacking on
> Slime/Swank itself?

SLIME uses multiple threads and sb-thread:interrupt-thread to force them
to invoke the debugger.  Presumably SBCL signals
sb-sys:interactive-interrupt only when it receives a SIGINT and only in
the main thread.  Pressing C-c C-c in the non-comint repl sends
something on a socket but no SIGINT.

You could write your own Emacs command 

(defun my-interrupt-command ()
  (interactive)
  (let ((slime-current-thread t))
    (slime-eval 
     `(sb-thread:interrupt-thread 
       (swank::find-worker-thread swank::*emacs-connection* :repl-thread)
       (cl:lambda () (cl:signal 'sb-sys:interactive-interrupt))))))

and bind it to C-c C-c. 

Helmut





More information about the slime-devel mailing list