#ifndef LYKEYMAP_H #define LYKEYMAP_H #include #include #include extern BOOLEAN LYisNonAlnumKeyname PARAMS((int ch, int KeyName)); extern HTList *LYcommandList NOPARAMS; extern char *LYKeycodeToString PARAMS((int c, BOOLEAN upper8)); extern char *fmt_keys PARAMS((int lkc_first, int lkc_second)); extern char *key_for_func PARAMS((int func)); extern char *key_for_func_ext PARAMS((int lac, int context_code)); extern int LYReverseKeymap PARAMS((int KeyName)); extern int LYStringToKeycode PARAMS((char *src)); extern int lacname_to_lac PARAMS((CONST char *func)); extern int lecname_to_lec PARAMS((CONST char *func)); extern int lkcstring_to_lkc PARAMS((CONST char *src)); extern int remap PARAMS((char *key, char *func, BOOLEAN for_dired)); extern void print_keymap PARAMS((char **newfile)); extern void reset_emacs_keys NOPARAMS; extern void reset_numbers_as_arrows NOPARAMS; extern void reset_vi_keys NOPARAMS; extern void set_emacs_keys NOPARAMS; extern void set_numbers_as_arrows NOPARAMS; extern void set_vi_keys NOPARAMS; extern void set_vms_keys NOPARAMS; /* We only use unsigned keycodes; if there's a problem matching with enum * (which is supposed to be 'int'), that would be okay, but not as clean * for type-checking. */ typedef unsigned short LYKeymap_t; #define KEYMAP_SIZE 661 extern LYKeymap_t keymap[KEYMAP_SIZE]; /* main keymap matrix */ #ifdef EXP_KEYBOARD_LAYOUT typedef unsigned short LYKbLayout_t; extern int current_layout; extern LYKbLayout_t * LYKbLayouts[]; extern char * LYKbLayoutNames[]; extern int LYSetKbLayout PARAMS((char *layout_id)); #endif #if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE) extern LYKeymap_t key_override[]; #endif /* * * LynxKeyCodes * * */ #define LKC_ISLECLAC 0x8000 /* flag: contains lynxaction + editaction */ #define LKC_MOD1 0x4000 /* a modifier bit - currently for ^x-map */ #define LKC_MOD2 0x2000 /* another one - currently for esc-map */ #define LKC_MOD3 0x1000 /* another one - currently for double-map */ #define LKC_ISLAC 0x0800 /* flag: lynxkeycode already lynxactioncode */ /* Used to distinguish internal Lynx keycodes of (say) extended ncurses once. */ #define LKC_ISLKC 0x0400 /* flag: already lynxkeycode (not native) */ /* 0x0400 is MOUSE_KEYSYM for slang in LYStrings.c */ #define LKC_MASK 0x07FF /* mask for lynxkeycode proper */ #define LKC_DONE 0x07FE /* special value - operation done, not-a-key */ /* * * LynxActionCodes * * */ #define LAC_SHIFT 8 /* shift for lynxactioncode - must not overwrite any assigned LYK_* values */ #define LAC_MASK ((1<>LAC_SHIFT) & LAC_MASK)) /* Convert lynxkeycode to lynxactioncode. Modifiers are dropped. */ #define LKC_TO_LAC(ktab,c) (((c) == -1) ? ktab[0] : \ ((c) & (LKC_ISLECLAC|LKC_ISLAC)) ? ((c) & LAC_MASK) : \ ktab[((c) & LKC_MASK) + 1]) /* Mask lynxactioncode as a lynxkeycode. */ #define LAC_TO_LKC0(a) ((a)|LKC_ISLAC) /* Mask a lynxactioncode and an editactioncode as a lynxkeycode. */ #define LACLEC_TO_LKC0(a,b) ((a)|((b)<=0)?LYReverseKeymap(a):LAC_TO_LKC0(a)) /* Simplify a lynxkeycode: attempt reverse mapping if a single masked lynxactioncode, drop modifiers. */ #define LKC_TO_C(c) ((c&LKC_ISLECLAC)? c : (c&LKC_ISLAC)? LAC_TO_LKC(c&LAC_MASK) : (c&LKC_MASK)) #define LKC_HAS_ESC_MOD(c) (c >= 0 && !(c&LKC_ISLECLAC) && (c&LKC_MOD2)) /* * The defined LynxActionCodes * */ /* Variables for holding and passing around lynxactioncodes are * generally of type int, the types LYKeymap_t and LYKeymapCodes * are currently only used for the definitions. That could change. - kw * * The values in this enum are indexed against the command names in the * 'revmap[]' array in LYKeymap.c */ typedef enum { LYK_UNKNOWN=0 , LYK_COMMAND , LYK_1 , LYK_2 , LYK_3 , LYK_4 , LYK_5 , LYK_6 , LYK_7 , LYK_8 , LYK_9 , LYK_SOURCE , LYK_RELOAD , LYK_QUIT , LYK_ABORT , LYK_NEXT_PAGE , LYK_PREV_PAGE , LYK_UP_TWO , LYK_DOWN_TWO , LYK_UP_HALF , LYK_DOWN_HALF , LYK_REFRESH , LYK_HOME , LYK_END , LYK_FIRST_LINK , LYK_LAST_LINK , LYK_PREV_LINK , LYK_NEXT_LINK , LYK_LPOS_PREV_LINK , LYK_LPOS_NEXT_LINK , LYK_FASTBACKW_LINK , LYK_FASTFORW_LINK , LYK_UP_LINK , LYK_DOWN_LINK , LYK_RIGHT_LINK , LYK_LEFT_LINK , LYK_HISTORY , LYK_PREV_DOC , LYK_NEXT_DOC , LYK_ACTIVATE , LYK_SUBMIT /* mostly like LYK_ACTIVATE, for mouse use, don't map */ , LYK_GOTO , LYK_ECGOTO , LYK_HELP , LYK_DWIMHELP , LYK_INDEX , LYK_NOCACHE , LYK_INTERRUPT , LYK_MAIN_MENU , LYK_OPTIONS , LYK_INDEX_SEARCH , LYK_WHEREIS , LYK_PREV , LYK_NEXT , LYK_COMMENT , LYK_EDIT , LYK_INFO , LYK_PRINT , LYK_ADD_BOOKMARK , LYK_DEL_BOOKMARK , LYK_VIEW_BOOKMARK , LYK_VLINKS , LYK_SHELL , LYK_DOWNLOAD , LYK_TRACE_TOGGLE , LYK_TRACE_LOG , LYK_IMAGE_TOGGLE , LYK_INLINE_TOGGLE , LYK_HEAD , LYK_DO_NOTHING , LYK_TOGGLE_HELP , LYK_JUMP , LYK_KEYMAP , LYK_LIST , LYK_TOOLBAR , LYK_HISTORICAL , LYK_MINIMAL , LYK_SOFT_DQUOTES , LYK_RAW_TOGGLE , LYK_COOKIE_JAR , LYK_F_LINK_NUM , LYK_CLEAR_AUTH , LYK_SWITCH_DTD , LYK_ELGOTO , LYK_CHANGE_LINK , LYK_DWIMEDIT , LYK_EDIT_TEXTAREA , LYK_GROW_TEXTAREA , LYK_INSERT_FILE #ifdef EXP_ADDRLIST_PAGE , LYK_ADDRLIST #else #define LYK_ADDRLIST LYK_ADD_BOOKMARK #endif #ifdef USE_EXTERNALS , LYK_EXTERN_LINK , LYK_EXTERN_PAGE #else #define LYK_EXTERN_LINK LYK_UNKNOWN #define LYK_EXTERN_PAGE LYK_UNKNOWN #endif /* !defined(USE_EXTERNALS) */ #if defined(VMS) || defined(DIRED_SUPPORT) , LYK_DIRED_MENU #else #define LYK_DIRED_MENU LYK_UNKNOWN #endif /* VMS || DIRED_SUPPORT */ #ifdef DIRED_SUPPORT , LYK_CREATE , LYK_REMOVE , LYK_MODIFY , LYK_TAG_LINK , LYK_UPLOAD , LYK_INSTALL #else #define LYK_TAG_LINK LYK_UNKNOWN #endif /* DIRED_SUPPORT */ #ifdef SH_EX , LYK_CHG_CENTER #endif /* SH_EX */ #ifdef KANJI_CODE_OVERRIDE , LYK_CHG_KCODE #endif #ifdef SUPPORT_CHDIR , LYK_CHDIR #endif #ifdef USE_CURSES_PADS , LYK_SHIFT_LEFT , LYK_SHIFT_RIGHT , LYK_LINEWRAP_TOGGLE #else #define LYK_SHIFT_LEFT LYK_UNKNOWN #define LYK_SHIFT_RIGHT LYK_UNKNOWN #define LYK_LINEWRAP_TOGGLE LYK_UNKNOWN #endif #ifdef CAN_CUT_AND_PASTE , LYK_PASTE_URL , LYK_TO_CLIPBOARD #else #define LYK_PASTE_URL LYK_UNKNOWN #define LYK_TO_CLIPBOARD LYK_UNKNOWN #endif #ifdef EXP_NESTED_TABLES , LYK_NESTED_TABLES #else #define LYK_NESTED_TABLES LYK_UNKNOWN #endif } LYKeymapCode; /* * Symbol table for internal commands. */ typedef struct { LYKeymapCode code; CONST char *name; CONST char *doc; } Kcmd; extern Kcmd * LYKeycodeToKcmd PARAMS((LYKeymapCode code)); extern Kcmd * LYStringToKcmd PARAMS((CONST char * name)); #endif /* LYKEYMAP_H */