about summary refs log tree commit diff stats
path: root/src/LYKeymap.h
blob: 518864fe342e1122d20df21073b39b9837c28385 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#ifndef LYKEYMAP_H
#define LYKEYMAP_H

#ifndef HTUTILS_H
#include <HTUtils.h>
#endif

extern BOOLEAN LYisNonAlnumKeyname PARAMS((int ch, int key_name));
extern char *key_for_func PARAMS((int func));
extern int LYReverseKeymap PARAMS((int key_name));
extern int lookup_keymap PARAMS((int code));
extern int lacname_to_lac PARAMS((CONST char *func));
extern int lkcstring_to_lkc PARAMS((CONST char *src));
extern int remap PARAMS((char *key, char *func));
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
extern int current_layout;
extern LYKeymap_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_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 */
#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_MASK	0x00FF	/* mask for lynxactioncode - must cover all
				   assigned LYK_* values */


/*  Convert lynxkeycode to lynxactioncode.  Modifiers are dropped.  */
#define LKC_TO_LAC(ktab,c) (((c) == -1) ? ktab[0] : \
			    ((c) & LKC_ISLAC) ? ((c) & LAC_MASK) : \
			    ktab[((c) & LKC_MASK) + 1])


/*  Mask lynxactioncode as a lynxkeycode.  */
#define LAC_TO_LKC0(a) ((a)|LKC_ISLAC)

/*  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 masked lynxactioncode, drop modifiers.  */
#define LKC_TO_C(c) ((c&LKC_ISLAC)? LAC_TO_LKC(c&LAC_MASK) : (c&LKC_MASK))

#define LKC_HAS_ESC_MOD(c) (c >= 0 && (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 order of this enum must match the 'revmap[]' array in LYKeymap.c */
typedef enum {
    LYK_UNKNOWN=0
  , LYK_1
  , LYK_2
  , LYK_3
  , LYK_4
  , LYK_5
  , LYK_6
  , LYK_7
  , LYK_8
  , LYK_9
  , LYK_SOURCE
  , LYK_RELOAD
  , LYK_PIPE
  , 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_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_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_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
#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
  , LYK_TO_CLIPBOARD
  , LYK_CHG_KCODE
#endif /* SH_EX */

} LYKeymapCodes;


#endif /* LYKEYMAP_H */