From: antirez Date: Fri, 8 Feb 2013 11:24:07 +0000 (+0100) Subject: Example app improved. X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=36466edd4a915293ac2b2e4f3f2ed97119f3e988;p=linenoise.git Example app improved. --- diff --git a/example.c b/example.c index cb51a0a..b436ed3 100644 --- a/example.c +++ b/example.c @@ -1,5 +1,6 @@ #include #include +#include #include "linenoise.h" #ifndef NO_COMPLETION @@ -11,18 +12,54 @@ void completion(const char *buf, linenoiseCompletions *lc) { } #endif -int main(void) { +int main(int argc, char *argv[]) { char *line; +#ifdef HAVE_MULTILINE + /* Note: multiline support has not yet been integrated */ + char *prgname = argv[0]; + + /* Parse options, with --multiline we enable multi line editing. */ + while(argc > 1) { + argc--; + argv++; + if (!strcmp(*argv,"--multiline")) { + linenoiseSetMultiLine(1); + printf("Multi-line mode enabled.\n"); + } else { + fprintf(stderr, "Usage: %s [--multiline]\n", prgname); + exit(1); + } + } +#endif #ifndef NO_COMPLETION + /* Set the completion callback. This will be called every time the + * user uses the key. */ linenoiseSetCompletionCallback(completion); #endif + + /* Load history from file. The history file is just a plain text file + * where entries are separated by newlines. */ linenoiseHistoryLoad("history.txt"); /* Load the history at startup */ + + /* Now this is the main loop of the typical linenoise-based application. + * The call to linenoise() will block as long as the user types something + * and presses enter. + * + * The typed string is returned as a malloc() allocated string by + * linenoise, so the user needs to free() it. */ while((line = linenoise("hello> ")) != NULL) { - if (line[0] != '\0') { + /* Do something with the string. */ + if (line[0] != '\0' && line[0] != '/') { printf("echo: '%s'\n", line); - linenoiseHistoryAdd(line); - linenoiseHistorySave("history.txt"); /* Save every new entry */ + linenoiseHistoryAdd(line); /* Add to the history. */ + linenoiseHistorySave("history.txt"); /* Save the history on disk. */ + } else if (!strncmp(line,"/historylen",11)) { + /* The "/historylen" command will change the history len. */ + int len = atoi(line+11); + linenoiseHistorySetMaxLen(len); + } else if (line[0] == '/') { + printf("Unreconized command: %s\n", line); } free(line); }