diff options
author | Andy Wingo <wingo@pobox.com> | 2010-10-10 11:49:50 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2010-10-10 11:49:50 +0200 |
commit | 1924145df58c3fbaae56610e06b430508d5d169f (patch) | |
tree | f1092dccd8c4a0166bd8c931d0b589f1d88c396f /guile-readline | |
parent | 41e826492a44d66b6056818c5718164f1d7d065b (diff) | |
download | guile-1924145df58c3fbaae56610e06b430508d5d169f.tar.gz |
readline repl-reader falls back to boot-9 definition for other ports
* guile-readline/ice-9/readline.scm (readline-repl-reader): Pull
definition out of activate-readline. If the current input port is not
the readline port, fall back to the boot-9 repl reader.
(activate-readline): Adapt.
Diffstat (limited to 'guile-readline')
-rw-r--r-- | guile-readline/ice-9/readline.scm | 43 |
1 files changed, 25 insertions, 18 deletions
diff --git a/guile-readline/ice-9/readline.scm b/guile-readline/ice-9/readline.scm index 38fb23fc7..4879babc5 100644 --- a/guile-readline/ice-9/readline.scm +++ b/guile-readline/ice-9/readline.scm @@ -200,26 +200,33 @@ (lambda () (set! *readline-completion-function* old-completer))))) +(define readline-repl-reader + (let ((boot-9-repl-reader repl-reader)) + (lambda* (repl-prompt #:optional (reader (fluid-ref current-reader))) + (let ((port (current-input-port))) + (if (eq? port (readline-port)) + (let ((outer-new-input-prompt new-input-prompt) + (outer-continuation-prompt continuation-prompt) + (outer-read-hook read-hook)) + (dynamic-wind + (lambda () + (set-buffered-input-continuation?! port #f) + (set-readline-prompt! repl-prompt "... ") + (set-readline-read-hook! (lambda () + (run-hook before-read-hook)))) + (lambda () ((or reader read) port)) + (lambda () + (set-readline-prompt! outer-new-input-prompt + outer-continuation-prompt) + (set-readline-read-hook! outer-read-hook)))) + (boot-9-repl-reader repl-prompt reader)))))) + (define-public (activate-readline) (if (isatty? (current-input-port)) - (let ((repl-read-hook (lambda () (run-hook before-read-hook)))) - (set-current-input-port (readline-port)) - (set! repl-reader - (lambda* (repl-prompt - #:optional (reader (fluid-ref current-reader))) - (let ((outer-new-input-prompt new-input-prompt) - (outer-continuation-prompt continuation-prompt) - (outer-read-hook read-hook)) - (dynamic-wind - (lambda () - (set-buffered-input-continuation?! (readline-port) #f) - (set-readline-prompt! repl-prompt "... ") - (set-readline-read-hook! repl-read-hook)) - (lambda () ((or reader read) (current-input-port))) - (lambda () - (set-readline-prompt! outer-new-input-prompt outer-continuation-prompt) - (set-readline-read-hook! outer-read-hook)))))) - (set! (using-readline?) #t)))) + (begin + (set-current-input-port (readline-port)) + (set! repl-reader readline-repl-reader) + (set! (using-readline?) #t)))) (define-public (make-completion-function strings) "Construct and return a completion function for a list of strings. |