Compare commits

..

No commits in common. "master" and "1.0.0" have entirely different histories.

12 changed files with 3005 additions and 425 deletions

1
.gitignore vendored
View File

@ -1 +0,0 @@
.idea

View File

@ -1,16 +1,2 @@
# xkb_neo
My xkb modifications for making neo etc (inclusive vou) work properly with every part of GNU/Linux.
For programs running through XWayland manually execute
~~~bash
setxkbmap de vou
~~~
to get proper keybindings working.
Execute patch.sh to patch your system.
Or Manually:
- execute patch_xkb.py as superuser to patch /usr/share/X11/xkb.
- execute enable_gnome.sh as normal user to enable alternative keyboard layouts on GNOME
My xkb modifications for making neo etc (inclusive vou) work properly with every part of the os. YES, even IntelliJ

View File

@ -1,2 +0,0 @@
#!/usr/bin/env sh
gsettings set org.gnome.desktop.input-sources show-all-sources true

View File

@ -1,10 +0,0 @@
#!/usr/bin/env bash
if [ "$EUID" -eq 0 ]
then echo "Please don't run as root"
exit
fi
BASEDIR=$(dirname "$0")
sudo python3 $BASEDIR/patch_xkb.py
bash $BASEDIR/enable_gnome.sh

View File

@ -1,71 +0,0 @@
#!/usr/bin/env python3
import os
curr_dir = os.path.dirname(__file__)
xkb = "/usr/share/X11/xkb"
def brackets(text):
res = 0
slash = 0
for i in text:
if i == "/":
slash += 1
if slash == 2:
break
continue
elif i == "{":
res += 1
elif i == "}":
res -= 1
slash = 0
return res
def bracket_end(code, pos):
indent = 0
while indent := indent + brackets(code[pos]):
pos += 1
return pos + 1
with open(f"{xkb}/rules/evdev.extras.xml", "r") as f:
evdev = f.read().split("\n")
with open(f"{curr_dir}/patches/evdev", "r") as f:
evdev_patch = f.read().split("\n")
with open(f"{xkb}/symbols/de", "r") as f:
de = f.read().split("\n")
with open(f"{curr_dir}/patches/de_neo_base") as f:
de_neo_base_patch = f.read().split("\n")
with open(f"{curr_dir}/patches/de_koy") as f:
de_koy_patch = f.read().split("\n")
with open(f"{xkb}/symbols/level3", "r") as f:
level3 = f.read()
with open(f"{curr_dir}/patches/level3") as f:
level3_patch = f.read().split("\n")
if "vou" not in "\n".join(evdev):
koy = [i for i in range(len(evdev)) if "koy" in evdev[i]][0] - 2
vou = koy + 6
evdev = evdev[:vou] + evdev_patch + evdev[vou:]
with open(f"{xkb}/rules/evdev.extras.xml", "w") as f:
f.write("\n".join(evdev))
if "vou" not in "\n".join(de):
neo_base = ([i for i in range(len(de)) if "\"neo_base\"" in de[i]][0], -1)
neo_base = (neo_base[0] - 1, bracket_end(de, neo_base[0]))
de = de[:neo_base[0]] + de_neo_base_patch + de[neo_base[1]:]
koy = ([i for i in range(len(de)) if "\"koy\"" in de[i]][0], -1)
koy = (koy[0] - 1, bracket_end(de, koy[0]))
de = de[:koy[1]] + de_koy_patch + de[koy[1]:]
with open(f"{xkb}/symbols/de", "w") as f:
f.write("\n".join(de))
if "quote_switch" not in "\n".join(level3):
level3 = level3.split("\n")
bksl_switch = ([i for i in range(len(level3)) if "\"bksl_switch\"" in level3[i]][0], -1)
bksl_switch = (bksl_switch[0] - 1, bracket_end(level3, bksl_switch[0]))
level3 = level3[:bksl_switch[1]] + level3_patch + level3[bksl_switch[1]:]
with open(f"{xkb}/symbols/level3", "w") as f:
f.write("\n".join(level3))

View File

