about summary refs log tree commit diff stats
path: root/src/LYKeymap.h
diff options
context:
space:
mode:
authorThomas E. Dickey <dickey@invisible-island.net>2010-05-03 00:45:10 -0400
committerThomas E. Dickey <dickey@invisible-island.net>2010-05-03 00:45:10 -0400
commit903885454167e86ce4cb967f901cbaf741f21501 (patch)
tree90a46f9f1e6c6194c8f43bbb4aa81e1e50e7e2fe /src/LYKeymap.h
parentdc748b1c47baadafae2c90f0e188927b11b7e029 (diff)
downloadlynx-snapshots-903885454167e86ce4cb967f901cbaf741f21501.tar.gz
snapshot of project "lynx", label v2-8-8dev_3c
Diffstat (limited to 'src/LYKeymap.h')
-rw-r--r--src/LYKeymap.h290
1 files changed, 290 insertions, 0 deletions
diff --git a/src/LYKeymap.h b/src/LYKeymap.h
new file mode 100644
index 00000000..aa49c17b
--- /dev/null
+++ b/src/LYKeymap.h
@@ -0,0 +1,290 @@
+#ifndef LYKEYMAP_H
+#define LYKEYMAP_H
+
+#include <HTUtils.h>
+#include <HTList.h>
+#include <LYCurses.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    extern BOOLEAN LYisNonAlnumKeyname(int ch, int KeyName);
+    extern HTList *LYcommandList(void);
+    extern char *LYKeycodeToString(int c, BOOLEAN upper8);
+    extern char *fmt_keys(int lkc_first, int lkc_second);
+    extern char *key_for_func(int func);
+    extern char *key_for_func_ext(int lac, int context_code);
+    extern int LYReverseKeymap(int KeyName);
+    extern int LYStringToKeycode(char *src);
+    extern int lacname_to_lac(const char *func);
+    extern int lecname_to_lec(const char *func);
+    extern int lkcstring_to_lkc(const char *src);
+    extern int remap(char *key, const char *func, BOOLEAN for_dired);
+    extern void print_keymap(char **newfile);
+    extern void reset_emacs_keys(void);
+    extern void reset_numbers_as_arrows(void);
+    extern void reset_vi_keys(void);
+    extern void set_emacs_keys(void);
+    extern void set_numbers_as_arrows(void);
+    extern void set_vi_keys(void);
+    extern void set_vms_keys(void);
+
+/* 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 const char *LYKbLayoutNames[];
+    extern int LYSetKbLayout(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)-1)
+    /* mask for lynxactioncode - must cover all
+       assigned LYK_* values */
+
+/*  Return lkc masking single actioncode, given an lkc masking a lac + lec */
+#define LKC2_TO_LKC(c)   (((c) == -1 || !((c) & LKC_ISLECLAC)) ? (c) : \
+			    (((c) & LAC_MASK) | LKC_ISLAC))
+
+/*  Return lynxeditactioncode, given an lkc masking a lac + lec */
+#define LKC2_TO_LEC(c)   (((c) == -1 || !((c) & LKC_ISLECLAC)) ? (c) : \
+			    ((((c)&~LKC_ISLECLAC)>>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)<<LAC_SHIFT)|LKC_ISLECLAC)
+
+/*  Convert lynxactioncode to a lynxkeycode, attempting reverse mapping.  */
+#define LAC_TO_LKC(a) ((LYReverseKeymap(a)>=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 */
+
+	,LYK_CHG_CENTER
+
+#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
+
+#ifdef USE_CACHEJAR
+	,LYK_CACHE_JAR
+#else
+#define LYK_CACHE_JAR LYK_UNKNOWN
+#endif
+
+    } LYKeymapCode;
+
+/*
+ * Symbol table for internal commands.
+ */
+    typedef struct {
+	LYKeymapCode code;
+	const char *name;
+	const char *doc;
+    } Kcmd;
+
+    extern Kcmd *LYKeycodeToKcmd(LYKeymapCode code);
+    extern Kcmd *LYStringToKcmd(const char *name);
+
+#ifdef __cplusplus
+}
+#endif
+#endif				/* LYKEYMAP_H */