Author: yamakenz
Date: Sun Sep 16 02:52:57 2007
New Revision: 4968

Modified:
   trunk/scm/editline.scm

Log:
* scm/editline.scm
  - Require SRFI-0 and SRFI-23
  - (%EDITLINE-PARTIAL-EXPR): Removed
  - (%editline-eof-error?): New procedure
  - (%editline-partial-read): Rewrite with %editline-eof-error?
  - (editline-read): Fix silent EOF error discard on echo '(+ 1' |
    uim-sh --editline. Thanks No.843 of [uim thread 7] for the report


Modified: trunk/scm/editline.scm
==============================================================================
--- trunk/scm/editline.scm      (original)
+++ trunk/scm/editline.scm      Sun Sep 16 02:52:57 2007
@@ -29,13 +29,12 @@
 ;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 ;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-(require-extension (srfi 6 34))
+(require-extension (srfi 0 6 23 34))
 ;;(require-extension (srfi 13))  ;; string-prefix?
 
 (define *editline-prompt-beginning*  "> ")
 (define *editline-prompt-succeeding* "")
 (define %*editline-reading* #f)
-(define %EDITLINE-PARTIAL-EXPR (list 'partial-expr))
 
 
 (define editline-prompt
@@ -44,12 +43,19 @@
        *editline-prompt-succeeding*
        *editline-prompt-beginning*)))
 
-;; SigScheme dependent
+(cond-expand
+ (sigscheme
+  (define %editline-eof-error?
+    (lambda (err)
+      (and (%%error-object? err)
+          (string-prefix? "in read: EOF " (cadr err)))))) ;; XXX
+ (else
+  (error "cannot detect EOF error")))
+
 (define %editline-partial-read
   (lambda args
     (guard (err
-           ((string-prefix? "in read: EOF " (cadr err))  ;; XXX
-            %EDITLINE-PARTIAL-EXPR))
+           ((%editline-eof-error? err) err))
       (apply read args))))
 
 (define editline-read
@@ -58,12 +64,14 @@
     (lambda ()
       (let ((expr (%editline-partial-read p)))
        (if (or (eof-object? expr)
-               (eq? expr %EDITLINE-PARTIAL-EXPR))
+               (%editline-eof-error? expr))
            (let ((line (editline-readline)))
              (if (eof-object? line)
-                 line
+                 (if (%editline-eof-error? expr)
+                     (raise expr)
+                     line)
                  (begin
-                   (set! buf (if (eq? expr %EDITLINE-PARTIAL-EXPR)
+                   (set! buf (if (%editline-eof-error? expr)
                                  (string-append buf line)
                                  line))
                    (set! p (open-input-string buf))

Reply via email to