I've been making some more tweaks. It now supports all letters and diacritics used in the 10 most widely spoken languages in the EU, plus Esperanto. The placement of keys is mostly mnemonic — AltGr gives Western European variants of letters, PrtSc Eastern European, and AltGr+PrtSc less common ones. In some cases, the placement is based on the keyboard layout normally used for typing that language. There are now two dead keys, for grave and tilde accents.
There is a point of diminishing returns trying to support more European languages. I could try to include å for Swedish, č for Czech and ø for Danish, but all of the logical places for those are taken, so it would be difficult to remember. XCompose is more convenient for these less common languages, since it involves more keystrokes but is more intuitive to use.
I have named this new layout europa, for the great number of European languages it now supports — more languages than the "US International" layout, and more intuitive to use.
xkb_symbols "basic" {
include "us(basic)"
name[Group1] = "Europa";
// grave accent
key.type[Group1] = "TWO_LEVEL";
key <TLDE> { [ dead_grave, dead_tilde ] };
// inverted exclamation mark
key.type[Group1] = "FOUR_LEVEL";
key <AE01> { [ NoSymbol, NoSymbol, exclamdown, exclamdown ] };
// Euro on 5 key
key <AE05> { [ NoSymbol, NoSymbol, EuroSign, cent ] };
// Q row
key <AD02> { [ NoSymbol, NoSymbol, ubreve, Ubreve ] };
key.type[Group1] = "EIGHT_LEVEL";
key <AD03> { [ NoSymbol, NoSymbol, eacute, Eacute, eogonek, Eogonek, ecircumflex, Ecircumflex ] };
key <AD07> { [ NoSymbol, NoSymbol, uacute, Uacute, NoSymbol, NoSymbol, ucircumflex, Ucircumflex ] };
key <AD08> { [ NoSymbol, NoSymbol, iacute, Iacute, NoSymbol, NoSymbol, icircumflex, Icircumflex ] };
key <AD09> { [ NoSymbol, NoSymbol, oacute, Oacute, oacute, Oacute, ocircumflex, Ocircumflex ] };
key <AD11> { [ NoSymbol, NoSymbol, udiaeresis, Udiaeresis, abreve, Abreve, udoubleacute, Udoubleacute ] };
key <AD12> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, icircumflex, Icircumflex ] };
key <BKSL> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, acircumflex, Acircumflex ] };
// A row
key <AC01> { [ NoSymbol, NoSymbol, aacute, Aacute, aogonek, Aogonek, acircumflex, Acircumflex ] };
key <AC02> { [ NoSymbol, NoSymbol, ssharp, ssharp, sacute, Sacute, scircumflex, Scircumflex ] };
key.type[Group1] = "FOUR_LEVEL";
key <AC05> { [ NoSymbol, NoSymbol, gcircumflex, Gcircumflex ] };
key <AC06> { [ NoSymbol, NoSymbol, hcircumflex, Hcircumflex ] };
key <AC07> { [ NoSymbol, NoSymbol, jcircumflex, Jcircumflex ] };
key.type[Group1] = "EIGHT_LEVEL";
key <AC09> { [ NoSymbol, NoSymbol, oe, OE, lstroke, Lstroke ] };
key <AC10> { [ NoSymbol, NoSymbol, odiaeresis, Odiaeresis, U0219, U0218, odoubleacute, Odoubleacute ] };
key <AC11> { [ NoSymbol, NoSymbol, adiaeresis, Adiaeresis, U021B, U021A ] };
// Z row
key <AB01> { [ NoSymbol, NoSymbol, ae, AE, zabovedot, Zabovedot ] };
key <AB02> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, zacute, Zacute ] };
key <AB03> { [ NoSymbol, NoSymbol, ccedilla, Ccedilla, cacute, Cacute, ccircumflex, Ccircumflex ] };
key <AB06> { [ NoSymbol, NoSymbol, ntilde, ntilde, nacute, Nacute ] };
key.type[Group1] = "FOUR_LEVEL";
key <AB08> { [ NoSymbol, NoSymbol, guillemotleft, guillemotleft ] };
key <AB09> { [ NoSymbol, NoSymbol, guillemotright, guillemotright ] };
key <AB10> { [ NoSymbol, NoSymbol, questiondown, questiondown ] };
// spaces
key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
include "level3(ralt_switch)"
key <PRSC> {
type[Group1] = "ONE_LEVEL",
symbols[Group1] = [ ISO_Level5_Shift ]
};
include "level5(modifier_mapping)"
};