From: Eric Andersen Date: Fri, 16 Feb 2001 20:09:17 +0000 (-0000) Subject: Commit Vladimir's latest cmdedit. I modified it slightly to ensure X-Git-Tag: 0_50~210 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=6faae7deb4b88dccffb7dbbf267315cb7bbc0af9;p=oweals%2Fbusybox.git Commit Vladimir's latest cmdedit. I modified it slightly to ensure parse_prompt() would be called before cmdedit_init(), since cmdedit_init() calls cmdedit_setwidth() which uses cmdedit_prmt_len, which is set by parse_prompt(). Also, added a mod, so very narrow terminals should now wrap properly... This is working very nicely for me -- Vladimir has done some very good work. --- diff --git a/cmdedit.c b/cmdedit.c index 6a53c12f6..6fd80fd21 100644 --- a/cmdedit.c +++ b/cmdedit.c @@ -30,7 +30,7 @@ */ -#define TEST +//#define TEST #ifndef TEST @@ -555,6 +555,9 @@ static void clean_up_and_die(int sig) static void cmdedit_setwidth(int w, int redraw_flg) { cmdedit_termw = cmdedit_prmt_len + 2; + if (w <= cmdedit_termw) { + cmdedit_termw = cmdedit_termw % w; + } if (w > cmdedit_termw) { cmdedit_termw = w; @@ -567,10 +570,7 @@ static void cmdedit_setwidth(int w, int redraw_flg) redraw((new_y >= cmdedit_y ? new_y : cmdedit_y), len - cursor); fflush(stdout); } - } else { - error_msg("\n*** Error: minimum screen width is %d", - cmdedit_termw); - } + } } extern void cmdedit_init(void) @@ -1234,9 +1234,10 @@ extern void cmdedit_read_input(char *prompt, char command[BUFSIZ]) setTermSettings(inputFd, (void *) &new_settings); handlers_sets |= SET_RESET_TERM; - cmdedit_init(); /* Print out the command prompt */ parse_prompt(prompt); + /* Now initialize things */ + cmdedit_init(); while (1) { diff --git a/lash.c b/lash.c index 9519538dc..76ef16a55 100644 --- a/lash.c +++ b/lash.c @@ -854,10 +854,9 @@ static int get_command(FILE * source, char *command) ** atexit() handlers and other unwanted stuff to our ** child processes (rob@sysgo.de) */ - cmdedit_init(); cmdedit_read_input(prompt_str, command); - free(prompt_str); cmdedit_terminate(); + free(prompt_str); return 0; #else fputs(prompt_str, stdout); diff --git a/sh.c b/sh.c index 9519538dc..76ef16a55 100644 --- a/sh.c +++ b/sh.c @@ -854,10 +854,9 @@ static int get_command(FILE * source, char *command) ** atexit() handlers and other unwanted stuff to our ** child processes (rob@sysgo.de) */ - cmdedit_init(); cmdedit_read_input(prompt_str, command); - free(prompt_str); cmdedit_terminate(); + free(prompt_str); return 0; #else fputs(prompt_str, stdout); diff --git a/shell/cmdedit.c b/shell/cmdedit.c index 6a53c12f6..6fd80fd21 100644 --- a/shell/cmdedit.c +++ b/shell/cmdedit.c @@ -30,7 +30,7 @@ */ -#define TEST +//#define TEST #ifndef TEST @@ -555,6 +555,9 @@ static void clean_up_and_die(int sig) static void cmdedit_setwidth(int w, int redraw_flg) { cmdedit_termw = cmdedit_prmt_len + 2; + if (w <= cmdedit_termw) { + cmdedit_termw = cmdedit_termw % w; + } if (w > cmdedit_termw) { cmdedit_termw = w; @@ -567,10 +570,7 @@ static void cmdedit_setwidth(int w, int redraw_flg) redraw((new_y >= cmdedit_y ? new_y : cmdedit_y), len - cursor); fflush(stdout); } - } else { - error_msg("\n*** Error: minimum screen width is %d", - cmdedit_termw); - } + } } extern void cmdedit_init(void) @@ -1234,9 +1234,10 @@ extern void cmdedit_read_input(char *prompt, char command[BUFSIZ]) setTermSettings(inputFd, (void *) &new_settings); handlers_sets |= SET_RESET_TERM; - cmdedit_init(); /* Print out the command prompt */ parse_prompt(prompt); + /* Now initialize things */ + cmdedit_init(); while (1) { diff --git a/shell/lash.c b/shell/lash.c index 9519538dc..76ef16a55 100644 --- a/shell/lash.c +++ b/shell/lash.c @@ -854,10 +854,9 @@ static int get_command(FILE * source, char *command) ** atexit() handlers and other unwanted stuff to our ** child processes (rob@sysgo.de) */ - cmdedit_init(); cmdedit_read_input(prompt_str, command); - free(prompt_str); cmdedit_terminate(); + free(prompt_str); return 0; #else fputs(prompt_str, stdout);