File: keymap.h

package info (click to toggle)
tin 1%3A2.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 12,184 kB
  • ctags: 7,950
  • sloc: ansic: 78,418; sh: 3,805; makefile: 1,483; yacc: 1,020; perl: 861
file content (439 lines) | stat: -rw-r--r-- 14,068 bytes parent folder | download
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
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
/*
 *  Project   : tin - a Usenet reader
 *  Module    : keymap.h
 *  Author    : J. Faultless, D. Nimmich
 *  Created   : 1999
 *  Updated   : 2011-01-25
 *  Notes     :
 *
 * Copyright (c) 1999-2014 Jason Faultless <jason@altarstone.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. The name of the author may not be used to endorse or promote
 *    products derived from this software without specific prior written
 *    permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */


#ifndef KEYMAP_H
#	define KEYMAP_H 1

/* Revised 9 October 1996 by Branden Robinson in ASCII order
 *
 *        Oct   Dec   Hex   Char           Oct   Dec   Hex   Char
 *        ------------------------------------------------------------
 *        000   0     00    NUL '\0'       100   64    40    @
 *        001   1     01    SOH      ^A    101   65    41    A
 *        002   2     02    STX      ^B    102   66    42    B
 *        003   3     03    ETX      ^C    103   67    43    C
 *        004   4     04    EOT      ^D    104   68    44    D
 *        005   5     05    ENQ      ^E    105   69    45    E
 *        006   6     06    ACK      ^F    106   70    46    F
 *        007   7     07    BEL '\a' ^G    107   71    47    G
 *        010   8     08    BS  '\b' ^H    110   72    48    H
 *        011   9     09    HT  '\t' ^I    111   73    49    I
 *        012   10    0A    LF  '\n' ^J    112   74    4A    J
 *        013   11    0B    VT  '\v' ^K    113   75    4B    K
 *        014   12    0C    FF  '\f' ^L    114   76    4C    L
 *        015   13    0D    CR  '\r' ^M    115   77    4D    M
 *        016   14    0E    SO       ^N    116   78    4E    N
 *        017   15    0F    SI       ^O    117   79    4F    O
 *        020   16    10    DLE      ^P    120   80    50    P
 *        021   17    11    DC1      ^Q    121   81    51    Q
 *        022   18    12    DC2      ^R    122   82    52    R
 *        023   19    13    DC3      ^S    123   83    53    S
 *        024   20    14    DC4      ^T    124   84    54    T
 *        025   21    15    NAK      ^U    125   85    55    U
 *        026   22    16    SYN      ^V    126   86    56    V
 *        027   23    17    ETB      ^W    127   87    57    W
 *        030   24    18    CAN      ^X    130   88    58    X
 *        031   25    19    EM       ^Y    131   89    59    Y
 *        032   26    1A    SUB      ^Z    132   90    5A    Z
 *        033   27    1B    ESC            133   91    5B    [
 *        034   28    1C    FS             134   92    5C    \   '\\'
 *        035   29    1D    GS             135   93    5D    ]
 *        036   30    1E    RS             136   94    5E    ^
 *        037   31    1F    US             137   95    5F    _
 *        040   32    20    SPACE          140   96    60    `
 *        041   33    21    !              141   97    61    a
 *        042   34    22    "              142   98    62    b
 *        043   35    23    #              143   99    63    c
 *        044   36    24    $              144   100   64    d
 *        045   37    25    %              145   101   65    e
 *        046   38    26    &              146   102   66    f
 *        047   39    27    '              147   103   67    g
 *        050   40    28    (              150   104   68    h
 *        051   41    29    )              151   105   69    i
 *        052   42    2A    *              152   106   6A    j
 *        053   43    2B    +              153   107   6B    k
 *        054   44    2C    ,              154   108   6C    l
 *        055   45    2D    -              155   109   6D    m
 *        056   46    2E    .              156   110   6E    n
 *        057   47    2F    /              157   111   6F    o
 *        060   48    30    0              160   112   70    p
 *        061   49    31    1              161   113   71    q
 *        062   50    32    2              162   114   72    r
 *        063   51    33    3              163   115   73    s
 *        064   52    34    4              164   116   74    t
 *        065   53    35    5              165   117   75    u
 *        066   54    36    6              166   118   76    v
 *        067   55    37    7              167   119   77    w
 *        070   56    38    8              170   120   78    x
 *        071   57    39    9              171   121   79    y
 *        072   58    3A    :              172   122   7A    z
 *        073   59    3B    ;              173   123   7B    {
 *        074   60    3C    <              174   124   7C    |
 *        075   61    3D    =              175   125   7D    }
 *        076   62    3E    >              176   126   7E    ~
 *        077   63    3F    ?              177   127   7F    DEL
 *
 * Above chart reprinted from Linux manual page.
 *
 * When adding key functionality, be aware of key functions in the "big five"
 * levels of tin operation: top (group selection), group, thread, article
 * (pager), and help.  If possible, when adding a key to any of these levels,
 * check the others to make sure that the key doesn't do something
 * non-analogous elsewhere.  For instance, having "^R" map to "redraw screen"
 * at article level and "reset .newsrc" (a drastic and unreversible action)
 * at top level is a bad idea.
 *
 * [make emacs happy: "]
 */

