Compare commits

...

16 Commits

Author SHA1 Message Date
Lu Baumann
ac9ca883b2
Update README.md 2023-11-29 15:18:23 +01:00
Lu Baumann
852fa8ceb0 updated for new xkb 2023-11-17 20:15:20 +01:00
Lu Baumann
d9667dabbf fixed error in xkb configs 2023-11-17 20:12:25 +01:00
Lu Baumann
739e4b3577
fixed filenames when writing 2023-10-17 01:09:35 +02:00
Lu Baumann
2e34f1b6c5
fixed logic 2023-10-16 23:40:58 +02:00
Lu Baumann
59213e8145
removed match to allow older python versions 2023-10-16 23:35:20 +02:00
Lu Baumann
14ac53f4af
Update README.md 2023-04-26 11:53:49 +02:00
Lu Baumann
67c4134c38
Update README.md 2023-04-26 11:53:17 +02:00
Lu Baumann
22e2749084
Update README.md 2023-04-26 11:50:09 +02:00
Surferlul
7306762859 fixed permissions 2023-04-26 11:38:17 +02:00
Lu Baumann
4bb684974d
Create patch.sh 2023-04-26 11:33:53 +02:00
Lu Baumann
93259c903e
Fixed for new xkb 2023-04-26 11:25:27 +02:00
Surferlul
a7f1e7f456 made patching process more modular 2022-06-17 03:47:54 +02:00
Surferlul
751179fe47 bugfix 2022-06-07 19:54:45 +02:00
Surferlul
7b6285824b wrote into scirpt 2022-06-07 19:52:22 +02:00
Lukas Baumann
27a0e04f6a
Update README.md 2021-07-04 11:30:46 +02:00
12 changed files with 425 additions and 3005 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.idea

View File

@ -1,2 +1,16 @@
# xkb_neo # xkb_neo
My xkb modifications for making neo etc (inclusive vou) work properly with every part of the os. YES, even IntelliJ 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

2
enable_gnome.sh Executable file
View File

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

10
patch.sh Executable file
View File

@ -0,0 +1,10 @@
#!/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

71
patch_xkb.py Executable file
View File

@ -0,0 +1,71 @@
#!/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))

142
patches/de_koy Normal file
View File

@ -0,0 +1,142 @@
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)"
};

166
patches/de_neo_base Normal file
View File

@ -0,0 +1,166 @@
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 ] };
};

12
patches/evdev Normal file
View File

@ -0,0 +1,12 @@
<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>

6
patches/level3 Normal file
View File

@ -0,0 +1,6 @@
// 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" };
};

File diff suppressed because it is too large Load Diff

1360
symbols/de

File diff suppressed because it is too large Load Diff

View File

@ -1,239 +0,0 @@
// 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)"
};