2015-02-01 21:59:24 +08:00
|
|
|
Editline
|
|
|
|
========
|
|
|
|
[![Travis Status]][Travis] [![Coverity Status]][Coverity Scan]
|
2014-09-14 09:50:37 +08:00
|
|
|
|
2015-02-01 22:28:20 +08:00
|
|
|
|
|
|
|
Table of Contents
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
* [Introduction](#introduction)
|
|
|
|
* [API](#api)
|
|
|
|
* [Example](#example)
|
|
|
|
* [Build & Install](#build--install)
|
|
|
|
* [Origin & References](#origin--references)
|
|
|
|
|
|
|
|
|
2015-01-29 06:13:20 +08:00
|
|
|
Introduction
|
|
|
|
------------
|
2014-09-14 09:50:37 +08:00
|
|
|
|
2015-09-10 17:07:14 +08:00
|
|
|
This is a small [line editing][] library. It can be linked into almost
|
2015-02-01 22:28:20 +08:00
|
|
|
any program to provide command line editing and history functions. It
|
2015-09-10 17:07:14 +08:00
|
|
|
is call compatible with the [FSF readline][] library, but at a fraction
|
|
|
|
of the size, and as a result fewer features. It is also distributed
|
|
|
|
under a much more liberal [LICENSE][].
|
2014-09-14 09:50:37 +08:00
|
|
|
|
2015-01-29 06:13:20 +08:00
|
|
|
The small size (<30k), lack of dependencies (no ncurses needed!), and
|
|
|
|
the free license should make this library interesting to many embedded
|
|
|
|
developers.
|
2014-09-14 09:50:37 +08:00
|
|
|
|
2015-01-29 06:13:20 +08:00
|
|
|
Editline has several optional build-time features that can be enabled by
|
|
|
|
by supplying different options to the GNU configure script. See the
|
|
|
|
output from <kbd>configure --help</kbd> for details. In the `examples/`
|
|
|
|
directory you can find some small code snippets used for testing.
|
2014-09-14 09:50:37 +08:00
|
|
|
|
2015-09-10 17:07:14 +08:00
|
|
|
Editline is maintained collaboratively at [GitHub][].
|
2015-02-01 22:28:20 +08:00
|
|
|
|
2014-09-14 09:50:37 +08:00
|
|
|
|
2015-01-29 06:13:20 +08:00
|
|
|
API
|
|
|
|
---
|
2014-09-14 09:50:37 +08:00
|
|
|
|
2015-02-01 21:59:24 +08:00
|
|
|
Here is the interface to editline. It has a small compatibility layer
|
2015-09-10 17:07:14 +08:00
|
|
|
to [FSF readline][], which may not be entirely up-to-date.
|
2015-02-01 21:59:24 +08:00
|
|
|
|
|
|
|
```C
|
|
|
|
/* Editline specific global variables. */
|
2015-04-06 21:20:26 +08:00
|
|
|
int el_no_echo; /* Do not echo input characters */
|
2015-02-01 21:59:24 +08:00
|
|
|
int el_no_hist; /* Disable auto-save of and access to history,
|
|
|
|
* e.g. for password prompts or wizards */
|
2015-04-06 21:20:26 +08:00
|
|
|
int el_hist_size; /* Size of history scrollback buffer, default: 15 */
|
2015-02-01 21:59:24 +08:00
|
|
|
|
|
|
|
/* Editline specific functions. */
|
|
|
|
char * el_find_word(void);
|
|
|
|
void el_print_columns(int ac, char **av);
|
|
|
|
el_status_t el_ring_bell(void);
|
|
|
|
el_status_t el_del_char(void);
|
|
|
|
|
2015-04-06 21:20:26 +08:00
|
|
|
/* Callback function for key binding */
|
|
|
|
typedef el_status_t el_keymap_func_t(void);
|
|
|
|
|
|
|
|
/* Bind key to a callback, use CTL('f') to change Ctrl-F, for example */
|
2015-02-01 21:59:24 +08:00
|
|
|
el_status_t el_bind_key(int key, el_keymap_func_t function);
|
|
|
|
el_status_t el_bind_key_in_metamap(int key, el_keymap_func_t function);
|
|
|
|
|
|
|
|
/* For compatibility with FSF readline. */
|
|
|
|
int rl_point;
|
|
|
|
int rl_mark;
|
|
|
|
int rl_end;
|
|
|
|
int rl_inhibit_complete;
|
|
|
|
char *rl_line_buffer;
|
|
|
|
const char *rl_readline_name;
|
|
|
|
|
|
|
|
void rl_initialize(void);
|
|
|
|
void rl_reset_terminal(const char *terminal_name);
|
|
|
|
|
|
|
|
void rl_save_prompt(void);
|
|
|
|
void rl_restore_prompt(void);
|
|
|
|
void rl_set_prompt(const char *prompt);
|
|
|
|
|
|
|
|
void rl_clear_message(void);
|
|
|
|
void rl_forced_update_display(void);
|
|
|
|
|
|
|
|
/* Main function to use, saves history by default */
|
|
|
|
char *readline(const char *prompt);
|
|
|
|
|
|
|
|
/* Use to save a read line to history, when el_no_hist is set */
|
|
|
|
void add_history(const char *line);
|
|
|
|
|
|
|
|
/* Load and save editline history from/to a file. */
|
|
|
|
int read_history(const char *filename);
|
|
|
|
int write_history(const char *filename);
|
|
|
|
|
|
|
|
/* Magic completion API, see examples/cli.c for more info */
|
|
|
|
rl_complete_func_t *rl_set_complete_func(rl_complete_func_t *func);
|
|
|
|
rl_list_possib_func_t *rl_set_list_possib_func(rl_list_possib_func_t *func);
|
|
|
|
```
|
2014-09-14 09:50:37 +08:00
|
|
|
|
|
|
|
|
2015-01-29 06:13:20 +08:00
|
|
|
Example
|
|
|
|
-------
|
|
|
|
|
2015-02-01 21:59:24 +08:00
|
|
|
Here is a very brief example to illustrate how one can use Editline to
|
2015-04-06 21:20:26 +08:00
|
|
|
create a simple CLI. More examples are availble in the source tree.
|
2015-02-01 21:59:24 +08:00
|
|
|
|
|
|
|
```C
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
extern char *readline(char *prompt);
|
|
|
|
|
|
|
|
int main (void)
|
|
|
|
{
|
|
|
|
char *p;
|
|
|
|
|
|
|
|
while ((p = readline("CLI> ")) != NULL) {
|
|
|
|
puts(p);
|
|
|
|
free(p);
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
```
|
2015-01-29 06:13:20 +08:00
|
|
|
|
|
|
|
|
2015-02-01 22:28:20 +08:00
|
|
|
Build & Install
|
|
|
|
---------------
|
|
|
|
|
|
|
|
Editline was originally designed for older UNIX systems and Plan 9. The
|
|
|
|
current maintainer works exclusively on GNU/Linux systems, so it may use
|
|
|
|
GCC and GNU Make specific extensions here and there. This is not on
|
2015-09-10 17:07:14 +08:00
|
|
|
purpose and patches or pull requests to correct this are most welcome!
|
2015-02-01 22:28:20 +08:00
|
|
|
|
2015-09-10 17:07:14 +08:00
|
|
|
1. Configure editline with default features: <kbd>./configure</kbd>
|
|
|
|
2. Build the library and examples: <kbd>make all</kbd>
|
|
|
|
3. Install using <kbd>make install</kbd>
|
2015-02-01 22:28:20 +08:00
|
|
|
|
2015-09-10 17:07:14 +08:00
|
|
|
The `$DESTDIR` environment variable is honored at install. See
|
|
|
|
<kbd>./configure --help</kbd> for more options.
|
2015-02-01 22:28:20 +08:00
|
|
|
|
2015-01-29 06:13:20 +08:00
|
|
|
Origin & References
|
|
|
|
--------------------
|
|
|
|
|
2015-09-10 17:07:14 +08:00
|
|
|
This [line editing][] library was created by Simmule Turner and Rich Salz
|
2015-02-01 22:28:20 +08:00
|
|
|
in in 1992. It is distributed under a “C News-like” license, similar to
|
2015-09-10 17:07:14 +08:00
|
|
|
the [BSD license][]. For details, see the file [LICENSE][].
|
2015-01-29 06:13:20 +08:00
|
|
|
|
2015-09-10 17:07:14 +08:00
|
|
|
This version of the editline library is forked from the [Minix 3][] source
|
2015-02-01 21:59:24 +08:00
|
|
|
tree. Patches and bug fixes from the following forks, all based on the
|
|
|
|
original comp.sources.unix posting, have been merged:
|
2015-01-29 06:13:20 +08:00
|
|
|
|
2015-09-10 17:07:14 +08:00
|
|
|
* Debian [libeditline][]
|
|
|
|
* [Heimdal][]
|
|
|
|
* [Festival][] speech-tools
|
|
|
|
* [Steve Tell][]'s editline patches
|
2015-01-29 06:13:20 +08:00
|
|
|
|
2015-02-01 21:59:24 +08:00
|
|
|
The version numbering scheme today follows that of the Debian version,
|
2015-09-10 17:07:14 +08:00
|
|
|
which can be seen in the [CHANGELOG.md][]. The Debian version was
|
|
|
|
unknown to the current [maintainer][] for quite some time, so a
|
|
|
|
different name and different versioning scheme was used. In June 2009
|
|
|
|
this was changed to line up alongside Debian, the intent is to
|
|
|
|
eventually merge the efforts.
|
2015-02-01 21:59:24 +08:00
|
|
|
|
2015-09-10 17:07:14 +08:00
|
|
|
Outstanding issues are listed in the [TODO.md][] file.
|
2015-02-01 21:59:24 +08:00
|
|
|
|
2015-02-01 22:28:20 +08:00
|
|
|
[GitHub]: https://github.com/troglobit/editline
|
|
|
|
[line editing]: https://github.com/troglobit/editline/blob/master/doc/README
|
2015-02-01 21:59:24 +08:00
|
|
|
[maintainer]: http://troglobit.com
|
|
|
|
[LICENSE]: https://github.com/troglobit/editline/blob/master/LICENSE
|
2015-02-01 22:28:20 +08:00
|
|
|
[TODO.md]: https://github.com/troglobit/editline/blob/master/TODO.md
|
|
|
|
[CHANGELOG.md]: https://github.com/troglobit/editline/blob/master/CHANGELOG.md
|
2015-02-01 21:59:24 +08:00
|
|
|
[FSF readline]: http://www.gnu.org/software/readline/
|
|
|
|
[Minix 3]: http://www.minix3.org/
|
|
|
|
[BSD license]: http://en.wikipedia.org/wiki/BSD_licenses
|
|
|
|
[libeditline]: http://packages.qa.debian.org/e/editline.html
|
|
|
|
[Heimdal]: http://www.h5l.org
|
|
|
|
[Festival]: http://festvox.org/festival/
|
|
|
|
[Steve Tell]: http://www.cs.unc.edu/~tell/dist.html
|
|
|
|
[Travis]: https://travis-ci.org/troglobit/editline
|
|
|
|
[Travis Status]: https://travis-ci.org/troglobit/editline.png?branch=master
|
|
|
|
[Coverity Scan]: https://scan.coverity.com/projects/2982
|
|
|
|
[Coverity Status]: https://scan.coverity.com/projects/2982/badge.svg
|
2015-04-06 21:20:26 +08:00
|
|
|
|
|
|
|
<!--
|
|
|
|
-- Local Variables:
|
|
|
|
-- mode: markdown
|
|
|
|
-- End:
|
|
|
|
-->
|