VoidSymbol or NoSymbol in symbols/fi?

Should we use VoidSymbol or NoSymbol to mark positions in
symbols/fi which don't produce anything?

The decision must be made because of the bug described below.
It involves xmodmap.



Let's take an example of changing the "f" key to produce and "x" and an "X"
         with AltGr and Shift+AltGr. 

NoSymbol:
   If a position is marked with NoSymbol, the key produces "f" and "F" when pressed 
   with AltGr and Shift+AltGr, respectively.
   If we change the settings with "xmodmap -e 'f F x X x X', the values get changed 
   properly if we look them up with "xmodmap -pk." However, if we try pressing the key, an "f" 
   and "F" are produced, not the new values. This seems to be a bug.

VoidSymbol:
   If we use VoidSymbol, the key doesn't produce anything when pressed with AltGr or Shift+AltGr.
   If we change the settings with "xmodmap -e 'f F x X x X', the values get changed properly
   both for "modmap -pk" and for keyboard output as well. I.e. if we press AltGr+f and Shift+AltGr+f, 
   we get an "x" and an "X," as we should.

Arguments in favor of NoSymbol: 
   -With NoSymbol, if AltGr is held down, the key produces the same character as it does 
    without modifiers ("f" in our case).  With VoidSymbol, pressing the key with AltGr down 
    produces nothing.

Arguments in favor of VoidSymbol: 
    -xmodmap can be used to change keys set with VoidSymbol; NoSymbol makes the key 
     unreassignable with xmodmap.
   -We can produce the same character as without modifiers by specifying it 
    explicitly. In our case we could specify f and F for all positions.


Tentative decision: 
-Report the bug.
-Changed instances of NoSymbol in columns 3 and 4 to characters in columns 1 and 2.
 NoSymbol left in other positions, so nothing is output from those key presses.

(This bug was reported by Teemu Likonen.)


FOLLOWUP:
When using NoSymbol, the symbol list is "truncated" when NoSymbol is used. 
Explained below through examples:

1. Not truncated:
key  { [  f,  F,  VoidSymbol, VoidSymbol ] };
2. Not truncated:
key  { [  f,  F,  NoSymbol, VoidSymbol ] };
3. Not truncated:
key  { [  f,  F,  VoidSymbol, NoSymbol ] };
4. Truncated:
key  { [  f,  F,  NoSymbol, NoSymbol ] };
5. Truncated:
key  { [  f,  F,  NoSymbol ] };
6. Truncated:
key  { [  f,  F ] };


The problem is not with xmodmap, but in xlib's XChangeKeyboardMapping() or
XLookupString() function.

I wrote a little test app and set the values there with XChangeKeyboardMapping(), which is what
xmodmap does as well.  I then read the values with XLookupString(), as xev does.
I got the same behavior as xmodmap and xev, so the problem is in these library functions,
not the utilities.

This page is maintained by Troy Korjuslommi.