summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2005-03-19 16:36:01 +0000
committerStefan Monnier <monnier@iro.umontreal.ca>2005-03-19 16:36:01 +0000
commit98413271e0f6daa591f9f297a098d7b9112cd8df (patch)
tree43f81e344aceb5b52219d9b7713628d328b2f088
parent17ed02f8b8609b85f3faecf7a42d4393e4be7ee9 (diff)
downloademacs-98413271e0f6daa591f9f297a098d7b9112cd8df.tar.gz
(keys_of_keyboard): Just use `ignore' instead of the redundant `ignore-event'.
-rw-r--r--src/keyboard.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index eb8d481dc11..f9b0a843de5 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -11427,10 +11427,29 @@ keys_of_keyboard ()
initial_define_lispy_key (Vspecial_event_map, "delete-frame",
"handle-delete-frame");
+ /* Here we used to use `ignore-event' which would simple set prefix-arg to
+ current-prefix-arg, as is done in `handle-switch-frame'.
+ But `handle-switch-frame is not run from the special-map.
+ Commands from that map are run in a special way that automatically
+ preserves the prefix-arg. Restoring the prefix arg here is not just
+ redundant but harmful:
+ - C-u C-x v =
+ - current-prefix-arg is set to non-nil, prefix-arg is set to nil.
+ - after the first prompt, the exit-minibuffer-hook is run which may
+ iconify a frame and thus push a `iconify-frame' event.
+ - after running exit-minibuffer-hook, current-prefix-arg is
+ restored to the non-nil value it had before the prompt.
+ - we enter the second prompt.
+ current-prefix-arg is non-nil, prefix-arg is nil.
+ - before running the first real event, we run the special iconify-frame
+ event, but we pass the `special' arg to execute-command so
+ current-prefix-arg and prefix-arg are left untouched.
+ - here we foolishly copy the non-nil current-prefix-arg to prefix-arg.
+ - the next key event will have a spuriously non-nil current-prefix-arg. */
initial_define_lispy_key (Vspecial_event_map, "iconify-frame",
- "ignore-event");
+ "ignore");
initial_define_lispy_key (Vspecial_event_map, "make-frame-visible",
- "ignore-event");
+ "ignore");
/* Handling it at such a low-level causes read_key_sequence to get
* confused because it doesn't realize that the current_buffer was
* changed by read_char.