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.