source: keys.c @ aa5f725

barnowl_perlaimdebianowlrelease-1.4release-1.5release-1.6release-1.7release-1.8release-1.9
Last change on this file since aa5f725 was aa5f725, checked in by James M. Kretchmar <kretch@mit.edu>, 18 years ago
added buddylists added the 'alist' command to print logged in aimusers added the 'blist' command which prints buddies logged in from all protocols. 'l' is now bound to 'blist' by default
  • Property mode set to 100644
File size: 12.5 KB
Line 
1#include "owl.h"
2
3static const char fileIdent[] = "$Id$";
4
5#define BIND_CMD(kpress, command, desc) \
6         owl_keymap_create_binding(km, kpress, command, NULL, desc);
7
8#define BIND_FNV(kpress, fn, desc) \
9         owl_keymap_create_binding(km, kpress, NULL, fn, desc);
10
11
12/* sets up the default keymaps */
13void owl_keys_setup_keymaps(owl_keyhandler *kh) {
14  owl_keymap *km, *km_global, *km_editwin, *km_mainwin,
15    *km_ew_multi, *km_ew_onel, *km_viewwin;
16
17 
18  /****************************************************************/
19  /*************************** GLOBAL *****************************/
20  /****************************************************************/
21
22  km_global = km = owl_keyhandler_create_and_add_keymap(kh, "global",
23       "System-wide default key bindings", 
24       owl_keys_default_invalid, NULL, NULL);
25  BIND_CMD("C-z",      "suspend",            "Suspend owl");
26
27  /****************************************************************/
28  /***************************** EDIT *****************************/
29  /****************************************************************/
30
31  km_editwin = km = owl_keyhandler_create_and_add_keymap(kh, "edit",
32       "Text editing and command window", 
33       owl_keys_editwin_default, NULL, owl_keys_editwin_postalways);
34  owl_keymap_set_submap(km_editwin, km_global);
35  BIND_CMD("F1",          "help",            "");
36  BIND_CMD("HELP",        "help",            "");
37  BIND_CMD("M-[ 2 8 ~",   "help",            "");
38
39  BIND_CMD("C-c",         "edit:cancel", "");
40  BIND_CMD("C-g",         "edit:cancel", "");
41
42  BIND_CMD("M-f",         "edit:move-next-word", "");
43  BIND_CMD("M-O 3 C",     "edit:move-next-word", "");
44  BIND_CMD("M-b",         "edit:move-prev-word", "");
45  BIND_CMD("M-O 3 D",     "edit:move-prev-word", "");
46
47  BIND_CMD("LEFT",        "edit:move-left", "");
48  BIND_CMD("C-b",         "edit:move-left", "");
49  BIND_CMD("RIGHT",       "edit:move-right", "");
50  BIND_CMD("C-f",         "edit:move-right", "");
51
52  BIND_CMD("M-<",         "edit:move-to-buffer-start", "");
53  BIND_CMD("HOME",        "edit:move-to-buffer-start", "");
54  BIND_CMD("M->",         "edit:move-to-buffer-end", "");
55  BIND_CMD("END",         "edit:move-to-buffer-end", "");
56
57  BIND_CMD("C-a",         "edit:move-to-line-start", "");
58  BIND_CMD("C-e",         "edit:move-to-line-end", "");
59
60  BIND_CMD("M-BACKSPACE", "edit:delete-prev-word", "");
61  BIND_CMD("M-DELETE",    "edit:delete-prev-word", "");
62  BIND_CMD("M-d",         "edit:delete-next-word", "");
63  BIND_CMD("M-[ 3 ; 3 ~", "edit:delete-next-word", "");
64
65  BIND_CMD("C-h",         "edit:delete-prev-char", "");
66  BIND_CMD("BACKSPACE",   "edit:delete-prev-char", "");
67  BIND_CMD("DC",          "edit:delete-prev-char", "");
68  BIND_CMD("DELETE",      "edit:delete-prev-char", "");
69
70  BIND_CMD("C-k",         "edit:delete-to-line-end", "");
71
72  BIND_CMD("C-t",         "edit:transpose-chars", "");
73
74  BIND_CMD("M-q",         "edit:fill-paragraph", "");
75
76  BIND_CMD("C-l",         "( edit:recenter ; redisplay )", "");
77
78  BIND_CMD("C-d",     "edit:delete-next-char", "");
79
80
81  /****************************************************************/
82  /**************************** EDITMULTI *************************/
83  /****************************************************************/
84
85  km_ew_multi = km = owl_keyhandler_create_and_add_keymap(kh, "editmulti",
86       "Multi-line text editing", 
87       owl_keys_editwin_default, NULL, owl_keys_editwin_postalways);
88  owl_keymap_set_submap(km_ew_multi, km_editwin);
89
90  BIND_CMD("UP",      "editmulti:move-up-line", "");
91  BIND_CMD("C-p",     "editmulti:move-up-line", "");
92  BIND_CMD("DOWN",    "editmulti:move-down-line", "");
93  BIND_CMD("C-n",     "editmulti:move-down-line", "");
94
95  /* This would be nice, but interferes with C-c to cancel */
96  /*BIND_CMD("C-c C-c", "editmulti:done", "sends the zephyr");*/
97
98  BIND_CMD("M-p",         "edit:history-prev", "");
99  BIND_CMD("M-n",         "edit:history-next", "");
100
101  /* note that changing "disable-ctrl-d" to "on" will change this to
102   * edit:delete-next-char */
103  BIND_CMD("C-d",     "editmulti:done-or-delete", "sends the zephyr if at the end of the message");
104
105
106  /****************************************************************/
107  /**************************** EDITLINE **************************/
108  /****************************************************************/
109
110  km_ew_onel = km = owl_keyhandler_create_and_add_keymap(kh, "editline",
111       "Single-line text editing", 
112       owl_keys_editwin_default, NULL, owl_keys_editwin_postalways);
113  owl_keymap_set_submap(km_ew_onel, km_editwin);
114
115  BIND_CMD("C-u",         "edit:delete-all", "Clears the entire line");
116
117  BIND_CMD("UP",          "edit:history-prev", "");
118  BIND_CMD("C-p",         "edit:history-prev", "");
119  BIND_CMD("M-p",         "edit:history-prev", "");
120
121  BIND_CMD("DOWN",        "edit:history-next", "");
122  BIND_CMD("C-n",         "edit:history-next", "");
123  BIND_CMD("M-n",         "edit:history-next", "");
124
125  BIND_CMD("LF",          "editline:done", "executes the command");
126  BIND_CMD("CR",          "editline:done", "executes the command");
127
128
129  /****************************************************************/
130  /**************************** POPLESS ***************************/
131  /****************************************************************/
132
133  km_viewwin = km = owl_keyhandler_create_and_add_keymap(kh, "popless",
134       "Pop-up window (eg, help)", 
135       owl_keys_default_invalid, NULL, owl_keys_popless_postalways);
136  owl_keymap_set_submap(km_viewwin, km_global);
137
138  BIND_CMD("SPACE",       "popless:scroll-down-page", "");
139  BIND_CMD("NPAGE",       "popless:scroll-down-page", "");
140  BIND_CMD("M-n",         "popless:scroll-down-page", "");
141
142  BIND_CMD("b",           "popless:scroll-up-page", "");
143  BIND_CMD("PPAGE",       "popless:scroll-up-page", "")
144  BIND_CMD("M-p",         "popless:scroll-up-page", "");
145
146  BIND_CMD("CR",          "popless:scroll-down-line", "");
147  BIND_CMD("LF",          "popless:scroll-down-line", "");
148  BIND_CMD("DOWN",        "popless:scroll-down-line", "");
149  BIND_CMD("C-n",         "popless:scroll-down-page", "");
150
151  BIND_CMD("UP",          "popless:scroll-up-line", "");
152  BIND_CMD("C-h",         "popless:scroll-up-line", "");
153  BIND_CMD("C-p",         "popless:scroll-up-line", "");
154  BIND_CMD("DELETE",      "popless:scroll-up-line", "");
155  BIND_CMD("BACKSPACE",   "popless:scroll-up-line", "");
156  BIND_CMD("DC",          "popless:scroll-up-line", "");
157
158  BIND_CMD("RIGHT",       "popless:scroll-right 10", "scrolls right");
159  BIND_CMD("LEFT",        "popless:scroll-left  10", "scrolls left");
160
161  BIND_CMD("HOME",        "popless:scroll-to-top", "");
162  BIND_CMD("<",           "popless:scroll-to-top", "");
163  BIND_CMD("M-<",         "popless:scroll-to-top", "");
164
165  BIND_CMD(">",           "popless:scroll-to-bottom", "");
166  BIND_CMD("M->",         "popless:scroll-to-bottom", "");
167
168  BIND_CMD("q",           "popless:quit", "");
169  BIND_CMD("C-c",         "popless:quit", "");
170  BIND_CMD("C-g",         "popless:quit", "");
171
172  BIND_CMD("C-l",         "redisplay", "");
173
174
175  /****************************************************************/
176  /***************************** RECV *****************************/
177  /****************************************************************/
178
179  km_mainwin = km = owl_keyhandler_create_and_add_keymap(kh, "recv",
180        "Main window / message list",
181        owl_keys_default_invalid, owl_keys_recwin_prealways, NULL);
182  owl_keymap_set_submap(km_mainwin, km_global);
183  BIND_CMD("C-x C-c", "start-command quit", "");
184  BIND_CMD("F1",      "help",           "");
185  BIND_CMD("h",       "help",           "");
186  BIND_CMD("HELP",    "help",           "");
187  BIND_CMD("M-[ 2 8 ~",   "help",       "");
188
189  BIND_CMD(":",       "start-command",  "start a new command");
190  BIND_CMD("M-x",     "start-command",  "start a new command");
191
192  BIND_CMD("x",       "expunge",        "");
193  BIND_CMD("u",       "undelete",       "");
194  BIND_CMD("M-u",     "undelete view",  "undelete all messages in view");
195  BIND_CMD("d",       "delete",         "mark message for deletion");
196  BIND_CMD("M-D",     "delete view",    "mark all messages in view for deletion");
197  BIND_CMD("C-x k",   "smartzpunt -i",  "zpunt current <class,instance>");
198
199  BIND_CMD("X",   "( expunge ; view --home )", "expunge deletions and switch to home view");
200
201  BIND_CMD("v",   "start-command view ", "start a view command");
202  BIND_CMD("V",   "view --home",      "change to the home view ('all' by default)");
203  BIND_CMD("M-n", "smartnarrow",      "narrow to a view based on the current message");
204  BIND_CMD("M-N", "smartnarrow -i",   "narrow to a view based on the current message, and consider instance pair");
205  BIND_CMD("M-p", "view personal", "");
206 
207  BIND_CMD("/",   "start-command search ", "start a search command");
208  BIND_CMD("?",   "start-command search -r ", "start a revrerse search command");
209
210  BIND_CMD("LEFT",   "recv:shiftleft", "");
211  BIND_CMD("RIGHT",  "recv:shiftright","");
212  BIND_CMD("DOWN",   "recv:next",      "");
213  BIND_CMD("C-n",    "recv:next",      "");
214  BIND_CMD("M-C-n",  "recv:next --smart-filter", "move to next message matching the current one"); 
215  BIND_CMD("UP",     "recv:prev",      "");
216  BIND_CMD("n",      "recv:next-notdel", "");
217  BIND_CMD("p",      "recv:prev-notdel", "");
218  BIND_CMD("C-p",    "recv:prev",        "");
219  BIND_CMD("M-C-p",  "recv:prev --smart-filter", "move to previous message matching the current one");
220  BIND_CMD("P",      "recv:next-personal", "");
221  BIND_CMD("M-P",    "recv:prev-personal", "");
222  BIND_CMD("M-<",    "recv:first",     "");
223  BIND_CMD("<",      "recv:first",     "");
224  BIND_CMD("M->",    "recv:last",      "");
225  BIND_CMD(">",      "recv:last",      "");
226  BIND_CMD("C-v",    "recv:pagedown",  "");
227  BIND_CMD("NPAGE",  "recv:pagedown",  "");
228  BIND_CMD("M-v",    "recv:pageup",    "");
229  BIND_CMD("PPAGE",  "recv:pageup",    "");
230
231  BIND_CMD("SPACE",     "recv:scroll  10", "scroll message down a page");
232  BIND_CMD("CR",        "recv:scroll   1", "scroll message down a line");
233  BIND_CMD("LF",        "recv:scroll   1", "scroll message down a line");
234  BIND_CMD("C-h"  ,     "recv:scroll  -1", "scroll message up a line");
235  BIND_CMD("DELETE",    "recv:scroll  -1", "scroll message up a line");
236  BIND_CMD("BACKSPACE", "recv:scroll  -1", "scroll message up a line");
237  BIND_CMD("DC",        "recv:scroll  -1", "scroll message up a line");
238  BIND_CMD("b",         "recv:scroll -10", "scroll message up a page");
239
240  BIND_CMD("C-l",       "redisplay",       "");
241
242  BIND_CMD("i",   "info",             "");
243  BIND_CMD("l",   "blist",            "");
244  BIND_CMD("M",   "pop-message",      "");
245  BIND_CMD("T",   "delete trash",     "mark all 'trash' messages for deletion");
246
247  BIND_CMD("A",   "zaway toggle",     "toggles zaway on and off");
248
249  BIND_CMD("z",   "start-command zwrite ", "start a zwrite command");
250  BIND_CMD("a",   "start-command aimwrite ", "start an aimwrite command");
251  BIND_CMD("r",   "reply",            "reply to the current message");
252  BIND_CMD("R",   "reply sender",     "reply to sender of the current message");
253  BIND_CMD("C-r", "reply -e",         "reply to the current message, but allow editing of recipient");
254  BIND_CMD("M-r", "reply -e",         "reply to the current message, but allow editing of recipient");
255  BIND_CMD("M-R", "reply -e sender",  "reply to sender of the current message, but allow editing of recipient");
256                 
257  BIND_CMD("w",   "openurl",          "open a URL using a webbrowser");
258
259  BIND_CMD("C-c",  "",                "no effect in this mode");
260  BIND_CMD("C-g",  "",                "no effect in this mode");
261
262
263  /**********************/
264
265  owl_function_activate_keymap("recv");
266
267}
268
269
270/****************************************************************/
271/********************* Support Functions ************************/
272/****************************************************************/
273
274void owl_keys_recwin_prealways(int j) {
275  /* Clear the message line on subsequent key presses */
276  owl_function_makemsg("");
277}
278
279void owl_keys_editwin_default(int j) {
280  owl_editwin *e;
281  if (NULL != (e=owl_global_get_typwin(&g))) {
282    owl_editwin_process_char(e, j);
283  }
284}
285
286void owl_keys_editwin_postalways(int j) {
287  owl_editwin *e;
288  if (NULL != (e=owl_global_get_typwin(&g))) {
289    owl_editwin_post_process_char(e, j);
290  } 
291  owl_global_set_needrefresh(&g);
292}
293
294void owl_keys_popless_postalways(int j) {
295  owl_viewwin *v = owl_global_get_viewwin(&g);
296  owl_popwin *pw = owl_global_get_popwin(&g);
297
298  if (pw && owl_popwin_is_active(pw) && v) {
299    owl_viewwin_redisplay(v, 1);
300  } 
301}
302
303void owl_keys_default_invalid(int j) {
304  if (j==ERR) return;
305  if (j==410) return;
306  owl_keyhandler_invalidkey(owl_global_get_keyhandler(&g));
307}
308
Note: See TracBrowser for help on using the repository browser.