1 /***** BEGIN LICENSE BLOCK *****
2 Version: MPL 1.1/GPL 2.0/LGPL 2.1
4 The contents of this file are subject to the Mozilla Public License Version
5 1.1 (the "License"); you may not use this file except in compliance with
6 the License. You may obtain a copy of the License at
7 http://www.mozilla.org/MPL/
9 Software distributed under the License is distributed on an "AS IS" basis,
10 WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11 for the specific language governing rights and limitations under the
14 The Initial Developer of the Original Code is Shawn Betts.
15 Portions created by the Initial Developer are Copyright (C) 2004,2005
16 by the Initial Developer. All Rights Reserved.
18 Alternatively, the contents of this file may be used under the terms of
19 either the GNU General Public License Version 2 or later (the "GPL"), or
20 the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
21 in which case the provisions of the GPL or the LGPL are applicable instead
22 of those above. If you wish to allow use of your version of this file only
23 under the terms of either the GPL or the LGPL, and not to allow others to
24 use your version of this file under the terms of the MPL, indicate your
25 decision by deleting the provisions above and replace them with the notice
26 and other provisions required by the GPL or the LGPL. If you do not delete
27 the provisions above, a recipient may use your version of this file under
28 the terms of any one of the MPL, the GPL or the LGPL.
29 ***** END LICENSE BLOCK *****/
31 // some predefined key maps
33 var ctrlc_kmap = null;
34 var ctrlw_kmap = null;
35 var ctrlx_kmap = null;
39 var input_kmap = null;
40 var textarea_kmap = null;
41 var select_kmap = null;
42 var numberedlinks_kmap = null;
43 var top_esc_kmap = null;
44 var textarea_esc_kmap = null;
45 var input_esc_kmap = null;
46 var minibuffer_base_kmap = null;
47 var minibuffer_kmap = null;
48 var minibuffer_completion_kmap = null;
49 var isearch_kmap = null;
50 var frameset_kmap = null;
52 var universal_kmap = null;
55 function input_kmap_predicate (window, element) {
56 // Use the input keymap for any input tag that
57 // isn't a radio button or checkbox.
59 var tag = element.tagName.toLowerCase();
60 var type = element.getAttribute ("type");
61 if (type != null) {type = type.toLowerCase();}
62 return (tag == "html:input" ||
68 } catch (e) { return false; }
72 function textarea_kmap_predicate (window, element) {
74 return (element.tagName == "TEXTAREA");
75 } catch (e) { return false; }
78 var context_kmaps = null;
83 ctrlc_kmap = make_keymap();
84 ctrlw_kmap = make_keymap();
85 ctrlx_kmap = make_keymap();
86 four_kmap = make_keymap();
87 five_kmap = make_keymap();
88 help_kmap = make_keymap();
89 top_kmap = make_keymap();
90 input_kmap = make_context_keymap (input_kmap_predicate);
91 textarea_kmap = make_context_keymap (textarea_kmap_predicate);
92 minibuffer_base_kmap = make_keymap();
93 minibuffer_kmap = make_keymap();
94 minibuffer_completion_kmap = make_keymap();
95 select_kmap = make_keymap();
96 numberedlinks_kmap = make_keymap();
97 isearch_kmap = make_keymap();
98 frameset_kmap = make_keymap();
100 top_esc_kmap = make_keymap();
101 textarea_esc_kmap = make_keymap();
102 input_esc_kmap = make_keymap();
104 universal_kmap = make_keymap();
106 context_kmaps = [input_kmap,
110 // VI Keys for the heathens. Thanks to maxauthority on #conkeror for
112 function initViKmaps()
116 abort_key = kbd ("g",MOD_CTRL);
119 define_key(top_kmap, kbd ("C-h"), help_kmap);
120 define_key(top_kmap, kbd ("C-w"), ctrlw_kmap);
121 define_key(top_kmap, kbd ("w",0), ctrlw_kmap);
122 define_key(top_kmap, kbd ("f",0), frameset_kmap);
124 // same as emacs, since vi doesnt really have this
125 define_key(help_kmap, kbd ("b",0),"describe-bindings");
126 define_key(help_kmap, kbd ("i",0),"help-page");
127 define_key(help_kmap, kbd ("t",0),"help-with-tutorial");
129 // window/buffer managment
130 // define_key(top_kmap, kbd ("q",0),"quit"); // like less
131 define_key(top_kmap, kbd ("q",MOD_CTRL),"quit");
132 define_key(top_kmap, kbd ("b",0),"switch-to-buffer");
133 define_key(top_kmap, kbd ("d",0),"kill-buffer"); // Delete buffer
134 // define_key(ctrlw_kmap, kbd ("w",0),"other-window"); // goes to other window in a split
135 // define_key(ctrlw_kmap, kbd ("d",0),"delete-windows"); // removes a split
136 // define_key(ctrlw_kmap, kbd ("D",0),"delete-other-windows"); // removes a split
137 // define_key(ctrlw_kmap, kbd ("f",0),"split-flip"); // changes horizontal/vertical alignment of the splits
138 define_key(ctrlw_kmap, kbd ("o",0),"find-url-other-frame");
139 // define_key(ctrlw_kmap, kbd ("s",0),"split-window"); // splits a window in 2 halfes if there are 2 buffers in it
140 define_key(ctrlw_kmap, kbd ("Q",0),"delete-frame");
141 define_key(ctrlw_kmap, kbd ("n",0),"make-frame-command");
144 define_key(top_kmap, kbd ("o",0),"open-url");
145 define_key(top_kmap, kbd ("O",0),"find-url"); // same as above but in new buffer
146 // opens a query which is not empty but prefilled with the current url which can be edited
147 define_key(top_kmap, kbd ("O", MOD_CTRL),"find-alternate-url");
148 define_key(top_kmap, kbd (KeyEvent.DOM_VK_BACK_SPACE,0),"go-up");
149 define_key(top_kmap, kbd ("h",0),"go-back");
150 define_key(top_kmap, kbd ("l",0),"go-forward");
151 define_key(top_kmap, kbd ("a",MOD_CTRL),"cmd_selectAll"); // not really vi like, but ggVG is even worse for select all
152 define_key(top_kmap, kbd (",",MOD_CTRL),"toggle-numbered-links");
153 define_key(top_kmap, kbd (".",MOD_CTRL),"toggle-numbered-images");
154 define_key(top_kmap, kbd ("slash",0),"isearch-forward");
155 define_key(top_kmap, kbd ("back_slash",0),"view-source");
156 define_key(top_kmap, kbd ("S-slash",0),"isearch-backward");
157 define_key(top_kmap, kbd ("r",0),"revert-buffer");
158 define_key(top_kmap, kbd ("1",0),"numberedlinks-1");
159 define_key(top_kmap, kbd ("2",0),"numberedlinks-2");
160 define_key(top_kmap, kbd ("3",0),"numberedlinks-3");
161 define_key(top_kmap, kbd ("4",0),"numberedlinks-4");
162 define_key(top_kmap, kbd ("5",0),"numberedlinks-5");
163 define_key(top_kmap, kbd ("6",0),"numberedlinks-6");
164 define_key(top_kmap, kbd ("7",0),"numberedlinks-7");
165 define_key(top_kmap, kbd ("8",0),"numberedlinks-8");
166 define_key(top_kmap, kbd ("9",0),"numberedlinks-9");
167 define_key(top_kmap, kbd ("comma",0),"goto-numbered-link");
168 define_key(top_kmap, kbd ("period",0),"copy-numbered-image-location");
169 define_key(top_kmap, kbd ("u",0),"buffer-previous");
170 define_key(top_kmap, kbd ("u", MOD_CTRL), "universal-argument");
171 define_key(top_kmap, kbd ("i",0),"buffer-next");
172 define_key(top_kmap, kbd ("p",MOD_CTRL),"buffer-previous");
173 define_key(top_kmap, kbd ("n",MOD_CTRL),"buffer-next");
174 define_key(top_kmap, kbd ("y",0),"copy-current-url");
175 define_key(top_kmap, kbd ("Y",0),"copy-link-location");
176 define_key(top_kmap, kbd (KeyEvent.DOM_VK_ESCAPE,0),"stop-loading");
177 define_key(top_kmap, kbd ("g",MOD_CTRL),"unfocus"); //escape from a textfield
178 define_key(top_kmap, kbd ( "equals", 0),"text-reset");
179 define_key(top_kmap, kbd ( "S-equals", 0),"text-enlarge");
180 define_key(top_kmap, kbd ( "subtract", 0),"text-reduce");
182 // shows the query on the bottom with all conkeror commands
183 define_key(top_kmap, kbd ("S-;"),"execute-extended-command");
184 define_key(top_kmap, kbd ("M-S-;"),"eval-expression");
187 //define_key(top_kmap, kbd (" ",MOD_SHIFT),"cmd_scrollPageUp");
188 define_key(top_kmap, kbd (" ",0),"cmd_scrollPageDown");
189 define_key(top_kmap, kbd ("b",MOD_CTRL),"cmd_scrollPageUp");
190 define_key(top_kmap, kbd ("f",MOD_CTRL),"cmd_scrollPageDown");
191 define_key(top_kmap, kbd ("k",0),"cmd_scrollLineUp");
192 define_key(top_kmap, kbd ("j",0),"cmd_scrollLineDown");
193 define_key(top_kmap, kbd ("H",0),"cmd_scrollLeft");
194 define_key(top_kmap, kbd ("L",0),"cmd_scrollRight");
195 define_key(top_kmap, kbd ("0",0),"cmd_scrollBeginLine");
196 define_key(top_kmap, kbd ("S-6",0),"cmd_scrollBeginLine");
197 define_key(top_kmap, kbd ("S-4",0),"cmd_scrollEndLine");
198 define_key(top_kmap, kbd ("g",0),"cmd_scrollTop");
199 define_key(top_kmap, kbd ("G",0),"cmd_scrollBottom");
202 // useful in caret mode
203 define_key(top_kmap, kbd ("a",MOD_CTRL),"beginning-of-line");
204 define_key(top_kmap, kbd ("e",MOD_CTRL),"end-of-line");
205 define_key(top_kmap, kbd ("b",MOD_META),"cmd_wordPrevious");
206 define_key(top_kmap, kbd ("f",MOD_META),"cmd_wordNext");
208 define_key(top_kmap, kbd (KeyEvent.DOM_VK_PAGE_UP, MOD_SHIFT),"cmd_selectPageUp");
209 define_key(top_kmap, kbd (KeyEvent.DOM_VK_PAGE_DOWN, MOD_SHIFT),"cmd_selectPageDown");
210 define_key(top_kmap, kbd (KeyEvent.DOM_VK_DELETE, MOD_SHIFT),"cmd_cut");
211 define_key(top_kmap, kbd (KeyEvent.DOM_VK_DELETE, MOD_CTRL),"cmd_copy");
212 define_key(top_kmap, kbd (KeyEvent.DOM_VK_INSERT, MOD_CTRL),"cmd_copy");
213 define_key(top_kmap, kbd (KeyEvent.DOM_VK_HOME, MOD_SHIFT|MOD_CTRL),"cmd_selectTop");
214 define_key(top_kmap, kbd (KeyEvent.DOM_VK_END, MOD_SHIFT|MOD_CTRL),"cmd_selectBottom");
215 define_key(top_kmap, kbd (KeyEvent.DOM_VK_LEFT, MOD_CTRL|MOD_SHIFT),"cmd_selectWordPrevious");
216 define_key(top_kmap, kbd (KeyEvent.DOM_VK_RIGHT, MOD_CTRL|MOD_SHIFT),"cmd_selectWordNext");
217 define_key(top_kmap, kbd (KeyEvent.DOM_VK_LEFT, MOD_SHIFT),"cmd_selectCharPrevious");
218 define_key(top_kmap, kbd (KeyEvent.DOM_VK_RIGHT, MOD_SHIFT),"cmd_selectCharNext");
219 define_key(top_kmap, kbd (KeyEvent.DOM_VK_HOME, MOD_SHIFT),"cmd_selectBeginLine");
220 define_key(top_kmap, kbd (KeyEvent.DOM_VK_END, MOD_SHIFT),"cmd_selectEndLine");
221 define_key(top_kmap, kbd (KeyEvent.DOM_VK_UP, MOD_SHIFT),"cmd_selectLinePrevious");
222 define_key(top_kmap, kbd (KeyEvent.DOM_VK_DOWN, MOD_SHIFT),"cmd_selectLineNext");
224 define_key(top_kmap, kbd(KeyEvent.DOM_VK_RETURN, MOD_CTRL), "follow-link-in-new-buffer");
226 // Input area keys - the same as for emacs
227 define_key(input_kmap, kbd ("a",MOD_CTRL),"cmd_beginLine");
228 define_key(input_kmap, kbd ("e",MOD_CTRL),"cmd_endLine");
229 define_key(input_kmap, kbd (KeyEvent.DOM_VK_BACK_SPACE, 0), "cmd_deleteCharBackward");
230 define_key(input_kmap, kbd (KeyEvent.DOM_VK_BACK_SPACE, MOD_META), "cmd_deleteWordBackward");
231 define_key(input_kmap, kbd ("d",MOD_CTRL),"cmd_deleteCharForward");
232 define_key(input_kmap, kbd ("d",MOD_META),"cmd_deleteWordForward");
233 define_key(input_kmap, kbd ("b",MOD_CTRL),"cmd_charPrevious");
234 define_key(input_kmap, kbd ("b",MOD_META),"cmd_wordPrevious");
235 define_key(input_kmap, kbd ("f",MOD_CTRL),"cmd_charNext");
236 define_key(input_kmap, kbd ("f",MOD_META),"cmd_wordNext");
237 define_key(input_kmap, kbd ("y",MOD_CTRL),"cmd_paste");
238 define_key(input_kmap, kbd ("w",MOD_META),"cmd_copy");
239 define_key(input_kmap, kbd ("k",MOD_CTRL),"cmd_deleteToEndOfLine");
242 define_key(input_kmap, kbd (KeyEvent.DOM_VK_HOME,MOD_SHIFT), "cmd_selectBeginLine");
243 define_key(input_kmap, kbd (KeyEvent.DOM_VK_END,MOD_SHIFT),"cmd_selectEndLine");
244 define_key(input_kmap, kbd (KeyEvent.DOM_VK_BACK_SPACE,MOD_CTRL), "cmd_deleteWordBackward");
245 define_key(input_kmap, kbd (KeyEvent.DOM_VK_LEFT,MOD_CTRL|MOD_SHIFT),
246 "cmd_selectWordPrevious");
247 define_key(input_kmap, kbd (KeyEvent.DOM_VK_RIGHT,MOD_CTRL|MOD_SHIFT), "cmd_selectWordNext");
250 define_key(input_kmap, kbd ("r",MOD_CTRL),"cmd_redo");
252 // This must be at the end of input_kmap defs so it's matched last.
253 define_key(input_kmap, kbd (match_any_unmodified_key), null, true);
255 textarea_kmap.parent = input_kmap;
257 // textarea keys - the same as for emacs
258 define_key(textarea_kmap, kbd ("n",MOD_CTRL),"cmd_lineNext");
259 define_key(textarea_kmap, kbd ("p",MOD_CTRL),"cmd_linePrevious");
260 define_key(textarea_kmap, kbd ("M-S-comma"),"cmd_moveTop");
261 define_key(textarea_kmap, kbd ("M-S-period"),"cmd_moveBottom");
262 define_key(textarea_kmap, kbd ("v",MOD_META),"cmd_movePageUp");
263 define_key(textarea_kmap, kbd ("v",MOD_CTRL),"cmd_movePageDown");
266 define_key (textarea_kmap, kbd (KeyEvent.DOM_VK_PAGE_UP,MOD_SHIFT), "cmd_selectPageUp");
267 define_key (textarea_kmap, kbd (KeyEvent.DOM_VK_PAGE_DOWN,MOD_SHIFT), "cmd_selectPageDown");
270 // define_key(textarea_kmap, kbd ("r",MOD_CTRL),"cmd_redo");
272 init_minibuffer_keys ();
274 init_numberedlinks_keys ();
276 init_isearch_keys ();
278 init_frameset_keys ();
280 init_universal_arg_keys ();
288 abort_key = kbd ("g",MOD_CTRL);
290 define_key(help_kmap, kbd ("b",0),"describe-bindings");
291 define_key(help_kmap, kbd ("i",0),"help-page");
292 define_key(help_kmap, kbd ("t",0),"help-with-tutorial");
293 define_key(top_kmap, kbd ("back_slash",0),"view-source");
295 define_key(ctrlx_kmap, kbd ("b",0),"switch-to-buffer");
296 define_key(ctrlx_kmap, kbd ("k",0),"kill-buffer");
297 define_key(ctrlx_kmap, kbd ("f",MOD_CTRL),"find-url");
298 define_key(ctrlx_kmap, kbd ("c",MOD_CTRL),"quit");
299 // define_key(ctrlx_kmap, kbd ("1",0),"delete-other-windows");
300 // define_key(ctrlx_kmap, kbd ("0",0),"delete-window");
301 // define_key(ctrlx_kmap, kbd ("2",0),"split-window");
302 // define_key(ctrlx_kmap, kbd ("o",0),"other-window");
303 define_key(ctrlx_kmap, kbd ("v",MOD_CTRL),"find-alternate-url");
304 define_key(ctrlx_kmap, kbd ("h",0),"cmd_selectAll");
305 define_key(ctrlx_kmap, kbd ("b",MOD_CTRL),"list-buffers");
306 define_key(ctrlx_kmap, kbd ("s",MOD_CTRL),"save-page");
308 define_key(five_kmap, kbd ("f",MOD_CTRL),"find-url-other-frame");
309 define_key(five_kmap, kbd ("0",0),"delete-frame");
310 define_key(five_kmap, kbd ("2",0),"make-frame-command");
312 define_key(ctrlx_kmap, kbd ("4",0), four_kmap);
313 define_key(ctrlx_kmap, kbd ("5",0), five_kmap);
315 define_key(top_kmap, kbd ("h",MOD_CTRL), help_kmap);
316 define_key(top_kmap, kbd ("x",MOD_CTRL), ctrlx_kmap);
317 define_key(top_kmap, kbd ("c",MOD_CTRL), ctrlc_kmap);
318 define_key(top_kmap, kbd ("f",0), frameset_kmap);
320 define_key(top_kmap, kbd ("u",0),"go-up");
321 define_key(top_kmap, kbd ("C-u"), "universal-argument");
322 define_key(top_kmap, kbd (" ",MOD_META),"yank-to-clipboard");
323 define_key(top_kmap, kbd ("g",0),"open-url");
324 define_key(top_kmap, kbd ("l",MOD_META),"toggle-numbered-links");
325 define_key(top_kmap, kbd ("l",MOD_CTRL | MOD_META),"toggle-numbered-images");
326 define_key(top_kmap, kbd ("l",0),"go-back");
327 define_key(top_kmap, kbd ("s",MOD_CTRL),"isearch-forward");
328 define_key(top_kmap, kbd ("r",MOD_CTRL),"isearch-backward");
329 define_key(top_kmap, kbd ("B",0),"go-back");
330 define_key(top_kmap, kbd ("F",0),"go-forward");
331 define_key(top_kmap, kbd ("R",0),"revert-buffer");
332 define_key(top_kmap, kbd ("1",0),"numberedlinks-1");
333 define_key(top_kmap, kbd ("2",0),"numberedlinks-2");
334 define_key(top_kmap, kbd ("3",0),"numberedlinks-3");
335 define_key(top_kmap, kbd ("4",0),"numberedlinks-4");
336 define_key(top_kmap, kbd ("5",0),"numberedlinks-5");
337 define_key(top_kmap, kbd ("6",0),"numberedlinks-6");
338 define_key(top_kmap, kbd ("7",0),"numberedlinks-7");
339 define_key(top_kmap, kbd ("8",0),"numberedlinks-8");
340 define_key(top_kmap, kbd ("9",0),"numberedlinks-9");
341 define_key(top_kmap, kbd ("n",0),"goto-numbered-link");
342 define_key(top_kmap, kbd ("i",0),"copy-numbered-image-location");
343 define_key(top_kmap, kbd ("p",MOD_META),"buffer-previous");
344 define_key(top_kmap, kbd ("n",MOD_META),"buffer-next");
345 define_key(top_kmap, kbd ("c",0),"copy-current-url");
346 define_key(top_kmap, kbd ("C",0),"copy-link-location");
347 define_key(top_kmap, kbd ("x",MOD_META),"execute-extended-command");
348 define_key(top_kmap, kbd ("g",MOD_CTRL),"keyboard-quit");
349 define_key(top_kmap, kbd ( KeyEvent.DOM_VK_ESCAPE, 0),"unfocus");
350 define_key(top_kmap, kbd ( "equals", 0),"text-reset");
351 define_key(top_kmap, kbd ( "S-equals", 0),"text-enlarge");
352 define_key(top_kmap, kbd ( "subtract", 0),"text-reduce");
355 define_key(top_kmap, kbd ( KeyEvent.DOM_VK_BACK_SPACE, 0),"cmd_scrollPageUp");
356 define_key(top_kmap, kbd ("space"),"cmd_scrollPageDown");
357 define_key(top_kmap, kbd ("M-v"),"cmd_scrollPageUp");
358 define_key(top_kmap, kbd ("C-v"),"cmd_scrollPageDown");
359 define_key(top_kmap, kbd ("page_up"),"cmd_scrollPageUp");
360 define_key(top_kmap, kbd ("page_down"),"cmd_scrollPageDown");
361 define_key(top_kmap, kbd ("C-p"),"cmd_scrollLineUp");
362 define_key(top_kmap, kbd ("C-n"),"cmd_scrollLineDown");
364 define_key(top_kmap, kbd ("up"),"cmd_scrollLineUp");
365 define_key(top_kmap, kbd ("down"),"cmd_scrollLineDown");
366 define_key(top_kmap, kbd ("left"),"cmd_scrollLeft");
367 define_key(top_kmap, kbd ("right"),"cmd_scrollRight");
370 define_key(top_kmap, kbd ("C-b"),"cmd_scrollLeft");
371 define_key(top_kmap, kbd ("C-f"),"cmd_scrollRight");
372 define_key(top_kmap, kbd ("C-a"),"beginning-of-line");
373 define_key(top_kmap, kbd ("C-e"),"end-of-line");
374 define_key(top_kmap, kbd ("M-S-comma"),"cmd_scrollTop");
375 define_key(top_kmap, kbd ("M-S-period"),"cmd_scrollBottom");
376 define_key(top_kmap, kbd ("C-S-subtract"),"cmd_undo");
377 define_key(top_kmap, kbd ("C-y"),"cmd_paste");
379 define_key(top_kmap, kbd ("M-b"),"cmd_wordPrevious");
380 define_key(top_kmap, kbd ("M-f"),"cmd_wordNext");
382 define_key(top_kmap, kbd ("M-S-;"),"eval-expression");
384 define_key(top_kmap, kbd ("M-w"),"cmd_copy");
385 define_key(top_kmap, kbd ("C-w"),"cmd_cut");
387 define_key(top_kmap, kbd (KeyEvent.DOM_VK_PAGE_UP, MOD_SHIFT),"cmd_selectPageUp");
388 define_key(top_kmap, kbd (KeyEvent.DOM_VK_PAGE_DOWN, MOD_SHIFT),"cmd_selectPageDown");
389 define_key(top_kmap, kbd (KeyEvent.DOM_VK_DELETE, MOD_SHIFT),"cmd_cut");
390 define_key(top_kmap, kbd (KeyEvent.DOM_VK_DELETE, MOD_CTRL),"cmd_copy");
391 define_key(top_kmap, kbd (KeyEvent.DOM_VK_INSERT, MOD_CTRL),"cmd_copy");
392 define_key(top_kmap, kbd (KeyEvent.DOM_VK_HOME, MOD_SHIFT|MOD_CTRL),"cmd_selectTop");
393 define_key(top_kmap, kbd (KeyEvent.DOM_VK_END, MOD_SHIFT|MOD_CTRL),"cmd_selectBottom");
394 define_key(top_kmap, kbd (KeyEvent.DOM_VK_LEFT, MOD_CTRL|MOD_SHIFT),"cmd_selectWordPrevious");
395 define_key(top_kmap, kbd (KeyEvent.DOM_VK_RIGHT, MOD_CTRL|MOD_SHIFT),"cmd_selectWordNext");
396 define_key(top_kmap, kbd (KeyEvent.DOM_VK_LEFT, MOD_SHIFT),"cmd_selectCharPrevious");
397 define_key(top_kmap, kbd (KeyEvent.DOM_VK_RIGHT, MOD_SHIFT),"cmd_selectCharNext");
398 define_key(top_kmap, kbd (KeyEvent.DOM_VK_HOME, MOD_SHIFT),"cmd_selectBeginLine");
399 define_key(top_kmap, kbd (KeyEvent.DOM_VK_END, MOD_SHIFT),"cmd_selectEndLine");
400 define_key(top_kmap, kbd (KeyEvent.DOM_VK_UP, MOD_SHIFT),"cmd_selectLinePrevious");
401 define_key(top_kmap, kbd (KeyEvent.DOM_VK_DOWN, MOD_SHIFT),"cmd_selectLineNext");
403 define_key(top_kmap, kbd(KeyEvent.DOM_VK_RETURN, MOD_CTRL), "follow-link-in-new-buffer");
406 define_key(input_kmap, kbd ("a",MOD_CTRL),"cmd_beginLine");
407 define_key(input_kmap, kbd ("e",MOD_CTRL),"cmd_endLine");
408 define_key(input_kmap, kbd (KeyEvent.DOM_VK_BACK_SPACE, 0), "cmd_deleteCharBackward");
409 define_key(input_kmap, kbd (KeyEvent.DOM_VK_BACK_SPACE, MOD_META), "cmd_deleteWordBackward");
410 define_key(input_kmap, kbd ("d",MOD_CTRL),"cmd_deleteCharForward");
411 define_key(input_kmap, kbd ("d",MOD_META),"cmd_deleteWordForward");
412 define_key(input_kmap, kbd ("b",MOD_CTRL),"cmd_charPrevious");
413 define_key(input_kmap, "left", "cmd_charPrevious");
414 define_key(input_kmap, kbd ("b",MOD_META),"cmd_wordPrevious");
415 define_key(input_kmap, kbd ("f",MOD_CTRL),"cmd_charNext");
416 define_key(input_kmap, "right", "cmd_charNext");
417 define_key(input_kmap, kbd ("f",MOD_META),"cmd_wordNext");
418 define_key(input_kmap, kbd ("y",MOD_CTRL),"cmd_paste");
419 define_key(input_kmap, kbd ("w",MOD_META),"cmd_copy");
420 define_key(input_kmap, kbd ("k",MOD_CTRL),"cmd_deleteToEndOfLine");
423 define_key(input_kmap, kbd (KeyEvent.DOM_VK_HOME,MOD_SHIFT), "cmd_selectBeginLine");
424 define_key(input_kmap, kbd (KeyEvent.DOM_VK_END,MOD_SHIFT),"cmd_selectEndLine");
425 define_key(input_kmap, kbd (KeyEvent.DOM_VK_BACK_SPACE,MOD_CTRL), "cmd_deleteWordBackward");
426 define_key(input_kmap, kbd (KeyEvent.DOM_VK_LEFT,MOD_CTRL|MOD_SHIFT),
427 "cmd_selectWordPrevious");
428 define_key(input_kmap, kbd (KeyEvent.DOM_VK_RIGHT,MOD_CTRL|MOD_SHIFT), "cmd_selectWordNext");
431 define_key(input_kmap, kbd ("r",MOD_CTRL),"cmd_redo");
433 // This must be at the end of input_kmap defs so it's matched last.
434 define_key(input_kmap, kbd (match_any_unmodified_key), null, true);
436 textarea_kmap.parent = input_kmap;
439 define_key(textarea_kmap, kbd ("n",MOD_CTRL),"cmd_lineNext");
440 define_key(textarea_kmap, "down", "cmd_lineNext");
441 define_key(textarea_kmap, kbd ("p",MOD_CTRL),"cmd_linePrevious");
442 define_key(textarea_kmap, "up", "cmd_linePrevious");
443 define_key(textarea_kmap, kbd ("<",MOD_META),"cmd_moveTop");
444 define_key(textarea_kmap, kbd (">",MOD_META),"cmd_moveBottom");
445 define_key(textarea_kmap, kbd ("v",MOD_META),"cmd_movePageUp");
446 define_key(textarea_kmap, "page_up", "cmd_movePageUp");
448 define_key(textarea_kmap, kbd ("v",MOD_CTRL),"cmd_movePageDown");
449 define_key(textarea_kmap, "page_down", "cmd_movePageDown");
450 define_key(textarea_kmap, kbd (" ",MOD_META),"yank-to-clipboard");
453 define_key (textarea_kmap, kbd (KeyEvent.DOM_VK_PAGE_UP,MOD_SHIFT), "cmd_selectPageUp");
454 define_key (textarea_kmap, kbd (KeyEvent.DOM_VK_PAGE_DOWN,MOD_SHIFT), "cmd_selectPageDown");
459 init_minibuffer_keys ();
461 init_numberedlinks_keys ();
463 init_isearch_keys ();
465 init_frameset_keys ();
467 init_universal_arg_keys ();
469 var browser_kmset = new keymap_set();
470 browser_kmset.default_keymap = top_kmap;
471 browser_kmset.context_keymaps = context_kmaps;
473 browser_buffer.prototype.keymap_set = browser_kmset;
477 function init_minibuffer_keys () {
478 // minibuffer bindings
481 define_key(minibuffer_base_kmap, "C-a", "minibuffer-cmd_beginLine");
482 define_key(minibuffer_base_kmap, "C-e", "minibuffer-cmd_endLine");
483 define_key(minibuffer_base_kmap, "back_space", "minibuffer-cmd_deleteCharBackward");
484 define_key(minibuffer_base_kmap, "M-back_space", "minibuffer-cmd_deleteWordBackward");
485 define_key(minibuffer_base_kmap, "C-d", "minibuffer-cmd_deleteCharForward");
486 define_key(minibuffer_base_kmap, "M-d", "minibuffer-cmd_deleteWordForward");
487 define_key(minibuffer_base_kmap, "C-b", "minibuffer-cmd_charPrevious");
488 define_key(minibuffer_base_kmap, "M-b", "minibuffer-cmd_wordPrevious");
489 define_key(minibuffer_base_kmap, "C-f", "minibuffer-cmd_charNext");
490 define_key(minibuffer_base_kmap, "M-f", "minibuffer-cmd_wordNext");
491 define_key(minibuffer_base_kmap, "C-y", "minibuffer-cmd_paste");
492 define_key(minibuffer_base_kmap, "M-w", "minibuffer-cmd_copy");
493 define_key(minibuffer_base_kmap, "C-k", "minibuffer-cmd_deleteToEndOfLine");
495 define_key(minibuffer_base_kmap, "S-home", "minibuffer-cmd_selectBeginLine");
496 define_key(minibuffer_base_kmap, "S-end", "minibuffer-cmd_selectEndLine");
497 define_key(minibuffer_base_kmap, "C-back_space", "minibuffer-cmd_deleteWordBackward");
498 define_key(minibuffer_base_kmap, "C-S-left", "minibuffer-cmd_selectWordPrevious");
499 define_key(minibuffer_base_kmap, "C-S-right", "minibuffer-cmd_selectWordNext");
502 define_key(minibuffer_base_kmap, "C-r", "minibuffer-cmd_redo");
504 define_key(minibuffer_base_kmap, kbd(match_any_unmodified_key), "minibuffer-insert-character");
506 define_key (minibuffer_kmap, "return", "exit-minibuffer");
507 define_key (minibuffer_kmap, "C-m", "exit-minibuffer");
508 define_key (minibuffer_kmap, "M-p", "minibuffer-history-previous");
509 define_key (minibuffer_kmap, "M-n", "minibuffer-history-next");
510 define_key (minibuffer_kmap, "C-g", "minibuffer-abort");
511 define_key (minibuffer_kmap, "escape", "minibuffer-abort");
513 define_key (minibuffer_completion_kmap, "tab", "minibuffer-complete");
514 define_key (minibuffer_completion_kmap, "space", "minibuffer-accept-match");
515 define_key (minibuffer_completion_kmap, kbd(match_any_unmodified_key), "minibuffer-insert-character-complete");
517 minibuffer_completion_kmap.parent = minibuffer_kmap;
519 minibuffer_kmap.parent = minibuffer_base_kmap;
523 function init_numberedlinks_keys () {
524 // numbered links bindings
526 define_key (numberedlinks_kmap, "M-return", "numberedlinks-focus");
527 define_key (numberedlinks_kmap, "return", "numberedlinks-follow");
528 define_key (numberedlinks_kmap, "C-return", "numberedlinks-follow-other-buffer");
529 define_key (numberedlinks_kmap, "C-M-return", "numberedlinks-follow-other-frame");
530 define_key (numberedlinks_kmap, "C-v", "numberedlinks-save");
531 define_key (numberedlinks_kmap, "C-g", "numberedlinks-abort");
532 define_key (numberedlinks_kmap, "escape", "numberedlinks-abort");
534 // we also want to consume TAB but ignore it. there should be a general command for this.
535 numberedlinks_kmap.parent = minibuffer_base_kmap;
539 function init_isearch_keys () {
542 define_key (isearch_kmap, "back_space", "isearch-backspace");
543 define_key (isearch_kmap, "C-r", "isearch-continue-backward");
544 define_key (isearch_kmap, "C-s", "isearch-continue-forward");
545 define_key (isearch_kmap, "C-g", "isearch-abort");
546 define_key (isearch_kmap, "escape", "isearch-abort");
547 define_key (isearch_kmap, kbd(match_any_unmodified_key), "isearch-add-character");
548 define_key (isearch_kmap, kbd(match_any_key), "isearch-done");
552 function init_frameset_keys () {
553 define_key(frameset_kmap, kbd ("f",0),"next-frameset-frame");
554 define_key(frameset_kmap, kbd ("i",0),"next-iframe");
555 define_key(frameset_kmap, kbd (KeyEvent.DOM_VK_RETURN,0), "open-frameset-frame-in-current-buffer");
556 define_key(frameset_kmap, kbd (KeyEvent.DOM_VK_RETURN,MOD_CTRL), "open-frameset-frame-in-new-buffer");
557 define_key(frameset_kmap, kbd (KeyEvent.DOM_VK_RETURN,MOD_CTRL | MOD_META), "open-frameset-frame-in-new-frame");
558 define_key(frameset_kmap, kbd ("c",0), "copy-frameset-frame-location");
559 define_key(frameset_kmap, kbd ("t", 0), "frameset-focus-top");
560 define_key(frameset_kmap, kbd ("u", 0), "frameset-focus-up");
561 define_key(frameset_kmap, kbd ("back_slash", 0), "frameset-view-source");
565 function init_universal_arg_keys ()
567 define_key(universal_kmap, kbd ("u", MOD_CTRL), "universal-argument-more");
568 define_key(universal_kmap, kbd ("1", 0), "universal-digit");
569 define_key(universal_kmap, kbd ("2", 0), "universal-digit");
570 define_key(universal_kmap, kbd ("3", 0), "universal-digit");
571 define_key(universal_kmap, kbd ("4", 0), "universal-digit");
572 define_key(universal_kmap, kbd ("5", 0), "universal-digit");
573 define_key(universal_kmap, kbd ("6", 0), "universal-digit");
574 define_key(universal_kmap, kbd ("7", 0), "universal-digit");
575 define_key(universal_kmap, kbd ("8", 0), "universal-digit");
576 define_key(universal_kmap, kbd ("9", 0), "universal-digit");
577 define_key(universal_kmap, kbd ("0", 0), "universal-digit");
578 define_key(universal_kmap, kbd ("subtract", 0), "universal-negate");
581 /* FIXME: All of this genBindings stuff should operate on a particular
582 buffer, rather than the current selected buffer. */
583 function genBindingsHelper(window, doc, kmap, prefix)
586 for (var i=0; i<kmap.length; i++) {
587 //fallthrough keys are used by context-maps like input-kmap to ensure
588 //that ordinary, unmodified characters will go to the input widget
589 //instead of top_kmap. Therefore we don't display these keys in the
592 if (kmap[i].fallthrough) continue;
593 if (kmap[i].key.match_function) continue;
594 var command = kmap[i].command || "Prefix Command";;
595 var key = format_key_press(code, kmap[i].key.modifiers);
597 doc.write("<TR><TD>")
598 doc.write(prefix.join(" ") + " " + key);
599 doc.write("</TD><TD>")
601 doc.write("</TD></TR>");
603 if (kmap[i].keymap) {
605 for (var j in prefix) p[j] = prefix[j];
606 p.push(format_key_press(kmap[i].key.keyCode, kmap[i].key.modifiers));
607 genBindingsHelper(window, doc, kmap[i].keymap, p);
610 } catch(e) {window.alert(e);}
613 function genAllBindings(window, kmap)
615 genBindings(window, top_kmap, "Top Level");
616 genBindings(window, input_kmap, "Text Box");
617 genBindings(window, textarea_kmap, "Text Area");
620 function genBindings(window, kmap, name)
623 var doc = window.content.document;
625 doc.write("<h1>" + name + " Key bindings</h1><p>");
626 doc.write("<table border='1'>");
627 doc.write("<tr><th>Key<th>Binding");
628 genBindingsHelper(window, doc, kmap, []);
629 doc.write("</table></p>");
630 } catch(e) {window.alert(e);}
635 function add_escape_bindings()
637 define_key(top_kmap, kbd (KeyEvent.DOM_VK_ESCAPE, 0), top_esc_kmap);
638 define_key(input_kmap, kbd (KeyEvent.DOM_VK_ESCAPE, 0), input_esc_kmap);
639 define_key(textarea_kmap, kbd (KeyEvent.DOM_VK_ESCAPE, 0), textarea_esc_kmap);
642 define_key(top_esc_kmap, kbd (" ",0),"yank-to-clipboard");
643 define_key(top_esc_kmap, kbd ("l",0),"toggle-numbered-links");
644 define_key(top_esc_kmap, kbd ("p",0),"buffer-previous");
645 define_key(top_esc_kmap, kbd ("n",0),"buffer-next");
646 define_key(top_esc_kmap, kbd ("x",0),"execute-extended-command");
647 define_key(top_esc_kmap, kbd ("v",0),"cmd_scrollPageUp");
648 define_key(top_esc_kmap, kbd ("<",0),"cmd_scrollTop");
649 define_key(top_esc_kmap, kbd (">",0),"cmd_scrollBottom");
650 define_key(top_esc_kmap, kbd ("v",0),"cmd_movePageUp");
651 define_key(top_esc_kmap, kbd ("b",0),"cmd_wordPrevious");
652 define_key(top_esc_kmap, kbd ("f",0),"cmd_wordNext");
655 define_key(input_esc_kmap, kbd (KeyEvent.DOM_VK_BACK_SPACE, 0), "cmd_deleteWordBackward");
656 define_key(input_esc_kmap, kbd ("d",0),"cmd_deleteWordForward");
657 define_key(input_esc_kmap, kbd ("b",0),"cmd_wordPrevious");
658 define_key(input_esc_kmap, kbd ("f",0),"cmd_wordNext");
659 define_key(input_esc_kmap, kbd ("w",0),"cmd_copy");
661 textarea_esc_kmap.parent = input_esc_kmap;
664 // define_key(textarea_esc_kmap, kbd ("d",0),"cmd_deleteWordForward");
665 // define_key(textarea_esc_kmap, kbd ("b",0),"cmd_wordPrevious");
666 // define_key(textarea_esc_kmap, kbd ("f",0),"cmd_wordNext");
667 // define_key(textarea_esc_kmap, kbd ("w",0),"cmd_copy");
668 define_key(textarea_esc_kmap, kbd ("<",0),"cmd_moveTop");
669 define_key(textarea_esc_kmap, kbd (">",0),"cmd_moveBottom");
670 define_key(textarea_esc_kmap, kbd ("v",0),"cmd_movePageUp");