1 /* $LynxId: LYKeymap.h,v 1.55 2015/10/07 23:34:55 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 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 BOOLEAN 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 /* readable mapping for characters in edit- and key-maps */ 56 #define CTL(c) ((c) & 0x1f) 57 #define KHR(c) ((c) + 1) 58 #define KTL(c) (CTL(c) + 1) 59 60 /* * * LynxKeyCodes * * */ 61 #define LKC_ISLECLAC 0x8000 /* flag: contains lynxaction + editaction */ 62 #define LKC_MOD1 0x4000 /* a modifier bit - currently for ^x-map */ 63 #define LKC_MOD2 0x2000 /* another one - currently for esc-map */ 64 #define LKC_MOD3 0x1000 /* another one - currently for double-map */ 65 #define LKC_ISLAC 0x0800 /* flag: lynxkeycode already lynxactioncode */ 66 67 /* Used to distinguish internal Lynx keycodes of (say) extended ncurses once. */ 68 #define LKC_ISLKC 0x0400 /* flag: already lynxkeycode (not native) */ 69 /* 0x0400 is MOUSE_KEYSYM for slang in LYStrings.c */ 70 #define LKC_MASK 0x07FF /* mask for lynxkeycode proper */ 71 72 #define LKC_DONE 0x07FE /* special value - operation done, not-a-key */ 73 74 /* * * LynxActionCodes * * */ 75 #define LAC_SHIFT 8 /* shift for lynxactioncode - must not 76 overwrite any assigned LYK_* values */ 77 #define LAC_MASK ((1<<LAC_SHIFT)-1) 78 /* mask for lynxactioncode - must cover all 79 assigned LYK_* values */ 80 81 /* Return lkc masking single actioncode, given an lkc masking a lac + lec */ 82 #define LKC2_TO_LKC(c) (((c) == -1 || !((c) & LKC_ISLECLAC)) ? (c) : \ 83 (((c) & LAC_MASK) | LKC_ISLAC)) 84 85 /* Return lynxeditactioncode, given an lkc masking a lac + lec */ 86 #define LKC2_TO_LEC(c) (((c) == -1 || !((c) & LKC_ISLECLAC)) ? (c) : \ 87 ((((c)&~LKC_ISLECLAC)>>LAC_SHIFT) & LAC_MASK)) 88 89 /* Convert lynxkeycode to lynxactioncode. Modifiers are dropped. */ 90 #define LKC_TO_LAC(ktab,c) (((c) == -1) ? ktab[0] : \ 91 ((c) & (LKC_ISLECLAC|LKC_ISLAC)) ? ((c) & LAC_MASK) : \ 92 ktab[((c) & LKC_MASK) + 1]) 93 94 /* Mask lynxactioncode as a lynxkeycode. */ 95 #define LAC_TO_LKC0(a) ((a)|LKC_ISLAC) 96 97 /* Mask a lynxactioncode and an editactioncode as a lynxkeycode. */ 98 #define LACLEC_TO_LKC0(a,b) ((a)|((b)<<LAC_SHIFT)|LKC_ISLECLAC) 99 100 /* Convert lynxactioncode to a lynxkeycode, attempting reverse mapping. */ 101 #define LAC_TO_LKC(a) ((LYReverseKeymap(a)>=0)?LYReverseKeymap(a):LAC_TO_LKC0(a)) 102 103 /* Simplify a lynxkeycode: 104 attempt reverse mapping if a single masked lynxactioncode, drop modifiers. */ 105 #define LKC_TO_C(c) ((c&LKC_ISLECLAC)? c : (c&LKC_ISLAC)? LAC_TO_LKC(c&LAC_MASK) : (c&LKC_MASK)) 106 107 #define LKC_HAS_ESC_MOD(c) (c >= 0 && !(c&LKC_ISLECLAC) && (c&LKC_MOD2)) 108 109 /* * The defined LynxActionCodes * */ 110 111 /* Variables for holding and passing around lynxactioncodes are generally of 112 * type int, the types LYKeymap_t and LYKeymapCodes are currently only used for 113 * the definitions. That could change. - kw 114 * 115 * The values in this enum are indexed against the command names in the 116 * 'revmap[]' array in LYKeymap.c 117 */ 118 typedef enum { 119 LYK_UNKNOWN = 0 120 ,LYK_COMMAND 121 ,LYK_1 122 ,LYK_2 123 ,LYK_3 124 ,LYK_4 125 ,LYK_5 126 ,LYK_6 127 ,LYK_7 128 ,LYK_8 129 ,LYK_9 130 ,LYK_SOURCE 131 ,LYK_RELOAD 132 ,LYK_QUIT 133 ,LYK_ABORT 134 ,LYK_NEXT_PAGE 135 ,LYK_PREV_PAGE 136 ,LYK_UP_TWO 137 ,LYK_DOWN_TWO 138 ,LYK_UP_HALF 139 ,LYK_DOWN_HALF 140 ,LYK_REFRESH 141 ,LYK_HOME 142 ,LYK_END 143 ,LYK_FIRST_LINK 144 ,LYK_LAST_LINK 145 ,LYK_PREV_LINK 146 ,LYK_NEXT_LINK 147 ,LYK_LPOS_PREV_LINK 148 ,LYK_LPOS_NEXT_LINK 149 ,LYK_FASTBACKW_LINK 150 ,LYK_FASTFORW_LINK 151 ,LYK_UP_LINK 152 ,LYK_DOWN_LINK 153 ,LYK_RIGHT_LINK 154 ,LYK_LEFT_LINK 155 ,LYK_HISTORY 156 ,LYK_PREV_DOC 157 ,LYK_NEXT_DOC 158 ,LYK_ACTIVATE 159 ,LYK_MOUSE_SUBMIT /* mostly like LYK_ACTIVATE, for mouse use, don't map */ 160 ,LYK_SUBMIT 161 ,LYK_RESET 162 ,LYK_GOTO 163 ,LYK_ECGOTO 164 ,LYK_HELP 165 ,LYK_DWIMHELP 166 ,LYK_INDEX 167 ,LYK_NOCACHE 168 ,LYK_INTERRUPT 169 ,LYK_MAIN_MENU 170 ,LYK_OPTIONS 171 ,LYK_INDEX_SEARCH 172 ,LYK_WHEREIS 173 ,LYK_PREV 174 ,LYK_NEXT 175 ,LYK_COMMENT 176 ,LYK_EDIT 177 ,LYK_INFO 178 ,LYK_PRINT 179 ,LYK_ADD_BOOKMARK 180 ,LYK_DEL_BOOKMARK 181 ,LYK_VIEW_BOOKMARK 182 ,LYK_VLINKS 183 ,LYK_SHELL 184 ,LYK_DOWNLOAD 185 ,LYK_TRACE_TOGGLE 186 ,LYK_TRACE_LOG 187 ,LYK_IMAGE_TOGGLE 188 ,LYK_INLINE_TOGGLE 189 ,LYK_HEAD 190 ,LYK_DO_NOTHING 191 ,LYK_TOGGLE_HELP 192 ,LYK_JUMP 193 ,LYK_EDITMAP 194 ,LYK_KEYMAP 195 ,LYK_LIST 196 ,LYK_TOOLBAR 197 ,LYK_HISTORICAL 198 ,LYK_MINIMAL 199 ,LYK_SOFT_DQUOTES 200 ,LYK_RAW_TOGGLE 201 ,LYK_COOKIE_JAR 202 ,LYK_F_LINK_NUM 203 ,LYK_CLEAR_AUTH 204 ,LYK_SWITCH_DTD 205 ,LYK_ELGOTO 206 ,LYK_CHANGE_LINK 207 ,LYK_DWIMEDIT 208 ,LYK_EDITTEXTAREA 209 ,LYK_GROWTEXTAREA 210 ,LYK_INSERTFILE 211 212 #ifdef USE_ADDRLIST_PAGE 213 ,LYK_ADDRLIST 214 #else 215 #define LYK_ADDRLIST LYK_ADD_BOOKMARK 216 #endif 217 218 #ifdef USE_EXTERNALS 219 ,LYK_EXTERN_LINK 220 ,LYK_EXTERN_PAGE 221 #else 222 #define LYK_EXTERN_LINK LYK_UNKNOWN 223 #define LYK_EXTERN_PAGE LYK_UNKNOWN 224 #endif /* !defined(USE_EXTERNALS) */ 225 226 #if defined(VMS) || defined(DIRED_SUPPORT) 227 ,LYK_DIRED_MENU 228 #else 229 #define LYK_DIRED_MENU LYK_UNKNOWN 230 #endif /* VMS || DIRED_SUPPORT */ 231 232 #ifdef DIRED_SUPPORT 233 ,LYK_CREATE 234 ,LYK_REMOVE 235 ,LYK_MODIFY 236 ,LYK_TAG_LINK 237 ,LYK_UPLOAD 238 ,LYK_INSTALL 239 #else 240 #define LYK_TAG_LINK LYK_UNKNOWN 241 #endif /* DIRED_SUPPORT */ 242 243 ,LYK_CHANGE_CENTER 244 245 #ifdef KANJI_CODE_OVERRIDE 246 ,LYK_CHANGE_KCODE 247 #endif 248 249 #ifdef SUPPORT_CHDIR 250 ,LYK_CHDIR 251 ,LYK_PWD 252 #endif 253 254 #ifdef USE_CURSES_PADS 255 ,LYK_SHIFT_LEFT 256 ,LYK_SHIFT_RIGHT 257 ,LYK_LINEWRAP_TOGGLE 258 #else 259 #define LYK_SHIFT_LEFT LYK_UNKNOWN 260 #define LYK_SHIFT_RIGHT LYK_UNKNOWN 261 #define LYK_LINEWRAP_TOGGLE LYK_UNKNOWN 262 #endif 263 264 #ifdef CAN_CUT_AND_PASTE 265 ,LYK_PASTE_URL 266 ,LYK_TO_CLIPBOARD 267 #else 268 #define LYK_PASTE_URL LYK_UNKNOWN 269 #define LYK_TO_CLIPBOARD LYK_UNKNOWN 270 #endif 271 272 #ifdef EXP_NESTED_TABLES 273 ,LYK_NESTED_TABLES 274 #else 275 #define LYK_NESTED_TABLES LYK_UNKNOWN 276 #endif 277 278 #ifdef USE_CACHEJAR 279 ,LYK_CACHE_JAR 280 #else 281 #define LYK_CACHE_JAR LYK_UNKNOWN 282 #endif 283 284 #ifdef USE_MAXSCREEN_TOGGLE 285 ,LYK_MAXSCREEN_TOGGLE 286 #else 287 #define LYK_MAXSCREEN_TOGGLE LYK_UNKNOWN 288 #endif 289 290 } LYKeymapCode; 291 292 /* 293 * Symbol table for internal commands. 294 */ 295 typedef struct { 296 LYKeymapCode code; 297 const char *name; 298 const char *doc; 299 } Kcmd; 300 301 extern Kcmd *LYKeycodeToKcmd(LYKeymapCode code); 302 extern Kcmd *LYStringToKcmd(const char *name); 303 304 #ifdef __cplusplus 305 } 306 #endif 307 #endif /* LYKEYMAP_H */ 308