Improved describe-bindings display
[conkeror.git] / modules / bindings / default / universal_argument.js
blob6e0aa673fc5f9847d8746cb1abc084210797ec44
1 define_keymap("universal_argument_keymap");
3 for (var i = 0; i <= 9; ++i)
4     define_key(universal_argument_keymap, String(i), universal_argument_keymap, $hook = universal_digit);
5 define_key(universal_argument_keymap, "subtract", universal_argument_keymap, $hook = universal_negate);
7 function universal_argument(ctx, active_keymap, overlay_keymap)
9     if (ctx.prefix_argument) {
10         if (typeof(ctx.prefix_argument) == "object") // must be array
11             ctx.prefix_argument = [ctx.prefix_argument[0] * 4];
12     } else
13         ctx.prefix_argument = [4];
14     ctx.overlay_keymap = overlay_keymap || active_keymap;
17 function universal_digit(ctx, active_keymap, overlay_keymap)
19     var digit = ctx.event.charCode - 48;
20     if (typeof(ctx.prefix_argument) == "object") { // array
21         if (ctx.prefix_argument[0] < 0)
22             ctx.prefix_argument = -digit;
23         else
24             ctx.prefix_argument = digit;
25     }
26     else if (ctx.prefix_argument < 0)
27         ctx.prefix_argument = ctx.prefix_argument * 10 - digit;
28     else
29         ctx.prefix_argument = ctx.prefix_argument * 10 + digit;
31     ctx.overlay_keymap = overlay_keymap || active_keymap;
34 function universal_negate(ctx, active_keymap, overlay_keymap)
36     if (typeof ctx.prefix_argument == "object")
37         ctx.prefix_argument[0] = 0 - ctx.prefix_argument[0];
38     else
39         ctx.prefix_argument = 0 - ctx.prefix_argument;
40     ctx.overlay_keymap = overlay_keymap || active_keymap;
43 function bind_universal_argument(keymap, key) {
44     define_key(keymap, key, universal_argument_keymap, $hook = universal_argument);