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_render;
|
||||
extern WINDOW *win_b;
|
||||
extern WINDOW *win_m;
|
||||
extern dir mid_dir;
|
||||
|
||||
extern unsigned int terminal_height;
|
||||
@@ -356,13 +359,93 @@ void paste(){
|
||||
TODO;
|
||||
}
|
||||
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(){
|
||||
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(){
|
||||
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(){
|
||||
TODO;
|
||||
|
||||
Reference in New Issue
Block a user