[slime-devel] Readtables
Terje Norderhaug
terje at in-progress.com
Fri Jan 1 16:15:42 UTC 2010
On Jan 1, 2010, at 4:16 AM, Seth Burleigh wrote:
> 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.
The code requires that SLIME implements the client side of the
functionality.
I have already implemented it for the MCLIDE client as proof of
concept. Let me know if you want to try it out.
I found it actually resulted in a simplification of the client code
as the swank server takes the responsibility for determining the end
of expressions in the listener.
-- Terje
> -----Original Message-----
> From: Terje Norderhaug [mailto:terje at in-progress.com]
> Sent: Thursday, December 31, 2009 11:47 PM
> To: slime-devel at 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 at in-progress.com
>
>
>
>
>
> _______________________________________________
> slime-devel site list
> slime-devel at common-lisp.net
> http://common-lisp.net/mailman/listinfo/slime-devel
>
>
> _______________________________________________
> slime-devel site list
> slime-devel at common-lisp.net
> http://common-lisp.net/mailman/listinfo/slime-devel
-- Terje Norderhaug
terje at in-progress.com
More information about the slime-devel
mailing list