From 0e1e4e76ddae605f4d587bb7097f7bd86aa6ef16 Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Sat, 25 Feb 2023 23:01:53 +0100 Subject: [PATCH] correct edit function --- calc.c | 20 ++++++++++++++++++++ program.c | 7 ++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/calc.c b/calc.c index bd816b9..2c5ae63 100644 --- a/calc.c +++ b/calc.c @@ -81,6 +81,23 @@ char *generator (const char *text, int state) return NULL; } +/* edit line */ +char *edit_line = NULL; +int edit_hook () +{ + static int state = 0; + if (edit_line) { + if (state == 0) { + state = 1; + } else { + state = 0; + free (edit_line); + edit_line = NULL; + } + } + return rl_insert_text (edit_line); +} + /* main function */ int main (int argc, char *argv[]) @@ -161,6 +178,9 @@ int main (int argc, char *argv[]) completion_list = generate_completion_list (); rl_attempted_completion_function = completion; + /* startup hook */ + rl_startup_hook = edit_hook; + /* read from input stream */ while (1) { diff --git a/program.c b/program.c index 70ce6c1..a178018 100644 --- a/program.c +++ b/program.c @@ -141,6 +141,7 @@ void list () void edit (int id) { + extern char *edit_line; int n = lookfor_program (id); if (n == -1) { VERBOSE (WARNING, fprintf (stdout, "error unknown program (%d)\n", id)); @@ -148,7 +149,11 @@ void edit (int id) } /* set string program */ - fprintf (stdout, "edit: %s\n", programs[n]->string); + if (edit_line) { + free (edit_line); + } + edit_line = strdup (programs[n]->string); + //fprintf (stdout, "edit: %s\n", programs[n]->string); } void savestring (int id, char *string) -- 2.30.2