int filedlg_recv_char(struct filedlg *fd, int key, char *file) { int height, width; /* Initialize size variables */ getmaxyx(fd->win, height, width); filedlg_display(fd); switch (key) { case 'q': return -1; /* Vertical scrolling */ case CGDB_KEY_DOWN: case 'j': filedlg_vscroll(fd, 1); break; case CGDB_KEY_NPAGE: case CGDB_KEY_CTRL_F: /* VI-style page down */ filedlg_vscroll(fd, height - 1); break; case CGDB_KEY_UP: case 'k': filedlg_vscroll(fd, -1); break; case CGDB_KEY_PPAGE: case CGDB_KEY_CTRL_B: /* VI-style page up */ filedlg_vscroll(fd, -(height - 1)); break; /* Horizontal scrolling */ case CGDB_KEY_RIGHT: case 'l': filedlg_hscroll(fd, 1); break; case CGDB_KEY_LEFT: case 'h': filedlg_hscroll(fd, -1); break; case '/': case '?': regex_direction = ('/' == key); /* Capturing regular expressions */ filedlg_search_regex_init(fd); capture_regex(fd); break; case 'n': filedlg_search_regex(fd, regex_line, 2, regex_direction, 1); break; case 'N': filedlg_search_regex(fd, regex_line, 2, !regex_direction, 1); break; /* User selected a file */ case '\n': case '\r': case CGDB_KEY_CTRL_M: strcpy(file, fd->buf->files[fd->buf->sel_line]); return 1; default: break; } filedlg_display(fd); return 0; }
int filedlg_recv_char(struct filedlg *fd, int key, char *file, int last_key_pressed) { /* Initialize size variables */ int height = swin_getmaxy(fd->win); filedlg_display(fd); switch (key) { case 'q': return -1; /* Vertical scrolling */ case CGDB_KEY_DOWN: case 'j': filedlg_vscroll(fd, 1); break; case CGDB_KEY_NPAGE: case CGDB_KEY_CTRL_F: /* VI-style page down */ filedlg_vscroll(fd, height - 1); break; case CGDB_KEY_CTRL_D: /* VI-style 1/2 page down */ filedlg_vscroll(fd, height / 2); break; case CGDB_KEY_CTRL_U: /* VI-style 1/2 page up */ filedlg_vscroll(fd, -height / 2); break; case CGDB_KEY_UP: case 'k': filedlg_vscroll(fd, -1); break; case CGDB_KEY_PPAGE: case CGDB_KEY_CTRL_B: /* VI-style page up */ filedlg_vscroll(fd, -(height - 1)); break; /* Horizontal scrolling */ case CGDB_KEY_RIGHT: case 'l': filedlg_hscroll(fd, 1); break; case CGDB_KEY_LEFT: case 'h': filedlg_hscroll(fd, -1); break; case '/': case '?': regex_direction = ('/' == key); /* Capturing regular expressions */ filedlg_search_regex_init(fd); capture_regex(fd); break; case 'n': filedlg_search_regex(fd, regex_line, 2, regex_direction, 1); break; case 'N': filedlg_search_regex(fd, regex_line, 2, !regex_direction, 1); break; /* User selected a file */ case '\n': case '\r': case CGDB_KEY_CTRL_M: strcpy(file, fd->buf->files[fd->buf->sel_line]); return 1; case 'g': /* beginning of file */ if (last_key_pressed == 'g') filedlg_set_sel_line(fd, 0); break; case 'G': { /* end of file, or a line number*/ int lineno = -1, result; result = cgdb_string_to_int(ibuf_get(fd->G_line_number), &lineno); if (result == 0) { filedlg_set_sel_line(fd, lineno -1); } break; } default: break; } /* Store digits into G_line_number for 'G' command. */ if (key >= '0' && key <= '9') { ibuf_addchar(fd->G_line_number, key); } else { ibuf_clear(fd->G_line_number); } filedlg_display(fd); return 0; }