Linedit is a readline-style library written in Common Lisp that provides customizable line-editing features, licensed under a MIT-style license.
Linedit uses UFFI for foreign bindings, so it is a least theoretically portable, though REPL-wrapping is currently SBCL specific.
If you're not yet using Quicklisp, you should be! ...but if you need the tarball, latests release of Linedit can manually be downloaded from here: linedit_latest.tar.gz .
The bleeding edge is available from our Git repo:
git clone git://common-lisp.net/projects/linedit/linedit.git
;;; Check for --no-linedit command-line option.
(if (member "--no-linedit" sb-ext:*posix-argv* :test 'equal)
(setf sb-ext:*posix-argv*
(remove "--no-linedit" sb-ext:*posix-argv* :test 'equal))
(when (interactive-stream-p *terminal-io*)
(require :sb-aclrepl)
(require :linedit)
(funcall (intern "INSTALL-REPL" :linedit) :wrap-current t)))
Additionally, to prevent Linedit from causing trouble with Slime, in your .emacs:
(setq inferior-lisp-program "sbcl --noinform --no-linedit")
Linedit uses terminfo.lisp by Paul Foley, which is currently kept mirrored in the Linedit CVS.
The terminfo interface is distributed available as a separate asdf-installable bundle: Terminfo.
Questions, feature requests, and bug-reports are welcome on linedit-devel.