X-Git-Url: https://git.distorted.org.uk/~mdw/xtoys/blobdiff_plain/715c9c3948c4ac0002faafe1c4713a2ad107562c..refs/tags/1.3.0:/xgetline.c diff --git a/xgetline.c b/xgetline.c index 96c9e46..1e060cc 100644 --- a/xgetline.c +++ b/xgetline.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: xgetline.c,v 1.7 1998/12/11 09:53:02 mdw Exp $ + * $Id: xgetline.c,v 1.11 1999/08/20 07:30:33 mdw Exp $ * * Fetch a line of text from the user * @@ -29,6 +29,18 @@ /*----- Revision history --------------------------------------------------* * * $Log: xgetline.c,v $ + * Revision 1.11 1999/08/20 07:30:33 mdw + * Miscellaneous changes, mostly concerning options parsing. + * + * Revision 1.10 1999/05/21 22:09:19 mdw + * Take advantage of new dynamic string macros. + * + * Revision 1.9 1999/05/05 18:54:37 mdw + * Keep blank lines out of the history list. + * + * Revision 1.8 1998/12/16 19:58:53 mdw + * Stop the dropdown list from dropping down when you press enter. + * * Revision 1.7 1998/12/11 09:53:02 mdw * Updates for mLib/mgLib. Support history files for recalling past * entries, using a drop-down list. @@ -199,19 +211,19 @@ int main(int argc, char *argv[]) /* --- Long options structure --- */ static struct option opt[] = { - { "help", 0, 0, 'h' }, - { "usage", 0, 0, 'u' }, - { "version", 0, 0, 'v' }, - { "title", required_argument, 0, 't' }, - { "prompt", required_argument, 0, 'p' }, - { "default", required_argument, 0, 'd' }, - { "password", 0, 0, 'i' }, - { "invisible", 0, 0, 'i' }, - { "history", required_argument, 0, 'H' }, - { "list", required_argument, 0, 'l' }, - { "histmax", required_argument, 0, 'm' }, - { "no-choice", 0, 0, 'n' }, - { 0, 0, 0, 0 } + { "help", 0, 0, 'h' }, + { "usage", 0, 0, 'u' }, + { "version", 0, 0, 'v' }, + { "title", OPTF_ARGREQ, 0, 't' }, + { "prompt", OPTF_ARGREQ, 0, 'p' }, + { "default", OPTF_ARGREQ, 0, 'd' }, + { "password", 0, 0, 'i' }, + { "invisible", 0, 0, 'i' }, + { "history", OPTF_ARGREQ, 0, 'H' }, + { "list", OPTF_ARGREQ, 0, 'l' }, + { "histmax", OPTF_ARGREQ, 0, 'm' }, + { "no-choice", 0, 0, 'n' }, + { 0, 0, 0, 0 } }; int i; @@ -228,26 +240,26 @@ int main(int argc, char *argv[]) version(stdout); fputs("\n", stdout); usage(stdout); - fputs( -"\n" -"Pops up a small window requesting input from a user, and echoes the\n" -"response to stdout, where it can be collected by a shell script.\n" -"\n" -"Options available are:\n" -"\n" -"-h, --help Display this help text\n" -"-u, --usage Display a short usage summary\n" -"-v, --version Display the program's version number\n" -"\n" -"-i, --invisible\t Don't show the user's string as it's typed\n" -"-t, --title=TITLE Set the window's title string\n" -"-p, --prompt=PROMPT Set the window's prompt string\n" -"-d, --default=DEFAULT Set the default string already in the window\n" -"\n" -"-l, --list=FILE Read FILE into a drop-down list\n" -"-n, --no-choice No free text input: must choose item from list\n" -"-H, --history=FILE As for `--list', but update with new string\n" -"-m, --histmax=MAX Maximum number of items written back to file\n", + fputs("\ +\n\ +Pops up a small window requesting input from a user, and echoes the\n\ +response to stdout, where it can be collected by a shell script.\n\ +\n\ +Options available are:\n\ +\n\ +-h, --help Display this help text\n\ +-u, --usage Display a short usage summary\n\ +-v, --version Display the program's version number\n\ +\n\ +-i, --invisible Don't show the user's string as it's typed\n\ +-t, --title=TITLE Set the window's title string\n\ +-p, --prompt=PROMPT Set the window's prompt string\n\ +-d, --default=DEFAULT Set the default string already in the window\n\ +\n\ +-l, --list=FILE Read FILE into a drop-down list\n\ +-n, --no-choice No free text input: must choose item from list\n\ +-H, --history=FILE As for `--list', but update with new string\n\ +-m, --histmax=MAX Maximum number of items written back to file\n", stdout); exit(0); break; @@ -341,13 +353,13 @@ int main(int argc, char *argv[]) hist = 0; if (fp) { - dstr d; + dstr d = DSTR_INIT; - dstr_create(&d); while (dstr_putline(&d, fp) != EOF) { hist = g_list_append(hist, xstrdup(d.buf)); - dstr_destroy(&d); + DRESET(&d); } + dstr_destroy(&d); fclose(fp); } @@ -366,6 +378,7 @@ int main(int argc, char *argv[]) } gtk_combo_set_case_sensitive(GTK_COMBO(combo), 1); gtk_combo_set_use_arrows_always(GTK_COMBO(combo), 1); + gtk_combo_disable_activate(GTK_COMBO(combo)); if (strcmp(dfl, "@") == 0) gtk_entry_set_text(GTK_ENTRY(entry), hist ? (char *)hist->data : ""); else @@ -426,10 +439,11 @@ int main(int argc, char *argv[]) /* --- If history is enabled, output a new history file --- * * - * If the first entry was accepted verbatim, don't bother. + * If the first entry was accepted verbatim, or if the entry is a blank + * line, don't bother. */ - if (f & f_history && !(hist && strcmp(p, hist->data) == 0)) { + if (f & f_history && *p && !(hist && strcmp(p, hist->data) == 0)) { int fd; FILE *fp; int i; @@ -446,7 +460,7 @@ int main(int argc, char *argv[]) fputc('\n', fp); for (i = 1, g = hist; (histmax < 1 || i < histmax) && g; g = g->next) { - if (strcmp(g->data, p) != 0) { + if (*(char *)g->data && strcmp(g->data, p) != 0) { fputs(g->data, fp); fputc('\n', fp); i++;