[net.emacs] Strange bug in emacs

thomas%UTAH-GR%utah-cs@sri-unix.UUCP (07/24/83)

From:  Spencer W. Thomas  <thomas%UTAH-GR@utah-cs>

Assuming that you do not have ^Z bound to a keymap, then create a local
binding:
	(local-bind-to-key "anything" "\^Za")
If you type ^Z-a, your screen will scroll one line, AND "anything" will
be executed!

The section in the manual on keymaps says
	"When either of the [parallel] traversals [of the local and
global keymaps] reaches a leaf, that function is invoked and
interpretation is reset to the roots of the trees."

Well, it looks as if the first part of the statement is true (the
globally bound ^Z function is executed), but the second is false (the
locally bound ^Z-a is also executed).

=Spencer

thomas%UTAH-GR%utah-cs@sri-unix.UUCP (07/25/83)

From:  thomas%UTAH-GR@utah-cs (Spencer W. Thomas)

(Reprise of bug: (local-bind-to-key "previous-line" "\^N\^N"), then have fun.)

Here is the fix, it's really simple.  In keyboard.h, there are a couple
of places where it says
		if (NextLocalKeymap == 0) {
		    NextGlobalKeymap = 0;
		    continue;
		}
Well, change those to read:
		if (NextLocalKeymap == 0 || NextGlobalKeymap == 0) {
		    NextGlobalKeymap = 0;
		    NextLocalKeymap = 0;
		    continue;
		}

Note that this implies that you can't have a local prefix character
which is not also a global prefix character.  If somebody has a better
fix, let me know, this is not entirely satisfactory.

=Spencer