int editcmd_dialog_raw_key_query (const char *heading, const char *query, int cancel) { int w = str_term_width1 (query) + 7; struct Dlg_head *raw_dlg = create_dlg (0, 0, 7, w, dialog_colors, editcmd_dialog_raw_key_query_cb, NULL, heading, DLG_CENTER | DLG_TRYUP | DLG_WANT_TAB); add_widget (raw_dlg, input_new (3 - cancel, w - 5, INPUT_COLOR, 2, "", 0, INPUT_COMPLETE_DEFAULT)); add_widget (raw_dlg, label_new (3 - cancel, 2, query)); if (cancel) add_widget (raw_dlg, button_new (4, w / 2 - 5, B_CANCEL, NORMAL_BUTTON, _("Cancel"), 0)); w = run_dlg (raw_dlg); destroy_dlg (raw_dlg); if (cancel) { if (w == XCTRL ('g') || w == XCTRL ('c') || w == ESC_CHAR || w == B_CANCEL) return 0; } return w; }
static int translate_key_code(int asc, int scan) { int c; switch(scan){ case 106: /* KP_MULT*/ return ALT('*'); case 107: /* KP_PLUS*/ return ALT('+'); case 109: /* KP_MINUS*/ return ALT('-'); } c = VKtoCurses (scan); if (!asc && !c) return 0; if (asc && c) return c; if (!asc || asc=='\t' ) { if (shift_pressed() && (c >= KEY_F(1)) && (c <= KEY_F(10))) c += 10; if (alt_pressed() && (c >= KEY_F(1)) && (c <= KEY_F(2))) c += 10; if (alt_pressed() && (c == KEY_F(7))) c = ALT('?'); if (asc == '\t'){ if(ctrl_pressed())c = ALT('\t'); else c=asc; } return c; } if (ctrl_pressed()) return XCTRL(asc); if (alt_pressed()) return ALT(asc); if (asc == 13) return 10; return asc; }
static int menubar_handle_key (WMenuBar * menubar, int key) { /* Lowercase */ if (isascii (key)) key = g_ascii_tolower (key); if (is_abort_char (key)) { menubar_finish (menubar); return 1; } /* menubar help or menubar navigation */ switch (key) { case KEY_F (1): { ev_help_t event_data = { NULL, NULL }; if (menubar->is_dropped) event_data.node = MENU (g_list_nth_data (menubar->menu, menubar->selected))->help_node; else event_data.node = "[Menu Bar]"; mc_event_raise (MCEVENT_GROUP_CORE, "help", &event_data); menubar_draw (menubar); return 1; } case KEY_LEFT: case XCTRL ('b'): menubar_left (menubar); return 1; case KEY_RIGHT: case XCTRL ('f'): menubar_right (menubar); return 1; default: break; } if (!menubar->is_dropped) { GList *i; /* drop menu by hotkey */ for (i = menubar->menu; i != NULL; i = g_list_next (i)) { menu_t *menu = MENU (i->data); if ((menu->text.hotkey != NULL) && (key == g_ascii_tolower (menu->text.hotkey[0]))) { menubar_drop (menubar, g_list_position (menubar->menu, i)); return 1; } } /* drop menu by Enter or Dowwn key */ if (key == KEY_ENTER || key == XCTRL ('n') || key == KEY_DOWN || key == '\n') menubar_drop (menubar, menubar->selected); return 1; } { menu_t *menu = MENU (g_list_nth_data (menubar->menu, menubar->selected)); GList *i; /* execute menu command by hotkey */ for (i = menu->entries; i != NULL; i = g_list_next (i)) { const menu_entry_t *entry = MENUENTRY (i->data); if ((entry != NULL) && (entry->command != CK_IgnoreKey) && (entry->text.hotkey != NULL) && (key == g_ascii_tolower (entry->text.hotkey[0]))) { menu->selected = g_list_position (menu->entries, i); menubar_execute (menubar); return 1; } } /* menu execute by Enter or menu navigation */ switch (key) { case KEY_ENTER: case '\n': menubar_execute (menubar); return 1; case KEY_HOME: case ALT ('<'): menubar_first (menubar); break; case KEY_END: case ALT ('>'): menubar_last (menubar); break; case KEY_DOWN: case XCTRL ('n'): menubar_down (menubar); break; case KEY_UP: case XCTRL ('p'): menubar_up (menubar); break; default: break; } } return 0; }
BASH, TCSH, ZSH, FISH } subshell_type; /*** file scope variables ************************************************************************/ /* tcsh closes all non-standard file descriptors, so we have to use a pipe */ static char tcsh_fifo[128]; static int subshell_pty_slave = -1; /* The key for switching back to MC from the subshell */ /* *INDENT-OFF* */ static const char subshell_switch_key = XCTRL ('o') & 255; /* *INDENT-ON* */ /* For reading/writing on the subshell's pty */ static char pty_buffer[PTY_BUFFER_SIZE] = "\0"; /* To pass CWD info from the subshell to MC */ static int subshell_pipe[2]; /* The subshell's process ID */ static pid_t subshell_pid = 1; /* One extra char for final '\n' */ static char subshell_cwd[MC_MAXPATHLEN + 1]; /* Flag to indicate whether the subshell is ready for next command */
static cb_ret_t advanced_chown_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data) { WDialog *h = DIALOG (w); int i; int f_pos; unsigned long id; id = dlg_get_current_widget_id (h); for (i = 0; i < BUTTONS_PERM; i++) if (chown_advanced_but[i].id == id) break; f_pos = i; i = 0; switch (msg) { case MSG_DRAW: chown_refresh (); chown_info_update (); return MSG_HANDLED; case MSG_POST_KEY: if (f_pos < 3) b_setpos (f_pos); return MSG_HANDLED; case MSG_FOCUS: if (f_pos < 3) { if ((flag_pos / 3) != f_pos) flag_pos = f_pos * 3; b_setpos (f_pos); } else if (f_pos < BUTTONS_PERM) flag_pos = f_pos + 6; return MSG_HANDLED; case MSG_KEY: switch (parm) { case XCTRL ('b'): case KEY_LEFT: if (f_pos < BUTTONS_PERM) return (dec_flag_pos (f_pos)); break; case XCTRL ('f'): case KEY_RIGHT: if (f_pos < BUTTONS_PERM) return (inc_flag_pos (f_pos)); break; case ' ': if (f_pos < 3) return MSG_HANDLED; break; case '\n': case KEY_ENTER: if (f_pos <= 2 || f_pos >= BUTTONS_PERM) break; do_enter_key (h, f_pos); return MSG_HANDLED; case ALT ('x'): i++; case ALT ('w'): i++; case ALT ('r'): parm = i + 3; for (i = 0; i < 3; i++) ch_flags[i * 3 + parm - 3] = (x_toggle & (1 << parm)) ? '-' : '+'; x_toggle ^= (1 << parm); update_mode (h); dlg_broadcast_msg (h, MSG_DRAW); send_message (h->current->data, NULL, MSG_FOCUS, 0, NULL); break; case XCTRL ('x'): i++; case XCTRL ('w'): i++; case XCTRL ('r'): parm = i; for (i = 0; i < 3; i++) ch_flags[i * 3 + parm] = (x_toggle & (1 << parm)) ? '-' : '+'; x_toggle ^= (1 << parm); update_mode (h); dlg_broadcast_msg (h, MSG_DRAW); send_message (h->current->data, NULL, MSG_FOCUS, 0, NULL); break; case 'x': i++; case 'w': i++; case 'r': if (f_pos > 2) break; flag_pos = f_pos * 3 + i; /* (strchr(ch_perm,parm)-ch_perm); */ if (BUTTON (h->current->data)->text.start[(flag_pos % 3)] == '-') ch_flags[flag_pos] = '+'; else ch_flags[flag_pos] = '-'; update_mode (h); break; case '4': i++; case '2': i++; case '1': if (f_pos <= 2) { flag_pos = i + f_pos * 3; ch_flags[flag_pos] = '='; update_mode (h); } break; case '-': if (f_pos > 2) break; case '*': if (parm == '*') parm = '='; case '=': case '+': if (f_pos <= 4) { ch_flags[flag_pos] = parm; update_mode (h); send_message (h, sender, MSG_KEY, KEY_RIGHT, NULL); if (flag_pos > 8 || (flag_pos % 3) == 0) dlg_one_down (h); } break; default: break; } return MSG_NOT_HANDLED; default: return dlg_default_callback (w, sender, msg, parm, data); } }
tree_do_search (tree, 0); } else { tree->searching = 1; tree->search_buffer[0] = 0; } } typedef void (*tree_key_action) (WTree *); typedef struct { int key_code; tree_key_action fn; } tree_key_map; static const tree_key_map tree_keymap [] = { { XCTRL('n'), move_down }, { XCTRL('p'), move_up }, { KEY_DOWN, move_down }, { KEY_UP, move_up }, { '\n', chdir_sel }, { KEY_ENTER, chdir_sel }, { KEY_HOME, move_home }, { KEY_A1, move_home }, { ALT ('<'), move_home }, { KEY_END, move_end }, { KEY_C1, move_end }, { ALT ('>'), move_end }, { KEY_NPAGE, move_nextp }, { KEY_PPAGE, move_prevp }, { XCTRL('v'), move_nextp }, { ALT('v'), move_prevp },
/* bind <key> <command> */ static gboolean cmd_bind(config_t *cfg, int argc, char *argv[]) { char *keyname, *command; const name_map_t *key = key_names; const name_map_t *cmd = command_names; int mod = 0, k = -1, m = 0; if (argc != 3) { snprintf(error_msg, sizeof(error_msg), _("bind: Wrong argument number, bind <key> <command>")); return FALSE; } keyname = argv[1]; command = argv[2]; while (*keyname) { switch (*keyname++) { case 'C': m = KEY_M_CTRL; continue; case 'M': case 'A': m = KEY_M_ALT; continue; case 'S': m = KEY_M_SHIFT; continue; case '-': if (!m) { /* incorrect key */ snprintf(error_msg, sizeof(error_msg), _("bind: Bad key value `%s'"), keyname); return FALSE; } mod |= m; m = 0; continue; } keyname--; break; } /* no key */ if (keyname[0] == '\0') { snprintf(error_msg, sizeof(error_msg), _("bind: Ehh...no key?")); return FALSE; } /* ordinary key */ if (keyname[1] == '\0') { k = keyname[0]; } else { while (key->name && strcasecmp(key->name, keyname) != 0) key++; } if (k < 0 && !key->name) { snprintf(error_msg, sizeof(error_msg), _("bind: Unknown key: `%s'"), keyname); return FALSE; } while (cmd->name && strcasecmp(cmd->name, command) != 0) cmd++; if (!cmd->name) { snprintf(error_msg, sizeof(error_msg), _("bind: Unknown command: `%s'"), command); return FALSE; } if (mod & KEY_M_CTRL) { if (k < 256) k = XCTRL(k); else k |= KEY_M_CTRL; } if (mod & KEY_M_ALT) k |= KEY_M_ALT; if (mod & KEY_M_SHIFT) k |= KEY_M_SHIFT; if (!strcasecmp("bind-ext", argv[0])) keymap_add(cfg->ext_keymap, k, cmd->val); else keymap_add(cfg->keymap, k, cmd->val); return TRUE; }
void tty_init (gboolean mouse_enable, gboolean is_xterm) { SLtt_Ignore_Beep = 1; SLutf8_enable (-1); /* has to be called first before any of the other functions. */ SLtt_get_terminfo (); /* * If the terminal in not in terminfo but begins with a well-known * string such as "linux" or "xterm" S-Lang will go on, but the * terminal size and several other variables won't be initialized * (as of S-Lang 1.4.4). Detect it and abort. Also detect extremely * small, large and negative screen dimensions. */ if ((COLS < 10) || (LINES < 5) || (COLS > SLTT_MAX_SCREEN_COLS) || (LINES > SLTT_MAX_SCREEN_ROWS)) { fprintf (stderr, _("Screen size %dx%d is not supported.\n" "Check the TERM environment variable.\n"), COLS, LINES); exit (EXIT_FAILURE); } tcgetattr (fileno (stdin), &boot_mode); /* 255 = ignore abort char; XCTRL('g') for abort char = ^g */ SLang_init_tty (XCTRL ('g'), 1, 0); if (mc_global.tty.ugly_line_drawing) SLtt_Has_Alt_Charset = 0; /* If SLang uses fileno(stderr) for terminal input MC will hang if we call SLang_getkey between calls to open_error_pipe and close_error_pipe, e.g. when we do a growing view of an gzipped file. */ if (SLang_TT_Read_FD == fileno (stderr)) SLang_TT_Read_FD = fileno (stdin); if (tcgetattr (SLang_TT_Read_FD, &new_mode) == 0) { #ifdef VDSUSP new_mode.c_cc[VDSUSP] = NULL_VALUE; /* to ignore ^Y */ #endif #ifdef VLNEXT new_mode.c_cc[VLNEXT] = NULL_VALUE; /* to ignore ^V */ #endif tcsetattr (SLang_TT_Read_FD, TCSADRAIN, &new_mode); } tty_reset_prog_mode (); load_terminfo_keys (); SLtt_Blink_Mode = tty_use_256colors ()? 1 : 0; tty_start_interrupt_key (); /* It's the small part from the previous init_key() */ init_key_input_fd (); /* For 8-bit locales, NCurses handles 154 (0x9A) symbol properly, while S-Lang * requires SLsmg_Display_Eight_Bit >= 154 (OR manual filtering if xterm display * detected - but checking TERM would fail under screen, OR running xterm * with allowC1Printable). */ tty_display_8bit (FALSE); SLsmg_init_smg (); if (!mouse_enable) use_mouse_p = MOUSE_DISABLED; tty_init_xterm_support (is_xterm); /* do it before do_enter_ca_mode() call */ init_mouse (); do_enter_ca_mode (); tty_keypad (TRUE); tty_nodelay (FALSE); tty_setup_sigwinch (sigwinch_handler); }
void menu_exec_macro_cmd (void) { menu_key (XCTRL ('a')); }
void menu_lit_cmd (void) { menu_key (XCTRL ('q')); }
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; }
/* * Translate the keycode into either 'command' or 'char_for_insertion'. * 'command' is one of the editor commands from editcmddef.h. */ int edit_translate_key (WEdit *edit, long x_key, int *cmd, int *ch) { int command = CK_Insert_Char; int char_for_insertion = -1; int i = 0; int extmod = 0; const edit_key_map_type *key_map = NULL; switch (edit_key_emulation) { case EDIT_KEY_EMULATION_NORMAL: key_map = cooledit_key_map; break; case EDIT_KEY_EMULATION_EMACS: key_map = emacs_key_map; if (x_key == XCTRL ('x')) { int ext_key; ext_key = edit_raw_key_query (" Ctrl-X ", _(" Emacs key: "), 0); switch (ext_key) { case 's': command = CK_Save; goto fin; case 'x': command = CK_Exit; goto fin; case 'k': command = CK_New; goto fin; case 'e': command = CK_Macro (edit_raw_key_query (_(" Execute Macro "), _(" Press macro hotkey: "), 1)); if (command == CK_Macro (0)) command = CK_Insert_Char; goto fin; } goto fin; } break; case EDIT_KEY_EMULATION_USER: if (edit->user_map != NULL) { if (edit->extmod && edit->ext_map != NULL) { key_map = edit->ext_map; extmod = 1; } else { key_map = edit->user_map; } edit->extmod = 0; } else { key_map = edit->user_map = cooledit_key_map; } break; } assert (key_map != NULL); /* an ordinary insertable character */ if (x_key < 256 && !extmod) { int c = convert_from_input_c (x_key); if (is_printable (c)) { char_for_insertion = c; goto fin; } } /* Commands specific to the key emulation */ for (i = 0; key_map[i].key != 0 && key_map[i].key != x_key; i++) continue; if (key_map[i].key != 0) { command = key_map[i].command; goto fin; } /* Commands common for the key emulations */ key_map = common_key_map; for (i = 0; key_map[i].key != 0 && key_map[i].key != x_key; i++) continue; if (key_map[i].key != 0) { command = key_map[i].command; goto fin; } /* Function still not found for this key, so try macros */ /* This allows the same macro to be enabled by either eg "ALT('f')" or "XCTRL('f')" or "XCTRL('a'), 'f'" */ if (x_key & ALT (0)) { /* is an alt key ? */ command = CK_Macro (x_key - ALT (0)); goto fin; } if (x_key < ' ') { /* is a ctrl key ? */ command = CK_Macro (x_key); goto fin; } fin: *cmd = command; *ch = char_for_insertion; if (command == CK_Insert_Char && char_for_insertion == -1) { /* unchanged, key has no function here */ return 0; } return 1; }
#include "edit.h" #include "edit-widget.h" /* edit->macro_i */ #include "editcmddef.h" /* list of commands */ #include "../src/key.h" /* KEY_M_SHIFT */ #include "../src/tty.h" /* keys */ #include "../src/charsets.h" /* convert_from_input_c() */ #include "../src/selcodepage.h" /* do_select_codepage() */ /* * Ordinary translations. Note that the keys listed first take priority * when the key is assigned to more than one command. */ static const edit_key_map_type cooledit_key_map[] = { { ALT ('b'), CK_Match_Bracket }, { ALT ('m'), CK_Mail }, { XCTRL ('f'), CK_Save_Block }, { XCTRL ('n'), CK_New }, { XCTRL ('p'), CK_Pipe_Block (1) }, /* spell check */ { XCTRL ('x'), CK_Word_Right }, { XCTRL ('y'), CK_Delete_Line }, { XCTRL ('z'), CK_Word_Left }, { 0, 0 } }; static const edit_key_map_type emacs_key_map[] = { { ALT ('$'), CK_Pipe_Block (1) }, /* spell check */ { ALT ('b'), CK_Word_Left }, { ALT ('f'), CK_Word_Right }, { ALT ('v'), CK_Page_Up }, { ALT ('w'), CK_XStore }, { XCTRL ('@'), CK_Mark },
static cb_ret_t advanced_chown_callback (Dlg_head *h, dlg_msg_t msg, int parm) { int i = 0, f_pos = BUTTONS - h->current->dlg_id - single_set - 1; switch (msg) { case DLG_DRAW: chown_refresh (); chown_info_update (); return MSG_HANDLED; case DLG_POST_KEY: if (f_pos < 3) b_setpos (f_pos); return MSG_HANDLED; case DLG_FOCUS: if (f_pos < 3) { if ((flag_pos / 3) != f_pos) flag_pos = f_pos * 3; b_setpos (f_pos); } else if (f_pos < 5) flag_pos = f_pos + 6; return MSG_HANDLED; case DLG_KEY: switch (parm) { case XCTRL ('b'): case KEY_LEFT: if (f_pos < 5) return (dec_flag_pos (f_pos)); break; case XCTRL ('f'): case KEY_RIGHT: if (f_pos < 5) return (inc_flag_pos (f_pos)); break; case ' ': if (f_pos < 3) return MSG_HANDLED; break; case '\n': case KEY_ENTER: if (f_pos <= 2 || f_pos >= 5) break; do_enter_key (h, f_pos); return MSG_HANDLED; case ALT ('x'): i++; case ALT ('w'): i++; case ALT ('r'): parm = i + 3; for (i = 0; i < 3; i++) ch_flags[i * 3 + parm - 3] = (x_toggle & (1 << parm)) ? '-' : '+'; x_toggle ^= (1 << parm); update_mode (h); dlg_broadcast_msg (h, WIDGET_DRAW, 0); send_message (h->current, WIDGET_FOCUS, 0); break; case XCTRL ('x'): i++; case XCTRL ('w'): i++; case XCTRL ('r'): parm = i; for (i = 0; i < 3; i++) ch_flags[i * 3 + parm] = (x_toggle & (1 << parm)) ? '-' : '+'; x_toggle ^= (1 << parm); update_mode (h); dlg_broadcast_msg (h, WIDGET_DRAW, 0); send_message (h->current, WIDGET_FOCUS, 0); break; case 'x': i++; case 'w': i++; case 'r': if (f_pos > 2) break; flag_pos = f_pos * 3 + i; /* (strchr(ch_perm,parm)-ch_perm); */ if (((WButton *) h->current)->text.start[(flag_pos % 3)] == '-') ch_flags[flag_pos] = '+'; else ch_flags[flag_pos] = '-'; update_mode (h); break; case '4': i++; case '2': i++; case '1': if (f_pos > 2) break; flag_pos = i + f_pos * 3; ch_flags[flag_pos] = '='; update_mode (h); break; case '-': if (f_pos > 2) break; case '*': if (parm == '*') parm = '='; case '=': case '+': if (f_pos > 4) break; ch_flags[flag_pos] = parm; update_mode (h); advanced_chown_callback (h, DLG_KEY, KEY_RIGHT); if (flag_pos > 8 || !(flag_pos % 3)) dlg_one_down (h); break; } return MSG_NOT_HANDLED; default: return default_dlg_callback (h, msg, parm); } }
{ "ExtMap1", CK_StartExtMap1 }, { "ExtMap2", CK_StartExtMap2 }, { "ShowCommandLine", CK_ShowCommandLine }, { "SelectCodepage", CK_SelectCodepage }, { NULL, 0 } }; /*** global variables ****************************************************************************/ /* viewer/actions_cmd.c */ const global_key_map_t default_viewer_keymap[] = { { '?', CK_ViewSearch }, { '/', CK_ViewSearch }, { XCTRL('r'), CK_ViewContinueSearch }, { XCTRL('s'), CK_ViewContinueSearch }, { KEY_F (17), CK_ViewContinueSearch }, { ALT('r'), CK_ViewToggleRuler }, { KEY_HOME, CK_ViewMoveToBol }, { KEY_END, CK_ViewMoveToEol }, { 'h', CK_ViewMoveLeft }, { KEY_LEFT, CK_ViewMoveLeft }, { 'l', CK_ViewMoveRight }, { KEY_RIGHT, CK_ViewMoveRight }, { 'k', CK_ViewMoveUp }, { 'y', CK_ViewMoveUp },