Resetting history ring on empty input in repl.

This commit is contained in:
Alex Shinn 2012-07-26 22:47:43 +09:00
parent f0dd9c9ddb
commit f60617815d
3 changed files with 25 additions and 15 deletions

View file

@ -158,7 +158,9 @@
'completion: (make-sexp-buffer-completer)))))) 'completion: (make-sexp-buffer-completer))))))
(cond (cond
((or (not line) (eof-object? line))) ((or (not line) (eof-object? line)))
((equal? line "") (lp module env meta-env)) ((equal? line "")
(history-reset! history)
(lp module env meta-env))
(else (else
(history-commit! history line) (history-commit! history line)
(cond (cond

View file

@ -22,17 +22,21 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; history ;; history
(define maximum-history-size 128) (define maximum-history-size 512)
(define-record-type History (define-record-type History
(%make-history remaining past future) (%make-history remaining past future filter)
history? history?
(remaining history-remaining history-remaining-set!) (remaining history-remaining history-remaining-set!)
(past history-past history-past-set!) (past history-past history-past-set!)
(future history-future history-future-set!)) (future history-future history-future-set!)
(filter history-filter history-filter-set!))
(define (make-history . o) (define (make-history . o)
(%make-history (if (pair? o) (car o) maximum-history-size) '() '())) (%make-history (if (pair? o) (car o) maximum-history-size)
'()
'()
(and (pair? o) (pair? (cdr o)) (cadr o))))
(define (history-current h) (define (history-current h)
(let ((p (history-past h))) (let ((p (history-past h)))
@ -42,8 +46,9 @@
(let ((past (history-past h)) (future (history-future h))) (let ((past (history-past h)) (future (history-future h)))
(if (pair? past) (cons (car past) (append future (cdr past))) future))) (if (pair? past) (cons (car past) (append future (cdr past))) future)))
(define (list->history ls) (define (list->history ls . o)
(%make-history (max maximum-history-size (length ls)) ls '())) (%make-history (max maximum-history-size (length ls)) ls '()
(and (pair? o) (car o))))
(define (history-flatten! h) (define (history-flatten! h)
(history-past-set! h (history->list h)) (history-past-set! h (history->list h))
@ -61,16 +66,19 @@
(define (history-insert! h x) (define (history-insert! h x)
(history-flatten! h) (history-flatten! h)
(history-past-push! h x)) (if (not (and (history-filter h) ((history-filter h) x)))
(history-past-push! h x)))
(define (history-commit! h x) (define (history-reset! h)
(cond (cond
((pair? (history-future h)) ((pair? (history-future h))
(history-past-set! (history-past-set! h (append (drop-last (history-future h))
h (cons x (append (drop-last (history-future h)) (history-past h)))) (history-past h)))
(history-future-set! h '())) (history-future-set! h '()))))
(else
(history-insert! h x)))) (define (history-commit! h x)
(history-reset! h)
(history-insert! h x))
(define (history-prev! h) (define (history-prev! h)
(let ((past (history-past h))) (let ((past (history-past h)))

View file

@ -1,7 +1,7 @@
(define-library (chibi term edit-line) (define-library (chibi term edit-line)
(export make-line-editor edit-line edit-line-repl (export make-line-editor edit-line edit-line-repl
make-history history-insert! make-history history-insert! history-reset!
history-commit! history->list list->history buffer->string history-commit! history->list list->history buffer->string
make-buffer buffer-make-completer make-buffer buffer-make-completer
buffer-clear buffer-refresh buffer-draw buffer-clear buffer-refresh buffer-draw