[slime-devel] Unicode aware SLIME on LispWorks

Chris Dean ctdean at sokitomi.com
Thu Dec 27 19:59:25 UTC 2007

I'm using a recent version (2007-12-22) of Slime with the current
version of LispWorks on Linux using GNU Emacs

How do I setup slime to allow me to interact with Unicode characters
in the repl?

I've tried setting various combinations of slime-net-coding-system,
set-language-environment, and set-default-coding-systems but everytime
I interact with a unicode character I either hang or get an error from
swank in the *inferior-lisp* buffer.

I've tried various hacks to slime and swank, and I can get everything
to work if I use flexi-streams but so far I've been unsuccessful with
an out-of-the-box solution.  

My litmus test is to evaluate (code-char 8258) in the repl.  It is
unimportant to me how that result is displayed as long as something is

FWIW, the patch with flexi-streams I'm using is below.

Chris Dean

diff -u -w -r1.93 swank-lispworks.lisp
--- swank-lispworks.lisp        24 Nov 2007 08:18:59 -0000      1.93
+++ swank-lispworks.lisp        27 Dec 2007 19:53:36 -0000
@@ -67,11 +67,19 @@
 (defimplementation accept-connection (socket 
                                       &key external-format buffering timeout)
-  (declare (ignore buffering timeout external-format))
-  (let* ((fd (comm::get-fd-from-socket socket)))
+  (declare (ignore buffering timeout))
+  (let ((fd (comm::get-fd-from-socket socket)))
     (assert (/= fd -1))
-    (make-instance 'comm:socket-stream :socket fd :direction :io 
-                   :element-type 'base-char)))
+    (let* ((char-type (external-format:external-format-type 
+                       (or external-format :latin-1)))
+           (stream (make-instance 'comm:socket-stream :socket fd :direction :io 
+                                  :element-type (if (eq char-type 'base-char)
+                                                    'base-char
+                                                    '(unsigned-byte 8)))))
+      (if (eq char-type 'base-char)
+          stream
+          (flexi-streams:make-flexi-stream
+           stream :external-format (or external-format :latin-1)))))

More information about the slime-devel mailing list