GNU bug report logs - #9751
23.3; Alternative Keyboard Feature/Bug

Previous Next

Package: emacs;

Reported by: Nikos Pitsianis <nikos <at> cs.duke.edu>

Date: Fri, 14 Oct 2011 07:19:02 UTC

Severity: normal

Found in version 23.3

Done: Stefan Monnier <monnier <at> iro.umontreal.ca>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Juri Linkov <juri <at> jurta.org>
Cc: lekktu <at> gmail.com, Andreas Schwab <schwab <at> linux-m68k.org>, Nikos Pitsianis <nikos <at> cs.duke.edu>, 9751 <at> debbugs.gnu.org
Subject: bug#9751: 23.3; Alternative Keyboard Feature/Bug
Date: Mon, 24 Oct 2011 09:01:33 -0400
> typing `β' in Info has no effect, it doesn't call `beginning-of-buffer'.
> When typing in Info `C-h k β', it says:
>   β is undefined

Ah, thanks, now I see.
So the issue is the following one:
1- keymaps provide a way to hide bindings in parent keymaps (by using an
   explicit nil binding), but not to hide a binding in subsequent maps
   (e.g. a local map can't hide a binding in the global map).
2- for the main keymaps used to bind keys to commands, we can work around
   this limitation by binding the key to the command `undefined'.
3- but function-key-map doesn't know about this convention, so
   `undefined' is not recognized as "not bound".

I think it would be good to fix (1), but there are very few keymaps that
are both "special in that the bindings are not commands" and have
a "subsequent keymap" at the same time.  Also even if we fix (1), we'd
have to update all the code using `undefined' to use the new special
value (unless we choose `undefined' for that new value, of course).

So I think that fixing (3) is the best choice for now.
Does the patch below work for you?


        Stefan


=== modified file 'src/keyboard.c'
--- src/keyboard.c	2011-10-03 20:50:54 +0000
+++ src/keyboard.c	2011-10-24 13:00:50 +0000
@@ -9852,7 +9852,9 @@
 	    }
 	}
 
-      if (first_binding < nmaps && NILP (submaps[first_binding])
+      if (first_binding < nmaps
+	  && NILP (submaps[first_binding])
+	  && !EQ (defs[first_binding], Qundefined)
 	  && indec.start >= t)
 	/* There is a binding and it's not a prefix.
 	   (and it doesn't have any input-decode-map translation pending).





This bug report was last modified 13 years and 136 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.