Author: yamakenz
Date: Fri Aug 17 16:53:29 2007
New Revision: 4856

Modified:
   trunk/NEWS
   trunk/scm/uim-sh.scm

Log:
* scm/uim-sh.scm
  - (%EDITLINE-PARTIAL-EXPR): New variable
  - (%editline-partial-read): New procedure
  - (uim-editline-read): Fix read error on multi-line expression such
    as "(define\nfoo\n3)"
* NEWS
  - Update


Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS  (original)
+++ trunk/NEWS  Fri Aug 17 16:53:29 2007
@@ -20,6 +20,8 @@
     - Fix EOF (^d) ignorance on editline feature is enabled
     - Fix ignorance of multiple expressions on a line on editline
       feature is enabled
+    - Fix read error on multi-line expression such as
+      "(define\nfoo\n3)" on editline feature is enabled
     - Fix pseudo -r (require module) option for editline feature with
       real require-module
 

Modified: trunk/scm/uim-sh.scm
==============================================================================
--- trunk/scm/uim-sh.scm        (original)
+++ trunk/scm/uim-sh.scm        Fri Aug 17 16:53:29 2007
@@ -179,18 +179,35 @@
               (reloop)))
        EX_OK)))))
 
+(define %EDITLINE-PARTIAL-EXPR (list 'partial-expr))
+
+;; SigScheme dependent
+(define %editline-partial-read
+  (lambda args
+    (guard (err
+           ((string-prefix? "in read: EOF " (cadr err))  ;; XXX
+            %EDITLINE-PARTIAL-EXPR))
+      (apply read args))))
+
 (define uim-editline-read
-  (let ((p (open-input-string "")))
+  (let ((p (open-input-string ""))
+       (buf ""))
     (lambda ()
-      (let ((expr (read p)))
-       (if (eof-object? expr)
+      (let ((expr (%editline-partial-read p)))
+       (if (or (eof-object? expr)
+               (eq? expr %EDITLINE-PARTIAL-EXPR))
            (let ((line (uim-editline-readline)))
              (if (eof-object? line)
                  line
                  (begin
-                   (set! p (open-input-string line))
+                   (set! buf (if (eq? expr %EDITLINE-PARTIAL-EXPR)
+                                 (string-append buf line)
+                                 line))
+                   (set! p (open-input-string buf))
                    (uim-editline-read))))
-           expr)))))
+           (begin
+             (set! buf "")
+             expr))))))
 
 ;; Verbose level must be greater than or equal to 1 to print anything.
 (if (< (verbose) 1)

Reply via email to