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];
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;
24 ctx.prefix_argument = digit;
26 else if (ctx.prefix_argument < 0)
27 ctx.prefix_argument = ctx.prefix_argument * 10 - digit;
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];
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);