mirror of
https://github.com/troglobit/editline.git
synced 2025-10-28 06:08:08 +08:00
Revert function pointers for rl_complete() and rl_list_possib() introduced in 0.2.2.
Instead merge afd8b4de9dca8ec6afc3 from http://github.com/heimdal/heimdal.git project. This lets rl_complete() and rl_list_possib() become wrapper functions calling a set of function pointers, set using rl_set_complete_func() and rl_set_list_possib_funct(). Each wrapper has a fallback to do filename completion, which in turn can be disabled by leaving out --enable-default-complete from the configure line. This change, admittedly quite intrusive for a library, is a better implementation in many ways. For one it is much more readable, but it also enables further adoption of other editline forks as well as a simpler implementation of GNU Readline function pointers rl_completion_entry_function and rl_attempted_completion_function at a later stage. My apologies to everyone for whom this change breaks backwards compatibility. For help on converting your code, please see examples/cli.c.
This commit is contained in:
@@ -115,8 +115,6 @@ const char *rl_readline_name;/* Set by calling program, for conditional pa
|
||||
|
||||
/* User definable callbacks. */
|
||||
char **(*rl_attempted_completion_function)(const char *token, int start, int end);
|
||||
char *(*rl_comlete)(char *token, int *match);
|
||||
int (*rl_list_possib)(char *token, char ***av);
|
||||
|
||||
/* Declarations. */
|
||||
static char *editinput(void);
|
||||
@@ -1018,20 +1016,6 @@ void rl_reset_terminal(char *p __attribute__((__unused__)))
|
||||
|
||||
void rl_initialize(void)
|
||||
{
|
||||
#ifdef CONFIG_DEFAULT_COMPLETE
|
||||
int done = 0;
|
||||
|
||||
if (!done)
|
||||
{
|
||||
if (!rl_complete)
|
||||
rl_complete = &default_rl_complete;
|
||||
|
||||
if (!rl_list_possib)
|
||||
rl_list_possib = &default_rl_list_possib;
|
||||
|
||||
done = 1;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
char *readline(const char *prompt)
|
||||
@@ -1155,10 +1139,6 @@ static el_status_t c_possible(void)
|
||||
char *word;
|
||||
int ac;
|
||||
|
||||
if (!rl_list_possib) {
|
||||
return ring_bell();
|
||||
}
|
||||
|
||||
word = find_word();
|
||||
ac = rl_list_possib((char *)word, (char ***)&av);
|
||||
if (word)
|
||||
@@ -1171,6 +1151,7 @@ static el_status_t c_possible(void)
|
||||
|
||||
return CSmove;
|
||||
}
|
||||
|
||||
return ring_bell();
|
||||
}
|
||||
|
||||
@@ -1182,10 +1163,6 @@ static el_status_t c_complete(void)
|
||||
int unique;
|
||||
el_status_t s = 0;
|
||||
|
||||
if (!rl_complete) {
|
||||
return ring_bell();
|
||||
}
|
||||
|
||||
word = find_word();
|
||||
p = (char *)rl_complete((char *)word, &unique);
|
||||
if (word)
|
||||
|
||||
Reference in New Issue
Block a user