[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