samer@0: ;;; sets up java readline to provide command line samer@0: ;;; editting, history, and completion for jscheme. samer@0: samer@0: ; redirect input to readline reader samer@0: ;(define (set-input-port port) (set! jsint.Scheme.input$ port)) samer@0: samer@1: (define jscheme-history ".jscheme_history") samer@1: (define (readline-reader prompt) samer@1: (org.gnu.readline.ReadlineReader. prompt (java.io.File. jscheme-history) samer@0: org.gnu.readline.ReadlineLibrary.GnuReadline$)) samer@0: samer@0: (org.gnu.readline.Readline.initReadline "jscheme") samer@0: (org.gnu.readline.Readline.readInitFile "/Users/samer/.inputrc") samer@0: (set! current-readline-reader (readline-reader ":")) samer@0: (.setInput (jsint.Scheme.currentEvaluator) (jsint.InputPort. current-readline-reader)) samer@0: (define (set-prompt prompt) (.setPrompt current-readline-reader prompt)) samer@0: samer@1: samer@0: ; this seems to stop terminal getting confused after exit samer@0: (.addShutdownHook (Runtime.getRuntime) samer@1: (Thread. (lambda () samer@0: (display "cleaning up readline.\n") samer@1: (org.gnu.readline.Readline.writeHistoryFile jscheme-history) samer@0: (org.gnu.readline.Readline.cleanup)))) samer@1: samer@0: samer@0: ; enable completion by looking up words in jscheme's symbol table samer@0: (org.gnu.readline.Readline.setCompleter (samer.silk.SilkCompleter.))