Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Support API to save/load history on file

  • Loading branch information...
commit ce845468b084992ab626ca47c83fa6f14b23d59b 1 parent 28884b5
@antirez authored
Showing with 42 additions and 0 deletions.
  1. +2 −0  Makefile
  2. +2 −0  example.c
  3. +36 −0 linenoise.c
  4. +2 −0  linenoise.h
View
2  Makefile
@@ -1,3 +1,5 @@
+linenoise_example: linenoise.h linenoise.c
+
linenoise_example: linenoise.c example.c
$(CC) -Wall -W -Os -g -o linenoise_example linenoise.c example.c
View
2  example.c
@@ -5,10 +5,12 @@
int main(void) {
char *line;
+ linenoiseHistoryLoad("history.txt"); /* Load the history at startup */
while((line = linenoise("hello> ")) != NULL) {
if (line[0] != '\0') {
printf("echo: '%s'\n", line);
linenoiseHistoryAdd(line);
+ linenoiseHistorySave("history.txt"); /* Save every new entry */
}
free(line);
}
View
36 linenoise.c
@@ -431,3 +431,39 @@ int linenoiseHistorySetMaxLen(int len) {
history_len = history_max_len;
return 1;
}
+
+/* Save the history in the specified file. On success 0 is returned
+ * otherwise -1 is returned. */
+int linenoiseHistorySave(char *filename) {
+ FILE *fp = fopen(filename,"w");
+ int j;
+
+ if (fp == NULL) return -1;
+ for (j = 0; j < history_len; j++)
+ fprintf(fp,"%s\n",history[j]);
+ fclose(fp);
+ return 0;
+}
+
+/* Load the history from the specified file. If the file does not exist
+ * zero is returned and no operation is performed.
+ *
+ * If the file exists and the operation succeeded 0 is returned, otherwise
+ * on error -1 is returned. */
+int linenoiseHistoryLoad(char *filename) {
+ FILE *fp = fopen(filename,"r");
+ char buf[LINENOISE_MAX_LINE];
+
+ if (fp == NULL) return -1;
+
+ while (fgets(buf,LINENOISE_MAX_LINE,fp) != NULL) {
+ char *p;
+
+ p = strchr(buf,'\r');
+ if (!p) p = strchr(buf,'\n');
+ if (p) *p = '\0';
+ linenoiseHistoryAdd(buf);
+ }
+ fclose(fp);
+ return 0;
+}
View
2  linenoise.h
@@ -37,5 +37,7 @@
char *linenoise(const char *prompt);
int linenoiseHistoryAdd(const char *line);
int linenoiseHistorySetMaxLen(int len);
+int linenoiseHistorySave(char *filename);
+int linenoiseHistoryLoad(char *filename);
#endif /* __LINENOISE_H */
Please sign in to comment.
Something went wrong with that request. Please try again.