@ -1,142 +0,0 @@
partial alphanumeric_keys modifier_keys keypad_keys
xkb_symbols "kou" {
include "de(koy_base)"
key.type[Group1] = "EIGHT_LEVEL_WITH_LEVEL5_LOCK";
// level 4: replace numero sign by heavy check mark (key 3)
key <AE03> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, U2714, NoSymbol, NoSymbol, NoSymbol ] };
// level 4: use unused place for heavy ballot X (key 4)
key <AE04> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, U2718, NoSymbol, NoSymbol, NoSymbol ] };
// level 4: replace middle dot on key 5 with WHITE MEDIUM STAR
key <AE05> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, U2B50, NoSymbol, NoSymbol, NoSymbol ] };
// level 4: move middle dot "·" from key 5 to key 7 (replacing the currency sign "¤")
key <AE07> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, periodcentered, NoSymbol, NoSymbol, NoSymbol ] };
// move comma and endash to QWERTZ-C key
key <AB03> { [ comma, endash, NoSymbol, U03F1, NoSymbol, NoSymbol, U21D2, NoSymbol ] };
key.type[Group1] = "EIGHT_LEVEL_ALPHABETIC_WITH_LEVEL5_LOCK";
// move f and ssharp keys to new positions, replace at by rightarrow; level4: replace period with semicolon
key <AD10> { [ f, F, ampersand, Greek_phi, KP_Add, KP_Add, Greek_PHI, NoSymbol ] };
key <BKSL> { [ ssharp, U1E9E, rightarrow, Greek_finalsmallsigma, semicolon, KP_Decimal, jot, NoSymbol ] };
// rotate x, q, z, j and v
key <AD06> { [ q, Q, NoSymbol, U03D5, NoSymbol, NoSymbol, U211A, NoSymbol ] };
key <AD11> { [ j, J, NoSymbol, Greek_theta, NoSymbol, NoSymbol, Greek_THETA, NoSymbol ] };
key <AB01> { [ z, Z, NoSymbol, Greek_zeta, NoSymbol, NoSymbol, U2124, NoSymbol ] };
key <AB02> { [ x, X, NoSymbol, Greek_xi, NoSymbol, NoSymbol, Greek_XI, NoSymbol ] };
key <AB10> { [ v, V, NoSymbol, radical, NoSymbol, NoSymbol, multiply, NoSymbol ] };
// swap u, y and ä (and comma, but not here)
key <AD04> { [ u, U, NoSymbol, NoSymbol, NoSymbol, NoSymbol, includedin, NoSymbol ] };
key <AC05> { [ y, Y, NoSymbol, Greek_upsilon, NoSymbol, NoSymbol, nabla, NoSymbol ] };
key <AD05> { [ adiaeresis, Adiaeresis, NoSymbol, Greek_eta, NoSymbol, NoSymbol, U2135, NoSymbol ] };
// swap b, d and p
key <AC06> { [ b, B, NoSymbol, Greek_beta, NoSymbol, NoSymbol, U21D0, NoSymbol ] };
key <AB06> { [ p, P, NoSymbol, Greek_pi, NoSymbol, NoSymbol, Greek_PI, NoSymbol ] };
key <AB07> { [ d, D, NoSymbol, Greek_delta, NoSymbol, NoSymbol, Greek_DELTA, NoSymbol ] };
// level3: replace long s by Euro sign
key <AD11> { [ NoSymbol, NoSymbol, EuroSign, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
// level3: put braces ({, }) in upper row
key <AD03> { symbols[Group1] = [ NoSymbol, NoSymbol, braceleft, NoSymbol, Up, NoSymbol, NoSymbol, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<UP>), NoAction(), NoAction(), NoAction() ]};
key <AD04> { [ NoSymbol, NoSymbol, braceright, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
// level3: swap underscore and percent
key <AD02> { [ NoSymbol, NoSymbol, percent, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
key <AB07> { [ NoSymbol, NoSymbol, underscore, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
// level3: replace … by @
key <AD01> { [ NoSymbol, NoSymbol, at, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
// level3: rearrangement of the home row
key <AC01> { symbols[Group1] = [ NoSymbol, NoSymbol, bar, NoSymbol, Home, Home, NoSymbol, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<HOME>), RedirectKey(key=<HOME>), NoAction(), NoAction() ]};
key <AC02> { symbols[Group1] = [ NoSymbol, NoSymbol, grave, NoSymbol, Left, Left, NoSymbol, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<LEFT>), RedirectKey(key=<LEFT>), NoAction(), NoAction() ]};
key <AC03> { symbols[Group1] = [ NoSymbol, NoSymbol, parenleft, NoSymbol, Down, Down, NoSymbol, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<DOWN>), RedirectKey(key=<DOWN>), NoAction(), NoAction() ]};
key <AC04> { symbols[Group1] = [ NoSymbol, NoSymbol, parenright, NoSymbol, Right, Right, NoSymbol, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<RGHT>), RedirectKey(key=<RGHT>), NoAction(), NoAction() ]};
key <AC07> { [ NoSymbol, NoSymbol, slash, NoSymbol, 4, NoSymbol, NoSymbol, NoSymbol ] };
key <AC08> { [ NoSymbol, NoSymbol, colon, NoSymbol, 5, NoSymbol, NoSymbol, NoSymbol ] };
key <AC10> { [ NoSymbol, NoSymbol, underscore, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
// level3: rearrangement of the bottom row
key <AB02> { [ NoSymbol, NoSymbol, bracketleft, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
key <AB03> { [ NoSymbol, NoSymbol, bracketright, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
key <AB05> { [ NoSymbol, NoSymbol, dollar, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
key <AB07> { [ NoSymbol, NoSymbol, quotedbl, NoSymbol, 1, NoSymbol, NoSymbol, NoSymbol ] };
key <AB08> { [ NoSymbol, NoSymbol, apostrophe, NoSymbol, 2, NoSymbol, NoSymbol, NoSymbol ] };
key <AB09> { [ NoSymbol, NoSymbol, backslash, NoSymbol, 3, NoSymbol, NoSymbol, NoSymbol ] };
// level 4: rotate page down, backspace and delete
key <AD02> { symbols[Group1] = [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, Next, Next, NoSymbol, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<PGDN>), RedirectKey(key=<PGDN>), NoAction(), NoAction() ]};
key <AD04> { symbols[Group1] = [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, BackSpace, BackSpace, NoSymbol, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<BKSP>), RedirectKey(key=<BKSP>), NoAction(), NoAction() ]};
key <AD05> { symbols[Group1] = [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, Delete, Delete, NoSymbol, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<DELE>), RedirectKey(key=<DELE>), NoAction(), NoAction() ]};
// level4: rotate escape, insert and return; replace undo with thumbs up sign
key <AB01> { symbols[Group1] = [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, Insert, Insert, NoSymbol, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<INS>), RedirectKey(key=<INS>), NoAction(), NoAction() ]};
key <AB03> { symbols[Group1] = [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, Return, Return, NoSymbol, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<RTRN>), RedirectKey(key=<RTRN>), NoAction(), NoAction() ]};
key <AB04> { symbols[Group1] = [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, Escape, Escape, NoSymbol, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<ESC>), RedirectKey(key=<ESC>), NoAction(), NoAction() ]};
key <AB05> { [NoSymbol, NoSymbol, NoSymbol, NoSymbol, underscore, Undo, NoSymbol, NoSymbol ]};
// level4: swap . and ;
// key BKSL was already changed above
// key <BKSL> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, semicolon, NoSymbol, NoSymbol, NoSymbol ] };
key <AB10> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, period, KP_Decimal, NoSymbol, NoSymbol ] };
// level4: replace ¡ by :
key <AD06> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, colon, NoSymbol, NoSymbol, NoSymbol ] };
// level4: replace ¿ by -
key <AC06> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, minus, NoSymbol, NoSymbol, NoSymbol ] };
// level4: replace : by _
key <AB06> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, 0, NoSymbol, NoSymbol, NoSymbol ] };
name[Group1]= "German (KOU)";
include "shift(both_capslock)"
include "level3(caps_switch)"
// use quote key (a-umlaut on German keyboards) as Mod3 switch
include "level3(quote_switch)"
include "level5(lsgt_switch_lock)"
include "level5(ralt_switch_lock)"
};
partial alphanumeric_keys
xkb_symbols "vou" {
include "de(kou)"
key <AB10> { [ k, K, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
key <AD01> { [ v, V, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
key <AD08> { [ l, L, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
key <AD09> { [ h, H, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
key <AC01> { [ c, C, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
name[Group1]= "German (VOU)";
include "shift(both_capslock)"
include "level3(caps_switch)"
// use quote key (a-umlaut on German keyboards) as Mod3 switch
include "level3(quote_switch)"
include "level5(lsgt_switch_lock)"
include "level5(ralt_switch_lock)"
};

View File

@ -1,166 +0,0 @@
partial alphanumeric_keys modifier_keys keypad_keys
xkb_symbols "neo_base" {
// Levels in Neo jargon
// --------------------------------------------------------------
// Ebene 1: normal
// Ebene 2: Shift
// Ebene 3: Mod3
// Ebene 4: Mod4 (for marking something use Shift + Mod4)
// Ebene 5: Shift + Mod3
// Ebene 6: Mod3 + Mod4
// Compose (not a level): Mod3 + Tab
// Feststelltaste (Capslock): Shift + Shift
// Mod4-Lock: Mod4 + Mod4
// Mod4-Lock: Shift + Mod3 + Tab
// Legend
// ===============
// Levels in Xkbmap jargon to be found here in the definitions.
// These are the levels used, and Xorg\'s translations:
// --------------------------------------------------------------
// Xorg: Level1 Level2 Level3 Level4 Level5 Level6 Level7 Level8
// Neo: Ebene1 Ebene2 Ebene3 Ebene5 Ebene4 Pseudo-Ebene Ebene6 ???
// Keys (Neo): None Shift Mod3 Mod3 + Shift Mod4 Mod4 + Shift Mod3 + Mod4 Mod3 + Mod4 + Shift
// Alphanumeric-keys
// ===============
key.type[Group1] = "EIGHT_LEVEL_WITH_LEVEL5_LOCK";
// Tab as Multi_key (Compose)
// --------------------------------------------------------------
key <TAB> { [ Tab, ISO_Left_Tab, Multi_key, ISO_Level5_Lock, NoSymbol, NoSymbol, NoSymbol, ISO_Level5_Lock ] };
// Number row
// --------------------------------------------------------------
key <TLDE> { [ dead_circumflex, dead_caron, U21BB, U02DE, dead_abovedot, Pointer_EnableKeys, dead_belowdot, NoSymbol ] };
key <AE01> { [ 1, degree, onesuperior, onesubscript, ordfeminine, NoSymbol, notsign, NoSymbol ] };
key <AE02> { [ 2, section, twosuperior, twosubscript, masculine, NoSymbol, logicalor, NoSymbol ] };
key <AE03> { [ 3, U2113, threesuperior, threesubscript, numerosign, NoSymbol, logicaland, NoSymbol ] };
key <AE04> { [ 4, guillemotright, U203A, femalesymbol, NoSymbol, NoSymbol, U22A5, NoSymbol ] };
key <AE05> { [ 5, guillemotleft, U2039, malesymbol, periodcentered, NoSymbol, U2221, NoSymbol ] };
key <AE06> { [ 6, dollar, cent, U26A5, sterling, NoSymbol, U2225, NoSymbol ] };
key <AE07> { [ 7, EuroSign, yen, U03F0, currency, NoSymbol, rightarrow, NoSymbol ] };
key <AE08> { [ 8, doublelowquotemark, singlelowquotemark, U27E8, Tab, ISO_Left_Tab, U221E, NoSymbol ] };
key <AE09> { [ 9, leftdoublequotemark, leftsinglequotemark, U27E9, KP_Divide, KP_Divide, variation, NoSymbol ] };
key <AE10> { [ 0, rightdoublequotemark, rightsinglequotemark, zerosubscript, KP_Multiply, KP_Multiply, emptyset, NoSymbol ] };
key <AE11> { [ minus, emdash, NoSymbol, U2011, KP_Subtract, KP_Subtract, hyphen, NoSymbol ] };
key <AE12> { [ dead_grave, dead_cedilla, dead_abovering, dead_dasia, dead_diaeresis, NoSymbol, dead_macron, NoSymbol ] };
// Top row
// --------------------------------------------------------------
key.type[Group1] = "EIGHT_LEVEL_ALPHABETIC_WITH_LEVEL5_LOCK";
key <AD01> { symbols[Group1] = [ x, X, ellipsis, Greek_xi, Prior, Prior, Greek_XI, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<PGUP>), RedirectKey(key=<PGUP>), NoAction(), NoAction() ]};
key <AD02> { symbols[Group1] = [ v, V, underscore, NoSymbol, BackSpace, BackSpace, radical, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<BKSP>), RedirectKey(key=<BKSP>), NoAction(), NoAction() ]};
key <AD03> { symbols[Group1] = [ l, L, bracketleft, Greek_lambda, Up, Up, Greek_LAMBDA, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<UP>), RedirectKey(key=<UP>), NoAction(), NoAction() ]};
key <AD04> { symbols[Group1] = [ c, C, bracketright, Greek_chi, Delete, Delete, U2102, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<DELE>), RedirectKey(key=<DELE>), NoAction(), NoAction() ]};
key <AD05> { symbols[Group1] = [ w, W, asciicircum, Greek_omega, Next, Next, Greek_OMEGA, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<PGDN>), RedirectKey(key=<PGDN>), NoAction(), NoAction() ]};
key <AD06> { [ k, K, exclam, Greek_kappa, exclamdown, NoSymbol, multiply, NoSymbol ] };
key <AD07> { [ h, H, less, Greek_psi, KP_7, KP_7, Greek_PSI, NoSymbol ] };
key <AD08> { [ g, G, greater, Greek_gamma, KP_8, KP_8, Greek_GAMMA, NoSymbol ] };
key <AD09> { [ f, F, equal, Greek_phi, KP_9, KP_9, Greek_PHI, NoSymbol ] };
key <AD10> { [ q, Q, ampersand, U03D5, KP_Add, KP_Add, U211A, NoSymbol ] };
key <AD11> { [ ssharp, U1E9E, U017F, Greek_finalsmallsigma, U2212, NoSymbol, jot, NoSymbol ] };
key.type[Group1] = "EIGHT_LEVEL_WITH_LEVEL5_LOCK";
key <AD12> { [ dead_acute, dead_tilde, dead_stroke, dead_psili, dead_doubleacute, NoSymbol, dead_breve, NoSymbol ] };
// Middle row
// --------------------------------------------------------------
key.type[Group1] = "EIGHT_LEVEL_ALPHABETIC_WITH_LEVEL5_LOCK";
key <AC01> { symbols[Group1] = [ u, U, backslash, NoSymbol, Home, Home, includedin, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<HOME>), RedirectKey(key=<HOME>), NoAction(), NoAction() ]};
key <AC02> { symbols[Group1] = [ i, I, slash, Greek_iota, Left, Left, integral, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<LEFT>), RedirectKey(key=<LEFT>), NoAction(), NoAction() ]};
key <AC03> { symbols[Group1] = [ a, A, braceleft, Greek_alpha, Down, Down, U2200, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<DOWN>), RedirectKey(key=<DOWN>), NoAction(), NoAction() ]};
key <AC04> { symbols[Group1] = [ e, E, braceright, Greek_epsilon, Right, Right, U2203, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<RGHT>), RedirectKey(key=<RGHT>), NoAction(), NoAction() ]};
key <AC05> { symbols[Group1] = [ o, O, asterisk, Greek_omicron, End, End, elementof, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<END>), RedirectKey(key=<END>), NoAction(), NoAction() ]};
key <AC06> { [ s, S, question, Greek_sigma, questiondown, NoSymbol, Greek_SIGMA, NoSymbol ] };
key <AC07> { [ n, N, parenleft, Greek_nu, KP_4, KP_4, U2115, NoSymbol ] };
key <AC08> { [ r, R, parenright, Greek_rho, KP_5, KP_5, U211D, NoSymbol ] };
key <AC09> { [ t, T, minus, Greek_tau, KP_6, KP_6, partialderivative, NoSymbol ] };
key <AC10> { [ d, D, colon, Greek_delta, KP_Separator, comma, Greek_DELTA, NoSymbol ] };
key <AC11> { [ y, Y, at, Greek_upsilon, period, KP_Decimal, nabla, NoSymbol ] };
// Bottom row
// --------------------------------------------------------------
key <AB01> { symbols[Group1] = [ udiaeresis, Udiaeresis, numbersign, NoSymbol, Escape, Escape, union, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<ESC>), RedirectKey(key=<ESC>), NoAction(), NoAction() ]};
key <AB02> { symbols[Group1] = [ odiaeresis, Odiaeresis, dollar, U03F5, Tab, Tab, intersection, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<TAB>), RedirectKey(key=<TAB>), NoAction(), NoAction() ]};
key <AB03> { symbols[Group1] = [ adiaeresis, Adiaeresis, bar, Greek_eta, Insert, Insert, U2135, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<INS>), RedirectKey(key=<INS>), NoAction(), NoAction() ]};
key <AB04> { symbols[Group1] = [ p, P, asciitilde, Greek_pi, Return, Return, Greek_PI, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<RTRN>), RedirectKey(key=<RTRN>), NoAction(), NoAction() ]};
key <AB05> { symbols[Group1] = [ z, Z, grave, Greek_zeta, Undo, Redo, U2124, NoSymbol ],
actions[Group1] = [ NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(key=<UNDO>), RedirectKey(key=<UNDO>), NoAction(), NoAction() ]};
key <AB06> { [ b, B, plus, Greek_beta, colon, NoSymbol, U21D0, NoSymbol ] };
key <AB07> { [ m, M, percent, Greek_mu, KP_1, KP_1, ifonlyif, NoSymbol ] };
key.type[Group1] = "EIGHT_LEVEL_WITH_LEVEL5_LOCK";
key <AB08> { [ comma, endash, quotedbl, U03F1, KP_2, KP_2, U21D2, NoSymbol ] };
key <AB09> { [ period, enfilledcircbullet, apostrophe, U03D1, KP_3, KP_3, U21A6, NoSymbol ] };
key.type[Group1] = "EIGHT_LEVEL_ALPHABETIC_WITH_LEVEL5_LOCK";
key <AB10> { [ j, J, semicolon, Greek_theta, semicolon, NoSymbol, Greek_THETA, NoSymbol ] };
key.type[Group1] = "EIGHT_LEVEL_WITH_LEVEL5_LOCK";
// Space key
// --------------------------------------------------------------
key <SPCE> { [ space, space, space, nobreakspace, KP_0, KP_0, U202F, NoSymbol ] };
// Keypad-keys
// ===============
// The former Numlock key:
key <NMLK> { [ Tab, ISO_Left_Tab, equal, approxeq, notequal, Pointer_EnableKeys, identical, NoSymbol ] };
// Topmost row
// --------------------------------------------------------------
key <KPDV> { [ KP_Divide, KP_Divide, division, U2300, U2215, NoSymbol, U2223, NoSymbol ] };
key <KPMU> { [ KP_Multiply, KP_Multiply, U22C5, U2299, multiply, NoSymbol, U2297, NoSymbol ] };
key <KPSU> { [ KP_Subtract, KP_Subtract, U2212, U2296, U2216, NoSymbol, U2238, NoSymbol ] };
// Top row
// --------------------------------------------------------------
key <KP7> { [ KP_7, U2714, U2195, U226A, KP_Home, KP_Home, upstile, NoSymbol ] };
key <KP8> { [ KP_8, U2718, uparrow, intersection, KP_Up, KP_Up, U22C2, NoSymbol ] };
key <KP9> { [ KP_9, dagger, U20D7, U226B, KP_Prior, KP_Prior, U2309, NoSymbol ] };
key <KPAD> { [ KP_Add, KP_Add, plusminus, U2295, U2213, NoSymbol, U2214, NoSymbol ] };
// Middle row
// --------------------------------------------------------------
key <KP4> { [ KP_4, club, leftarrow, includedin, KP_Left, KP_Left, U2286, NoSymbol ] };
key <KP5> { [ KP_5, EuroSign, colon, U22B6, KP_Begin, KP_Begin, U22B7, NoSymbol ] };
key <KP6> { [ KP_6, U2023, rightarrow, includes, KP_Right, KP_Right, U2287, NoSymbol ] };
// Bottom row
// --------------------------------------------------------------
key <KP1> { [ KP_1, diamond, U2194, lessthanequal, KP_End, KP_End, downstile, NoSymbol ] };
key <KP2> { [ KP_2, heart, downarrow, union, KP_Down, KP_Down, U22C3, NoSymbol ] };
key <KP3> { [ KP_3, U2660, U21CC, greaterthanequal, KP_Next, KP_Next, U230B, NoSymbol ] };
key <KPEN> { [ KP_Enter, KP_Enter, KP_Enter, KP_Enter, KP_Enter, KP_Enter, KP_Enter, NoSymbol ] };
key <KPEQ> { [ KP_Equal, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
// Bottommost row
// --------------------------------------------------------------
key <KP0> { [ KP_0, U2423, percent, U2030, KP_Insert, KP_Insert, U25A1, NoSymbol ] };
key <KPDL> { [ KP_Separator, period, comma, minutes, KP_Delete, KP_Delete, seconds, NoSymbol ] };
};

View File

@ -1,12 +0,0 @@
<variant>
<configItem popularity="exotic">
<name>vou</name>
<description>German (VOU)</description>
</configItem>
</variant>
<variant>
<configItem popularity="exotic">
<name>kou</name>
<description>German (KOU)</description>
</configItem>
</variant>

View File

@ -1,6 +0,0 @@
// The Quote key (while pressed) chooses the third shift level.
partial modifier_keys
xkb_symbols "quote_switch" {
key <AC11> {[ ISO_Level3_Shift ], type[group1]="ONE_LEVEL" };
};

1405
rules/evdev.extras.xml Normal file

File diff suppressed because it is too large Load Diff

1360
symbols/de Normal file

File diff suppressed because it is too large Load Diff

239
symbols/level3 Normal file
View File

@ -0,0 +1,239 @@
// These partial variants assign ISO_Level3_Shift to various XKB keycodes
// so that the third shift level can be reached.
// The default behaviour:
// the right Alt key (AltGr) chooses the third symbol engraved on a key.
default partial modifier_keys
xkb_symbols "ralt_switch" {
key <RALT> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift ]
};
include "level3(modifier_mapping)"
};
// Ensure a mapping to a real modifier for LevelThree.
partial modifier_keys
xkb_symbols "modifier_mapping" {
replace key <LVL3> {
type[Group1] = "ONE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift ]
};
modifier_map Mod5 { <LVL3> };
};
// The right Alt key never chooses the third level.
// This option attempts to undo the effect of a layout's inclusion of
// 'ralt_switch'. You may want to also select another level3 option
// to map the level3 shift to some other key.
partial modifier_keys
xkb_symbols "ralt_alt" {
key <RALT> {
type[Group1]="TWO_LEVEL",
type[Group2]="TWO_LEVEL",
type[Group3]="TWO_LEVEL",
type[Group4]="TWO_LEVEL",
symbols[Group1] = [ Alt_R, Meta_R ],
symbols[Group2] = [ Alt_R, Meta_R ],
symbols[Group3] = [ Alt_R, Meta_R ],
symbols[Group4] = [ Alt_R, Meta_R ]
};
modifier_map Mod1 { <RALT> };
};
// The right Alt key (while pressed) chooses the third shift level,
// and Compose is mapped to its second level.
partial modifier_keys
xkb_symbols "ralt_switch_multikey" {
key <RALT> {
type[Group1]="TWO_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift, Multi_key ]
};
include "level3(modifier_mapping)"
};
// A special case of the right-Alt switch -- for use with grp:alts_toggle.
hidden partial modifier_keys
xkb_symbols "ralt_switch_for_alts_toggle" {
virtual_modifiers LAlt, AltGr;
key <LALT> {
type[Group1]="PC_RALT_LEVEL2",
symbols[Group1] = [ Alt_L, ISO_Prev_Group, ISO_Prev_Group ],
virtualMods= LAlt
};
key <RALT> {
type[Group1]="PC_ALT_LEVEL2",
symbols[Group1] = [ ISO_Level3_Shift, ISO_Next_Group ],
virtualMods= AltGr
};
include "level3(modifier_mapping)"
};
// Either Alt key (while pressed) chooses the third shift level.
// (To be used mostly to imitate Mac OS functionality.)
partial modifier_keys
xkb_symbols "alt_switch" {
include "level3(lalt_switch)"
include "level3(ralt_switch)"
};
// The left Alt key (while pressed) chooses the third shift level.
partial modifier_keys
xkb_symbols "lalt_switch" {
key <LALT> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift ]
};
include "level3(modifier_mapping)"
};
// The right Ctrl key (while pressed) chooses the third shift level.
partial modifier_keys
xkb_symbols "switch" {
key <RCTL> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift ]
};
include "level3(modifier_mapping)"
};
// The Menu key (while pressed) chooses the third shift level.
partial modifier_keys
xkb_symbols "menu_switch" {
key <MENU> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift ]
};
include "level3(modifier_mapping)"
};
// Either Win key (while pressed) chooses the third shift level.
partial modifier_keys
xkb_symbols "win_switch" {
include "level3(lwin_switch)"
include "level3(rwin_switch)"
};
// The left Win key (while pressed) chooses the third shift level.
partial modifier_keys
xkb_symbols "lwin_switch" {
key <LWIN> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift ]
};
include "level3(modifier_mapping)"
};
// The right Win key (while pressed) chooses the third shift level.
// (When using this map, you should set your keyboard as pc101 or pc102
// instead of pc104 or pc105.)
partial modifier_keys
xkb_symbols "rwin_switch" {
key <RWIN> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift ]
};
include "level3(modifier_mapping)"
};
// The Enter key on the kepypad (while pressed) chooses the third shift level.
// (This is especially useful for Mac laptops which miss the right Alt key.)
partial modifier_keys
xkb_symbols "enter_switch" {
key <KPEN> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift ]
};
include "level3(modifier_mapping)"
};
// The CapsLock key (while pressed) chooses the third shift level.
partial modifier_keys
xkb_symbols "caps_switch" {
key <CAPS> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift ]
};
include "level3(modifier_mapping)"
};
// The Backslash key (while pressed) chooses the third shift level.
partial modifier_keys
xkb_symbols "bksl_switch" {
key <BKSL> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift ]
};
include "level3(modifier_mapping)"
};
// The Quote key (while pressed) chooses the third shift level.
partial modifier_keys
xkb_symbols "quote_switch" {
key <AC11> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift ]
};
include "level3(modifier_mapping)"
};
// The Less/Greater key (while pressed) chooses the third shift level.
partial modifier_keys
xkb_symbols "lsgt_switch" {
key <LSGT> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift ]
};
include "level3(modifier_mapping)"
};
// The CapsLock key (while pressed) chooses the third shift level,
// and latches when pressed together with another third-level chooser.
partial modifier_keys
xkb_symbols "caps_switch_latch" {
key <CAPS> {
type[Group1]="THREE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift, ISO_Level3_Shift, ISO_Level3_Latch ]
};
include "level3(modifier_mapping)"
};
// The Backslash key (while pressed) chooses the third shift level,
// and latches when pressed together with another third-level chooser.
partial modifier_keys
xkb_symbols "bksl_switch_latch" {
key <BKSL> {
type[Group1]="THREE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift, ISO_Level3_Shift, ISO_Level3_Latch ]
};
include "level3(modifier_mapping)"
};
// The Less/Greater key (while pressed) chooses the third shift level,
// and latches when pressed together with another third-level chooser.
partial modifier_keys
xkb_symbols "lsgt_switch_latch" {
key <LSGT> {
type[Group1]="THREE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift, ISO_Level3_Shift, ISO_Level3_Latch ]
};
include "level3(modifier_mapping)"
};
// Number key 4 chooses third shift level when pressed in isolation.
partial modifier_keys
xkb_symbols "4_switch_isolated" {
override key <AE04> {
symbols[Group1] = [ ISO_Level3_Shift ]
};
include "level3(modifier_mapping)"
};
// Number key 9 chooses third shift level when pressed in isolation.
partial modifier_keys
xkb_symbols "9_switch_isolated" {
override key <AE09> {
symbols[Group1] = [ ISO_Level3_Shift ]
};
include "level3(modifier_mapping)"
};