Incremental search

This commit is contained in:
Saumya Bhatnagar 2018-06-01 14:37:19 +05:30
parent 4d44a139c8
commit 0a678b5400
2 changed files with 17 additions and 8 deletions

BIN
editor

Binary file not shown.

View File

@ -66,7 +66,7 @@ struct editorConfig {
/*** prototypes ***/
void editorSetStatusMessage(const char *formatstr, ...);
char* editorPrompt(char *prompt);
char* editorPrompt(char *prompt, void (*callback)(char* query, int cur_key));
/*** struct append buffer ***/
@ -429,7 +429,7 @@ char* editorRowsToString(int *len) {
void editorSave() {
if (E.filename == NULL) {
E.filename = editorPrompt("Save as: %s (ESC to cancel)");
E.filename = editorPrompt("Save as: %s (ESC to cancel)", NULL);
if (E.filename == NULL) {
editorSetStatusMessage("Save aborted");
return;
@ -457,10 +457,9 @@ void editorSave() {
/*** find ***/
void editorFind() {
char *query = editorPrompt("Search: %s (ESC to cancel)");
if (query == NULL) {
return ;
void editorFindCallback(char* query, int cur_key) {
if (cur_key == '\r' || cur_key == '\x1b') {
return;
}
for (int i = 0 ; i < E.numrows ; i++) {
@ -477,8 +476,14 @@ void editorFind() {
break;
}
}
}
free(query);
void editorFind() {
char *query = editorPrompt("Search: %s (ESC to cancel)", editorFindCallback);
if (query) {
free(query);
}
}
/*** output ***/
@ -725,7 +730,7 @@ void editorProcessKey() {
quit_times = EDITOR_QUIT_TIMES;
}
char* editorPrompt(char *prompt) {
char* editorPrompt(char *prompt, void (*callback)(char* query, int cur_key)) {
size_t bufsize = 128;
char *buf = malloc(bufsize);
@ -745,10 +750,12 @@ char* editorPrompt(char *prompt) {
} else if (c == '\x1b') {
editorSetStatusMessage("");
free(buf);
if (callback) callback(buf, c);
return NULL;
} else if (c == '\r') {
if (buflen != 0) {
editorSetStatusMessage("");
if (callback) callback(buf, c);
return buf;
}
} else if (!iscntrl(c) && c < 128) {
@ -759,6 +766,8 @@ char* editorPrompt(char *prompt) {
buf[buflen++] = c;
buf[buflen] = '\0';
}
if (callback) callback(buf, c);
}
}