From 0f352c382c7291b12da7f1800f54b9a27a27ad64 Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Fri, 2 Jan 2015 23:55:11 -0600 Subject: Racket: add readline/line edit support. --- racket/readline.rkt | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/racket/readline.rkt b/racket/readline.rkt index 0a60c17..7f92169 100644 --- a/racket/readline.rkt +++ b/racket/readline.rkt @@ -2,14 +2,31 @@ (provide readline) +(require (prefix-in readline: readline/readline)) + (require "types.rkt") +(define history-loaded #f) +(define HISTORY-FILE (format "~a/.mal-history" (find-system-path 'home-dir))) + +(define (load-history path) + (map + (lambda (line) (readline:add-history line)) + (string-split + (port->string (open-input-file path)) + #px"\n"))) + (define (readline prompt) - (_printf "~a" prompt) - (let ([line (read-line (current-input-port) 'any)]) + (when (not history-loaded) + (set! history-loaded #t) + (load-history HISTORY-FILE)) + (let ([line (readline:readline prompt)]) (if (eq? eof line) nil - line))) - - - + (begin + (readline:add-history line) + (with-output-to-file + HISTORY-FILE + (lambda () (printf "~a~n" line)) + #:exists 'append) + line)))) -- cgit v1.2.3