Changeset 44cc9ab
- Timestamp:
- May 29, 2010, 1:13:50 PM (15 years ago)
- Branches:
- master, release-1.10, release-1.7, release-1.8, release-1.9
- Children:
- 449af72, d27ecf3
- Parents:
- 13ebf92
- git-author:
- David Benjamin <davidben@mit.edu> (05/24/10 15:08:44)
- git-committer:
- David Benjamin <davidben@mit.edu> (05/29/10 13:13:50)
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/code.txt
r1286893 r44cc9ab 86 86 Meta. At any one time, there is exactly one active 87 87 keymap which determines where keybindings are looked for 88 (along with its submaps).88 (along with its parents). 89 89 90 90 list: Simple list abstraction. (Uses realloc to resize the list.) -
keymap.c
r13ebf92 r44cc9ab 3 3 4 4 static void _owl_keymap_format_bindings(const owl_keymap *km, owl_fmtext *fm); 5 static void _owl_keymap_format_with_ submaps(const owl_keymap *km, owl_fmtext *fm);5 static void _owl_keymap_format_with_parents(const owl_keymap *km, owl_fmtext *fm); 6 6 7 7 /* returns 0 on success */ … … 12 12 if ((km->desc = owl_strdup(desc)) == NULL) return(-1); 13 13 if (0 != owl_list_create(&km->bindings)) return(-1); 14 km-> submap= NULL;14 km->parent = NULL; 15 15 km->default_fn = default_fn; 16 16 km->prealways_fn = prealways_fn; … … 27 27 } 28 28 29 void owl_keymap_set_ submap(owl_keymap *km, const owl_keymap *submap)30 { 31 km-> submap = submap;29 void owl_keymap_set_parent(owl_keymap *km, const owl_keymap *parent) 30 { 31 km->parent = parent; 32 32 } 33 33 … … 99 99 owl_fmtext_append_normal(fm, "\n"); 100 100 } 101 if (km-> submap) {102 owl_fmtext_append_normal(fm, OWL_TABSTR "Has submap: ");103 owl_fmtext_append_normal(fm, km-> submap->name);101 if (km->parent) { 102 owl_fmtext_append_normal(fm, OWL_TABSTR "Has parent: "); 103 owl_fmtext_append_normal(fm, km->parent->name); 104 104 owl_fmtext_append_normal(fm, "\n"); 105 105 } … … 120 120 owl_fmtext_append_bold(fm, "\nKey bindings:\n\n"); 121 121 if (recurse) { 122 _owl_keymap_format_with_ submaps(km, fm);122 _owl_keymap_format_with_parents(km, fm); 123 123 } else { 124 124 _owl_keymap_format_bindings(km, fm); … … 126 126 } 127 127 128 static void _owl_keymap_format_with_ submaps(const owl_keymap *km, owl_fmtext *fm)128 static void _owl_keymap_format_with_parents(const owl_keymap *km, owl_fmtext *fm) 129 129 { 130 130 while (km) { 131 131 _owl_keymap_format_bindings(km, fm); 132 km = km-> submap;132 km = km->parent; 133 133 if (km) { 134 134 owl_fmtext_append_bold(fm, "\nInherited from "); … … 273 273 } 274 274 275 /* deal with the always_fn for the map and submaps */276 for (km=kh->active; km; km=km-> submap) {275 /* deal with the always_fn for the map and parents */ 276 for (km=kh->active; km; km=km->parent) { 277 277 if (km->prealways_fn) { 278 278 km->prealways_fn(j); … … 281 281 282 282 /* search for a match. goes through active keymap and then 283 * through submaps... TODO: clean this up so we can pull283 * through parents... TODO: clean this up so we can pull 284 284 * keyhandler and keymap apart. */ 285 for (km=kh->active; km; km=km-> submap) {285 for (km=kh->active; km; km=km->parent) { 286 286 for (i=owl_list_get_size(&km->bindings)-1; i>=0; i--) { 287 287 kb = owl_list_get_element(&km->bindings, i); -
keys.c
r8a5b5a1 r44cc9ab 30 30 "Text editing and command window", 31 31 owl_keys_editwin_default, NULL, owl_keys_editwin_postalways); 32 owl_keymap_set_ submap(km_editwin, km_global);32 owl_keymap_set_parent(km_editwin, km_global); 33 33 /* 34 34 BIND_CMD("F1", "help", ""); … … 99 99 "Multi-line text editing", 100 100 owl_keys_editwin_default, NULL, owl_keys_editwin_postalways); 101 owl_keymap_set_ submap(km_ew_multi, km_editwin);101 owl_keymap_set_parent(km_ew_multi, km_editwin); 102 102 103 103 BIND_CMD("UP", "edit:move-up-line", ""); … … 129 129 "Single-line text editing", 130 130 owl_keys_editwin_default, NULL, owl_keys_editwin_postalways); 131 owl_keymap_set_ submap(km_ew_onel, km_editwin);131 owl_keymap_set_parent(km_ew_onel, km_editwin); 132 132 133 133 BIND_CMD("C-u", "edit:delete-all", "Clears the entire line"); … … 154 154 "Single-line response to question", 155 155 owl_keys_editwin_default, NULL, owl_keys_editwin_postalways); 156 owl_keymap_set_ submap(km_ew_onel, km_editwin);156 owl_keymap_set_parent(km_ew_onel, km_editwin); 157 157 158 158 BIND_CMD("C-u", "edit:delete-all", "Clears the entire line"); … … 169 169 "Pop-up window (eg, help)", 170 170 owl_keys_default_invalid, NULL, owl_keys_popless_postalways); 171 owl_keymap_set_ submap(km_viewwin, km_global);171 owl_keymap_set_parent(km_viewwin, km_global); 172 172 173 173 BIND_CMD("SPACE", "popless:scroll-down-page", ""); … … 222 222 "Main window / message list", 223 223 owl_keys_default_invalid, owl_keys_recwin_prealways, NULL); 224 owl_keymap_set_ submap(km_mainwin, km_global);224 owl_keymap_set_parent(km_mainwin, km_global); 225 225 BIND_CMD("C-x C-c", "start-command quit", ""); 226 226 BIND_CMD("F1", "help", ""); -
owl.h
r20aced3 r44cc9ab 476 476 char *desc; /* description */ 477 477 owl_list bindings; /* key bindings */ 478 const struct _owl_keymap * submap; /* submap*/478 const struct _owl_keymap *parent; /* parent */ 479 479 void (*default_fn)(owl_input j); /* default action (takes a keypress) */ 480 480 void (*prealways_fn)(owl_input j); /* always called before a keypress is received */
Note: See TracChangeset
for help on using the changeset viewer.