static cb_ret_t view_handle_key (WDiff *view, int c) { struct display_file *lf = &view->df[view->ord]; struct display_file *rf = &view->df[view->ord ^ 1]; c = convert_from_input_c(c); switch (c) { case 'l': view->display_numbers ^= 1; view->new_frame = 1; return MSG_HANDLED; case 'f': view->full ^= 1; view->new_frame = 1; return MSG_HANDLED; case '=': /* XXX testing only */ if (!view->full) { view->bias = 0; view->new_frame = 1; } return MSG_HANDLED; case '>': /* XXX testing only */ if (!view->full) { view_compute_split(view, 1); view->new_frame = 1; } return MSG_HANDLED; case '<': /* XXX testing only */ if (!view->full) { view_compute_split(view, -1); view->new_frame = 1; } return MSG_HANDLED; case '+': if (view->subtract) { view->subtract--; view->new_frame = 1; } return MSG_HANDLED; case '-': view->subtract++; view->new_frame = 1; return MSG_HANDLED; case '1': lf->move = 1; rf->move ^= 1; return MSG_HANDLED; case '2': lf->move ^= 1; rf->move = 1; return MSG_HANDLED; case XCTRL('u'): { view->ord ^= 1; return MSG_HANDLED; } case XCTRL('r'): view_redo(view); return MSG_HANDLED; case 'n': find_next_hunk(view); return MSG_HANDLED; case 'p': find_prev_hunk(view); return MSG_HANDLED; case KEY_DC: view->last_found = -1; return MSG_HANDLED; case KEY_F(4): view_edit(view, view->ord); return MSG_HANDLED; case KEY_F(14): view_edit(view, view->ord ^ 1); return MSG_HANDLED; case KEY_F(17): view_search(view, 1); return MSG_HANDLED; case KEY_HOME: case ALT ('<'): case KEY_M_CTRL | KEY_PPAGE: view->last_found = -1; if (lf->move) lf->offs = 0; if (rf->move) rf->offs = 0; return MSG_HANDLED; case KEY_END: case ALT ('>'): case KEY_M_CTRL | KEY_NPAGE: view->last_found = -1; if (lf->move) lf->offs = view->max - 1; if (rf->move) rf->offs = view->max - 1; return MSG_HANDLED; case KEY_UP: if (lf->move) lf->offs -= view->nbytes; if (rf->move) rf->offs -= view->nbytes; return MSG_HANDLED; case KEY_DOWN: if (lf->move) lf->offs += view->nbytes; if (rf->move) rf->offs += view->nbytes; return MSG_HANDLED; case KEY_NPAGE: if (lf->move) lf->offs += view->pbytes; if (rf->move) rf->offs += view->pbytes; return MSG_HANDLED; case KEY_PPAGE: if (lf->move) lf->offs -= view->pbytes; if (rf->move) rf->offs -= view->pbytes; return MSG_HANDLED; case KEY_LEFT: if (lf->move) lf->offs--; if (rf->move) rf->offs--; return MSG_HANDLED; case KEY_RIGHT: if (lf->move) lf->offs++; if (rf->move) rf->offs++; return MSG_HANDLED; case KEY_M_CTRL | KEY_LEFT: if (lf->move) lf->offs -= 16; if (rf->move) rf->offs -= 16; return MSG_HANDLED; case KEY_M_CTRL | KEY_RIGHT: if (lf->move) lf->offs += 16; if (rf->move) rf->offs += 16; return MSG_HANDLED; case XCTRL('o'): view_other_cmd(); return MSG_HANDLED; case 't': diff_view(view->file[0], view->file[1]); return MSG_HANDLED; case 'q': case ESC_CHAR: view->view_quit = 1; return MSG_HANDLED; case '\n': return MSG_HANDLED; #ifdef HAVE_CHARSET case XCTRL ('t'): do_select_codepage (); view_update (view); return MSG_HANDLED; #endif /* HAVE_CHARSET */ } /* Key not used */ return MSG_NOT_HANDLED; }
void mcview_select_encoding (mcview_t * view) { if (do_select_codepage ()) mcview_set_codeset (view); }