/*
 * Maximum chars (including null byte) needed to print a key name
 * A multibyte character can use up to MB_CUR_MAX chars. But as MB_CUR_MAX
 * can't be used here, use MB_LEN_MAX instead.
 * Some values for MB_LEN_MAX:
 * - glibc 2.3.5: 16
 * - gcc 4.0: 1
 * - icc 8.0/9.0: 8
 * Use the largest + 1 to be on the safe side.
 */
#define MAXKEYLEN 17

/* TODO: permanently move here from tin.h */
#define ctrl(c)	((c) & 0x1F)
#define ESC		27

/* TODO: get rid of these remaining #define */
#define iKeyAbort ESC
#define iKeyQuitTin 'Q'
#define iKeyQuit 'q'

/* complete list of functions which can be associated with keys */
enum defined_functions {
	NOT_ASSIGNED = 0,
	DIGIT_0,
	DIGIT_1,
	DIGIT_2,
	DIGIT_3,
	DIGIT_4,
	DIGIT_5,
	DIGIT_6,
	DIGIT_7,
	DIGIT_8,
	DIGIT_9,
	ATTACHMENT_PIPE,
	ATTACHMENT_SAVE,
	ATTACHMENT_SELECT,
	ATTACHMENT_TAG,
	ATTACHMENT_TAG_PATTERN,
	ATTACHMENT_TOGGLE_TAGGED,
	ATTACHMENT_UNTAG,
	SPECIAL_CATCHUP_LEFT,
	SPECIAL_MOUSE_TOGGLE,
	CATCHUP,
	CATCHUP_NEXT_UNREAD,
	CONFIG_RESET_ATTRIB,
	CONFIG_SCOPE_MENU,
	CONFIG_SELECT,
	CONFIG_NO_SAVE,
	CONFIG_TOGGLE_ATTRIB,
	FEED_ARTICLE,
	FEED_THREAD,
	FEED_HOT,
	FEED_PATTERN,
	FEED_RANGE,
	FEED_TAGGED,
	FEED_KEY_REPOST,
	FEED_SUPERSEDE,
	FILTER_EDIT,
	FILTER_SAVE,
	GLOBAL_ABORT,
	GLOBAL_BUGREPORT,
	GLOBAL_DISPLAY_POST_HISTORY,
	GLOBAL_EDIT_FILTER,
	GLOBAL_FIRST_PAGE,
	GLOBAL_HELP,
	GLOBAL_LAST_PAGE,
	GLOBAL_LAST_VIEWED,
	GLOBAL_LINE_DOWN,
	GLOBAL_LINE_UP,
	GLOBAL_LOOKUP_MESSAGEID,
	GLOBAL_MENU_FILTER_KILL,
	GLOBAL_MENU_FILTER_SELECT,
	GLOBAL_OPTION_MENU,
	GLOBAL_PAGE_DOWN,
	GLOBAL_PAGE_UP,
	GLOBAL_PIPE,
	GLOBAL_POST,
	GLOBAL_POSTPONED,
#ifndef DISABLE_PRINTING
	GLOBAL_PRINT,
#endif /* !DISABLE_PRINTING */
	GLOBAL_QUICK_FILTER_KILL,
	GLOBAL_QUICK_FILTER_SELECT,
	GLOBAL_QUIT,
	GLOBAL_QUIT_TIN,
	GLOBAL_REDRAW_SCREEN,
	GLOBAL_SCROLL_DOWN,
	GLOBAL_SCROLL_UP,
	GLOBAL_SEARCH_BODY,
	GLOBAL_SEARCH_REPEAT,
	GLOBAL_SEARCH_AUTHOR_BACKWARD,
	GLOBAL_SEARCH_AUTHOR_FORWARD,
	GLOBAL_SEARCH_SUBJECT_BACKWARD,
	GLOBAL_SEARCH_SUBJECT_FORWARD,
	GLOBAL_SET_RANGE,
#ifndef NO_SHELL_ESCAPE
	GLOBAL_SHELL_ESCAPE,
#endif /* !NO_SHELL_ESCAPE */
#ifdef HAVE_COLOR
	GLOBAL_TOGGLE_COLOR,
#endif /* HAVE_COLOR */
	GLOBAL_TOGGLE_HELP_DISPLAY,
	GLOBAL_TOGGLE_INFO_LAST_LINE,
	GLOBAL_TOGGLE_INVERSE_VIDEO,
	GLOBAL_VERSION,
	GROUP_AUTOSAVE,
	GROUP_CANCEL,
	GROUP_DO_AUTOSELECT,
	GROUP_GOTO,
	GROUP_LIST_THREAD,
	GROUP_MAIL,
	GROUP_MARK_THREAD_READ,
	GROUP_MARK_UNSELECTED_ARTICLES_READ,
	GROUP_NEXT_GROUP,
	GROUP_NEXT_UNREAD_ARTICLE,
	GROUP_NEXT_UNREAD_ARTICLE_OR_GROUP,
	GROUP_PREVIOUS_GROUP,
	GROUP_PREVIOUS_UNREAD_ARTICLE,
	GROUP_READ_BASENOTE,
	GROUP_REPOST,
	GROUP_REVERSE_SELECTIONS,
	GROUP_SAVE,
	GROUP_SELECT_PATTERN,
	GROUP_SELECT_THREAD,
	GROUP_SELECT_THREAD_IF_UNREAD_SELECTED,
	GROUP_TAG,
	GROUP_TAG_PARTS,
	GROUP_TOGGLE_GET_ARTICLES_LIMIT,
	GROUP_TOGGLE_READ_UNREAD,
	GROUP_TOGGLE_SUBJECT_DISPLAY,
	GROUP_TOGGLE_SELECT_THREAD,
	GROUP_TOGGLE_THREADING,
	GROUP_UNDO_SELECTIONS,
	GROUP_UNTAG,
	MARK_ARTICLE_UNREAD,
	MARK_THREAD_UNREAD,
	MARK_FEED_READ,
	MARK_FEED_UNREAD,
	PAGE_AUTOSAVE,
	PAGE_BOTTOM_THREAD,
	PAGE_CANCEL,
	PAGE_EDIT_ARTICLE,
	PAGE_FOLLOWUP,
	PAGE_FOLLOWUP_QUOTE,
	PAGE_FOLLOWUP_QUOTE_HEADERS,
	PAGE_GOTO_PARENT,
	PAGE_GROUP_SELECT,
	PAGE_LIST_THREAD,
	PAGE_MAIL,
	PAGE_MARK_THREAD_READ,
	PAGE_NEXT_ARTICLE,
	PAGE_NEXT_THREAD,
	PAGE_NEXT_UNREAD,
	PAGE_NEXT_UNREAD_ARTICLE,
#ifdef HAVE_PGP_GPG
	PAGE_PGP_CHECK_ARTICLE,
#endif /* HAVE_PGP_GPG */
	PAGE_PREVIOUS_ARTICLE,
	PAGE_PREVIOUS_UNREAD_ARTICLE,
	PAGE_REVEAL,
	PAGE_REPLY,
	PAGE_REPLY_QUOTE,
	PAGE_REPLY_QUOTE_HEADERS,
	PAGE_REPOST,
	PAGE_SAVE,
	PAGE_SKIP_INCLUDED_TEXT,
	PAGE_TAG,
	PAGE_TOGGLE_HEADERS,
	PAGE_TOGGLE_HIGHLIGHTING,
	PAGE_TOGGLE_RAW,
	PAGE_TOGGLE_ROT13,
	PAGE_TOGGLE_TABS,
	PAGE_TOGGLE_TEX2ISO,
	PAGE_TOGGLE_UUE,
	PAGE_TOP_THREAD,
	PAGE_VIEW_ATTACHMENTS,
	PAGE_VIEW_URL,
#ifdef HAVE_PGP_GPG
	PGP_KEY_ENCRYPT,
	PGP_KEY_ENCRYPT_SIGN,
	PGP_INCLUDE_KEY,
	PGP_KEY_SIGN,
#endif /* HAVE_PGP_GPG */
	POST_ABORT,
	POST_CANCEL,
	POST_CONTINUE,
	POST_EDIT,
	POST_IGNORE_FUPTO,
#ifdef HAVE_ISPELL
	POST_ISPELL,
#endif /* HAVE_ISPELL */
	POST_MAIL,
#ifdef HAVE_PGP_GPG
	POST_PGP,
#endif /* HAVE_PGP_GPG */
	POST_POSTPONE,
	POST_SEND,
	POST_SUPERSEDE,
	POSTPONE_ALL,
	POSTPONE_OVERRIDE,
	POSTPROCESS_NO,
	POSTPROCESS_SHAR,
	POSTPROCESS_YES,
	PROMPT_NO,
	PROMPT_YES,
	SAVE_APPEND_FILE,
	SAVE_OVERWRITE_FILE,
	SCOPE_ADD,
	SCOPE_DELETE,
	SCOPE_EDIT_ATTRIBUTES_FILE,
	SCOPE_MOVE,
	SCOPE_RENAME,
	SCOPE_SELECT,
	SELECT_ENTER_GROUP,
	SELECT_ENTER_NEXT_UNREAD_GROUP,
	SELECT_GOTO,
	SELECT_MARK_GROUP_UNREAD,
	SELECT_MOVE_GROUP,
	SELECT_NEXT_UNREAD_GROUP,
	SELECT_RESET_NEWSRC,
	SELECT_SORT_ACTIVE,
	SELECT_SUBSCRIBE,
	SELECT_SUBSCRIBE_PATTERN,
	SELECT_SYNC_WITH_ACTIVE,
	SELECT_TOGGLE_DESCRIPTIONS,
	SELECT_TOGGLE_READ_DISPLAY,
	SELECT_UNSUBSCRIBE,
	SELECT_UNSUBSCRIBE_PATTERN,
	SELECT_QUIT_NO_WRITE,
	SELECT_YANK_ACTIVE,
	THREAD_AUTOSAVE,
	THREAD_CANCEL,
	THREAD_MAIL,
	THREAD_MARK_ARTICLE_READ,
	THREAD_READ_NEXT_ARTICLE_OR_THREAD,
	THREAD_READ_ARTICLE,
	THREAD_REVERSE_SELECTIONS,
	THREAD_SAVE,
	THREAD_SELECT_ARTICLE,
	THREAD_TAG,
	THREAD_TOGGLE_ARTICLE_SELECTION,
	THREAD_TOGGLE_SUBJECT_DISPLAY,
	THREAD_UNDO_SELECTIONS,
	THREAD_UNTAG,
	URL_SELECT
};
typedef enum defined_functions t_function;


