1 /* $LynxId: LYKeymap.h,v 1.48 2012/02/12 18:29:34 tom Exp $ */ 2 #ifndef LYKEYMAP_H 3 #define LYKEYMAP_H 4 5 #include <HTUtils.h> 6 #include <HTList.h> 7 #include <LYCurses.h> 8 9 #ifdef __cplusplus 10 extern "C" { 11 #endif 12 extern BOOLEAN LYisNonAlnumKeyname(int ch, int KeyName); 13 extern HTList *LYcommandList(void); 14 extern const char *lec_to_lecname(int code); 15 extern char *LYKeycodeToString(int c, int upper8); 16 extern char *fmt_keys(int lkc_first, int lkc_second); 17 extern char *key_for_func(int func); 18 extern char *key_for_func_ext(int lac, int context_code); 19 extern int LYReverseKeymap(int KeyName); 20 extern int LYStringToKeycode(char *src); 21 extern int lacname_to_lac(const char *func); 22 extern int lecname_to_lec(const char *func); 23 extern int lkcstring_to_lkc(const char *src); 24 extern int remap(char *key, const char *func, int for_dired); 25 extern void print_keymap(char **newfile); 26 extern void reset_emacs_keys(void); 27 extern void reset_numbers_as_arrows(void); 28 extern void reset_vi_keys(void); 29 extern void set_emacs_keys(void); 30 extern void set_numbers_as_arrows(void); 31 extern void set_vi_keys(void); 32 extern void set_vms_keys(void); 33 34 /* We only use unsigned keycodes; if there's a problem matching with enum 35 * (which is supposed to be 'int'), that would be okay, but not as clean 36 * for type-checking. 37 */ 38 typedef unsigned short LYKeymap_t; 39 40 #define KEYMAP_SIZE 661 41 extern LYKeymap_t keymap[KEYMAP_SIZE]; /* main keymap matrix */ 42 43 #ifdef EXP_KEYBOARD_LAYOUT 44 typedef unsigned short LYKbLayout_t; 45 extern int current_layout; 46 extern LYKbLayout_t *LYKbLayouts[]; 47 extern const char *LYKbLayoutNames[]; 48 extern int LYSetKbLayout(char *layout_id); 49 #endif 50 51 #if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE) 52 extern LYKeymap_t key_override[]; 53 #endif 54 55 /* * * LynxKeyCodes * * */ 56 #define LKC_ISLECLAC 0x8000 /* flag: contains lynxaction + editaction */ 57 #define LKC_MOD1 0x4000 /* a modifier bit - currently for ^x-map */ 58 #define LKC_MOD2 0x2000 /* another one - currently for esc-map */ 59 #define LKC_MOD3 0x1000 /* another one - currently for double-map */ 60 #define LKC_ISLAC 0x0800 /* flag: lynxkeycode already lynxactioncode */ 61 62 /* Used to distinguish internal Lynx keycodes of (say) extended ncurses once. */ 63 #define LKC_ISLKC 0x0400 /* flag: already lynxkeycode (not native) */ 64 /* 0x0400 is MOUSE_KEYSYM for slang in LYStrings.c */ 65 #define LKC_MASK 0x07FF /* mask for lynxkeycode proper */ 66 67 #define LKC_DONE 0x07FE /* special value - operation done, not-a-key */ 68 69 /* * * LynxActionCodes * * */ 70 #define LAC_SHIFT 8 /* shift for lynxactioncode - must not 71 overwrite any assigned LYK_* values */ 72 #define LAC_MASK ((1<<LAC_SHIFT)-1) 73 /* mask for lynxactioncode - must cover all 74 assigned LYK_* values */ 75 76 /* Return lkc masking single actioncode, given an lkc masking a lac + lec */ 77 #define LKC2_TO_LKC(c) (((c) == -1 || !((c) & LKC_ISLECLAC)) ? (c) : \ 78 (((c) & LAC_MASK) | LKC_ISLAC)) 79 80 /* Return lynxeditactioncode, given an lkc masking a lac + lec */ 81 #define LKC2_TO_LEC(c) (((c) == -1 || !((c) & LKC_ISLECLAC)) ? (c) : \ 82 ((((c)&~LKC_ISLECLAC)>>LAC_SHIFT) & LAC_MASK)) 83 84 /* Convert lynxkeycode to lynxactioncode. Modifiers are dropped. */ 85 #define LKC_TO_LAC(ktab,c) (((c) == -1) ? ktab[0] : \ 86 ((c) & (LKC_ISLECLAC|LKC_ISLAC)) ? ((c) & LAC_MASK) : \ 87 ktab[((c) & LKC_MASK) + 1]) 88 89 /* Mask lynxactioncode as a lynxkeycode. */ 90 #define LAC_TO_LKC0(a) ((a)|LKC_ISLAC) 91 92 /* Mask a lynxactioncode and an editactioncode as a lynxkeycode. */ 93 #define LACLEC_TO_LKC0(a,b) ((a)|((b)<<LAC_SHIFT)|LKC_ISLECLAC) 94 95 /* Convert lynxactioncode to a lynxkeycode, attempting reverse mapping. */ 96 #define LAC_TO_LKC(a) ((LYReverseKeymap(a)>=0)?LYReverseKeymap(a):LAC_TO_LKC0(a)) 97 98 /* Simplify a lynxkeycode: 99 attempt reverse mapping if a single masked lynxactioncode, drop modifiers. */ 100 #define LKC_TO_C(c) ((c&LKC_ISLECLAC)? c : (c&LKC_ISLAC)? LAC_TO_LKC(c&LAC_MASK) : (c&LKC_MASK)) 101 102 #define LKC_HAS_ESC_MOD(c) (c >= 0 && !(c&LKC_ISLECLAC) && (c&LKC_MOD2)) 103 104 /* * The defined LynxActionCodes * */ 105 106 /* Variables for holding and passing around lynxactioncodes are generally of 107 * type int, the types LYKeymap_t and LYKeymapCodes are currently only used for 108 * the definitions. That could change. - kw 109 * 110 * The values in this enum are indexed against the command names in the 111 * 'revmap[]' array in LYKeymap.c 112 */ 113 typedef enum { 114 LYK_UNKNOWN = 0 115 ,LYK_COMMAND 116 ,LYK_1 117 ,LYK_2 118 ,LYK_3 119 ,LYK_4 120 ,LYK_5 121 ,LYK_6 122 ,LYK_7 123 ,LYK_8 124 ,LYK_9 125 ,LYK_SOURCE 126 ,LYK_RELOAD 127 ,LYK_QUIT 128 ,LYK_ABORT 129 ,LYK_NEXT_PAGE 130 ,LYK_PREV_PAGE 131 ,LYK_UP_TWO 132 ,LYK_DOWN_TWO 133 ,LYK_UP_HALF 134 ,LYK_DOWN_HALF 135 ,LYK_REFRESH 136 ,LYK_HOME 137 ,LYK_END 138 ,LYK_FIRST_LINK 139 ,LYK_LAST_LINK 140 ,LYK_PREV_LINK 141 ,LYK_NEXT_LINK 142 ,LYK_LPOS_PREV_LINK 143 ,LYK_LPOS_NEXT_LINK 144 ,LYK_FASTBACKW_LINK 145 ,LYK_FASTFORW_LINK 146 ,LYK_UP_LINK 147 ,LYK_DOWN_LINK 148 ,LYK_RIGHT_LINK 149 ,LYK_LEFT_LINK 150 ,LYK_HISTORY 151 ,LYK_PREV_DOC 152 ,LYK_NEXT_DOC 153 ,LYK_ACTIVATE 154 ,LYK_MOUSE_SUBMIT /* mostly like LYK_ACTIVATE, for mouse use, don't map */ 155 ,LYK_SUBMIT 156 ,LYK_RESET 157 ,LYK_GOTO 158 ,LYK_ECGOTO 159 ,LYK_HELP 160 ,LYK_DWIMHELP 161 ,LYK_INDEX 162 ,LYK_NOCACHE 163 ,LYK_INTERRUPT 164 ,LYK_MAIN_MENU 165 ,LYK_OPTIONS 166 ,LYK_INDEX_SEARCH 167 ,LYK_WHEREIS 168 ,LYK_PREV 169 ,LYK_NEXT 170 ,LYK_COMMENT 171 ,LYK_EDIT 172 ,LYK_INFO 173 ,LYK_PRINT 174 ,LYK_ADD_BOOKMARK 175 ,LYK_DEL_BOOKMARK 176 ,LYK_VIEW_BOOKMARK 177 ,LYK_VLINKS 178 ,LYK_SHELL 179 ,LYK_DOWNLOAD 180 ,LYK_TRACE_TOGGLE 181 ,LYK_TRACE_LOG 182 ,LYK_IMAGE_TOGGLE 183 ,LYK_INLINE_TOGGLE 184 ,LYK_HEAD 185 ,LYK_DO_NOTHING 186 ,LYK_TOGGLE_HELP 187 ,LYK_JUMP 188 ,LYK_KEYMAP 189 ,LYK_LIST 190 ,LYK_TOOLBAR 191 ,LYK_HISTORICAL 192 ,LYK_MINIMAL 193 ,LYK_SOFT_DQUOTES 194 ,LYK_RAW_TOGGLE 195 ,LYK_COOKIE_JAR 196 ,LYK_F_LINK_NUM 197 ,LYK_CLEAR_AUTH 198 ,LYK_SWITCH_DTD 199 ,LYK_ELGOTO 200 ,LYK_CHANGE_LINK 201 ,LYK_DWIMEDIT 202 ,LYK_EDIT_TEXTAREA 203 ,LYK_GROW_TEXTAREA 204 ,LYK_INSERT_FILE 205 206 #ifdef USE_ADDRLIST_PAGE 207 ,LYK_ADDRLIST 208 #else 209 #define LYK_ADDRLIST LYK_ADD_BOOKMARK 210 #endif 211 212 #ifdef USE_EXTERNALS 213 ,LYK_EXTERN_LINK 214 ,LYK_EXTERN_PAGE 215 #else 216 #define LYK_EXTERN_LINK LYK_UNKNOWN 217 #define LYK_EXTERN_PAGE LYK_UNKNOWN 218 #endif /* !defined(USE_EXTERNALS) */ 219 220 #if defined(VMS) || defined(DIRED_SUPPORT) 221 ,LYK_DIRED_MENU 222 #else 223 #define LYK_DIRED_MENU LYK_UNKNOWN 224 #endif /* VMS || DIRED_SUPPORT */ 225 226 #ifdef DIRED_SUPPORT 227 ,LYK_CREATE 228 ,LYK_REMOVE 229 ,LYK_MODIFY 230 ,LYK_TAG_LINK 231 ,LYK_UPLOAD 232 ,LYK_INSTALL 233 #else 234 #define LYK_TAG_LINK LYK_UNKNOWN 235 #endif /* DIRED_SUPPORT */ 236 237 ,LYK_CHG_CENTER 238 239 #ifdef KANJI_CODE_OVERRIDE 240 ,LYK_CHG_KCODE 241 #endif 242 243 #ifdef SUPPORT_CHDIR 244 ,LYK_CHDIR 245 ,LYK_PWD 246 #endif 247 248 #ifdef USE_CURSES_PADS 249 ,LYK_SHIFT_LEFT 250 ,LYK_SHIFT_RIGHT 251 ,LYK_LINEWRAP_TOGGLE 252 #else 253 #define LYK_SHIFT_LEFT LYK_UNKNOWN 254 #define LYK_SHIFT_RIGHT LYK_UNKNOWN 255 #define LYK_LINEWRAP_TOGGLE LYK_UNKNOWN 256 #endif 257 258 #ifdef CAN_CUT_AND_PASTE 259 ,LYK_PASTE_URL 260 ,LYK_TO_CLIPBOARD 261 #else 262 #define LYK_PASTE_URL LYK_UNKNOWN 263 #define LYK_TO_CLIPBOARD LYK_UNKNOWN 264 #endif 265 266 #ifdef EXP_NESTED_TABLES 267 ,LYK_NESTED_TABLES 268 #else 269 #define LYK_NESTED_TABLES LYK_UNKNOWN 270 #endif 271 272 #ifdef USE_CACHEJAR 273 ,LYK_CACHE_JAR 274 #else 275 #define LYK_CACHE_JAR LYK_UNKNOWN 276 #endif 277 278 #ifdef USE_MAXSCREEN_TOGGLE 279 ,LYK_MAXSCREEN_TOGGLE 280 #else 281 #define LYK_MAXSCREEN_TOGGLE LYK_UNKNOWN 282 #endif 283 284 } LYKeymapCode; 285 286 /* 287 * Symbol table for internal commands. 288 */ 289 typedef struct { 290 LYKeymapCode code; 291 const char *name; 292 const char *doc; 293 } Kcmd; 294 295 extern Kcmd *LYKeycodeToKcmd(LYKeymapCode code); 296 extern Kcmd *LYStringToKcmd(const char *name); 297 298 #ifdef __cplusplus 299 } 300 #endif 301 #endif /* LYKEYMAP_H */ 302