source: keys.c @ fc92548d

release-1.10release-1.4release-1.5release-1.6release-1.7release-1.8release-1.9
Last change on this file since fc92548d was 70110286, checked in by Alejandro R. Sedeño <asedeno@mit.edu>, 16 years ago
Implement mark and swap.
  • Property mode set to 100644
File size: 14.4 KB
RevLine 
[7d4fbcd]1#include "owl.h"
2
[1aee7d9]3static const char fileIdent[] = "$Id$";
[7d4fbcd]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);
[2674412]35  /*
[7d4fbcd]36  BIND_CMD("F1",          "help",            "");
37  BIND_CMD("HELP",        "help",            "");
38  BIND_CMD("M-[ 2 8 ~",   "help",            "");
[2674412]39  */
[7d4fbcd]40
41  BIND_CMD("C-c",         "edit:cancel", "");
42  BIND_CMD("C-g",         "edit:cancel", "");
43
44  BIND_CMD("M-f",         "edit:move-next-word", "");
45  BIND_CMD("M-O 3 C",     "edit:move-next-word", "");
[a6a4155]46  BIND_CMD("M-LEFT",      "edit:move-next-word", "");
[7d4fbcd]47  BIND_CMD("M-b",         "edit:move-prev-word", "");
48  BIND_CMD("M-O 3 D",     "edit:move-prev-word", "");
[a6a4155]49  BIND_CMD("M-RIGHT",     "edit:move-prev-word", "");
[7d4fbcd]50
51  BIND_CMD("LEFT",        "edit:move-left", "");
[50f8932]52  BIND_CMD("M-[ D",       "edit:move-left", "");
[7d4fbcd]53  BIND_CMD("C-b",         "edit:move-left", "");
54  BIND_CMD("RIGHT",       "edit:move-right", "");
[50f8932]55  BIND_CMD("M-[ C",       "edit:move-right", "");
[7d4fbcd]56  BIND_CMD("C-f",         "edit:move-right", "");
57
58  BIND_CMD("M-<",         "edit:move-to-buffer-start", "");
59  BIND_CMD("HOME",        "edit:move-to-buffer-start", "");
60  BIND_CMD("M->",         "edit:move-to-buffer-end", "");
61  BIND_CMD("END",         "edit:move-to-buffer-end", "");
62
63  BIND_CMD("C-a",         "edit:move-to-line-start", "");
64  BIND_CMD("C-e",         "edit:move-to-line-end", "");
65
[262422c]66  BIND_CMD("M-BACKSPACE", "edit:delete-prev-word", "");
[b68f9cd]67  BIND_CMD("M-DELETE",    "edit:delete-prev-word", "");
[7d4fbcd]68  BIND_CMD("M-d",         "edit:delete-next-word", "");
[ce56149]69  BIND_CMD("M-DC",        "edit:delete-next-word", "");
[7d4fbcd]70  BIND_CMD("M-[ 3 ; 3 ~", "edit:delete-next-word", "");
71
72  BIND_CMD("C-h",         "edit:delete-prev-char", "");
73  BIND_CMD("BACKSPACE",   "edit:delete-prev-char", "");
74  BIND_CMD("DELETE",      "edit:delete-prev-char", "");
[ce56149]75  BIND_CMD("C-d",         "edit:delete-next-char", "");
76  BIND_CMD("DC",          "edit:delete-next-char", "");
[7d4fbcd]77
78  BIND_CMD("C-k",         "edit:delete-to-line-end", "");
79
[f2e36b5]80  BIND_CMD("C-t",         "edit:transpose-chars", "");
81
[7d4fbcd]82  BIND_CMD("M-q",         "edit:fill-paragraph", "");
83
84  BIND_CMD("C-l",         "( edit:recenter ; redisplay )", "");
85
86
87  /****************************************************************/
88  /**************************** EDITMULTI *************************/
89  /****************************************************************/
90
91  km_ew_multi = km = owl_keyhandler_create_and_add_keymap(kh, "editmulti",
92       "Multi-line text editing", 
93       owl_keys_editwin_default, NULL, owl_keys_editwin_postalways);
94  owl_keymap_set_submap(km_ew_multi, km_editwin);
95
96  BIND_CMD("UP",      "editmulti:move-up-line", "");
[50f8932]97  BIND_CMD("M-[ A",   "editmulti:move-up-line", "");
[7d4fbcd]98  BIND_CMD("C-p",     "editmulti:move-up-line", "");
99  BIND_CMD("DOWN",    "editmulti:move-down-line", "");
[50f8932]100  BIND_CMD("M-[ B",   "editmulti:move-down-line", "");
[7d4fbcd]101  BIND_CMD("C-n",     "editmulti:move-down-line", "");
102
103  /* This would be nice, but interferes with C-c to cancel */
104  /*BIND_CMD("C-c C-c", "editmulti:done", "sends the zephyr");*/
105
[10b866d]106  BIND_CMD("M-p",         "edit:history-prev", "");
107  BIND_CMD("M-n",         "edit:history-next", "");
108
[217a43e]109  /* note that changing "disable-ctrl-d" to "on" will change this to
[7d4fbcd]110   * edit:delete-next-char */
[217a43e]111  BIND_CMD("C-d",     "editmulti:done-or-delete", "sends the zephyr if at the end of the message");
[7d4fbcd]112
113
114  /****************************************************************/
115  /**************************** EDITLINE **************************/
116  /****************************************************************/
117
118  km_ew_onel = km = owl_keyhandler_create_and_add_keymap(kh, "editline",
119       "Single-line text editing", 
120       owl_keys_editwin_default, NULL, owl_keys_editwin_postalways);
121  owl_keymap_set_submap(km_ew_onel, km_editwin);
122
123  BIND_CMD("C-u",         "edit:delete-all", "Clears the entire line");
124
125  BIND_CMD("UP",          "edit:history-prev", "");
[50f8932]126  BIND_CMD("M-[ A",       "edit:history-prev", "");
[7d4fbcd]127  BIND_CMD("C-p",         "edit:history-prev", "");
128  BIND_CMD("M-p",         "edit:history-prev", "");
129
130  BIND_CMD("DOWN",        "edit:history-next", "");
[50f8932]131  BIND_CMD("M-[ B",       "edit:history-next", "");
[7d4fbcd]132  BIND_CMD("C-n",         "edit:history-next", "");
133  BIND_CMD("M-n",         "edit:history-next", "");
134
135  BIND_CMD("LF",          "editline:done", "executes the command");
136  BIND_CMD("CR",          "editline:done", "executes the command");
137
[cf83b7a]138 
139  /****************************************************************/
140  /**************************** EDITRESPONSE **********************/
141  /****************************************************************/
142
143  km_ew_onel = km = owl_keyhandler_create_and_add_keymap(kh, "editresponse",
144       "Single-line response to question", 
145       owl_keys_editwin_default, NULL, owl_keys_editwin_postalways);
146  owl_keymap_set_submap(km_ew_onel, km_editwin);
147
148  BIND_CMD("C-u",         "edit:delete-all", "Clears the entire line");
149
150  BIND_CMD("LF",          "editresponse:done", "executes the command");
151  BIND_CMD("CR",          "editresponse:done", "executes the command");
152
[7d4fbcd]153
154  /****************************************************************/
155  /**************************** POPLESS ***************************/
156  /****************************************************************/
157
158  km_viewwin = km = owl_keyhandler_create_and_add_keymap(kh, "popless",
159       "Pop-up window (eg, help)", 
160       owl_keys_default_invalid, NULL, owl_keys_popless_postalways);
161  owl_keymap_set_submap(km_viewwin, km_global);
162
163  BIND_CMD("SPACE",       "popless:scroll-down-page", "");
164  BIND_CMD("NPAGE",       "popless:scroll-down-page", "");
165  BIND_CMD("M-n",         "popless:scroll-down-page", "");
166
167  BIND_CMD("b",           "popless:scroll-up-page", "");
168  BIND_CMD("PPAGE",       "popless:scroll-up-page", "")
169  BIND_CMD("M-p",         "popless:scroll-up-page", "");
170
171  BIND_CMD("CR",          "popless:scroll-down-line", "");
172  BIND_CMD("LF",          "popless:scroll-down-line", "");
173  BIND_CMD("DOWN",        "popless:scroll-down-line", "");
[50f8932]174  BIND_CMD("M-[ B",       "popless:scroll-down-line", "");
[8b16467]175  BIND_CMD("C-n",         "popless:scroll-down-line", "");
[7d4fbcd]176
177  BIND_CMD("UP",          "popless:scroll-up-line", "");
[50f8932]178  BIND_CMD("M-[ A",       "popless:scroll-up-line", "");
[7d4fbcd]179  BIND_CMD("C-h",         "popless:scroll-up-line", "");
180  BIND_CMD("C-p",         "popless:scroll-up-line", "");
181  BIND_CMD("DELETE",      "popless:scroll-up-line", "");
182  BIND_CMD("BACKSPACE",   "popless:scroll-up-line", "");
183  BIND_CMD("DC",          "popless:scroll-up-line", "");
184
185  BIND_CMD("RIGHT",       "popless:scroll-right 10", "scrolls right");
[50f8932]186  BIND_CMD("M-[ C",       "popless:scroll-right 10", "scrolls right");
[7d4fbcd]187  BIND_CMD("LEFT",        "popless:scroll-left  10", "scrolls left");
[50f8932]188  BIND_CMD("M-[ D",       "popless:scroll-left  10", "scrolls left");
[7d4fbcd]189
190  BIND_CMD("HOME",        "popless:scroll-to-top", "");
191  BIND_CMD("<",           "popless:scroll-to-top", "");
192  BIND_CMD("M-<",         "popless:scroll-to-top", "");
193
[8938188]194  BIND_CMD("END",         "popless:scroll-to-bottom", "");
[7d4fbcd]195  BIND_CMD(">",           "popless:scroll-to-bottom", "");
196  BIND_CMD("M->",         "popless:scroll-to-bottom", "");
197
198  BIND_CMD("q",           "popless:quit", "");
199  BIND_CMD("C-c",         "popless:quit", "");
200  BIND_CMD("C-g",         "popless:quit", "");
201
202  BIND_CMD("C-l",         "redisplay", "");
203
204
205  /****************************************************************/
206  /***************************** RECV *****************************/
207  /****************************************************************/
208
209  km_mainwin = km = owl_keyhandler_create_and_add_keymap(kh, "recv",
210        "Main window / message list",
211        owl_keys_default_invalid, owl_keys_recwin_prealways, NULL);
212  owl_keymap_set_submap(km_mainwin, km_global);
[67103d4]213  BIND_CMD("C-x C-c", "start-command quit", "");
[7d4fbcd]214  BIND_CMD("F1",      "help",           "");
215  BIND_CMD("h",       "help",           "");
216  BIND_CMD("HELP",    "help",           "");
217  BIND_CMD("M-[ 2 8 ~",   "help",       "");
218
219  BIND_CMD(":",       "start-command",  "start a new command");
220  BIND_CMD("M-x",     "start-command",  "start a new command");
221
222  BIND_CMD("x",       "expunge",        "");
223  BIND_CMD("u",       "undelete",       "");
[6794f72]224  BIND_CMD("M-u",     "undelete view",  "undelete all messages in view");
[7d4fbcd]225  BIND_CMD("d",       "delete",         "mark message for deletion");
226  BIND_CMD("M-D",     "delete view",    "mark all messages in view for deletion");
[d36f2cb]227  BIND_CMD("C-x k",   "smartzpunt -i",  "zpunt current <class,instance>");
[7d4fbcd]228
229  BIND_CMD("X",   "( expunge ; view --home )", "expunge deletions and switch to home view");
230
231  BIND_CMD("v",   "start-command view ", "start a view command");
232  BIND_CMD("V",   "view --home",      "change to the home view ('all' by default)");
[3895e23]233  BIND_CMD("!",   "view -r",          "invert the current view filter");
[7d4fbcd]234  BIND_CMD("M-n", "smartnarrow",      "narrow to a view based on the current message");
235  BIND_CMD("M-N", "smartnarrow -i",   "narrow to a view based on the current message, and consider instance pair");
[ecd5dc5]236  BIND_CMD("M-p", "view personal", "");
237 
[1fd0b25]238  BIND_CMD("/",   "start-command search ", "start a search command");
[51c57f8]239  BIND_CMD("?",   "start-command search -r ", "start a reverse search command");
[1fd0b25]240
[7d4fbcd]241  BIND_CMD("LEFT",   "recv:shiftleft", "");
[3004c9f]242  BIND_CMD("M-[ D",  "recv:shiftleft", "");
[7d4fbcd]243  BIND_CMD("RIGHT",  "recv:shiftright","");
[50f8932]244  BIND_CMD("M-[ C",  "recv:shiftright","");
[7d4fbcd]245  BIND_CMD("DOWN",   "recv:next",      "");
246  BIND_CMD("C-n",    "recv:next",      "");
[3004c9f]247  BIND_CMD("M-[ B",  "recv:next",      "");
[7360fab]248  BIND_CMD("M-C-n",  "recv:next --smart-filter", "move to next message matching the current one"); 
[7d4fbcd]249  BIND_CMD("UP",     "recv:prev",      "");
[3004c9f]250  BIND_CMD("M-[ A",  "recv:prev",      "");
[7d4fbcd]251  BIND_CMD("n",      "recv:next-notdel", "");
252  BIND_CMD("p",      "recv:prev-notdel", "");
253  BIND_CMD("C-p",    "recv:prev",        "");
[7360fab]254  BIND_CMD("M-C-p",  "recv:prev --smart-filter", "move to previous message matching the current one");
[7d4fbcd]255  BIND_CMD("P",      "recv:next-personal", "");
256  BIND_CMD("M-P",    "recv:prev-personal", "");
257  BIND_CMD("M-<",    "recv:first",     "");
258  BIND_CMD("<",      "recv:first",     "");
259  BIND_CMD("M->",    "recv:last",      "");
260  BIND_CMD(">",      "recv:last",      "");
261  BIND_CMD("C-v",    "recv:pagedown",  "");
262  BIND_CMD("NPAGE",  "recv:pagedown",  "");
263  BIND_CMD("M-v",    "recv:pageup",    "");
264  BIND_CMD("PPAGE",  "recv:pageup",    "");
[70110286]265  BIND_CMD("C-@",    "recv:mark",      "");
266  BIND_CMD("C-x C-x",    "recv:swapmark",  "");
[7d4fbcd]267
268  BIND_CMD("SPACE",     "recv:scroll  10", "scroll message down a page");
269  BIND_CMD("CR",        "recv:scroll   1", "scroll message down a line");
270  BIND_CMD("LF",        "recv:scroll   1", "scroll message down a line");
271  BIND_CMD("C-h"  ,     "recv:scroll  -1", "scroll message up a line");
272  BIND_CMD("DELETE",    "recv:scroll  -1", "scroll message up a line");
273  BIND_CMD("BACKSPACE", "recv:scroll  -1", "scroll message up a line");
274  BIND_CMD("DC",        "recv:scroll  -1", "scroll message up a line");
275  BIND_CMD("b",         "recv:scroll -10", "scroll message up a page");
276
277  BIND_CMD("C-l",       "redisplay",       "");
278
279  BIND_CMD("i",   "info",             "");
[aa5f725]280  BIND_CMD("l",   "blist",            "");
[38cf544c]281  BIND_CMD("B",   "alist",            "");
[7d4fbcd]282  BIND_CMD("M",   "pop-message",      "");
283  BIND_CMD("T",   "delete trash",     "mark all 'trash' messages for deletion");
284
[c3ab155]285  BIND_CMD("o",   "toggle-oneline", "");
286
[c65d81e]287  BIND_CMD("A",   "away toggle",     "toggles away message on and off");
[7d4fbcd]288
289  BIND_CMD("z",   "start-command zwrite ", "start a zwrite command");
[440ce01]290  BIND_CMD("a",   "start-command aimwrite ", "start an aimwrite command");
[7d4fbcd]291  BIND_CMD("r",   "reply",            "reply to the current message");
292  BIND_CMD("R",   "reply sender",     "reply to sender of the current message");
293  BIND_CMD("C-r", "reply -e",         "reply to the current message, but allow editing of recipient");
[e50cd56]294  BIND_CMD("M-r", "reply -e",         "reply to the current message, but allow editing of recipient");
295  BIND_CMD("M-R", "reply -e sender",  "reply to sender of the current message, but allow editing of recipient");
[7d4fbcd]296
[0b6b689]297  BIND_CMD("W",   "start-command webzephyr ", "start a webzephyr command");
298
[7d4fbcd]299  BIND_CMD("C-c",  "",                "no effect in this mode");
300  BIND_CMD("C-g",  "",                "no effect in this mode");
301
302
303  /**********************/
304
305  owl_function_activate_keymap("recv");
306
307}
308
309
310/****************************************************************/
311/********************* Support Functions ************************/
312/****************************************************************/
313
[428834d]314void owl_keys_recwin_prealways(owl_input j) {
[7d4fbcd]315  /* Clear the message line on subsequent key presses */
316  owl_function_makemsg("");
317}
318
[428834d]319void owl_keys_editwin_default(owl_input j) {
[7d4fbcd]320  owl_editwin *e;
[fac5463]321  if (NULL != (e=owl_global_get_typwin(&g))) {
322       owl_editwin_process_char(e, j);
[7d4fbcd]323  }
324}
325
[428834d]326void owl_keys_editwin_postalways(owl_input j) {
[7d4fbcd]327  owl_editwin *e;
[fac5463]328  if (NULL != (e=owl_global_get_typwin(&g))) {
329    owl_editwin_post_process_char(e, j);
330  }
[7d4fbcd]331  owl_global_set_needrefresh(&g);
332}
333
[428834d]334void owl_keys_popless_postalways(owl_input j) {
[7d4fbcd]335  owl_viewwin *v = owl_global_get_viewwin(&g);
336  owl_popwin *pw = owl_global_get_popwin(&g);
337
338  if (pw && owl_popwin_is_active(pw) && v) {
339    owl_viewwin_redisplay(v, 1);
340  } 
341}
342
[428834d]343void owl_keys_default_invalid(owl_input j) {
344  if (j.ch==ERR) return;
345  if (j.ch==410) return;
[7d4fbcd]346  owl_keyhandler_invalidkey(owl_global_get_keyhandler(&g));
347}
348
Note: See TracBrowser for help on using the repository browser.