struct cfdisk_menudesc *d;
size_t old;
- /* stop and begin/end fr vertical menus */
- if (cf->menu->vertical
- && (where < 0 || (size_t) where > cf->menu->nitems - 1))
- return;
-
- /* continue from begin/end */
- if (where < 0)
- where = cf->menu->nitems - 1;
- else if ((size_t) where > cf->menu->nitems - 1)
- where = 0;
+ /* stop and begin/end for vertical menus */
+ if (cf->menu->vertical) {
+ if (where < 0)
+ where = 0;
+ else if (where > (int) cf->menu->nitems - 1)
+ where = cf->menu->nitems - 1;
+ } else {
+ /* continue from begin/end */
+ if (where < 0)
+ where = cf->menu->nitems - 1;
+ else if ((size_t) where > cf->menu->nitems - 1)
+ where = 0;
+ }
if ((size_t) where == cf->menu->idx)
return;
static int ui_menu_move(struct cfdisk *cf, int key)
{
+ struct cfdisk_menu *m;
+
assert(cf);
assert(cf->menu);
- if (cf->menu->vertical)
+ m = cf->menu;
+
+ DBG(FRONTEND, dbgprint("ui: menu move key >%c<.", key));
+
+ if (m->vertical)
{
switch (key) {
case KEY_DOWN:
case '\016': /* ^N */
case 'j': /* Vi-like alternative */
- ui_menu_goto(cf, cf->menu->idx + 1);
+ ui_menu_goto(cf, m->idx + 1);
return 0;
case KEY_UP:
case '\020': /* ^P */
case 'k': /* Vi-like alternative */
- ui_menu_goto(cf, cf->menu->idx - 1);
+ ui_menu_goto(cf, (int) m->idx - 1);
return 0;
+ case KEY_PPAGE:
+ if (m->page_sz) {
+ ui_menu_goto(cf, (int) m->idx - m->page_sz);
+ return 0;
+ }
case KEY_HOME:
ui_menu_goto(cf, 0);
return 0;
+ case KEY_NPAGE:
+ if (m->page_sz) {
+ ui_menu_goto(cf, m->idx + m->page_sz);
+ return 0;
+ }
case KEY_END:
- ui_menu_goto(cf, cf->menu->nitems);
+ ui_menu_goto(cf, m->nitems);
return 0;
}
} else {
switch (key) {
case KEY_RIGHT:
case '\t':
- ui_menu_goto(cf, cf->menu->idx + 1);
+ ui_menu_goto(cf, m->idx + 1);
return 0;
case KEY_LEFT:
#ifdef KEY_BTAB
case KEY_BTAB:
#endif
- ui_menu_goto(cf, cf->menu->idx - 1);
+ ui_menu_goto(cf, (int) m->idx - 1);
return 0;
}
}
do {
int key = getch();
+
if (ui_menu_move(cf, key) == 0)
continue;
+
switch (key) {
case KEY_ENTER:
case '\n':
ref = 1;
break;
}
+ case KEY_DC:
case 'd': /* Delete */
if (fdisk_delete_partition(cf->cxt, n) != 0)
warn = _("Could not delete partition %zu.");
if (ui_menu_move(cf, key) == 0)
continue;
+ DBG(FRONTEND, dbgprint("ui: main action key >%c<.", key));
+
switch (key) {
case KEY_DOWN:
case '\016': /* ^N */
case KEY_UP:
case '\020': /* ^P */
case 'k': /* Vi-like alternative */
- ui_table_goto(cf, cf->lines_idx - 1);
+ ui_table_goto(cf, (int) cf->lines_idx - 1);
break;
+ case KEY_PPAGE:
+ if (cf->page_sz) {
+ ui_table_goto(cf, (int) cf->lines_idx - cf->page_sz);
+ break;
+ }
case KEY_HOME:
ui_table_goto(cf, 0);
break;
+ case KEY_NPAGE:
+ if (cf->page_sz) {
+ ui_table_goto(cf, cf->lines_idx + cf->page_sz);
+ break;
+ }
case KEY_END:
- ui_table_goto(cf, cf->nlines - 1);
+ ui_table_goto(cf, (int) cf->nlines - 1);
break;
case KEY_ENTER:
case '\n':