struct keynode {
#if defined(MULTIBYTE_ABLE) && !defined(NO_LOCALE)
	wchar_t key;
#else
	char key;
#endif /* MULTIBYTE_ABLE && !NO_LOCALE */
	t_function function;
};


struct keylist {
	struct keynode *list;
	size_t used;
	size_t max;
};


extern struct keylist attachment_keys;
extern struct keylist feed_post_process_keys;
extern struct keylist feed_supersede_article_keys;
extern struct keylist feed_type_keys;
extern struct keylist filter_keys;
extern struct keylist group_keys;
extern struct keylist info_keys;
extern struct keylist option_menu_keys;
extern struct keylist page_keys;
#ifdef HAVE_PGP_GPG
	extern struct keylist pgp_mail_keys;
	extern struct keylist pgp_news_keys;
#endif /* HAVE_PGP_GPG */
extern struct keylist post_cancel_keys;
extern struct keylist post_continue_keys;
extern struct keylist post_delete_keys;
extern struct keylist post_edit_keys;
extern struct keylist post_edit_ext_keys;
extern struct keylist post_ignore_fupto_keys;
extern struct keylist post_mail_fup_keys;
extern struct keylist post_post_keys;
extern struct keylist post_postpone_keys;
extern struct keylist post_send_keys;
extern struct keylist prompt_keys;
extern struct keylist save_append_overwrite_keys;
extern struct keylist scope_keys;
extern struct keylist select_keys;
extern struct keylist thread_keys;
extern struct keylist url_keys;


extern t_function global_mouse_action(t_function (*left_action) (void), t_function (*right_action) (void));
extern t_function handle_keypad(
	t_function (*left_action) (void),
	t_function (*right_action) (void),
	t_function (*mouse_action) (
		t_function (*left_action) (void),
		t_function (*right_action) (void)),
	const struct keylist keys);
extern t_function prompt_slk_response(t_function default_func, const struct keylist keys, const char *fmt, ...);
#if defined(MULTIBYTE_ABLE) && !defined(NO_LOCALE)
	extern char *printascii(char *buf, wint_t ch);
	extern wchar_t func_to_key(t_function func, const struct keylist keys);
	extern t_function key_to_func(const wchar_t key, const struct keylist keys);
#else
	extern char *printascii(char *buf, int ch);
	extern char func_to_key (t_function func, const struct keylist keys);
	extern t_function key_to_func (const char key, const struct keylist keys);
#endif /* MULTIBYTE_ABLE && !NO_LOCALE */
#endif /* !KEYMAP_H */