mirror of https://github.com/Sam1301/Lite.git
Incremental search ⚡
This commit is contained in:
parent
4d44a139c8
commit
0a678b5400
25
editor.c
25
editor.c
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue