(export-all) in 'define-module' of, say, readline/term-util.scm is not enough for term-util.scm's bindings that are exported by readline.scm (which uses readline.term-util) to be actually exported. I find this totally confusing and inexplicable. Currently you must explicitly 'use' all four of the readline modules. history.scm moves the cursor to the beginning of the new string instead of the end. I think that this is the right thing to do for horizontally-scrolling readlines (move-to-end would probably be better for vertically-scrolling readlines), though it's unusual. Anyway, this is easy to fix if it bothers you: just add a (hash-table-put! state 'cursor (string-length (hash-table-get state 'string))) form as appropriate. history.scm wraps C-p C-n over the history, instead of stopping and complaining at either 'end' of the history. This is unusual, but I don't care about it.