source: keys.c

Last change on this file was 4fd3c04, checked in by Anders Kaseorg <andersk@mit.edu>, 7 years ago
Remove AIM support This code has received almost no security attention, and anyway, AIM is shutting down on December 15, 2017. https://aimemories.tumblr.com/post/166091776077/aimemories Signed-off-by: Anders Kaseorg <andersk@mit.edu>
  • Property mode set to 100644
File size: 15.5 KB
RevLine 
[7d4fbcd]1#include "owl.h"
2
3#define BIND_CMD(kpress, command, desc) \
[65a9870]4         owl_keymap_create_binding(km, kpress, command, NULL, desc)
[7d4fbcd]5
6#define BIND_FNV(kpress, fn, desc) \
[65a9870]7         owl_keymap_create_binding(km, kpress, NULL, fn, desc)
[7d4fbcd]8
9
10/* sets up the default keymaps */
11void owl_keys_setup_keymaps(owl_keyhandler *kh) {
12  owl_keymap *km, *km_global, *km_editwin, *km_mainwin,
13    *km_ew_multi, *km_ew_onel, *km_viewwin;
14
15 
16  /****************************************************************/
17  /*************************** GLOBAL *****************************/
18  /****************************************************************/
19
20  km_global = km = owl_keyhandler_create_and_add_keymap(kh, "global",
21       "System-wide default key bindings", 
22       owl_keys_default_invalid, NULL, NULL);
[b752f1e]23  BIND_CMD("C-z",      "message Use :suspend to suspend.", "");
[7d4fbcd]24
25  /****************************************************************/
26  /***************************** EDIT *****************************/
27  /****************************************************************/
28
29  km_editwin = km = owl_keyhandler_create_and_add_keymap(kh, "edit",
30       "Text editing and command window", 
31       owl_keys_editwin_default, NULL, owl_keys_editwin_postalways);
[44cc9ab]32  owl_keymap_set_parent(km_editwin, km_global);
[2674412]33  /*
[7d4fbcd]34  BIND_CMD("F1",          "help",            "");
35  BIND_CMD("HELP",        "help",            "");
36  BIND_CMD("M-[ 2 8 ~",   "help",            "");
[2674412]37  */
[7d4fbcd]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", "");
[4f0a2ee]44  BIND_CMD("M-RIGHT",     "edit:move-next-word", "");
[ddf1835]45  BIND_CMD("M-[ 1 ; 3 D", "edit:move-next-word", "");
[d400776]46  BIND_CMD("M-[ 1 ; 5 D", "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", "");
[4f0a2ee]49  BIND_CMD("M-LEFT",      "edit:move-prev-word", "");
[d400776]50  BIND_CMD("M-[ 1 ; 3 C", "edit:move-prev-word", "");
51  BIND_CMD("M-[ 1 ; 5 C", "edit:move-prev-word", "");
[7d4fbcd]52
53  BIND_CMD("LEFT",        "edit:move-left", "");
[50f8932]54  BIND_CMD("M-[ D",       "edit:move-left", "");
[7d4fbcd]55  BIND_CMD("C-b",         "edit:move-left", "");
56  BIND_CMD("RIGHT",       "edit:move-right", "");
[50f8932]57  BIND_CMD("M-[ C",       "edit:move-right", "");
[7d4fbcd]58  BIND_CMD("C-f",         "edit:move-right", "");
59
60  BIND_CMD("M-<",         "edit:move-to-buffer-start", "");
61  BIND_CMD("HOME",        "edit:move-to-buffer-start", "");
62  BIND_CMD("M->",         "edit:move-to-buffer-end", "");
63  BIND_CMD("END",         "edit:move-to-buffer-end", "");
64
65  BIND_CMD("C-a",         "edit:move-to-line-start", "");
66  BIND_CMD("C-e",         "edit:move-to-line-end", "");
67
[262422c]68  BIND_CMD("M-BACKSPACE", "edit:delete-prev-word", "");
[b68f9cd]69  BIND_CMD("M-DELETE",    "edit:delete-prev-word", "");
[7d4fbcd]70  BIND_CMD("M-d",         "edit:delete-next-word", "");
[ce56149]71  BIND_CMD("M-DC",        "edit:delete-next-word", "");
[7d4fbcd]72  BIND_CMD("M-[ 3 ; 3 ~", "edit:delete-next-word", "");
73
74  BIND_CMD("C-h",         "edit:delete-prev-char", "");
75  BIND_CMD("BACKSPACE",   "edit:delete-prev-char", "");
76  BIND_CMD("DELETE",      "edit:delete-prev-char", "");
[ce56149]77  BIND_CMD("C-d",         "edit:delete-next-char", "");
78  BIND_CMD("DC",          "edit:delete-next-char", "");
[7d4fbcd]79
80  BIND_CMD("C-k",         "edit:delete-to-line-end", "");
81
[f2e36b5]82  BIND_CMD("C-t",         "edit:transpose-chars", "");
83
[7d4fbcd]84  BIND_CMD("M-q",         "edit:fill-paragraph", "");
85
[7f0c26f]86  BIND_CMD("C-@",         "edit:set-mark", "");
87  BIND_CMD("C-x C-x",     "edit:exchange-point-and-mark", "");
88
[a60edf2]89  BIND_CMD("M-w",         "edit:copy-region-as-kill", "");
90  BIND_CMD("C-w",         "edit:kill-region", "");
91  BIND_CMD("C-y",         "edit:yank", "");
92
[7d4fbcd]93  BIND_CMD("C-l",         "( edit:recenter ; redisplay )", "");
94
95
96  /****************************************************************/
97  /**************************** EDITMULTI *************************/
98  /****************************************************************/
99
100  km_ew_multi = km = owl_keyhandler_create_and_add_keymap(kh, "editmulti",
101       "Multi-line text editing", 
102       owl_keys_editwin_default, NULL, owl_keys_editwin_postalways);
[44cc9ab]103  owl_keymap_set_parent(km_ew_multi, km_editwin);
[7d4fbcd]104
[435d6b2]105  BIND_CMD("UP",      "edit:move-up-line", "");
106  BIND_CMD("M-[ A",   "edit:move-up-line", "");
107  BIND_CMD("C-p",     "edit:move-up-line", "");
108  BIND_CMD("DOWN",    "edit:move-down-line", "");
109  BIND_CMD("M-[ B",   "edit:move-down-line", "");
110  BIND_CMD("C-n",     "edit:move-down-line", "");
[7d4fbcd]111
[435d6b2]112  BIND_CMD("M-}",     "edit:forward-paragraph", "");
113  BIND_CMD("M-{",     "edit:backward-paragraph", "");
[2fc8397]114
[7d4fbcd]115  /* This would be nice, but interferes with C-c to cancel */
[435d6b2]116  /*BIND_CMD("C-c C-c", "edit:done", "sends the zephyr");*/
[7d4fbcd]117
[10b866d]118  BIND_CMD("M-p",         "edit:history-prev", "");
119  BIND_CMD("M-n",         "edit:history-next", "");
120
[217a43e]121  /* note that changing "disable-ctrl-d" to "on" will change this to
[7d4fbcd]122   * edit:delete-next-char */
[435d6b2]123  BIND_CMD("C-d",     "edit:done-or-delete", "sends the zephyr if at the end of the message");
[7d4fbcd]124
125
126  /****************************************************************/
127  /**************************** EDITLINE **************************/
128  /****************************************************************/
129
130  km_ew_onel = km = owl_keyhandler_create_and_add_keymap(kh, "editline",
131       "Single-line text editing", 
132       owl_keys_editwin_default, NULL, owl_keys_editwin_postalways);
[44cc9ab]133  owl_keymap_set_parent(km_ew_onel, km_editwin);
[7d4fbcd]134
135  BIND_CMD("C-u",         "edit:delete-all", "Clears the entire line");
136
137  BIND_CMD("UP",          "edit:history-prev", "");
[50f8932]138  BIND_CMD("M-[ A",       "edit:history-prev", "");
[7d4fbcd]139  BIND_CMD("C-p",         "edit:history-prev", "");
140  BIND_CMD("M-p",         "edit:history-prev", "");
141
142  BIND_CMD("DOWN",        "edit:history-next", "");
[50f8932]143  BIND_CMD("M-[ B",       "edit:history-next", "");
[7d4fbcd]144  BIND_CMD("C-n",         "edit:history-next", "");
145  BIND_CMD("M-n",         "edit:history-next", "");
146
147  BIND_CMD("LF",          "editline:done", "executes the command");
148  BIND_CMD("CR",          "editline:done", "executes the command");
149
[cf83b7a]150 
151  /****************************************************************/
152  /**************************** EDITRESPONSE **********************/
153  /****************************************************************/
154
155  km_ew_onel = km = owl_keyhandler_create_and_add_keymap(kh, "editresponse",
156       "Single-line response to question", 
157       owl_keys_editwin_default, NULL, owl_keys_editwin_postalways);
[44cc9ab]158  owl_keymap_set_parent(km_ew_onel, km_editwin);
[cf83b7a]159
160  BIND_CMD("C-u",         "edit:delete-all", "Clears the entire line");
161
162  BIND_CMD("LF",          "editresponse:done", "executes the command");
163  BIND_CMD("CR",          "editresponse:done", "executes the command");
164
[7d4fbcd]165
166  /****************************************************************/
167  /**************************** POPLESS ***************************/
168  /****************************************************************/
169
170  km_viewwin = km = owl_keyhandler_create_and_add_keymap(kh, "popless",
171       "Pop-up window (eg, help)", 
172       owl_keys_default_invalid, NULL, owl_keys_popless_postalways);
[44cc9ab]173  owl_keymap_set_parent(km_viewwin, km_global);
[7d4fbcd]174
175  BIND_CMD("SPACE",       "popless:scroll-down-page", "");
176  BIND_CMD("NPAGE",       "popless:scroll-down-page", "");
177  BIND_CMD("M-n",         "popless:scroll-down-page", "");
[ffd50fe]178  BIND_CMD("C-v",         "popless:scroll-down-page", "");
[7d4fbcd]179
180  BIND_CMD("b",           "popless:scroll-up-page", "");
[65a9870]181  BIND_CMD("PPAGE",       "popless:scroll-up-page", "");
[7d4fbcd]182  BIND_CMD("M-p",         "popless:scroll-up-page", "");
[ffd50fe]183  BIND_CMD("M-v",         "popless:scroll-up-page", "");
[7d4fbcd]184
185  BIND_CMD("CR",          "popless:scroll-down-line", "");
186  BIND_CMD("LF",          "popless:scroll-down-line", "");
187  BIND_CMD("DOWN",        "popless:scroll-down-line", "");
[50f8932]188  BIND_CMD("M-[ B",       "popless:scroll-down-line", "");
[8b16467]189  BIND_CMD("C-n",         "popless:scroll-down-line", "");
[7d4fbcd]190
191  BIND_CMD("UP",          "popless:scroll-up-line", "");
[50f8932]192  BIND_CMD("M-[ A",       "popless:scroll-up-line", "");
[7d4fbcd]193  BIND_CMD("C-h",         "popless:scroll-up-line", "");
194  BIND_CMD("C-p",         "popless:scroll-up-line", "");
195  BIND_CMD("DELETE",      "popless:scroll-up-line", "");
196  BIND_CMD("BACKSPACE",   "popless:scroll-up-line", "");
197  BIND_CMD("DC",          "popless:scroll-up-line", "");
198
199  BIND_CMD("RIGHT",       "popless:scroll-right 10", "scrolls right");
[50f8932]200  BIND_CMD("M-[ C",       "popless:scroll-right 10", "scrolls right");
[7d4fbcd]201  BIND_CMD("LEFT",        "popless:scroll-left  10", "scrolls left");
[50f8932]202  BIND_CMD("M-[ D",       "popless:scroll-left  10", "scrolls left");
[7d4fbcd]203
204  BIND_CMD("HOME",        "popless:scroll-to-top", "");
205  BIND_CMD("<",           "popless:scroll-to-top", "");
206  BIND_CMD("M-<",         "popless:scroll-to-top", "");
207
[8938188]208  BIND_CMD("END",         "popless:scroll-to-bottom", "");
[7d4fbcd]209  BIND_CMD(">",           "popless:scroll-to-bottom", "");
210  BIND_CMD("M->",         "popless:scroll-to-bottom", "");
211
212  BIND_CMD("q",           "popless:quit", "");
213  BIND_CMD("C-c",         "popless:quit", "");
214  BIND_CMD("C-g",         "popless:quit", "");
215
[dcd48ad]216  /* Don't bind popless:start-command for now, as most commands make
217   * no sense. */
218#if 0
[09ceee3]219  BIND_CMD(":",           "popless:start-command",  "start a new command");
220  BIND_CMD("M-x",         "popless:start-command",  "start a new command");
[dcd48ad]221#endif
[09ceee3]222
[d2fd2f7]223  BIND_CMD("/",   "popless:start-search", "start a search command");
224  BIND_CMD("?",   "popless:start-search -r", "start a reverse search command");
[b6cf72f]225  BIND_CMD("n",   "popless:search", "find next occurrence of search");
226  BIND_CMD("N",   "popless:search -r", "find previous occurrence of search");
227
[7d4fbcd]228  BIND_CMD("C-l",         "redisplay", "");
229
230
231  /****************************************************************/
232  /***************************** RECV *****************************/
233  /****************************************************************/
234
235  km_mainwin = km = owl_keyhandler_create_and_add_keymap(kh, "recv",
236        "Main window / message list",
237        owl_keys_default_invalid, owl_keys_recwin_prealways, NULL);
[44cc9ab]238  owl_keymap_set_parent(km_mainwin, km_global);
[67103d4]239  BIND_CMD("C-x C-c", "start-command quit", "");
[7d4fbcd]240  BIND_CMD("F1",      "help",           "");
241  BIND_CMD("h",       "help",           "");
242  BIND_CMD("HELP",    "help",           "");
243  BIND_CMD("M-[ 2 8 ~",   "help",       "");
244
245  BIND_CMD(":",       "start-command",  "start a new command");
246  BIND_CMD("M-x",     "start-command",  "start a new command");
247
248  BIND_CMD("x",       "expunge",        "");
249  BIND_CMD("u",       "undelete",       "");
[6794f72]250  BIND_CMD("M-u",     "undelete view",  "undelete all messages in view");
[7d4fbcd]251  BIND_CMD("d",       "delete",         "mark message for deletion");
252  BIND_CMD("M-D",     "delete view",    "mark all messages in view for deletion");
[d36f2cb]253  BIND_CMD("C-x k",   "smartzpunt -i",  "zpunt current <class,instance>");
[7d4fbcd]254
255  BIND_CMD("X",   "( expunge ; view --home )", "expunge deletions and switch to home view");
256
257  BIND_CMD("v",   "start-command view ", "start a view command");
258  BIND_CMD("V",   "view --home",      "change to the home view ('all' by default)");
[3895e23]259  BIND_CMD("!",   "view -r",          "invert the current view filter");
[7d4fbcd]260  BIND_CMD("M-n", "smartnarrow",      "narrow to a view based on the current message");
261  BIND_CMD("M-N", "smartnarrow -i",   "narrow to a view based on the current message, and consider instance pair");
[8a5b5a1]262  BIND_CMD("M-m", "smartnarrow -r",   "like M-n but with 'narrow-related' temporarily flipped.");
263  BIND_CMD("M-M", "smartnarrow -ri",  "like M-N but with 'narrow-related' temporarily flipped.");
[ecd5dc5]264  BIND_CMD("M-p", "view personal", "");
265 
[1fd0b25]266  BIND_CMD("/",   "start-command search ", "start a search command");
[51c57f8]267  BIND_CMD("?",   "start-command search -r ", "start a reverse search command");
[1fd0b25]268
[6aa4611]269  BIND_CMD("HOME",   "recv:setshift 0","move the display all the way left");
[7d4fbcd]270  BIND_CMD("LEFT",   "recv:shiftleft", "");
[3004c9f]271  BIND_CMD("M-[ D",  "recv:shiftleft", "");
[7d4fbcd]272  BIND_CMD("RIGHT",  "recv:shiftright","");
[50f8932]273  BIND_CMD("M-[ C",  "recv:shiftright","");
[7d4fbcd]274  BIND_CMD("DOWN",   "recv:next",      "");
275  BIND_CMD("C-n",    "recv:next",      "");
[3004c9f]276  BIND_CMD("M-[ B",  "recv:next",      "");
[7360fab]277  BIND_CMD("M-C-n",  "recv:next --smart-filter", "move to next message matching the current one"); 
[7d4fbcd]278  BIND_CMD("UP",     "recv:prev",      "");
[3004c9f]279  BIND_CMD("M-[ A",  "recv:prev",      "");
[7d4fbcd]280  BIND_CMD("n",      "recv:next-notdel", "");
281  BIND_CMD("p",      "recv:prev-notdel", "");
282  BIND_CMD("C-p",    "recv:prev",        "");
[7360fab]283  BIND_CMD("M-C-p",  "recv:prev --smart-filter", "move to previous message matching the current one");
[7d4fbcd]284  BIND_CMD("P",      "recv:next-personal", "");
285  BIND_CMD("M-P",    "recv:prev-personal", "");
286  BIND_CMD("M-<",    "recv:first",     "");
287  BIND_CMD("<",      "recv:first",     "");
288  BIND_CMD("M->",    "recv:last",      "");
289  BIND_CMD(">",      "recv:last",      "");
290  BIND_CMD("C-v",    "recv:pagedown",  "");
291  BIND_CMD("NPAGE",  "recv:pagedown",  "");
292  BIND_CMD("M-v",    "recv:pageup",    "");
293  BIND_CMD("PPAGE",  "recv:pageup",    "");
[70110286]294  BIND_CMD("C-@",    "recv:mark",      "");
295  BIND_CMD("C-x C-x",    "recv:swapmark",  "");
[7d4fbcd]296
297  BIND_CMD("SPACE",     "recv:scroll  10", "scroll message down a page");
298  BIND_CMD("CR",        "recv:scroll   1", "scroll message down a line");
299  BIND_CMD("LF",        "recv:scroll   1", "scroll message down a line");
300  BIND_CMD("C-h"  ,     "recv:scroll  -1", "scroll message up a line");
301  BIND_CMD("DELETE",    "recv:scroll  -1", "scroll message up a line");
302  BIND_CMD("BACKSPACE", "recv:scroll  -1", "scroll message up a line");
303  BIND_CMD("DC",        "recv:scroll  -1", "scroll message up a line");
304  BIND_CMD("b",         "recv:scroll -10", "scroll message up a page");
305
306  BIND_CMD("C-l",       "redisplay",       "");
307
308  BIND_CMD("i",   "info",             "");
[aa5f725]309  BIND_CMD("l",   "blist",            "");
[38cf544c]310  BIND_CMD("B",   "alist",            "");
[7d4fbcd]311  BIND_CMD("M",   "pop-message",      "");
312  BIND_CMD("T",   "delete trash",     "mark all 'trash' messages for deletion");
313
[c3ab155]314  BIND_CMD("o",   "toggle-oneline", "");
315
[c65d81e]316  BIND_CMD("A",   "away toggle",     "toggles away message on and off");
[7d4fbcd]317
318  BIND_CMD("z",   "start-command zwrite ", "start a zwrite command");
319  BIND_CMD("r",   "reply",            "reply to the current message");
320  BIND_CMD("R",   "reply sender",     "reply to sender of the current message");
321  BIND_CMD("C-r", "reply -e",         "reply to the current message, but allow editing of recipient");
[e50cd56]322  BIND_CMD("M-r", "reply -e",         "reply to the current message, but allow editing of recipient");
323  BIND_CMD("M-R", "reply -e sender",  "reply to sender of the current message, but allow editing of recipient");
[7d4fbcd]324
[0b6b689]325  BIND_CMD("W",   "start-command webzephyr ", "start a webzephyr command");
326
[7d4fbcd]327  BIND_CMD("C-c",  "",                "no effect in this mode");
328  BIND_CMD("C-g",  "",                "no effect in this mode");
329}
330
331
332/****************************************************************/
333/********************* Support Functions ************************/
334/****************************************************************/
335
[428834d]336void owl_keys_recwin_prealways(owl_input j) {
[7d4fbcd]337  /* Clear the message line on subsequent key presses */
338  owl_function_makemsg("");
339}
340
[428834d]341void owl_keys_editwin_default(owl_input j) {
[7d4fbcd]342  owl_editwin *e;
[818f19c]343  if (NULL != (e=owl_global_current_typwin(&g))) {
[fac5463]344       owl_editwin_process_char(e, j);
[7d4fbcd]345  }
346}
347
[428834d]348void owl_keys_editwin_postalways(owl_input j) {
[7d4fbcd]349  owl_editwin *e;
[818f19c]350  if (NULL != (e=owl_global_current_typwin(&g))) {
[fac5463]351    owl_editwin_post_process_char(e, j);
352  }
[7d4fbcd]353}
354
[428834d]355void owl_keys_popless_postalways(owl_input j) {
[7d4fbcd]356}
357
[428834d]358void owl_keys_default_invalid(owl_input j) {
359  if (j.ch==ERR) return;
360  if (j.ch==410) return;
[7d4fbcd]361  owl_keyhandler_invalidkey(owl_global_get_keyhandler(&g));
362}
363
Note: See TracBrowser for help on using the repository browser.