It doesn't appear to work when I use clisp. When I define the macros like this (set-macro-character #[ (lambda (stream char) (read-delimited-list #] stream t))) (set-macro-character #] (get-macro-character #)))
And go [print And then press enter it states 'error in process filter: wrong type arguments: listp,0 Then when I press enter again it returns ; no value Or I enter , say , 'a it'll return 'a.
Im using the first code you posted.
-----Original Message----- From: Terje Norderhaug [mailto:terje@in-progress.com] Sent: Thursday, December 31, 2009 11:47 PM To: slime-devel@common-lisp.net Subject: Re: [slime-devel] Readtables
On Dec 31, 2009, at 9:23 PM, Terje Norderhaug wrote:
On Dec 31, 2009, at 7:45 AM, Seth Burleigh wrote:
Is there any current support for having the REPL respect reader macro characters? For example, if I define the [] pair to act like parentheses the repl shouldn't automatically send a multiline [ ] form to lisp until a matching ] has been found. On command line REPLs, reader macro characters aren't evaluated until a matching ] has been found.
One way to have the REPL respect reader macro characters is by making evaluation on swank return the index of the first character not read, with the client using this as the starting position for the next read.
Below is the minor required modification of swank.
Here are the changes:
diff -u slime-2009-12-31/swank.lisp slime-2009-12-31+/swank.lisp --- slime-2009-12-31/swank.lisp 2009-12-23 00:15:03.000000000 -0800 +++ slime-2009-12-31+/swank.lisp 2009-12-31 21:43:45.000000000 -0800 @@ -2213,11 +2213,16 @@ (defun eval-region (string) "Evaluate STRING. Return the results of the last form as a list and as secondary value the -last form." +last form, with third value indicating the index of the first character not read in STRING" (with-input-from-string (stream string) (let (- values) (loop - (let ((form (read stream nil stream))) + (let* ((index (file-position stream)) + (form (handler-case + (read stream nil stream) + (end-of-file () + (finish-output) + (return (values values - index)))))) (when (eq form stream) (finish-output) (return (values values -))) @@ -2293,12 +2298,13 @@ (with-retry-restart (:msg "Retry SLIME REPL evaluation request.") (track-package (lambda () - (multiple-value-bind (values last-form) (eval-region string) + (multiple-value-bind (values last-form index) (eval-region string) (setq *** ** ** * * (car values) /// // // / / values +++ ++ ++ + + last-form) - (funcall *send-repl-results-function* values)))))) - nil) + (unless index + (funcall *send-repl-results-function* values)) + index))))))
-- Terje Norderhaug terje@in-progress.com
_______________________________________________ slime-devel site list slime-devel@common-lisp.net http://common-lisp.net/mailman/listinfo/slime-devel