Change rl_complete() and rl_list_possib() to be function pointers instead.

This is a much cleaner design and also works with or without the configure
--enable-default-complete option.

See the examples for details.
This commit is contained in:
Joachim Nilsson
2008-10-02 09:09:09 +02:00
parent 5c9f0047bb
commit 62e900a061
11 changed files with 75 additions and 33 deletions

View File

@@ -5,6 +5,3 @@ AM_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/include
# TODO: Port "fileman" example from BSD editline
noinst_PROGRAMS = testit cli
testit_SOURCES = testit.c
#fileman_SOURCES = fileman.c

View File

@@ -45,8 +45,8 @@ cli_SOURCES = cli.c
cli_OBJECTS = cli.$(OBJEXT)
cli_LDADD = $(LDADD)
cli_DEPENDENCIES = $(top_builddir)/src/libedit.a
am_testit_OBJECTS = testit.$(OBJEXT)
testit_OBJECTS = $(am_testit_OBJECTS)
testit_SOURCES = testit.c
testit_OBJECTS = testit.$(OBJEXT)
testit_LDADD = $(LDADD)
testit_DEPENDENCIES = $(top_builddir)/src/libedit.a
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
@@ -56,8 +56,8 @@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = cli.c $(testit_SOURCES)
DIST_SOURCES = cli.c $(testit_SOURCES)
SOURCES = cli.c testit.c
DIST_SOURCES = cli.c testit.c
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -149,7 +149,6 @@ top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = foreign
LDADD = $(top_builddir)/src/libedit.a
AM_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/include
testit_SOURCES = testit.c
all: all-am
.SUFFIXES:
@@ -389,7 +388,6 @@ uninstall-am:
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
uninstall-am
#fileman_SOURCES = fileman.c
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@@ -1,6 +1,4 @@
/* The "testit" micro shell, now with command completion.
* To be able to run, don't "--enable-default-complete".
*/
/* Custom CLI command completion. */
#include "editline.h"
#include <string.h>
@@ -12,7 +10,7 @@ char *list[] = {
** Attempt to complete the pathname, returning an allocated copy.
** Fill in *unique if we completed it, or set it to 0 if ambiguous.
*/
char *rl_complete(char *token, int *match)
char *my_rl_complete(char *token, int *match)
{
int i;
int index = -1;
@@ -43,7 +41,7 @@ char *rl_complete(char *token, int *match)
/*
** Return all possible completions.
*/
int rl_list_possib(char *token, char ***av)
int my_rl_list_possib(char *token, char ***av)
{
int i, num, total = 0;
char **copy;
@@ -69,6 +67,10 @@ int main(int ac, char *av[])
char *line;
char *prompt = "cli> ";
/* Setup callbacks */
rl_complete = &my_rl_complete;
rl_list_possib = &my_rl_list_possib;
while ((line = readline(prompt)) != NULL) {
(void)printf("\t\t\t|%s|\n", line);
free(line);