implementation of all 3 search functions
This commit is contained in:
@@ -13,6 +13,9 @@
|
|||||||
|
|
||||||
|
|
||||||
extern pthread_mutex_t mutex_mid;
|
extern pthread_mutex_t mutex_mid;
|
||||||
|
extern pthread_mutex_t mutex_render;
|
||||||
|
extern WINDOW *win_b;
|
||||||
|
extern WINDOW *win_m;
|
||||||
extern dir mid_dir;
|
extern dir mid_dir;
|
||||||
|
|
||||||
extern unsigned int terminal_height;
|
extern unsigned int terminal_height;
|
||||||
@@ -356,13 +359,93 @@ void paste(){
|
|||||||
TODO;
|
TODO;
|
||||||
}
|
}
|
||||||
void search(){
|
void search(){
|
||||||
TODO;
|
echo();
|
||||||
|
unsigned long i;
|
||||||
|
for (i = 0; i < terminal_width -1; i++) {
|
||||||
|
mvwaddch(win_b, 0, i, ' ');
|
||||||
|
}
|
||||||
|
mvwaddch(win_b, 0, 0, '/');
|
||||||
|
|
||||||
|
curs_set(1);
|
||||||
|
echo();
|
||||||
|
|
||||||
|
timeout(-1); /* negative numbers block until enter is pressed */
|
||||||
|
|
||||||
|
unsigned int pass = 0;
|
||||||
|
char ch;
|
||||||
|
char err = 0;
|
||||||
|
|
||||||
|
wmove(win_b, 0, 1);
|
||||||
|
while(1) {
|
||||||
|
ch = wgetch(win_b);
|
||||||
|
if (ch == '\n') {
|
||||||
|
err = 0;
|
||||||
|
break;
|
||||||
|
} else if (ch == '\t') { /* tab */
|
||||||
|
memcpy(search_buffer + pass, mid_dir.current_file->file_name, strlen(mid_dir.current_file->file_name));
|
||||||
|
mvwaddstr(win_b, 0, pass+1, mid_dir.current_file->file_name);
|
||||||
|
pass += strlen(mid_dir.current_file->file_name);
|
||||||
|
} else if (ch == 127) { /* backspace */
|
||||||
|
if (pass > 0) {
|
||||||
|
pass--;
|
||||||
|
mvwdelch(win_b, 0, pass+1);
|
||||||
|
}
|
||||||
|
} else if (ch == 27) { /* esc key */
|
||||||
|
err = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (ch) {
|
||||||
|
mvwaddch(win_b, 0, pass+1, ch);
|
||||||
|
search_buffer[pass] = ch;
|
||||||
|
pass++;
|
||||||
|
|
||||||
|
unsigned long index = (mid_dir.current_file - mid_dir.file_list);
|
||||||
|
unsigned long x = getmaxx(win_b);
|
||||||
|
for (; &mid_dir.file_list[index] < mid_dir.file_list + mid_dir.file_count; index++) {
|
||||||
|
if (strstr(mid_dir.file_list[index].file_name, search_buffer)) {
|
||||||
|
mid_dir.current_file = &mid_dir.file_list[index];
|
||||||
|
|
||||||
|
/* re-render current dir */
|
||||||
|
pthread_mutex_lock(&mutex_render);
|
||||||
|
|
||||||
|
werase(win_m);
|
||||||
|
print_dir(win_m, 1, &mid_dir);
|
||||||
|
|
||||||
|
wnoutrefresh(win_m);
|
||||||
|
pthread_mutex_unlock(&mutex_render);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
search_buffer[pass] = '\0';
|
||||||
|
|
||||||
|
noecho();
|
||||||
|
curs_set(0);
|
||||||
|
|
||||||
|
status |= (STATUS_RUN_BACKEND);
|
||||||
|
|
||||||
}
|
}
|
||||||
void search_next(){
|
void search_next(){
|
||||||
TODO;
|
long index = (mid_dir.current_file - mid_dir.file_list) + 1;
|
||||||
|
for (; &mid_dir.file_list[index] < mid_dir.file_list + mid_dir.file_count; index++) {
|
||||||
|
if (strstr(mid_dir.file_list[index].file_name, search_buffer)) {
|
||||||
|
mid_dir.current_file = &mid_dir.file_list[index];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
status |= (STATUS_RUN_BACKEND);
|
||||||
}
|
}
|
||||||
void search_previous(){
|
void search_previous(){
|
||||||
TODO;
|
long index = (mid_dir.current_file - mid_dir.file_list) - 1;
|
||||||
|
for (; &mid_dir.file_list[index] >= mid_dir.file_list; index--) {
|
||||||
|
if (strstr(mid_dir.file_list[index].file_name, search_buffer)) {
|
||||||
|
mid_dir.current_file = &mid_dir.file_list[index];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
status |= (STATUS_RUN_BACKEND);
|
||||||
}
|
}
|
||||||
void jmp_file_index(){
|
void jmp_file_index(){
|
||||||
TODO;
|
TODO;
|
||||||
|
|||||||
Reference in New Issue
Block a user