From 8cdb02f0f45d1c9cf246fb121445c3d32e146462 Mon Sep 17 00:00:00 2001 From: Jeremy Maitin-Shepard Date: Tue, 8 Apr 2008 15:19:29 -0400 Subject: [PATCH] Improved describe-bindings display --- modules/bindings/default/basic-commands.js | 92 ++++++++++---------- modules/bindings/default/content-buffer/element.js | 20 ++--- modules/bindings/default/content-buffer/normal.js | 2 +- modules/bindings/default/content-buffer/quote.js | 4 +- modules/bindings/default/content-buffer/select.js | 2 +- modules/bindings/default/content-buffer/text.js | 74 ++++++++-------- .../bindings/default/content-buffer/textarea.js | 26 +++--- modules/bindings/default/content-buffer/zoom.js | 32 +++---- modules/bindings/default/download-buffer.js | 2 +- modules/bindings/default/global.js | 6 +- modules/bindings/default/help-buffer.js | 2 +- modules/bindings/default/hints.js | 2 +- modules/bindings/default/isearch.js | 2 +- modules/bindings/default/minibuffer.js | 17 +--- modules/bindings/default/universal_argument.js | 2 +- modules/help.js | 98 +++++++++++++++------- modules/hints.js | 8 -- modules/keyboard.js | 21 +++-- modules/page-modes/gmail.js | 2 +- 19 files changed, 222 insertions(+), 192 deletions(-) rewrite modules/bindings/default/basic-commands.js (95%) diff --git a/modules/bindings/default/basic-commands.js b/modules/bindings/default/basic-commands.js dissimilarity index 95% index b20ce8d..8bbb71f 100644 --- a/modules/bindings/default/basic-commands.js +++ b/modules/bindings/default/basic-commands.js @@ -1,46 +1,46 @@ - -function bind_scroll_keys(keymap) -{ - define_key(keymap, "back_space", "cmd_scrollPageUp"); - define_key(keymap, "space","cmd_scrollPageDown"); - define_key(keymap, "M-v","cmd_scrollPageUp"); - define_key(keymap, "C-v","cmd_scrollPageDown"); - define_key(keymap, "page_up","cmd_scrollPageUp"); - define_key(keymap, "page_down","cmd_scrollPageDown"); - define_key(keymap, "C-p","cmd_scrollLineUp"); - define_key(keymap, "C-n","cmd_scrollLineDown"); - - define_key(keymap, "up","cmd_scrollLineUp"); - define_key(keymap, "down","cmd_scrollLineDown"); - define_key(keymap, "left","cmd_scrollLeft"); - define_key(keymap, "right","cmd_scrollRight"); - - define_key(keymap, "C-b","cmd_scrollLeft"); - define_key(keymap, "C-f","cmd_scrollRight"); - define_key(keymap, "C-a","scroll-beginning-of-line"); - define_key(keymap, "C-e","scroll-end-of-line"); - define_key(keymap, "M-<","cmd_scrollTop"); - define_key(keymap, "M->","cmd_scrollBottom"); - define_key(keymap, "home","cmd_scrollTop"); - define_key(keymap, "end","cmd_scrollBottom"); -} - - -function bind_selection_keys(keymap) -{ - define_key(keymap, "M-w","cmd_copy"); - define_key(keymap, "S-page_up", "cmd_selectPageUp"); - define_key(keymap, "S-page_down", "cmd_selectPageDown"); - define_key(keymap, "C-delete", "cmd_copy"); - define_key(keymap, "C-insert", "cmd_copy"); - define_key(keymap, "C-S-home", "cmd_selectTop"); - define_key(keymap, "C-S-end", "cmd_selectBottom"); - define_key(keymap, "C-S-left", "cmd_selectWordPrevious"); - define_key(keymap, "C-S-right", "cmd_selectWordNext"); - define_key(keymap, "S-left", "cmd_selectCharPrevious"); - define_key(keymap, "S-right", "cmd_selectCharNext"); - define_key(keymap, "S-home", "cmd_selectBeginLine"); - define_key(keymap, "S-end", "cmd_selectEndLine"); - define_key(keymap, "S-up", "cmd_selectLinePrevious"); - define_key(keymap, "S-down", "cmd_selectLineNext"); -} + +function bind_scroll_keys(keymap) +{ + define_key(keymap, "back_space", "cmd_scrollPageUp", $category = "Scrolling"); + define_key(keymap, "space","cmd_scrollPageDown", $category = "Scrolling"); + define_key(keymap, "M-v","cmd_scrollPageUp", $category = "Scrolling"); + define_key(keymap, "C-v","cmd_scrollPageDown", $category = "Scrolling"); + define_key(keymap, "page_up","cmd_scrollPageUp", $category = "Scrolling"); + define_key(keymap, "page_down","cmd_scrollPageDown", $category = "Scrolling"); + define_key(keymap, "C-p","cmd_scrollLineUp", $category = "Scrolling"); + define_key(keymap, "C-n","cmd_scrollLineDown", $category = "Scrolling"); + + define_key(keymap, "up","cmd_scrollLineUp", $category = "Scrolling"); + define_key(keymap, "down","cmd_scrollLineDown", $category = "Scrolling"); + define_key(keymap, "left","cmd_scrollLeft", $category = "Scrolling"); + define_key(keymap, "right","cmd_scrollRight", $category = "Scrolling"); + + define_key(keymap, "C-b","cmd_scrollLeft", $category = "Scrolling"); + define_key(keymap, "C-f","cmd_scrollRight", $category = "Scrolling"); + define_key(keymap, "C-a","scroll-beginning-of-line", $category = "Scrolling"); + define_key(keymap, "C-e","scroll-end-of-line", $category = "Scrolling"); + define_key(keymap, "M-<","cmd_scrollTop", $category = "Scrolling"); + define_key(keymap, "M->","cmd_scrollBottom", $category = "Scrolling"); + define_key(keymap, "home","cmd_scrollTop", $category = "Scrolling"); + define_key(keymap, "end","cmd_scrollBottom", $category = "Scrolling"); +} + + +function bind_selection_keys(keymap) +{ + define_key(keymap, "M-w","cmd_copy", $category = "Selection"); + define_key(keymap, "S-page_up", "cmd_selectPageUp", $category = "Selection"); + define_key(keymap, "S-page_down", "cmd_selectPageDown", $category = "Selection"); + define_key(keymap, "C-delete", "cmd_copy", $category = "Selection"); + define_key(keymap, "C-insert", "cmd_copy", $category = "Selection"); + define_key(keymap, "C-S-home", "cmd_selectTop", $category = "Selection"); + define_key(keymap, "C-S-end", "cmd_selectBottom", $category = "Selection"); + define_key(keymap, "C-S-left", "cmd_selectWordPrevious", $category = "Selection"); + define_key(keymap, "C-S-right", "cmd_selectWordNext", $category = "Selection"); + define_key(keymap, "S-left", "cmd_selectCharPrevious", $category = "Selection"); + define_key(keymap, "S-right", "cmd_selectCharNext", $category = "Selection"); + define_key(keymap, "S-home", "cmd_selectBeginLine", $category = "Selection"); + define_key(keymap, "S-end", "cmd_selectEndLine", $category = "Selection"); + define_key(keymap, "S-up", "cmd_selectLinePrevious", $category = "Selection"); + define_key(keymap, "S-down", "cmd_selectLineNext", $category = "Selection"); +} diff --git a/modules/bindings/default/content-buffer/element.js b/modules/bindings/default/content-buffer/element.js index c5ffd68..a7657c6 100644 --- a/modules/bindings/default/content-buffer/element.js +++ b/modules/bindings/default/content-buffer/element.js @@ -1,6 +1,6 @@ require("element.js"); -var browser_elements_keymap = new keymap(); +define_keymap("browser_elements_keymap"); define_key(content_buffer_normal_keymap, "i", browser_elements_keymap, $hook = browser_object_class_selector("images")); @@ -31,15 +31,15 @@ define_key(content_buffer_normal_keymap, "S-8 M", browser_elements_keymap, function bind_element_operations(keymap) { - define_key(keymap, "f", "follow"); - define_key(keymap, ";", "focus"); - define_key(keymap, "t", "follow-top"); - define_key(keymap, "s", "save"); - define_key(keymap, "c", "copy"); - define_key(keymap, "back_slash", "view-source"); - define_key(keymap, "x", "shell-command-on-file"); - define_key(keymap, "X", "shell-command-on-url"); - define_key(keymap, "k", "bookmark"); + define_key(keymap, "f", "follow", $category = "Browser object"); + define_key(keymap, ";", "focus", $category = "Browser object"); + define_key(keymap, "t", "follow-top", $category = "Browser object"); + define_key(keymap, "s", "save", $category = "Browser object"); + define_key(keymap, "c", "copy", $category = "Browser object"); + define_key(keymap, "back_slash", "view-source", $category = "Browser object"); + define_key(keymap, "x", "shell-command-on-file", $category = "Browser object"); + define_key(keymap, "X", "shell-command-on-url", $category = "Browser object"); + define_key(keymap, "b", "bookmark", $category = "Browser object"); } bind_element_operations(content_buffer_normal_keymap); diff --git a/modules/bindings/default/content-buffer/normal.js b/modules/bindings/default/content-buffer/normal.js index 361eb4c..ea190ee 100644 --- a/modules/bindings/default/content-buffer/normal.js +++ b/modules/bindings/default/content-buffer/normal.js @@ -1,7 +1,7 @@ require("bindings/default/global.js"); require("bindings/default/basic-commands.js"); -var content_buffer_normal_keymap = new keymap($parent = default_global_keymap); +define_keymap("content_buffer_normal_keymap", $parent = default_global_keymap); bind_scroll_keys(content_buffer_normal_keymap); bind_selection_keys(content_buffer_normal_keymap); diff --git a/modules/bindings/default/content-buffer/quote.js b/modules/bindings/default/content-buffer/quote.js index e0db54d..d852fe2 100644 --- a/modules/bindings/default/content-buffer/quote.js +++ b/modules/bindings/default/content-buffer/quote.js @@ -1,6 +1,6 @@ -var content_buffer_quote_next_keymap = new keymap(); -var content_buffer_quote_keymap = new keymap(); +define_keymap("content_buffer_quote_next_keymap"); +define_keymap("content_buffer_quote_keymap"); define_key(content_buffer_quote_next_keymap, match_any_key, "content-buffer-update-input-mode-for-focus", $fallthrough); diff --git a/modules/bindings/default/content-buffer/select.js b/modules/bindings/default/content-buffer/select.js index c3c7bc6..c5cd5cf 100644 --- a/modules/bindings/default/content-buffer/select.js +++ b/modules/bindings/default/content-buffer/select.js @@ -1,6 +1,6 @@ require("bindings/default/content-buffer/normal.js"); -var content_buffer_select_keymap = new keymap($parent = content_buffer_normal_keymap); +define_keymap("content_buffer_select_keymap", $parent = content_buffer_normal_keymap); define_key(content_buffer_select_keymap, "up", null, $fallthrough); define_key(content_buffer_select_keymap, "down", null, $fallthrough); diff --git a/modules/bindings/default/content-buffer/text.js b/modules/bindings/default/content-buffer/text.js index ffc33ad..0b33c04 100644 --- a/modules/bindings/default/content-buffer/text.js +++ b/modules/bindings/default/content-buffer/text.js @@ -1,51 +1,51 @@ require("bindings/default/content-buffer/normal.js"); -var content_buffer_text_keymap = new keymap($parent = content_buffer_normal_keymap); - -define_key(content_buffer_text_keymap, "C-a", "beginning-of-line"); -define_key(content_buffer_text_keymap, "C-e", "end-of-line"); -define_key(content_buffer_text_keymap, "back_space", "cmd_deleteCharBackward"); -define_key(content_buffer_text_keymap, "M-back_space", "cmd_deleteWordBackward"); -define_key(content_buffer_text_keymap, "C-d", "cmd_deleteCharForward"); -define_key(content_buffer_text_keymap, "delete", "cmd_deleteCharForward"); -define_key(content_buffer_text_keymap, "M-d", "cmd_deleteWordForward"); -define_key(content_buffer_text_keymap, "C-b", "backward-char"); -define_key(content_buffer_text_keymap, "left", "backward-char"); -define_key(content_buffer_text_keymap, "M-b", "backward-word"); -define_key(content_buffer_text_keymap, "C-left", "backward-word"); -define_key(content_buffer_text_keymap, "C-f", "forward-char"); -define_key(content_buffer_text_keymap, "right", "forward-char"); -define_key(content_buffer_text_keymap, "M-f", "forward-word"); -define_key(content_buffer_text_keymap, "C-right", "forward-word"); -define_key(content_buffer_text_keymap, "M-w", "cmd_copy"); -define_key(content_buffer_text_keymap, "C-k", "cut-to-end-of-line"); +define_keymap("content_buffer_text_keymap", $parent = content_buffer_normal_keymap); + +define_key(content_buffer_text_keymap, "C-a", "beginning-of-line", $category = "Movement"); +define_key(content_buffer_text_keymap, "C-e", "end-of-line", $category = "Movement"); +define_key(content_buffer_text_keymap, "back_space", "cmd_deleteCharBackward", $category = "Editing"); +define_key(content_buffer_text_keymap, "M-back_space", "cmd_deleteWordBackward", $category = "Editing"); +define_key(content_buffer_text_keymap, "C-d", "cmd_deleteCharForward", $category = "Editing"); +define_key(content_buffer_text_keymap, "delete", "cmd_deleteCharForward", $category = "Editing"); +define_key(content_buffer_text_keymap, "M-d", "cmd_deleteWordForward", $category = "Editing"); +define_key(content_buffer_text_keymap, "C-b", "backward-char", $category = "Movement"); +define_key(content_buffer_text_keymap, "left", "backward-char", $category = "Movement"); +define_key(content_buffer_text_keymap, "M-b", "backward-word", $category = "Movement"); +define_key(content_buffer_text_keymap, "C-left", "backward-word", $category = "Movement"); +define_key(content_buffer_text_keymap, "C-f", "forward-char", $category = "Movement"); +define_key(content_buffer_text_keymap, "right", "forward-char", $category = "Movement"); +define_key(content_buffer_text_keymap, "M-f", "forward-word", $category = "Movement"); +define_key(content_buffer_text_keymap, "C-right", "forward-word", $category = "Movement"); +define_key(content_buffer_text_keymap, "M-w", "cmd_copy", $category = "Selection"); +define_key(content_buffer_text_keymap, "C-k", "cut-to-end-of-line", $category = "Editing"); // 101 keys -define_key(content_buffer_text_keymap, "home", "beginning-of-line"); -define_key(content_buffer_text_keymap, "end", "end-of-line"); -define_key(content_buffer_text_keymap, "S-home", "cmd_selectBeginLine"); -define_key(content_buffer_text_keymap, "S-end", "cmd_selectEndLine"); -define_key(content_buffer_text_keymap, "C-back_space", "cmd_deleteWordBackward"); -define_key(content_buffer_text_keymap, "C-S-left", "cmd_selectWordPrevious"); -define_key(content_buffer_text_keymap, "C-S-right", "cmd_selectWordNext"); -define_key(content_buffer_text_keymap, "S-insert", "paste-x-primary-selection"); +define_key(content_buffer_text_keymap, "home", "beginning-of-line", $category = "Movement"); +define_key(content_buffer_text_keymap, "end", "end-of-line", $category = "Movement"); +define_key(content_buffer_text_keymap, "S-home", "cmd_selectBeginLine", $category = "Selection"); +define_key(content_buffer_text_keymap, "S-end", "cmd_selectEndLine", $category = "Selection"); +define_key(content_buffer_text_keymap, "C-back_space", "cmd_deleteWordBackward", $category = "Editing"); +define_key(content_buffer_text_keymap, "C-S-left", "cmd_selectWordPrevious", $category = "Selection"); +define_key(content_buffer_text_keymap, "C-S-right", "cmd_selectWordNext", $category = "Selection"); +define_key(content_buffer_text_keymap, "S-insert", "paste-x-primary-selection", $category = "Selection"); // Nasty keys -define_key(content_buffer_text_keymap, "C-r","cmd_redo"); +define_key(content_buffer_text_keymap, "C-r","cmd_redo", $category = "Editing"); -define_key(content_buffer_text_keymap, "C-S-subtract", "cmd_undo"); -define_key(content_buffer_text_keymap, "C-x u", "cmd_undo"); -define_key(content_buffer_text_keymap, "C-/", "cmd_undo"); +define_key(content_buffer_text_keymap, "C-S-subtract", "cmd_undo", $category = "Editing"); +define_key(content_buffer_text_keymap, "C-x u", "cmd_undo", $category = "Editing"); +define_key(content_buffer_text_keymap, "C-/", "cmd_undo", $category = "Editing"); -define_key(content_buffer_text_keymap, "C-y", "cmd_paste"); -define_key(content_buffer_text_keymap, "C-w", "cmd_cut"); -define_key(content_buffer_text_keymap, "S-delete", "cmd_cut"); -define_key(content_buffer_text_keymap, "C-x h", "cmd_selectAll"); +define_key(content_buffer_text_keymap, "C-y", "cmd_paste", $category = "Selection"); +define_key(content_buffer_text_keymap, "C-w", "cmd_cut", $category = "Selection"); +define_key(content_buffer_text_keymap, "S-delete", "cmd_cut", $category = "Selection"); +define_key(content_buffer_text_keymap, "C-x h", "cmd_selectAll", $category = "Selection"); -define_key(content_buffer_text_keymap, "C-space", "set-mark"); +define_key(content_buffer_text_keymap, "C-space", "set-mark", $category = "Selection"); -define_key(content_buffer_text_keymap, "C-i", "edit-current-field-in-external-editor"); +define_key(content_buffer_text_keymap, "C-i", "edit-current-field-in-external-editor", $category = "Editing"); // This must be at the end of content_buffer_text_keymap defs so it's matched last. define_key(content_buffer_text_keymap, match_any_unmodified_key, null, $fallthrough); diff --git a/modules/bindings/default/content-buffer/textarea.js b/modules/bindings/default/content-buffer/textarea.js index 8ed7dd1..901aef8 100644 --- a/modules/bindings/default/content-buffer/textarea.js +++ b/modules/bindings/default/content-buffer/textarea.js @@ -1,20 +1,20 @@ require("bindings/default/content-buffer/text.js"); -var content_buffer_textarea_keymap = new keymap($parent = content_buffer_text_keymap); +define_keymap("content_buffer_textarea_keymap", $parent = content_buffer_text_keymap); // textarea keys -define_key(content_buffer_textarea_keymap, "C-n", "forward-line"); -define_key(content_buffer_textarea_keymap, "down", "forward-line"); -define_key(content_buffer_textarea_keymap, "C-p", "backward-line"); -define_key(content_buffer_textarea_keymap, "up", "backward-line"); -define_key(content_buffer_textarea_keymap, "M-<", "beginning-of-first-line"); -define_key(content_buffer_textarea_keymap, "M->", "end-of-last-line"); -define_key(content_buffer_textarea_keymap, "M-v", "backward-page"); -define_key(content_buffer_textarea_keymap, "page_up", "backward-page"); +define_key(content_buffer_textarea_keymap, "C-n", "forward-line", $category = "Movement"); +define_key(content_buffer_textarea_keymap, "down", "forward-line", $category = "Movement"); +define_key(content_buffer_textarea_keymap, "C-p", "backward-line", $category = "Movement"); +define_key(content_buffer_textarea_keymap, "up", "backward-line", $category = "Movement"); +define_key(content_buffer_textarea_keymap, "M-<", "beginning-of-first-line", $category = "Movement"); +define_key(content_buffer_textarea_keymap, "M->", "end-of-last-line", $category = "Movement"); +define_key(content_buffer_textarea_keymap, "M-v", "backward-page", $category = "Movement"); +define_key(content_buffer_textarea_keymap, "page_up", "backward-page", $category = "Movement"); -define_key(content_buffer_textarea_keymap, "C-v", "forward-page"); -define_key(content_buffer_textarea_keymap, "page_down", "forward-page"); +define_key(content_buffer_textarea_keymap, "C-v", "forward-page", $category = "Movement"); +define_key(content_buffer_textarea_keymap, "page_down", "forward-page", $category = "Movement"); // 101 keys -define_key(content_buffer_textarea_keymap, "S-page_up", "cmd_selectPageUp"); -define_key(content_buffer_textarea_keymap, "S-page_down", "cmd_selectPageDown"); +define_key(content_buffer_textarea_keymap, "S-page_up", "cmd_selectPageUp", $category = "Selection"); +define_key(content_buffer_textarea_keymap, "S-page_down", "cmd_selectPageDown", $category = "Selection"); diff --git a/modules/bindings/default/content-buffer/zoom.js b/modules/bindings/default/content-buffer/zoom.js index 64e5dcf..4b8cdb9 100644 --- a/modules/bindings/default/content-buffer/zoom.js +++ b/modules/bindings/default/content-buffer/zoom.js @@ -1,25 +1,25 @@ require("bindings/default/content-buffer/normal.js"); -define_key(content_buffer_normal_keymap, "S-equals", "zoom-in-text"); -define_key(content_buffer_normal_keymap, "equals", "zoom-reset-text"); -define_key(content_buffer_normal_keymap, "subtract", "zoom-out-text"); +define_key(content_buffer_normal_keymap, "S-equals", "zoom-in-text", $category = "Zoom (text)"); +define_key(content_buffer_normal_keymap, "equals", "zoom-reset-text", $category = "Zoom (text)"); +define_key(content_buffer_normal_keymap, "subtract", "zoom-out-text", $category = "Zoom (text)"); -define_key(content_buffer_normal_keymap, "C-S-equals", "zoom-in-full"); -define_key(content_buffer_normal_keymap, "C-equals", "zoom-reset-full"); -define_key(content_buffer_normal_keymap, "C-subtract", "zoom-out-full"); +define_key(content_buffer_normal_keymap, "C-S-equals", "zoom-in-full", $category = "Zoom (full)"); +define_key(content_buffer_normal_keymap, "C-equals", "zoom-reset-full", $category = "Zoom (full)"); +define_key(content_buffer_normal_keymap, "C-subtract", "zoom-out-full", $category = "Zoom (full)"); -define_key(content_buffer_normal_keymap, "z i", "zoom-in-text"); -define_key(content_buffer_normal_keymap, "z m", "zoom-in-text-more"); -define_key(content_buffer_normal_keymap, "z z", "zoom-reset-text"); -define_key(content_buffer_normal_keymap, "z o", "zoom-out-text"); -define_key(content_buffer_normal_keymap, "z r", "zoom-out-text-more"); +define_key(content_buffer_normal_keymap, "z i", "zoom-in-text", $category = "Zoom (text)"); +define_key(content_buffer_normal_keymap, "z m", "zoom-in-text-more", $category = "Zoom (text)"); +define_key(content_buffer_normal_keymap, "z z", "zoom-reset-text", $category = "Zoom (text)"); +define_key(content_buffer_normal_keymap, "z o", "zoom-out-text", $category = "Zoom (text)"); +define_key(content_buffer_normal_keymap, "z r", "zoom-out-text-more", $category = "Zoom (text)"); -define_key(content_buffer_normal_keymap, "z I", "zoom-in-full"); -define_key(content_buffer_normal_keymap, "z M", "zoom-in-full-more"); -define_key(content_buffer_normal_keymap, "z Z", "zoom-reset-full"); -define_key(content_buffer_normal_keymap, "z O", "zoom-out-full"); -define_key(content_buffer_normal_keymap, "z R", "zoom-out-full-more"); +define_key(content_buffer_normal_keymap, "z I", "zoom-in-full", $category = "Zoom (full)"); +define_key(content_buffer_normal_keymap, "z M", "zoom-in-full-more", $category = "Zoom (full)"); +define_key(content_buffer_normal_keymap, "z Z", "zoom-reset-full", $category = "Zoom (full)"); +define_key(content_buffer_normal_keymap, "z O", "zoom-out-full", $category = "Zoom (full)"); +define_key(content_buffer_normal_keymap, "z R", "zoom-out-full-more", $category = "Zoom (full)"); diff --git a/modules/bindings/default/download-buffer.js b/modules/bindings/default/download-buffer.js index 81c68a9..0e04968 100644 --- a/modules/bindings/default/download-buffer.js +++ b/modules/bindings/default/download-buffer.js @@ -1,6 +1,6 @@ require("bindings/default/global.js"); -var download_buffer_keymap = new keymap($parent = default_global_keymap); +define_keymap("download_buffer_keymap", $parent = default_global_keymap); bind_scroll_keys(download_buffer_keymap); bind_selection_keys(download_buffer_keymap); diff --git a/modules/bindings/default/global.js b/modules/bindings/default/global.js index 5eeccd8..2ea6b9a 100644 --- a/modules/bindings/default/global.js +++ b/modules/bindings/default/global.js @@ -1,12 +1,12 @@ require("bindings/default/universal_argument.js"); -var default_base_keymap = new keymap(); +define_keymap("default_base_keymap"); /** * Note: Most buffer keymaps should set this as the parent. */ -var default_global_keymap = new keymap($parent = default_base_keymap); -var default_help_keymap = new keymap(); +define_keymap("default_global_keymap", $parent = default_base_keymap); +define_keymap("default_help_keymap"); bind_universal_argument(default_base_keymap, "C-u"); diff --git a/modules/bindings/default/help-buffer.js b/modules/bindings/default/help-buffer.js index 83cffb9..3a3d78b 100644 --- a/modules/bindings/default/help-buffer.js +++ b/modules/bindings/default/help-buffer.js @@ -1,6 +1,6 @@ require("bindings/default/global.js"); -var help_buffer_keymap = new keymap($parent = default_global_keymap); +define_keymap("help_buffer_keymap", $parent = default_global_keymap); bind_scroll_keys(help_buffer_keymap); bind_selection_keys(help_buffer_keymap); diff --git a/modules/bindings/default/hints.js b/modules/bindings/default/hints.js index b95f06e..01922f2 100644 --- a/modules/bindings/default/hints.js +++ b/modules/bindings/default/hints.js @@ -1,6 +1,6 @@ require("bindings/default/global.js"); -var hint_keymap = new keymap($parent = default_base_keymap); +define_keymap("hint_keymap", $parent = default_base_keymap); define_key(hint_keymap, kbd(match_any_unmodified_key), "hints-handle-character"); define_key(hint_keymap, "back_space", "hints-backspace"); diff --git a/modules/bindings/default/isearch.js b/modules/bindings/default/isearch.js index b77d2fa..72af64c 100644 --- a/modules/bindings/default/isearch.js +++ b/modules/bindings/default/isearch.js @@ -1,6 +1,6 @@ require("bindings/default/global.js"); -var isearch_keymap = new keymap($parent = default_base_keymap); +define_keymap("isearch_keymap", $parent = default_base_keymap); define_key(isearch_keymap, "back_space", "isearch-backspace"); define_key(isearch_keymap, "C-r", "isearch-continue-backward"); diff --git a/modules/bindings/default/minibuffer.js b/modules/bindings/default/minibuffer.js index c8a791b..ee2221e 100644 --- a/modules/bindings/default/minibuffer.js +++ b/modules/bindings/default/minibuffer.js @@ -1,7 +1,6 @@ require("bindings/default/global.js"); -var minibuffer_base_keymap = new keymap($parent = default_base_keymap); - +define_keymap("minibuffer_base_keymap", $parent = default_base_keymap); // {{{ minibuffer_base_keymap @@ -47,7 +46,7 @@ define_key(minibuffer_base_keymap, match_any_unmodified_key, "minibuffer-insert- // {{{ minibuffer_keymap -var minibuffer_keymap = new keymap($parent = minibuffer_base_keymap); +define_keymap("minibuffer_keymap", $parent = minibuffer_base_keymap); define_key (minibuffer_keymap, "return", "exit-minibuffer"); define_key (minibuffer_keymap, "M-p", "minibuffer-history-previous"); @@ -63,18 +62,8 @@ define_key (minibuffer_keymap, "escape", "minibuffer-abort"); // }}} -// {{{ minibuffer_completion_keymap - -var minibuffer_completion_keymap = new keymap($parent = minibuffer_keymap); - -define_key (minibuffer_completion_keymap, "tab", "minibuffer-complete-old"); -define_key (minibuffer_completion_keymap, "space", "minibuffer-accept-match"); -define_key (minibuffer_completion_keymap, match_any_unmodified_key, "minibuffer-insert-character-complete"); - -// }}} - // {{{ single_character_options_minibuffer_keymap -var single_character_options_minibuffer_keymap = new keymap($parent = default_base_keymap); +define_keymap("single_character_options_minibuffer_keymap", $parent = default_base_keymap); define_key(single_character_options_minibuffer_keymap, "C-g", "minibuffer-abort"); define_key(single_character_options_minibuffer_keymap, match_any_unmodified_key, diff --git a/modules/bindings/default/universal_argument.js b/modules/bindings/default/universal_argument.js index 58f8d9c..6e0aa67 100644 --- a/modules/bindings/default/universal_argument.js +++ b/modules/bindings/default/universal_argument.js @@ -1,4 +1,4 @@ -var universal_argument_keymap = new keymap(); +define_keymap("universal_argument_keymap"); for (var i = 0; i <= 9; ++i) define_key(universal_argument_keymap, String(i), universal_argument_keymap, $hook = universal_digit); diff --git a/modules/help.js b/modules/help.js index aae232e..143d26f 100644 --- a/modules/help.js +++ b/modules/help.js @@ -152,43 +152,68 @@ describe_bindings_buffer.prototype = { var list = this.binding_list; delete this.binding_list; + var list_by_keymap = {}; + var keymap_list = []; + for each (let x in list) { + let name = x.bound_in || ""; + let km; + if (name in list_by_keymap) + km = list_by_keymap[name]; + else { + km = list_by_keymap[name] = {list_by_category: {}, category_list: [], name: name}; + keymap_list.push(km); + } + let catname = x.category || ""; + let cat; + if (catname in km.list_by_category) + cat = km.list_by_category[catname]; + else { + cat = km.list_by_category[catname] = []; + cat.name = catname; + if (catname == "") + km.category_list.unshift(cat); + else + km.category_list.push(cat); + } + cat.push(x); + } + var g = new help_document_generator(d, this); g.add_help_stylesheet(); d.body.setAttribute("class", "help-list"); - var table = d.createElementNS(XHTML_NS, "table"); - for (var i = 0; i < list.length; ++i) { - var bind = list[i]; - var tr = d.createElementNS(XHTML_NS, "tr"); - tr.setAttribute("class", (i % 2 == 0) ? "even" : "odd"); - var seq_td = d.createElementNS(XHTML_NS, "td"); - seq_td.setAttribute("class", "key-binding"); - seq_td.textContent = bind.seq; - tr.appendChild(seq_td); - var command_td = d.createElementNS(XHTML_NS,"td"); - command_td.setAttribute("class", "command"); - var help_str = null; - if (bind.command != null) { - if (typeof(bind.command) == "function") { - command_td.textContent = "[function]"; - } else { - command_td.textContent = bind.command; - var cmd = interactive_commands.get(bind.command); - if (cmd != null) - help_str = cmd.shortdoc; + for each (let km in keymap_list) { + g.text(km.name, g.element("h1", d.body)); + for each (let cat in km.category_list) { + if (cat.name != "") + g.text(cat.name, g.element("h2", d.body)); + + let table = g.element("table", d.body); + for (var i = 0; i < cat.length; ++i) { + let bind = cat[i]; + let tr = g.element("tr", table, "class", (i % 2 == 0) ? "even" : "odd"); + let seq_td = g.element("td", tr, "class", "key-binding"); + g.text(bind.seq, seq_td); + let command_td = g.element("td", tr, "class", "command"); + let help_str = null; + if (bind.command != null) { + if (typeof(bind.command) == "function") { + g.text("[function]", command_td); + } else { + g.text(bind.command, command_td); + let cmd = interactive_commands.get(bind.command); + if (cmd != null) + help_str = cmd.shortdoc; + } + } + else if (bind.fallthrough) + g.text("[pass through]", command_td); + let help_td = g.element("td", tr, "class", "help"); + g.text(help_str || "", help_td); } } - else if (bind.fallthrough) - command_td.textContent = "[pass through]"; - tr.appendChild(command_td); - var help_td = d.createElementNS(XHTML_NS, "td"); - help_td.setAttribute("class", "help"); - help_td.textContent = help_str || ""; - tr.appendChild(help_td); - table.appendChild(tr); } - d.body.appendChild(table); }, __proto__: special_buffer.prototype @@ -201,9 +226,22 @@ function describe_bindings(buffer, target) { var last = binding_stack[binding_stack.length - 1]; if (last.command == null && !last.fallthrough) return; + let bound_in = null; + outer: + for (let i = binding_stack.length - 1; i >= 0; --i) { + bound_in = binding_stack[i].bound_in; + while (bound_in) { + if (bound_in.name) + break outer; + bound_in = bound_in.bound_in; + } + } var bind = {seq: format_binding_sequence(binding_stack), fallthrough: last.fallthrough, - command: last.command}; + command: last.command, + bound_in: bound_in.name, + category: last.category, + }; list.push(bind); }); create_buffer(buffer.window, buffer_creator(describe_bindings_buffer, diff --git a/modules/hints.js b/modules/hints.js index 4d6f345..571bd3e 100644 --- a/modules/hints.js +++ b/modules/hints.js @@ -295,14 +295,6 @@ hint_manager.prototype = { } }; -var hint_keymap = null; - -function initialize_hint_keymap() -{ - hint_keymap = new keymap(); -} -initialize_hint_keymap(); - /** * keyword arguments: * diff --git a/modules/keyboard.js b/modules/keyboard.js index d8f342e..4bfeff5 100644 --- a/modules/keyboard.js +++ b/modules/keyboard.js @@ -258,7 +258,7 @@ function kbd (spec, mods) } // bind key to either the keymap or command in the keymap, kmap -define_keywords("$fallthrough", "$hook"); +define_keywords("$fallthrough", "$hook", "$category"); function define_key(kmap, keys, cmd) { keywords(arguments); @@ -301,6 +301,7 @@ outer: bind.fallthrough = args.$fallthrough; bind.hook = args.$hook; bind.source_code_reference = ref; + bind.category = args.$category; } else { if (!bind.keymap) throw new Error("Key sequence has a non-keymap in prefix"); @@ -313,14 +314,19 @@ outer: if (final_binding) { return {key: key, fallthrough: args.$fallthrough, hook: args.$hook, command: new_command, keymap: new_keymap, - source_code_reference: ref}; + source_code_reference: ref, + category: args.$category, + bound_in: kmap}; } else { + let old_kmap = kmap; // Check for a corresponding binding a parent kmap = new keymap($parent = parent_kmap); + kmap.bound_in = old_kmap; return {key: key, keymap: kmap, - source_code_reference: ref}; + source_code_reference: ref, + bound_in: old_kmap}; } } @@ -382,7 +388,7 @@ outer: } } -define_keywords("$parent", "$help"); +define_keywords("$parent", "$help", "$name"); function keymap () { keywords(arguments); @@ -398,6 +404,11 @@ function keymap () this.keycode_bindings = []; this.predicate_bindings = []; this.help = arguments.$help; + this.name = arguments.$name; +} + +function define_keymap(name) { + this[name] = new keymap($name = name, forward_keywords(arguments)); } function copy_event(event) @@ -646,7 +657,7 @@ function find_command_in_keymap(keymap_or_buffer, command) { return list; } -var key_binding_reader_keymap = new keymap(); +define_keymap("key_binding_reader_keymap"); define_key(key_binding_reader_keymap, match_any_key, "read-key-binding-key"); define_keywords("$buffer", "$keymap"); diff --git a/modules/page-modes/gmail.js b/modules/page-modes/gmail.js index da70796..b7ae132 100644 --- a/modules/page-modes/gmail.js +++ b/modules/page-modes/gmail.js @@ -1,7 +1,7 @@ require("content-buffer.js"); require("bindings/default/content-buffer/normal.js"); -var gmail_keymap = new keymap($parent = content_buffer_normal_keymap); +define_keymap("gmail_keymap", $parent = content_buffer_normal_keymap); function gmail_label_go(buffer, label) { -- 2.11.4.GIT