mirror of
https://github.com/antirez/linenoise.git
synced 2025-11-16 12:34:48 +00:00
Support API to save/load history on file
This commit is contained in:
2
Makefile
2
Makefile
@@ -1,3 +1,5 @@
|
|||||||
|
linenoise_example: linenoise.h linenoise.c
|
||||||
|
|
||||||
linenoise_example: linenoise.c example.c
|
linenoise_example: linenoise.c example.c
|
||||||
$(CC) -Wall -W -Os -g -o linenoise_example linenoise.c example.c
|
$(CC) -Wall -W -Os -g -o linenoise_example linenoise.c example.c
|
||||||
|
|
||||||
|
|||||||
@@ -5,10 +5,12 @@
|
|||||||
int main(void) {
|
int main(void) {
|
||||||
char *line;
|
char *line;
|
||||||
|
|
||||||
|
linenoiseHistoryLoad("history.txt"); /* Load the history at startup */
|
||||||
while((line = linenoise("hello> ")) != NULL) {
|
while((line = linenoise("hello> ")) != NULL) {
|
||||||
if (line[0] != '\0') {
|
if (line[0] != '\0') {
|
||||||
printf("echo: '%s'\n", line);
|
printf("echo: '%s'\n", line);
|
||||||
linenoiseHistoryAdd(line);
|
linenoiseHistoryAdd(line);
|
||||||
|
linenoiseHistorySave("history.txt"); /* Save every new entry */
|
||||||
}
|
}
|
||||||
free(line);
|
free(line);
|
||||||
}
|
}
|
||||||
|
|||||||
36
linenoise.c
36
linenoise.c
@@ -431,3 +431,39 @@ int linenoiseHistorySetMaxLen(int len) {
|
|||||||
history_len = history_max_len;
|
history_len = history_max_len;
|
||||||
return 1;
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -37,5 +37,7 @@
|
|||||||
char *linenoise(const char *prompt);
|
char *linenoise(const char *prompt);
|
||||||
int linenoiseHistoryAdd(const char *line);
|
int linenoiseHistoryAdd(const char *line);
|
||||||
int linenoiseHistorySetMaxLen(int len);
|
int linenoiseHistorySetMaxLen(int len);
|
||||||
|
int linenoiseHistorySave(char *filename);
|
||||||
|
int linenoiseHistoryLoad(char *filename);
|
||||||
|
|
||||||
#endif /* __LINENOISE_H */
|
#endif /* __LINENOISE_H */
|
||||||
|
|||||||
Reference in New Issue
Block a user