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)