1 /*
2  *	(c) Copyright 1990, Kim Fabricius Storm.  All rights reserved.
3  *      Copyright (c) 1996-2003 Michael T Pins.  All rights reserved.
4  *
5  *	Keyboard (re)mapping
6  */
7 
8 #ifndef _NN_KEYMAP_H
9 #define _NN_KEYMAP_H 1
10 
11 #define K_INVALID		0x0000	/* unknown command (for lookup) */
12 
13 #define K_UNBOUND		0x0001	/* unbound command key 		 */
14 
15 #define K_REDRAW		0x0002	/* redraw 			 */
16 #define K_CONTINUE		0x0003	/* continue with next ... 	 */
17 #define K_LAST_MESSAGE		0x0004	/* repeat last message 		 */
18 #define K_HELP			0x0005	/* online help 			 */
19 #define K_SHELL			0x0006	/* shell escape 		 */
20 #define K_VERSION		0x0007	/* print version 		 */
21 #define K_EXTENDED_CMD		0x0008	/* extended commands		 */
22 
23 #define K_QUIT			0x0009	/* quit 			 */
24 
25 #define	K_BUG_REPORT		0x000a	/* send bug report */
26 
27 #define K_SAVE_HEADER_ONLY	0x0010	/* save header only		 */
28 #define K_SAVE_NO_HEADER 	0x0011	/* save articles without header */
29 #define K_SAVE_SHORT_HEADER 	0x0012	/* save article with short header */
30 #define K_SAVE_FULL_HEADER 	0x0013	/* save articles with full header */
31 
32 #define K_PRINT			0x0014	/* print ariticle 		 */
33 
34 #define K_UNSHAR		0x0015	/* unshar article		 */
35 
36 #define K_REPLY			0x0016	/* reply to article 		 */
37 #define K_FOLLOW_UP		0x0017	/* follow up to article 	 */
38 #define K_POST			0x0018	/* post an article		 */
39 #define K_MAIL_OR_FORWARD 	0x0019	/* mail (forward article) 	 */
40 #define K_CANCEL		0x001a	/* cancel article 		 */
41 #define K_UNSUBSCRIBE		0x001b	/* (un)subscribe to group 	 */
42 #define K_GROUP_OVERVIEW 	0x001c	/* group overview 		 */
43 #define K_PATCH			0x001d	/* pipe article to patch         */
44 #define	K_UUDECODE		0x001e	/* uudecode articles		 */
45 
46 #define K_GOTO_GROUP		0x001f	/* goto named group/folder	 */
47 
48 #define K_KILL_HANDLING		0x0020	/* enter kill menu		 */
49 
50  /* scrolling/menu movement */
51 
52 #define K_CONTINUE_NO_MARK	0x0021	/* as continue but don't mark seen */
53 #define K_JUNK_ARTICLES		0x0022	/* convert given attr to read	 */
54 #define K_SKIP_LINES		0x0023	/* skip lines of same type	 */
55 #define K_NEXT_PAGE		0x0024	/* next page 			 */
56 #define K_NEXT_HALF_PAGE 	0x0025	/* next half page		 */
57 #define K_NEXT_LINE		0x0026	/* next line			 */
58 #define K_PREV_PAGE		0x0027	/* previous page 		 */
59 #define K_PREV_HALF_PAGE 	0x0028	/* previous half page		 */
60 #define K_PREV_LINE		0x0029	/* previous line		 */
61 
62 #define K_HEADER_PAGE		0x002a	/* first page incl. header	 */
63 #define K_FIRST_PAGE		0x002b	/* first page 			 */
64 #define K_LAST_PAGE		0x002c	/* last page 			 */
65 
66 #define K_GOTO_LINE		0x002d	/* goto specific line		 */
67 #define K_GOTO_PAGE		0x002e	/* goto specific page		 */
68 #define K_GOTO_MATCH		0x002f	/* goto line matching regexp	 */
69 #define K_NEXT_MATCH		0x0030	/* find next match		 */
70 
71 #define K_PREVIOUS		0x0031	/* goto prev group or article	 */
72  /* (no update is performed)	 */
73 
74  /* more() SPECIFIC COMMANDS */
75 
76 #define K_LEAVE_ARTICLE		0x0032	/* goto next article, mark current */
77 #define K_LEAVE_NEXT		0x0033	/* mark current for next time	 */
78 #define K_NEXT_ARTICLE		0x0034	/* goto next article	 	 */
79 #define K_NEXT_SUBJECT		0x0035	/* goto next subject		 */
80 #define K_FULL_DIGEST		0x0036	/* show full digest		 */
81 #define K_ROT13			0x0037	/* do rot13 			 */
82 #define K_COMPRESS		0x0038	/* compress spaces		 */
83 #define K_BACK_TO_MENU		0x0039	/* return to menu */
84 #define	K_BACK_ARTICLE		0x003a	/* back one article		 */
85 #define	K_FORW_ARTICLE		0x003b	/* forward one article		 */
86 
87  /* menu() SPECIFIC COMMANDS	 */
88 
89 #define K_SELECT		0x0041	/* select current, move down 	 */
90 #define K_SELECT_INVERT		0x0042	/* invert all selections 	 */
91 #define K_SELECT_SUBJECT 	0x0043	/* select all with same subject */
92 #define K_SELECT_RANGE		0x0044	/* select range 		 */
93 #define K_AUTO_SELECT		0x0045	/* auto select from kill file	 */
94 #define K_UNSELECT_ALL		0x0046	/* undo all selections		 */
95 
96 #define K_LAYOUT		0x0049	/* change menu layout 		 */
97 
98 #define K_NEXT_GROUP_NO_UPDATE 	0x004a	/* goto next group, no update 	 */
99 #define K_READ_GROUP_UPDATE 	0x004b	/* read selected, then next group */
100 #define K_READ_GROUP_THEN_SAME	0x004c	/* read selected, then same group */
101 
102 #define K_ADVANCE_GROUP		0x004d	/* advance one group in sequence */
103 #define K_BACK_GROUP		0x004e	/* back-up one group in sequence */
104 
105 #define K_PREVIEW		0x004f	/* preview article 		 */
106 
107 #define K_OPEN_SUBJECT		0x0050	/* open subject on menu		 */
108 #define K_CLOSE_SUBJECT		0x0051	/* close subject on menu		 */
109 
110 #define K_M_TOGGLE		0x0060	/* page with mouse       	 */
111 #define K_M_CONTINUE		0x0061	/* page with mouse       	 */
112 #define K_M_SELECT		0x0062	/* select with mouse       	 */
113 #define K_M_SELECT_SUBJECT	0x0063	/* select subject        	 */
114 #define K_M_SELECT_RANGE	0x0064	/* used for draging a range     	 */
115 #define K_M_PREVIEW		0x0065	/* preview articles	     	 */
116 
117 #define	K_EQUAL_KEY		0x0070	/* map command special symbol	 */
118 
119 #define	K_MACRO			0x0100	/* call macro			 */
120 #define	K_ARTICLE_ID		0x0200	/* article id in lower part	 */
121 #define K_PREFIX_KEY		0x0400	/* key map number in lower part	 */
122 
123 /* keymap definitions from keymap.c */
124 
125 #define MULTI_KEYS	21
126 
127 /* restrictions */
128 
129 #define K_ONLY_MENU	0x0001
130 #define K_ONLY_MORE	0x0002
131 #define	K_BOTH_MAPS	0x0004	/* map flag: for "both" */
132 #define	K_BIND_ORIG	0x0008	/* map flag: must maintain orig_menu_map */
133 #define K_GLOBAL_KEY_MAP	0x0010	/* "key" */
134 #define	K_MULTI_KEY_MAP		0x0020	/* "#..." */
135 
136 typedef unsigned char key_type;
137 
138 extern int      menu_key_map[];
139 extern int      more_key_map[];
140 extern int      orig_menu_map[];
141 
142 extern key_type global_key_map[];
143 
144 struct key_map_def {
145     char           *km_name;	/* key map name */
146     int            *km_map;	/* key map table */
147 
148     int             km_flag;	/* flags */
149 };
150 
151 extern struct key_map_def keymaps[];
152 
153 void            init_key_map(void);
154 int             lookup_command(char *, int);
155 int             cmd_completion(char *, int);
156 char           *command_name(int);
157 key_type        parse_key(char *);
158 char           *key_name(key_type);
159 void            dump_global_map(void);
160 int             dump_key_map(char *);
161 int             lookup_keymap(char *);
162 int             make_keymap(char *);
163 int             keymap_completion(char *, int);
164 #endif				/* _NN_KEYMAP_H */
165