Index: parley.scm =================================================================== --- parley.scm (revision 26514) +++ parley.scm (working copy) @@ -351,25 +351,27 @@ (list prompt in out line (string-length line) exit offset))) (escape-sequence . ,(lambda (prompt in out line pos exit offset) - (cond ((get-complete-esc-sequence in) => - (lambda (seq) - (cond ((alist-ref seq user-esc-sequences) => - (lambda (e) (e prompt in out line pos exit offset))) - (else - (case (cadr seq) - ((#\x43) ((handle 'right-arrow) prompt in out line pos exit offset)) - ((#\x44) ((handle 'left-arrow) prompt in out line pos exit offset)) - ((#\x41) ((handle 'prev-history) prompt in out line pos exit offset)) - ((#\x42) ((handle 'next-history) prompt in out line pos exit offset)) - (else - (list prompt in out line pos exit offset))))))) - (else (list prompt in out line pos exit offset))))))) + (let ((seq (get-complete-esc-sequence in))) + (cond ((escape-sequence-handler-ref seq) => + (lambda (handler) + (handler prompt in out line pos exit offset))) + (else (list prompt in out line pos exit offset)))))))) (define (handle event) (cond ((alist-ref event +key-handlers+) => identity) (else (error "Unhandled event " event)))) +(define +escape-sequence-handlers+ + `((#\x43 . ,(handle 'right-arrow)) + (#\x44 . ,(handle 'left-arrow)) + (#\x41 . ,(handle 'prev-history)) + (#\x42 . ,(handle 'next-history)))) + +(define (escape-sequence-handler-ref seq) + (or (alist-ref seq user-esc-sequences) + (alist-ref seq +escape-sequence-handlers+))) + (define (refresh-line prompt port line pos offset) (let* ((cols (- (get-terminal-columns port) offset))