On a project I'm working on, I'm trying to make it accept user commands and provide history with the up arrow. I'm aiming to keep this project free of dependencies, and I don't want to have to require people to also install the readline development files just to compile my project. Does anyone know of a simple drop-in replacement for GNU Readline that provides only simple functionality?
问题:
回答1:
Most systems have readline installed, so I don't see that as being too much of an issue.
Secondly, I don't think there's any drop-in replacement for the GNU Readline library. You're going to have to stick with it. :(
Edit 5/11/2016: This answer is outdated, and any edit I'd make would be borrowing almost completely from the other, more correct answers. Summary: see linenoise and editline for modern readline alternatives.
回答2:
Editline. It has a BSD-style license.
EDIT: Older versions of editline were quite simple. Here's one with just two C files and a header, a total of about 1500 lines of code. We've been using it for years.
回答3:
I found one. antirez of Redis fame has come up with linenoise, a much simpler alternative.
回答4:
BusyBox contains command line editing code similar to readline, but much smaller and simpler, with full support for UTF-8. It would probably be easy to make it into an independent library.
回答5:
The editline library is yet another alternative. From the README:
The editline library was created by Simmule Turner and Rich Salz back in 1992. At the time they chose to distribute the code under a "C News-like" copyright, see the file LICENSE for details.
[...]
This version of the editline library is a fork off the Minix3 sources. Other know versions, often based off of the original comp.sources.unix posting are:
- Debian libeditline, http://packages.qa.debian.org/e/editline.html
- Heimdal, http://www.h5l.org
- Festival speech-tools, http://festvox.org/festival/
- Steve Tell's editline patches, http://www.cs.unc.edu/~tell/dist.html
The most intersting patches and bug fixes from each fork have been merged here.
回答6:
editline(libedit) doesn't support multi-byte characters yet.
I also agree with Dan Loewenherz, the readline library is wide spread. For example, most linux distribution ships bash with readline. Most python distribution also ships with readline. If your project needs a readline-like library, it's a good idea to use GNU readline library since it's a popular choice and users may have it installed on the OS already.