From 62deaeb570c8712e085ac9b379b5d7564c6f5673 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Thu, 12 Jul 2012 14:42:31 +0100 Subject: [PATCH] Import dataset into test/data/ Use a self-contained dataset instead of relying on a globally-installed set. Data taken from xkeyboard-config 2.5.1. Signed-off-by: Daniel Stone --- test/common.c | 12 +- test/data/compat/accessx | 52 ++ test/data/compat/basic | 48 ++ test/data/compat/caps | 12 + test/data/compat/complete | 10 + test/data/compat/default | 12 + test/data/compat/iso9995 | 80 ++ test/data/compat/ledcaps | 23 + test/data/compat/lednum | 23 + test/data/compat/ledscroll | 23 + test/data/compat/level5 | 51 ++ test/data/compat/misc | 122 +++ test/data/compat/mousekeys | 202 +++++ test/data/compat/pc | 17 + test/data/compat/xfree86 | 66 ++ test/data/keycodes/aliases | 99 +++ test/data/keycodes/evdev | 314 +++++++ test/data/keymaps/basic.xkb | 2 +- test/data/keymaps/default.xkb | 4 +- test/data/rules/evdev | 1098 ++++++++++++++++++++++++ test/data/symbols/altwin | 79 ++ test/data/symbols/ca | 530 ++++++++++++ test/data/symbols/capslock | 74 ++ test/data/symbols/compose | 54 ++ test/data/symbols/ctrl | 57 ++ test/data/symbols/de | 627 ++++++++++++++ test/data/symbols/eurosign | 23 + test/data/symbols/group | 457 ++++++++++ test/data/symbols/il | 251 ++++++ test/data/symbols/in | 1726 +++++++++++++++++++++++++++++++++++++ test/data/symbols/inet | 1873 +++++++++++++++++++++++++++++++++++++++++ test/data/symbols/keypad | 633 ++++++++++++++ test/data/symbols/kpdl | 102 +++ test/data/symbols/latin | 256 ++++++ test/data/symbols/level3 | 196 +++++ test/data/symbols/level5 | 147 ++++ test/data/symbols/nbsp | 204 +++++ test/data/symbols/pc | 90 ++ test/data/symbols/ru | 653 ++++++++++++++ test/data/symbols/shift | 84 ++ test/data/symbols/srvr_ctrl | 125 +++ test/data/symbols/terminate | 7 + test/data/symbols/us | 1337 +++++++++++++++++++++++++++++ test/data/types/basic | 29 + test/data/types/complete | 9 + test/data/types/extra | 161 ++++ test/data/types/iso9995 | 18 + test/data/types/level5 | 213 +++++ test/data/types/mousekeys | 10 + test/data/types/numpad | 67 ++ test/data/types/pc | 115 +++ test/rulescomp.c | 4 +- 52 files changed, 12474 insertions(+), 7 deletions(-) create mode 100644 test/data/compat/accessx create mode 100644 test/data/compat/basic create mode 100644 test/data/compat/caps create mode 100644 test/data/compat/complete create mode 100644 test/data/compat/default create mode 100644 test/data/compat/iso9995 create mode 100644 test/data/compat/ledcaps create mode 100644 test/data/compat/lednum create mode 100644 test/data/compat/ledscroll create mode 100644 test/data/compat/level5 create mode 100644 test/data/compat/misc create mode 100644 test/data/compat/mousekeys create mode 100644 test/data/compat/pc create mode 100644 test/data/compat/xfree86 create mode 100644 test/data/keycodes/aliases create mode 100644 test/data/keycodes/evdev create mode 100644 test/data/rules/evdev create mode 100644 test/data/symbols/altwin create mode 100644 test/data/symbols/ca create mode 100644 test/data/symbols/capslock create mode 100644 test/data/symbols/compose create mode 100644 test/data/symbols/ctrl create mode 100644 test/data/symbols/de create mode 100644 test/data/symbols/eurosign create mode 100644 test/data/symbols/group create mode 100644 test/data/symbols/il create mode 100644 test/data/symbols/in create mode 100644 test/data/symbols/inet create mode 100644 test/data/symbols/keypad create mode 100644 test/data/symbols/kpdl create mode 100644 test/data/symbols/latin create mode 100644 test/data/symbols/level3 create mode 100644 test/data/symbols/level5 create mode 100644 test/data/symbols/nbsp create mode 100644 test/data/symbols/pc create mode 100644 test/data/symbols/ru create mode 100644 test/data/symbols/shift create mode 100644 test/data/symbols/srvr_ctrl create mode 100644 test/data/symbols/terminate create mode 100644 test/data/symbols/us create mode 100644 test/data/types/basic create mode 100644 test/data/types/complete create mode 100644 test/data/types/extra create mode 100644 test/data/types/iso9995 create mode 100644 test/data/types/level5 create mode 100644 test/data/types/mousekeys create mode 100644 test/data/types/numpad create mode 100644 test/data/types/pc diff --git a/test/common.c b/test/common.c index 3938dcd..dbb0cfe 100644 --- a/test/common.c +++ b/test/common.c @@ -46,7 +46,8 @@ test_get_path(const char *path_rel) const char *srcdir = getenv("srcdir"); snprintf(path, PATH_MAX - 1, - "%s/test/data/%s", srcdir ? srcdir : ".", path_rel); + "%s/test/data/%s", srcdir ? srcdir : ".", + path_rel ? path_rel : ""); return path; } @@ -93,7 +94,14 @@ test_read_file(const char *path_rel) struct xkb_context * test_get_context(void) { - return xkb_context_new(0); + struct xkb_context *ctx = xkb_context_new(XKB_CONTEXT_NO_DEFAULT_INCLUDES); + + if (!ctx) + return NULL; + + xkb_context_include_path_append(ctx, test_get_path("")); + + return ctx; } struct xkb_keymap * diff --git a/test/data/compat/accessx b/test/data/compat/accessx new file mode 100644 index 0000000..0ed34ce --- /dev/null +++ b/test/data/compat/accessx @@ -0,0 +1,52 @@ +default partial xkb_compatibility "basic" { + interpret AccessX_Enable { + action= LockControls(controls=AccessXKeys); + }; +}; + +partial xkb_compatibility "full" { + + interpret AccessX_Enable { + action= LockControls(controls=AccessXKeys); + }; + + interpret AccessX_Feedback_Enable { + action= LockControls(controls=AccessXFeedback); + }; + + interpret RepeatKeys_Enable { + action= LockControls(controls=RepeatKeys); + }; + + interpret SlowKeys_Enable { + action= LockControls(controls=SlowKeys); + }; + + interpret BounceKeys_Enable { + action= LockControls(controls=BounceKeys); + }; + + interpret StickyKeys_Enable { + action= LockControls(controls=StickyKeys); + }; + + interpret MouseKeys_Enable { + action= LockControls(controls=MouseKeys); + }; + + interpret MouseKeys_Accel_Enable { + action= LockControls(controls=MouseKeysAccel); + }; + + interpret Overlay1_Enable { + action= LockControls(controls=Overlay1); + }; + + interpret Overlay2_Enable { + action= LockControls(controls=Overlay2); + }; + + interpret AudibleBell_Enable { + action= LockControls(controls=AudibleBell); + }; +}; diff --git a/test/data/compat/basic b/test/data/compat/basic new file mode 100644 index 0000000..393c324 --- /dev/null +++ b/test/data/compat/basic @@ -0,0 +1,48 @@ +// Minimal set of symbol interpretations to provide +// reasonable default behavior (Num lock, shift and +// caps lock and mode switch) and set up the +// automatic updating of common keyboard LEDs. + +default xkb_compatibility "basic" { + virtual_modifiers NumLock,AltGr; + + interpret.repeat= False; + setMods.clearLocks= True; + latchMods.clearLocks= True; + latchMods.latchToLock= True; + + interpret Shift_Lock+AnyOf(Shift+Lock) { + action= LockMods(modifiers=Shift); + }; + + interpret Any+Lock { + action= LockMods(modifiers=Lock); + }; + + interpret Num_Lock+Any { + virtualModifier= NumLock; + action= LockMods(modifiers=NumLock); + }; + + interpret Mode_switch { + useModMapMods= level1; + virtualModifier= AltGr; + action= SetGroup(group=+1); + }; + + interpret Any + Any { + action= SetMods(modifiers=modMapMods); + }; + + group 2 = AltGr; + group 3 = AltGr; + group 4 = AltGr; + + include "ledcaps" + include "lednum" + indicator "Shift Lock" { + !allowExplicit; + whichModState= Locked; + modifiers= Shift; + }; +}; diff --git a/test/data/compat/caps b/test/data/compat/caps new file mode 100644 index 0000000..d787ab6 --- /dev/null +++ b/test/data/compat/caps @@ -0,0 +1,12 @@ +partial xkb_compatibility "caps_lock" { + // Keysym Caps_Lock locks Lock modifier. + // With this, the keysym Caps_Lock can be used without binding the whole + // key to a real modifier. + // This is essential when you don't want to use caps lock on the first + // level. + // This should not have any compatibility issues when used together with + // other layouts which don't utilize this capability. + interpret Caps_Lock { + action = LockMods(modifiers = Lock); + }; +}; diff --git a/test/data/compat/complete b/test/data/compat/complete new file mode 100644 index 0000000..d33c4db --- /dev/null +++ b/test/data/compat/complete @@ -0,0 +1,10 @@ +default xkb_compatibility "complete" { + include "basic" + augment "iso9995" + augment "mousekeys" + augment "accessx(full)" + augment "misc" + augment "xfree86" + augment "level5" + augment "caps(caps_lock)" +}; diff --git a/test/data/compat/default b/test/data/compat/default new file mode 100644 index 0000000..4c4461f --- /dev/null +++ b/test/data/compat/default @@ -0,0 +1,12 @@ +default xkb_compatibility "default" { + include "basic" + augment "mousekeys" + augment "accessx(basic)" + augment "misc" + augment "iso9995" + augment "level5" +// ??should be changed/renamed/removed +// augment "xfree86" + augment "japan" + augment "caps(caps_lock)" +}; diff --git a/test/data/compat/iso9995 b/test/data/compat/iso9995 new file mode 100644 index 0000000..eee104d --- /dev/null +++ b/test/data/compat/iso9995 @@ -0,0 +1,80 @@ +// Fairly complete set of symbol interpretations +// to provide reasonable default behavior + +default partial xkb_compatibility "default" { + virtual_modifiers LevelThree,AltGr; + + interpret.repeat= False; + setMods.clearLocks= True; + latchMods.clearLocks= True; + latchMods.latchToLock= True; + + interpret ISO_Lock+Any { + action= ISOLock(affect= all,modifiers=modMapMods); + }; + + interpret ISO_Level2_Latch+Shift { + useModMapMods= level1; + action= LatchMods(modifiers=Shift); + }; + + interpret ISO_Level3_Shift+Any { + useModMapMods= level1; + virtualModifier= LevelThree; + action= SetMods(modifiers=LevelThree); + }; + + interpret ISO_Level3_Shift { + action= SetMods(modifiers=LevelThree); + }; + + interpret ISO_Level3_Latch+Any { + useModMapMods= level1; + virtualModifier= LevelThree; + action= LatchMods(modifiers=LevelThree); + }; + + interpret ISO_Level3_Latch { + action= LatchMods(modifiers=LevelThree); + }; + + interpret ISO_Level3_Lock+Any { + useModMapMods= level1; + virtualModifier= LevelThree; + action= LockMods(modifiers=LevelThree); + }; + + interpret ISO_Level3_Lock { + action= LockMods(modifiers=LevelThree); + }; + + interpret ISO_Group_Latch { + useModMapMods= level1; + virtualModifier= AltGr; + action= LatchGroup(group=2); + }; + + interpret ISO_Next_Group { + useModMapMods= level1; + virtualModifier= AltGr; + action= LockGroup(group=+1); + }; + + interpret ISO_Prev_Group { + useModMapMods= level1; + virtualModifier= AltGr; + action= LockGroup(group=-1); + }; + interpret ISO_First_Group { + action= LockGroup(group=1); + }; + + interpret ISO_Last_Group { + action= LockGroup(group=2); + }; + + indicator "Group 2" { + !allowExplicit; + groups= All-Group1; + }; +}; diff --git a/test/data/compat/ledcaps b/test/data/compat/ledcaps new file mode 100644 index 0000000..fc3084e --- /dev/null +++ b/test/data/compat/ledcaps @@ -0,0 +1,23 @@ +// Use Caps Lock LED to show either Caps Lock, Group, or Shift Lock state + +default partial xkb_compatibility "caps_lock" { + indicator "Caps Lock" { + !allowExplicit; + whichModState= Locked; + modifiers= Lock; + }; +}; + +partial xkb_compatibility "group_lock" { + indicator "Caps Lock" { + modifiers= None; + groups=All-group1; + }; +}; + +partial xkb_compatibility "shift_lock" { + indicator "Caps Lock" { + whichModState= Locked; + modifiers= Shift; + }; +}; diff --git a/test/data/compat/lednum b/test/data/compat/lednum new file mode 100644 index 0000000..24a60a5 --- /dev/null +++ b/test/data/compat/lednum @@ -0,0 +1,23 @@ +// Use Num Lock LED to show either Num Lock, Group, or Shift Lock state + +default partial xkb_compatibility "num_lock" { + indicator "Num Lock" { + !allowExplicit; + whichModState= Locked; + modifiers= NumLock; + }; +}; + +partial xkb_compatibility "group_lock" { + indicator "Num Lock" { + modifiers= None; + groups=All-group1; + }; +}; + +partial xkb_compatibility "shift_lock" { + indicator "Num Lock" { + whichModState= Locked; + modifiers= Shift; + }; +}; diff --git a/test/data/compat/ledscroll b/test/data/compat/ledscroll new file mode 100644 index 0000000..ca5a82c --- /dev/null +++ b/test/data/compat/ledscroll @@ -0,0 +1,23 @@ +// Use Scroll Lock LED to show either Scroll Lock, Group, or Shift Lock state + +default partial xkb_compatibility "scroll_lock" { + indicator "Scroll Lock" { + allowExplicit; + whichModState= Locked; + modifiers= ScrollLock; + }; +}; + +partial xkb_compatibility "group_lock" { + indicator "Scroll Lock" { + modifiers= None; + groups=All-group1; + }; +}; + +partial xkb_compatibility "shift_lock" { + indicator "Scroll Lock" { + whichModState= Locked; + modifiers= Shift; + }; +}; diff --git a/test/data/compat/level5 b/test/data/compat/level5 new file mode 100644 index 0000000..8d28051 --- /dev/null +++ b/test/data/compat/level5 @@ -0,0 +1,51 @@ +// Fairly complete set of symbol interpretations +// to provide reasonable default behavior + +default partial xkb_compatibility "default" { + virtual_modifiers LevelFive; + + interpret.repeat= False; + setMods.clearLocks= True; + latchMods.clearLocks= True; + latchMods.latchToLock= True; + + interpret ISO_Level5_Shift+Any { + useModMapMods= level1; + virtualModifier= LevelFive; + action= SetMods(modifiers=LevelFive); + }; + + interpret ISO_Level5_Shift { + action= SetMods(modifiers=LevelFive); + }; + + interpret ISO_Level5_Latch+Any { + virtualModifier= LevelFive; + action= LatchMods(modifiers=LevelFive); + }; + + interpret ISO_Level5_Latch { + action= LatchMods(modifiers=LevelFive); + }; + + interpret ISO_Level5_Lock+Any { + virtualModifier= LevelFive; + action= LockMods(modifiers=LevelFive); + }; + + interpret ISO_Level5_Lock { + action= LockMods(modifiers=LevelFive); + }; +}; +partial xkb_compatibility "level5_lock" { + // This defines a Level5-Lock using the NumLock real modifier in order to + // create arbitrary level-behaviour, which would not be possible with the + // virtual modifier. + // See also: types/level5 : EIGHT_LEVEL_LEVEL_FIVE_LOCK + // See also: symbols/level5(lock) + virtual_modifiers NumLock; + + interpret ISO_Level5_Lock { + action = LockMods(modifiers = NumLock); + }; +}; diff --git a/test/data/compat/misc b/test/data/compat/misc new file mode 100644 index 0000000..cfe9a39 --- /dev/null +++ b/test/data/compat/misc @@ -0,0 +1,122 @@ +default partial xkb_compatibility "misc" { + + virtual_modifiers Alt,Meta,Super,Hyper,ScrollLock; + + // Interpretations for some other useful keys + + interpret Terminate_Server { + action = Terminate(); + }; + + setMods.clearLocks= True; + + // Sets the "Alt" virtual modifier + + interpret Alt_L+Any { + //useModMapMods= level1; + virtualModifier= Alt; + action = SetMods(modifiers=modMapMods); + }; + + interpret Alt_L { + action = SetMods(modifiers=Alt); + }; + + interpret Alt_R+Any { + //useModMapMods= level1; + virtualModifier= Alt; + action = SetMods(modifiers=modMapMods); + }; + + interpret Alt_R { + action = SetMods(modifiers=Alt); + }; + + // Sets the "Meta" virtual modifier + + interpret Meta_L+Any { +// useModMapMods= level1; + virtualModifier= Meta; + action = SetMods(modifiers=modMapMods); + }; + + interpret Meta_L { + action = SetMods(modifiers=Meta); + }; + + interpret Meta_R+Any { + //useModMapMods= level1; + virtualModifier= Meta; + action = SetMods(modifiers=modMapMods); + }; + + interpret Meta_R { + action = SetMods(modifiers=Meta); + }; + + // Sets the "Super" virtual modifier + + interpret Super_L+Any { +// useModMapMods= level1; + virtualModifier= Super; + action = SetMods(modifiers=modMapMods); + }; + + interpret Super_L { + action = SetMods(modifiers=Super); + }; + + interpret Super_R+Any { + //useModMapMods= level1; + virtualModifier= Super; + action = SetMods(modifiers=modMapMods); + }; + + interpret Super_R { + action = SetMods(modifiers=Super); + }; + + // Sets the "Hyper" virtual modifier + + interpret Hyper_L+Any { +// useModMapMods= level1; + virtualModifier= Hyper; + action = SetMods(modifiers=modMapMods); + }; + + interpret Hyper_L { + action = SetMods(modifiers=Hyper); + }; + + interpret Hyper_R+Any { + //useModMapMods= level1; + virtualModifier= Hyper; + action = SetMods(modifiers=modMapMods); + }; + + interpret Hyper_R { + action = SetMods(modifiers=Hyper); + }; + + // Sets the "ScrollLock" virtual modifier and + // makes it actually lock when pressed. Sets + // up a map for the scroll lock indicator. + interpret Scroll_Lock+Any { + virtualModifier= ScrollLock; + action = LockMods(modifiers=modMapMods); + }; + + include "ledscroll" + + include "misc(assign_shift_left_action)" +}; + +partial xkb_compatibility "assign_shift_left_action" { + // Because of the irrevertable modifier mapping in symbols/pc is + // getting bound to the Lock modifier when using + // symbols/shift(both_capslock), creating unwanted behaviour. + // This is a quirk, to circumvent the problem. + interpret Shift_L { + action = SetMods(modifiers = Shift); + }; +}; diff --git a/test/data/compat/mousekeys b/test/data/compat/mousekeys new file mode 100644 index 0000000..f60c756 --- /dev/null +++ b/test/data/compat/mousekeys @@ -0,0 +1,202 @@ +// Interpretations for arrow keys and a bunch of other +// common keysyms which make it possible to bind "mouse" +// keys using xmodmap and activate or deactivate them +// from the keyboard. + +default partial xkb_compatibility "mousekeys" { + + // Keypad actions. + // + interpret.repeat= True; + + interpret KP_1 { + action = MovePtr(x=-1,y= +1); + }; + interpret KP_End { + action = MovePtr(x=-1,y= +1); + }; + + interpret KP_2 { + action = MovePtr(x=+0,y= +1); + }; + interpret KP_Down { + action = MovePtr(x=+0,y= +1); + }; + + interpret KP_3 { + action = MovePtr(x=+1,y=+1); + }; + interpret KP_Next { + action = MovePtr(x=+1,y=+1); + }; + + interpret KP_4 { + action = MovePtr(x=-1,y=+0); + }; + interpret KP_Left { + action = MovePtr(x=-1,y=+0); + }; + + interpret KP_6 { + action = MovePtr(x=+1,y=+0); + }; + interpret KP_Right { + action = MovePtr(x=+1,y=+0); + }; + + interpret KP_7 { + action = MovePtr(x=-1,y=-1); + }; + interpret KP_Home { + action = MovePtr(x=-1,y=-1); + }; + + interpret KP_8 { + action = MovePtr(x=+0,y=-1); + }; + interpret KP_Up { + action = MovePtr(x=+0,y=-1); + }; + + interpret KP_9 { + action = MovePtr(x=+1,y=-1); + }; + interpret KP_Prior { + action = MovePtr(x=+1,y=-1); + }; + + interpret KP_5 { + action = PointerButton(button=default); + }; + interpret KP_Begin { + action = PointerButton(button=default); + }; + + interpret KP_F2 { + action = SetPtrDflt(affect=defaultButton,button=1); + }; + interpret KP_Divide { + action = SetPtrDflt(affect=defaultButton,button=1); + }; + + interpret KP_F3 { + action = SetPtrDflt(affect=defaultButton,button=2); + }; + interpret KP_Multiply { + action = SetPtrDflt(affect=defaultButton,button=2); + }; + + interpret KP_F4 { + action = SetPtrDflt(affect=defaultButton,button=3); + }; + interpret KP_Subtract { + action = SetPtrDflt(affect=defaultButton,button=3); + }; + + interpret KP_Separator { + action = PointerButton(button=default,count=2); + }; + interpret KP_Add { + action = PointerButton(button=default,count=2); + }; + + interpret KP_0 { + action = LockPointerButton(button=default,affect=lock); + }; + interpret KP_Insert { + action = LockPointerButton(button=default,affect=lock); + }; + + interpret KP_Decimal { + action = LockPointerButton(button=default,affect=unlock); + }; + interpret KP_Delete { + action = LockPointerButton(button=default,affect=unlock); + }; + + // Additional mappings for Solaris keypad compatibility + interpret F25 { // aka KP_Divide + action = SetPtrDflt(affect=defaultButton,button=1); + }; + interpret F26 { // aka KP_Multiply + action = SetPtrDflt(affect=defaultButton,button=2); + }; + interpret F27 { // aka KP_Home + action = MovePtr(x=-1,y=-1); + }; + interpret F29 { // aka KP_Prior + action = MovePtr(x=+1,y=-1); + }; + interpret F31 { // aka KP_Begin + action = PointerButton(button=default); + }; + interpret F33 { // aka KP_End + action = MovePtr(x=-1,y= +1); + }; + interpret F35 { // aka KP_Next + action = MovePtr(x=+1,y=+1); + }; + + interpret.repeat= False; + + + // New Keysym Actions. + // + interpret Pointer_Button_Dflt { + action= PointerButton(button=default); + }; + interpret Pointer_Button1 { + action= PointerButton(button=1); + }; + interpret Pointer_Button2 { + action= PointerButton(button=2); + }; + interpret Pointer_Button3 { + action= PointerButton(button=3); + }; + interpret Pointer_DblClick_Dflt { + action= PointerButton(button=default,count=2); + }; + interpret Pointer_DblClick1 { + action= PointerButton(button=1,count=2); + }; + interpret Pointer_DblClick2 { + action= PointerButton(button=2,count=2); + }; + interpret Pointer_DblClick3 { + action= PointerButton(button=3,count=2); + }; + interpret Pointer_Drag_Dflt { + action= LockPointerButton(button=default); + }; + interpret Pointer_Drag1 { + action= LockPointerButton(button=1); + }; + interpret Pointer_Drag2 { + action= LockPointerButton(button=2); + }; + interpret Pointer_Drag3 { + action= LockPointerButton(button=3); + }; + + interpret Pointer_EnableKeys { + action= LockControls(controls=MouseKeys); + }; + interpret Pointer_Accelerate { + action= LockControls(controls=MouseKeysAccel); + }; + interpret Pointer_DfltBtnNext { + action= SetPtrDflt(affect=defaultButton,button= +1); + }; + interpret Pointer_DfltBtnPrev { + action= SetPtrDflt(affect=defaultButton,button= -1); + }; + + + // Allow an indicator for MouseKeys. + indicator "Mouse Keys" { +// !allowExplicit; + indicatorDrivesKeyboard; + controls= MouseKeys; + }; +}; diff --git a/test/data/compat/pc b/test/data/compat/pc new file mode 100644 index 0000000..e970795 --- /dev/null +++ b/test/data/compat/pc @@ -0,0 +1,17 @@ +default partial xkb_compatibility "pc" { + + // Sets the "Alt" virtual modifier + + virtual_modifiers Alt; + + setMods.clearLocks= True; + interpret Alt_L+Any { + virtualModifier= Alt; + action = SetMods(modifiers=modMapMods); + }; + + interpret Alt_R+Any { + virtualModifier= Alt; + action = SetMods(modifiers=modMapMods); + }; +}; diff --git a/test/data/compat/xfree86 b/test/data/compat/xfree86 new file mode 100644 index 0000000..52e661d --- /dev/null +++ b/test/data/compat/xfree86 @@ -0,0 +1,66 @@ +// XFree86 special keysyms + +default partial xkb_compatibility "basic" { + + interpret.repeat= True; + + interpret XF86_Switch_VT_1 { + action = SwitchScreen(Screen=1, !SameServer); + }; + interpret XF86_Switch_VT_2 { + action = SwitchScreen(Screen=2, !SameServer); + }; + interpret XF86_Switch_VT_3 { + action = SwitchScreen(Screen=3, !SameServer); + }; + interpret XF86_Switch_VT_4 { + action = SwitchScreen(Screen=4, !SameServer); + }; + interpret XF86_Switch_VT_5 { + action = SwitchScreen(Screen=5, !SameServer); + }; + interpret XF86_Switch_VT_6 { + action = SwitchScreen(Screen=6, !SameServer); + }; + interpret XF86_Switch_VT_7 { + action = SwitchScreen(Screen=7, !SameServer); + }; + interpret XF86_Switch_VT_8 { + action = SwitchScreen(Screen=8, !SameServer); + }; + interpret XF86_Switch_VT_9 { + action = SwitchScreen(Screen=9, !SameServer); + }; + interpret XF86_Switch_VT_10 { + action = SwitchScreen(Screen=10, !SameServer); + }; + interpret XF86_Switch_VT_11 { + action = SwitchScreen(Screen=11, !SameServer); + }; + interpret XF86_Switch_VT_12 { + action = SwitchScreen(Screen=12, !SameServer); + }; + + interpret XF86LogGrabInfo { + action = Private(type=0x86, data="PrGrbs"); + }; + interpret XF86LogWindowTree { + action = Private(type=0x86, data="PrWins"); + }; + + interpret XF86_Next_VMode { + action = Private(type=0x86, data="+VMode"); + }; + interpret XF86_Prev_VMode { + action = Private(type=0x86, data="-VMode"); + }; +}; + +partial xkb_compatibility "grab_break" { + interpret XF86_Ungrab { + action = Private(type=0x86, data="Ungrab"); + }; + interpret XF86_ClearGrab { + action = Private(type=0x86, data="ClsGrb"); + }; +}; diff --git a/test/data/keycodes/aliases b/test/data/keycodes/aliases new file mode 100644 index 0000000..f398772 --- /dev/null +++ b/test/data/keycodes/aliases @@ -0,0 +1,99 @@ + +// keycode aliases for phonetic keyboard maps + +default +xkb_keycodes "qwerty" { + + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; +}; + +xkb_keycodes "azerty" { + + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; +}; + +xkb_keycodes "qwertz" { + + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; + alias = ; +}; diff --git a/test/data/keycodes/evdev b/test/data/keycodes/evdev new file mode 100644 index 0000000..624ac68 --- /dev/null +++ b/test/data/keycodes/evdev @@ -0,0 +1,314 @@ +// translation from evdev scancodes to something resembling xfree86 keycodes. + +default xkb_keycodes "evdev" { + minimum = 8; + maximum = 255; + + # Added for pc105 compatibility + = 94; + + = 49; + = 10; + = 11; + = 12; + = 13; + = 14; + = 15; + = 16; + = 17; + = 18; + = 19; + = 20; + = 21; + = 22; + + = 23; + = 24; + = 25; + = 26; + = 27; + = 28; + = 29; + = 30; + = 31; + = 32; + = 33; + = 34; + = 35; + = 51; + alias = ; + = 36; + + = 66; + = 38; + = 39; + = 40; + = 41; + = 42; + = 43; + = 44; + = 45; + = 46; + = 47; + = 48; + + = 50; + = 52; + = 53; + = 54; + = 55; + = 56; + = 57; + = 58; + = 59; + = 60; + = 61; + = 62; + + = 64; + = 37; + = 65; + = 105; + = 108; + // Microsoft keyboard extra keys + = 133; + = 134; + = 135; + alias = ; + + = 9; + = 67; + = 68; + = 69; + = 70; + = 71; + = 72; + = 73; + = 74; + = 75; + = 76; + = 95; + = 96; + + = 107; + // = 107; + = 78; + = 127; + // = 419; + + = 118; + = 110; + = 112; + = 119; + = 115; + = 117; + + = 111; + = 113; + = 116; + = 114; + + = 77; + = 106; + = 63; + = 82; + + = 79; + = 80; + = 81; + = 86; + + = 83; + = 84; + = 85; + + = 87; + = 88; + = 89; + = 104; + + = 90; + = 91; + = 125; + + = 191; + = 192; + = 193; + = 194; + = 195; + = 196; + = 197; + = 198; + = 199; + = 200; + = 201; + = 202; + + // Keys that are generated on Japanese keyboards + + // = 93; // Hankaku/Zenkakau toggle - not actually used + alias = ; + = 101; // Hiragana/Katakana toggle + = 97; // backslash/underscore + = 100; // Henkan + = 102; // Muhenkan + = 132; // Yen + = 98; // Katakana + = 99; // Hiragana + = 103; // KPJPComma + // = 97; // Romaji + + // Keys that are generated on Korean keyboards + + = 130; // Hangul Latin toggle + = 131; // Hangul to Hanja conversion + + // Solaris compatibility + + alias = ; + alias = ; + = 121; + = 122; + = 123; + = 124; + = 136; + = 137; + = 138; + = 139; + = 140; + = 141; + = 142; + = 143; + = 144; + = 145; + = 146; + + // Extended keys that may be generated on "Internet" keyboards. + // evdev has standardize names for these. + + = 109; // #define KEY_LINEFEED 101 + = 120; // #define KEY_MACRO 112 + = 126; // #define KEY_KPPLUSMINUS 118 + = 128; // #define KEY_SCALE 120 + = 129; // #define KEY_KPCOMMA 121 + = 147; // #define KEY_MENU 139 + = 148; // #define KEY_CALC 140 + = 149; // #define KEY_SETUP 141 + = 150; // #define KEY_SLEEP 142 + = 151; // #define KEY_WAKEUP 143 + = 152; // #define KEY_FILE 144 + = 153; // #define KEY_SENDFILE 145 + = 154; // #define KEY_DELETEFILE 146 + = 155; // #define KEY_XFER 147 + = 156; // #define KEY_PROG1 148 + = 157; // #define KEY_PROG2 149 + = 158; // #define KEY_WWW 150 + = 159; // #define KEY_MSDOS 151 + = 160; // #define KEY_COFFEE 152 + = 161; // #define KEY_DIRECTION 153 + = 162; // #define KEY_CYCLEWINDOWS 154 + = 163; // #define KEY_MAIL 155 + = 164; // #define KEY_BOOKMARKS 156 + = 165; // #define KEY_COMPUTER 157 + = 166; // #define KEY_BACK 158 + = 167; // #define KEY_FORWARD 159 + = 168; // #define KEY_CLOSECD 160 + = 169; // #define KEY_EJECTCD 161 + = 170; // #define KEY_EJECTCLOSECD 162 + = 171; // #define KEY_NEXTSONG 163 + = 172; // #define KEY_PLAYPAUSE 164 + = 173; // #define KEY_PREVIOUSSONG 165 + = 174; // #define KEY_STOPCD 166 + = 175; // #define KEY_RECORD 167 + = 176; // #define KEY_REWIND 168 + = 177; // #define KEY_PHONE 169 + = 178; // #define KEY_ISO 170 + = 179; // #define KEY_CONFIG 171 + = 180; // #define KEY_HOMEPAGE 172 + = 181; // #define KEY_REFRESH 173 + = 182; // #define KEY_EXIT 174 + = 183; // #define KEY_MOVE 175 + = 184; // #define KEY_EDIT 176 + = 185; // #define KEY_SCROLLUP 177 + = 186; // #define KEY_SCROLLDOWN 178 + = 187; // #define KEY_KPLEFTPAREN 179 + = 188; // #define KEY_KPRIGHTPAREN 180 + = 189; // #define KEY_NEW 181 + = 190; // #define KEY_REDO 182 + = 208; // #define KEY_PLAYCD 200 + = 209; // #define KEY_PAUSECD 201 + = 210; // #define KEY_PROG3 202 + = 211; // #define KEY_PROG4 203 conflicts with AB11 + = 212; // #define KEY_DASHBOARD 204 + = 213; // #define KEY_SUSPEND 205 + = 214; // #define KEY_CLOSE 206 + = 215; // #define KEY_PLAY 207 + = 216; // #define KEY_FASTFORWARD 208 + = 217; // #define KEY_BASSBOOST 209 + = 218; // #define KEY_PRINT 210 + = 219; // #define KEY_HP 211 + = 220; // #define KEY_CAMERA 212 + = 221; // #define KEY_SOUND 213 + = 222; // #define KEY_QUESTION 214 + = 223; // #define KEY_EMAIL 215 + = 224; // #define KEY_CHAT 216 + = 225; // #define KEY_SEARCH 217 + = 226; // #define KEY_CONNECT 218 + = 227; // #define KEY_FINANCE 219 + = 228; // #define KEY_SPORT 220 + = 229; // #define KEY_SHOP 221 + = 230; // #define KEY_ALTERASE 222 + = 231; // #define KEY_CANCEL 223 + = 232; // #define KEY_BRIGHTNESSDOWN 224 + = 233; // #define KEY_BRIGHTNESSUP 225 + = 234; // #define KEY_MEDIA 226 + = 235; // #define KEY_SWITCHVIDEOMODE 227 + = 236; // #define KEY_KBDILLUMTOGGLE 228 + = 237; // #define KEY_KBDILLUMDOWN 229 + = 238; // #define KEY_KBDILLUMUP 230 + = 239; // #define KEY_SEND 231 + = 240; // #define KEY_REPLY 232 + = 241; // #define KEY_FORWARDMAIL 233 + = 242; // #define KEY_SAVE 234 + = 243; // #define KEY_DOCUMENTS 235 + = 244; // #define KEY_BATTERY 236 + = 245; // #define KEY_BLUETOOTH 237 + = 246; // #define KEY_WLAN 238 + = 247; // #define KEY_UWB 239 + = 248; // #define KEY_UNKNOWN 240 + = 249; // #define KEY_VIDEO_NEXT 241 + = 250; // #define KEY_VIDEO_PREV 242 + = 251; // #define KEY_BRIGHTNESS_CYCLE 243 + = 252; // #define KEY_BRIGHTNESS_ZERO 244 + = 253; // #define KEY_DISPLAY_OFF 245 + + // Fake keycodes for virtual keys + = 92; + = 203; + = 204; + = 205; + = 206; + = 207; + + indicator 1 = "Caps Lock"; + indicator 2 = "Num Lock"; + indicator 3 = "Scroll Lock"; + indicator 4 = "Compose"; + indicator 5 = "Kana"; + indicator 6 = "Sleep"; + indicator 7 = "Suspend"; + indicator 8 = "Mute"; + indicator 9 = "Misc"; + indicator 10 = "Mail"; + indicator 11 = "Charging"; + + alias = ; + + // For Brazilian ABNT2 + alias = ; +}; + +// PC98 +xkb_keycodes "pc98" { + include "evdev(evdev)" +}; diff --git a/test/data/keymaps/basic.xkb b/test/data/keymaps/basic.xkb index 4b06836..654aed6 100644 --- a/test/data/keymaps/basic.xkb +++ b/test/data/keymaps/basic.xkb @@ -1,5 +1,5 @@ xkb_keymap { - xkb_keycodes { include "xfree86+aliases(qwerty)" }; + xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc+us" }; diff --git a/test/data/keymaps/default.xkb b/test/data/keymaps/default.xkb index 6606fc1..c40ceb9 100644 --- a/test/data/keymaps/default.xkb +++ b/test/data/keymaps/default.xkb @@ -1,5 +1,5 @@ xkb_keymap { - xkb_keycodes { include "xfree86+aliases(qwerty)" }; + xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc+us" }; @@ -7,7 +7,7 @@ xkb_keymap { }; default xkb_keymap { - xkb_keycodes { include "xfree86+aliases(qwertz)" }; + xkb_keycodes { include "evdev+aliases(qwertz)" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc+de" }; diff --git a/test/data/rules/evdev b/test/data/rules/evdev new file mode 100644 index 0000000..874dce2 --- /dev/null +++ b/test/data/rules/evdev @@ -0,0 +1,1098 @@ +// DO NOT EDIT THIS FILE - IT WAS AUTOGENERATED BY merge.sh FROM rules/*.part +// +// Rules for resolving XKB components for use with XFree86 +// Copyright 1996 by Joseph Moss +// +// 2002 Modifier: Ivan Pascal The XFree86 Project +// + +// If you want non-latin layouts implicitly include the en_US layout +// uncomment lines below +//! $nonlatin = am ara ben bd bg bt by cs deva ge gh gr guj guru il \ +// in ir iku jp kan kh kr la lao lk mk mm mn mv mal ori pk \ +// ru scc sy syr tel th tj tam ua uz + +// PC models +! $pcmodels = pc101 pc102 pc104 pc105 + +// Microsoft models (using MS geometry) +! $msmodels = microsoft microsoft4000 microsoft7000 microsoftpro microsoftprousb microsoftprose + +// Nokia devices and keyboards +! $nokiamodels = nokiasu8w nokiarx44 nokiarx51 + +// PC geometries - they have special geometry but symbols are mostly pc105 +! $pcgeometries = latitude + +// TypeMatrix geometries +! $tmgeometries = tm2020 tm2030PS2 tm2030USB tm2030USB-102 tm2030USB-106 + +// Layouts that provide further specializations for the OLPC +! $olpclayouts = af am ara br ca es et fr it kh kz in mn np ru th tr us + +! $macbooks = macbook78 macbook79 +! $maclaptop = ibook powerbook macbook78 macbook79 +! $applealu = applealu_ansi applealu_iso applealu_jis +! $macs = macintosh macintosh_old ibook powerbook macbook78 macbook79 + +! $macvendorlayouts = ch de dk fi fr gb is it latam nl no pt se us + +! $azerty = be fr +! $qwertz = al cz de hr hu ro si sk + +! $inetkbds = acer_c300 acer_ferrari4k acer_laptop \ + airkey \ + apple armada azonaRF2300 \ + benqx brother \ + btc5113rf btc9000 btc9000a btc9001ah btc5090 btc9019u \ + cherryblue cherrybluea cherryblueb \ + cherrycyboard cherrycmexpert \ + chicony chicony0108 chicony0420 chicony9885 \ + compalfl90 \ + compaqeak8 compaqik7 compaqik13 compaqik18 \ + creativedw7000 \ + cymotionlinux \ + dell dellm65 inspiron dellusbmm \ + emachines ennyah_dkb1008 evdev \ + genius geniuscomfy2 \ + gyration honeywell_euroboard \ + hp250x hp5xx hp500fa hpdv5 \ + hpi6 hpxe3gc hpxe3gf hpxe4xxx hpxt1000 hpzt11xx htcdream \ + ibm_spacesaver ipaq inspiron intel \ + logiaccess logicda logicink \ + logiex110 logiclx300 \ + logiinkse logiinkseusb logiitc logiik \ + logitech_base itouch logiultrax \ + logitech_g15 \ + logidinovo logidinovoedge \ + microsoft4000 microsoft7000 microsoftinet microsoftprousb microsoftprooem microsoftprose \ + microsoftoffice microsoftmult \ + mx1998 mx2500 mx2750 \ + oretec \ + pc105 \ + presario propeller \ + qtronix \ + rapidaccess rapidaccess2 thinkpad60 \ + samsung4500 samsung4510 \ + silvercrest \ + sk1300 sk2500 sk6200 sk7100 \ + sven sven303 symplon \ + toshiba_s3000 trust trustda \ + unitekkb1925 yahoo + +// all layouts with 3rd and 4th groups +! $threelevellayouts = al az \ + be br bt \ + ca ch cs cz \ + de dk \ + ee es \ + fi fo fr \ + gb gr \ + hu \ + ie ir is it \ + latam \ + lk lt \ + mn mt \ + nl no \ + pl pt \ + ro \ + se sk \ + tr \ + us \ + vn \ + za + +! $evdevkbds = ibm_spacesaver + +! $thinkpads = thinkpad thinkpad60 thinkpadz60 + +! $sun_t6_custom = ara be br ca ch cz de dk \ + ee es fi fr gb gr it kr \ + lt lv nl no pl pt ro ru \ + se sk tr tw ua + +! $htcdreamlayouts = us it de + +! $dvoraklayouts = br ca de ee es fr gb no pl se us + +! model = keycodes + pc98 = evdev(pc98) + applealu_jis = evdev+macintosh(jisevdev) + * = evdev + +! layout[1] = keycodes + $azerty = +aliases(azerty) + $qwertz = +aliases(qwertz) + * = +aliases(qwerty) + +! layout = keycodes + $azerty = +aliases(azerty) + $qwertz = +aliases(qwertz) + * = +aliases(qwerty) + +! option = keycodes + apple:badmap = +macintosh(badmap) + apple:goodmap = +macintosh(goodmap) + +! model layout = geometry + thinkpad us = thinkpad(us) + +! model = geometry + microsoftelite = microsoft(elite) + $msmodels = microsoft(natural) + dell101 = dell(dell101) + dellm65 = dell(dellm65) + latitude = dell(latitude) + flexpro = keytronic(FlexPro) + hp6000 = hp(omnibook) + hpmini110 = hp(mini110) + hpdv5 = hp(dv5) + omnikey101 = northgate(omnikey101) + sanwaskbkg3 = sanwa(sanwaskbkg3) + $pcmodels = pc(%m) + $pcgeometries = pc(%m) + everex = everex(STEPnote) + thinkpad = thinkpad(intl) + thinkpad60 = thinkpad(60) + thinkpadz60 = thinkpad(60) + $tmgeometries = typematrix(%m) + winbook = winbook(XP5) + pc98 = nec(pc98) + $applealu = macintosh(%m) + $macbooks = macintosh(%m) + $macs = macintosh(macintosh) + hhk = hhk(basic) + kinesis = kinesis(model100) + $nokiamodels = nokia(%m) + * = pc(pc104) + +! model layout variant = symbols + * ben basic = pc+in(ben) + * ben probhat = pc+in(ben_probhat) + * dev basic = pc+in(deva) + * dvorak $dvoraklayouts = pc+%v(dvorak) + * dvorak basic = pc+us(dvorak) + * dvorak pl_basic = pc+pl(dvorak) + * dvorak pl = pc+pl(dvorak_quotes) + * dvorak pl_altquotes = pc+pl(dvorak_altquotes) + * dzdwi basic = pc+bt(basic) + * fi basic = pc+fi(classic) + * ge azerty_tskapo = pc+fr(geo) + * guj basic = pc+in(guj) + * gur basic = pc+in(guru) + * ie laptop = pc+ie(basic) + * ie CloGaelachLaptop = pc+ie(CloGaelach) + * in urd = pc+in(urd-phonetic) + * iu basic = pc+ca(ike) + * lo basic = pc+la(basic) + * kan basic = pc+in(kan) + * mal basic = pc+in(mal) + * mal mlplusnum = pc+in(mal) + * ogham basic = pc+ie(ogam) + * ogham laptop = pc+ie(ogam) + * ogham is434 = pc+ie(ogam_is434) + * ogham is434laptop = pc+ie(ogam_is434) + * ori basic = pc+in(ori) + * ro de = pc+ro(winkeys) + * ro us = pc+ro(std) + * ro academic = pc+ro(std) + * ro std_comma = pc+ro(std) + * ro comma = pc+ro(basic) + * ru os = pc+ru(os_legacy) + * pk urd = pc+pk(urd-phonetic) + * sapmi basic = pc+no(smi) + * sapmi nodeadkeys = pc+no(smi_nodeadkeys) + * sapmi sefi = pc+fi(smi) + * sin phonetic-static = pc+in(sin_phonetic) + * syr basic = pc+sy(syc) + * syr phonetic = pc+sy(syc_phonetic) + * tam INSCRIPT = pc+in(tam) + * tam UNI = pc+in(tam_unicode) + * tam NUMERAL-KEYBOARD = pc+in(tam_keyboard_with_numerals) + * tam TAB = pc+in(tam_TAB) + * tam TSCII = pc+in(tam_TSCII) + * tel basic = pc+in(tel) + * yu basic = pc+srp(latin) + * yu unicode = pc+srp(latinunicode) + * yu yz = pc+srp(latinyz) + * yu unicodeyz = pc+srp(latinunicodeyz) + classmate us intl = pc+us(classmate-intl) + classmate us alt-intl = pc+us(classmate-alt-intl) + classmate us altgr-intl = pc+us(classmate-altgr-intl) + nokiarx51 cz qwerty = nokia_vndr/rx-51(cz_qwerty) + +! model layout = symbols + * ar = pc+ara + * ben = pc+in(ben) + * bs = pc+ba + * cs = pc+rs + * cz_qwerty = pc+cz(qwerty) + * dev = pc+in(deva) + * dvorak = pc+us(dvorak) + * dzdwi = pc+bt + * el = pc+gr + * en_US = pc+latin + * guj = pc+in(guj) + * gur = pc+in(guru) + * iu = pc+ca(ike) + * lo = pc+la + * kan = pc+in(kan) + * mi = pc+mao + * ml = pc+in(mal) + * ogham = pc+ie(ogam) + * ori = pc+ie(ori) + * sapmi = pc+no(smi) + * sr = pc+srp + * syr = pc+sy(syc) + * tel = pc+in(tel) + * tml = pc+in(tam) + * yu = pc+srp + * fr-latin9 = pc+fr(latin9) + * us_intl = pc+us(alt-intl) + * ben(basic) = pc+in(ben) + * ben(probhat) = pc+in(ben_probhat) + * dev(basic) = pc+in(deva) + * dvorak($dvoraklayouts) = pc+%v(dvorak) + * dvorak(basic) = pc+us(dvorak) + * dvorak(pl_basic) = pc+pl(dvorak) + * dvorak(pl) = pc+pl(dvorak_quotes) + * dvorak(pl_altquotes) = pc+pl(dvorak_altquotes) + * dzdwi(basic) = pc+bt(basic) + * fi(basic) = pc+fi(classic) + * ge(azerty_tskapo) = pc+fr(geo) + * guj(basic) = pc+in(guj) + * gur(basic) = pc+in(guru) + * ie(laptop) = pc+ie(basic) + * ie(CloGaelachLaptop) = pc+ie(CloGaelach) + * in(urd) = pc+in(urd-phonetic) + * iu(basic) = pc+ca(ike) + * lo(basic) = pc+la(basic) + * kan(basic) = pc+in(kan) + * mal(basic) = pc+in(mal) + * mal(mlplusnum) = pc+in(mal) + * ogham(basic) = pc+ie(ogam) + * ogham(laptop) = pc+ie(ogam) + * ogham(is434) = pc+ie(ogam_is434) + * ogham(is434laptop) = pc+ie(ogam_is434) + * ori(basic) = pc+in(ori) + * ro(de) = pc+ro(winkeys) + * ro(us) = pc+ro(std) + * ro(academic) = pc+ro(std) + * ro(std_comma) = pc+ro(std) + * ro(comma) = pc+ro(basic) + * ru(os) = pc+ru(os_legacy) + * pk(urd) = pc+pk(urd-phonetic) + * sapmi(basic) = pc+no(smi) + * sapmi(nodeadkeys) = pc+no(smi_nodeadkeys) + * sapmi(sefi) = pc+fi(smi) + * sin(phonetic-static) = pc+in(sin_phonetic) + * syr(basic) = pc+sy(syc) + * syr(phonetic) = pc+sy(syc_phonetic) + * tam(INSCRIPT) = pc+in(tam) + * tam(UNI) = pc+in(tam_unicode) + * tam(NUMERAL-KEYBOARD) = pc+in(tam_keyboard_with_numerals) + * tam(TAB) = pc+in(tam_TAB) + * tam(TSCII) = pc+in(tam_TSCII) + * tel(basic) = pc+in(tel) + * yu(basic) = pc+srp(latin) + * yu(unicode) = pc+srp(latinunicode) + * yu(yz) = pc+srp(latinyz) + * yu(unicodeyz) = pc+srp(latinunicodeyz) + ataritt $nonlatin = xfree68_vndr/ataritt(us)+%l%(v):2 + ataritt * = xfree68_vndr/ataritt(us)+%l%(v) + amiga $nonlatin = xfree68_vndr/amiga(usa1)+%l%(v):2 + amiga * = xfree68_vndr/amiga(usa1)+%l%(v) + classmate us = pc+%l(classmate) + empty * = empty(basic) + * empty = empty(basic) + sun4 $nonlatin = latin+sun_vndr/us(type4)+%l%(v):2 + sun4 * = latin+sun_vndr/us(type4)+%l%(v) + sun5 $nonlatin = latin+sun_vndr/us(type5)+%l%(v):2 + sun5 * = latin+sun_vndr/us(type5)+%l%(v) + sun6 us = pc+sun_vndr/us(type6) + sun6 en_US = pc+sun_vndr/us(type6)+iso9995-3(basic) + sun6 $sun_t6_custom = pc+sun_vndr/us(type6)+sun_vndr/%l%(v) + sun6 * = pc+sun_vndr/us(type6)+%l%(v) + sun6euro us = pc+sun_vndr/us(type6) + sun6euro en_US = pc+sun_vndr/us(type6)+iso9995-3(basic) + sun6euro $sun_t6_custom = pc+sun_vndr/us(type6)+sun_vndr/%l%(v) + sun6euro * = pc+sun_vndr/us(type6)+%l%(v) + pc98 nec_vndr/jp = nec_vndr/jp(pc98) + macintosh_old us = macintosh_vndr/us(oldmac) + macintosh_old en_US = macintosh_vndr/us(oldmac) + macintosh_old $macvendorlayouts = macintosh_vndr/us(oldmac)+macintosh_vndr/%l%(v) + macintosh_old $nonlatin = macintosh_vndr/us(oldmac)+%l%(v):2 + macintosh_old * = macintosh_vndr/us(oldmac)+%l%(v) + applealu_jis jp = macintosh_vndr/apple(alukbd)+macintosh_vndr/jp(usmac)+macintosh_vndr/jp(mac):2 + applealu_jis * = macintosh_vndr/apple(alukbd)+%l%(v)+macintosh_vndr/jp(mac):2 + $applealu $macvendorlayouts = macintosh_vndr/apple(alukbd)+macintosh_vndr/%l%(v) + $applealu * = macintosh_vndr/apple(alukbd)+%l%(v) + $macs en_US = pc+macintosh_vndr/us(extended) + $macs $macvendorlayouts = pc+macintosh_vndr/%l%(v) + nokiarx44 * = nokia_vndr/rx-44(%l) + nokiarx51 cz(qwerty) = nokia_vndr/rx-51(common)+nokia_vndr/rx-51(cz_qwerty) + nokiarx51 * = nokia_vndr/rx-51(common)+nokia_vndr/rx-51(%l%_v) + nokiasu8w * = nokia_vndr/su-8w(%l) + olpc $olpclayouts = olpc+%l%(m) + olpc * = olpc+%l%(v) + $thinkpads br = pc+br(thinkpad) + htcdream $htcdreamlayouts = %l(htcdream) + * $nonlatin = pc+us+%l%(v):2 + * * = pc+%l%(v) + +! model layout[1] = symbols + * ar = pc+ara%(v[1]) + * ben = pc+in(ben) + * bs = pc+ba%(v[1]) + * cs = pc+rs%(v[1]) + * cz_qwerty = pc+cz(qwerty) + * dev = pc+in(deva) + * dvorak = pc+us(dvorak) + * dzdwi = pc+bt%(v[1]) + * el = pc+gr%(v[1]) + * en_US = pc+latin%(v[1]) + * guj = pc+in(guj) + * gur = pc+in(guru) + * iu = pc+ca(ike) + * lo = pc+la%(v[1]) + * kan = pc+in(kan) + * mi = pc+mao%(v[1]) + * ml = pc+in(mal) + * ogham = pc+ie(ogam) + * ori = pc+ie(ori) + * sapmi = pc+no(smi) + * sr = pc+srp%(v[1]) + * syr = pc+sy(syc) + * tel = pc+in(tel) + * tml = pc+in(tam) + * yu = pc+srp%(v[1]) + * fr-latin9 = pc+fr(latin9) + * us_intl = pc+us(alt-intl) + * ben(basic) = pc+in(ben) + * ben(probhat) = pc+in(ben_probhat) + * dev(basic) = pc+in(deva) + * dvorak($dvoraklayouts) = pc+%v(dvorak) + * dvorak(basic) = pc+us(dvorak) + * dvorak(pl_basic) = pc+pl(dvorak) + * dvorak(pl) = pc+pl(dvorak_quotes) + * dvorak(pl_altquotes) = pc+pl(dvorak_altquotes) + * dzdwi(basic) = pc+bt(basic) + * fi(basic) = pc+fi(classic) + * ge(azerty_tskapo) = pc+fr(geo) + * guj(basic) = pc+in(guj) + * gur(basic) = pc+in(guru) + * ie(laptop) = pc+ie(basic) + * ie(CloGaelachLaptop) = pc+ie(CloGaelach) + * in(urd) = pc+in(urd-phonetic) + * iu(basic) = pc+ca(ike) + * lo(basic) = pc+la(basic) + * kan(basic) = pc+in(kan) + * mal(basic) = pc+in(mal) + * mal(mlplusnum) = pc+in(mal) + * ogham(basic) = pc+ie(ogam) + * ogham(laptop) = pc+ie(ogam) + * ogham(is434) = pc+ie(ogam_is434) + * ogham(is434laptop) = pc+ie(ogam_is434) + * ori(basic) = pc+in(ori) + * ro(de) = pc+ro(winkeys) + * ro(us) = pc+ro(std) + * ro(academic) = pc+ro(std) + * ro(std_comma) = pc+ro(std) + * ro(comma) = pc+ro(basic) + * ru(os) = pc+ru(os_legacy) + * pk(urd) = pc+pk(urd-phonetic) + * sapmi(basic) = pc+no(smi) + * sapmi(nodeadkeys) = pc+no(smi_nodeadkeys) + * sapmi(sefi) = pc+fi(smi) + * sin(phonetic-static) = pc+in(sin_phonetic) + * syr(basic) = pc+sy(syc) + * syr(phonetic) = pc+sy(syc_phonetic) + * tam(INSCRIPT) = pc+in(tam) + * tam(UNI) = pc+in(tam_unicode) + * tam(NUMERAL-KEYBOARD) = pc+in(tam_keyboard_with_numerals) + * tam(TAB) = pc+in(tam_TAB) + * tam(TSCII) = pc+in(tam_TSCII) + * tel(basic) = pc+in(tel) + * yu(basic) = pc+srp(latin) + * yu(unicode) = pc+srp(latinunicode) + * yu(yz) = pc+srp(latinyz) + * yu(unicodeyz) = pc+srp(latinunicodeyz) + ataritt * = xfree68_vndr/ataritt(us)+%l[1]%(v[1]) + amiga * = xfree68_vndr/amiga(usa1)+%l[1]%(v[1]) + sun4 * = latin+sun_vndr/us(type4)+%l[1]%(v[1]) + sun5 * = latin+sun_vndr/us(type5)+%l[1]%(v[1]) + macintosh_old us = macintosh_vndr/us(oldmac) + macintosh_old $macvendorlayouts = macintosh_vndr/us(oldmac)+macintosh_vndr/%l[1]%(v[1]) + macintosh_old * = macintosh_vndr/us(oldmac)+%l[1]%(v[1]) + applealu_jis us = macintosh_vndr/apple(alukbd)+macintosh_vndr/jp(usmac) + $applealu $macvendorlayouts = macintosh_vndr/apple(alukbd)+macintosh_vndr/%l[1]%(v[1]) + $applealu * = macintosh_vndr/apple(alukbd)+%l[1]%(v[1]) + $macs $macvendorlayouts = pc+macintosh_vndr/%l[1]%(v[1]) + nokiarx51 cz(qwerty) = nokia_vndr/rx-51(common)+nokia_vndr/rx-51(cz_qwerty) + nokiarx51 * = nokia_vndr/rx-51(common)+nokia_vndr/rx-51(%l[1]%_v[1]) + $thinkpads br = pc+%l[1](thinkpad) + * * = pc+%l[1]%(v[1]) + +! model layout[1] variant[1] = symbols + * ben basic = pc+in(ben) + * ben probhat = pc+in(ben_probhat) + * dev basic = pc+in(deva) + * dvorak $dvoraklayouts = pc+%v(dvorak) + * dvorak basic = pc+us(dvorak) + * dvorak pl_basic = pc+pl(dvorak) + * dvorak pl = pc+pl(dvorak_quotes) + * dvorak pl_altquotes = pc+pl(dvorak_altquotes) + * dzdwi basic = pc+bt(basic) + * fi basic = pc+fi(classic) + * ge azerty_tskapo = pc+fr(geo) + * guj basic = pc+in(guj) + * gur basic = pc+in(guru) + * ie laptop = pc+ie(basic) + * ie CloGaelachLaptop = pc+ie(CloGaelach) + * in urd = pc+in(urd-phonetic) + * iu basic = pc+ca(ike) + * lo basic = pc+la(basic) + * kan basic = pc+in(kan) + * mal basic = pc+in(mal) + * mal mlplusnum = pc+in(mal) + * ogham basic = pc+ie(ogam) + * ogham laptop = pc+ie(ogam) + * ogham is434 = pc+ie(ogam_is434) + * ogham is434laptop = pc+ie(ogam_is434) + * ori basic = pc+in(ori) + * ro de = pc+ro(winkeys) + * ro us = pc+ro(std) + * ro academic = pc+ro(std) + * ro std_comma = pc+ro(std) + * ro comma = pc+ro(basic) + * ru os = pc+ru(os_legacy) + * pk urd = pc+pk(urd-phonetic) + * sapmi basic = pc+no(smi) + * sapmi nodeadkeys = pc+no(smi_nodeadkeys) + * sapmi sefi = pc+fi(smi) + * sin phonetic-static = pc+in(sin_phonetic) + * syr basic = pc+sy(syc) + * syr phonetic = pc+sy(syc_phonetic) + * tam INSCRIPT = pc+in(tam) + * tam UNI = pc+in(tam_unicode) + * tam NUMERAL-KEYBOARD = pc+in(tam_keyboard_with_numerals) + * tam TAB = pc+in(tam_TAB) + * tam TSCII = pc+in(tam_TSCII) + * tel basic = pc+in(tel) + * yu basic = pc+srp(latin) + * yu unicode = pc+srp(latinunicode) + * yu yz = pc+srp(latinyz) + * yu unicodeyz = pc+srp(latinunicodeyz) + +! model layout[2] = symbols + * ar = +ara%(v[2]):2 + * ben = +in(ben):2 + * bs = +ba%(v[2]):2 + * cs = +rs%(v[2]):2 + * cz_qwerty = +cz(qwerty):2 + * dev = +in(deva):2 + * dvorak = +us(dvorak):2 + * dzdwi = +bt%(v[2]):2 + * el = +gr%(v[2]):2 + * en_US = +latin%(v[2]):2 + * guj = +in(guj):2 + * gur = +in(guru):2 + * iu = +ca(ike):2 + * lo = +la%(v[2]):2 + * kan = +in(kan):2 + * mi = +mao%(v[2]):2 + * ml = +in(mal):2 + * ogham = +ie(ogam):2 + * ori = +ie(ori):2 + * sapmi = +no(smi):2 + * sr = +srp%(v[2]):2 + * syr = +sy(syc):2 + * tel = +in(tel):2 + * tml = +in(tam):2 + * yu = +srp%(v[2]):2 + * fr-latin9 = +fr(latin9):2 + * us_intl = +us(alt-intl):2 + * ben(basic) = +in(ben):2 + * ben(probhat) = +in(ben_probhat):2 + * dev(basic) = +in(deva):2 + * dvorak($dvoraklayouts) = +%v(dvorak):2 + * dvorak(basic) = +us(dvorak):2 + * dvorak(pl_basic) = +pl(dvorak):2 + * dvorak(pl) = +pl(dvorak_quotes):2 + * dvorak(pl_altquotes) = +pl(dvorak_altquotes):2 + * dzdwi(basic) = +bt(basic):2 + * fi(basic) = +fi(classic):2 + * ge(azerty_tskapo) = +fr(geo):2 + * guj(basic) = +in(guj):2 + * gur(basic) = +in(guru):2 + * ie(laptop) = +ie(basic):2 + * ie(CloGaelachLaptop) = +ie(CloGaelach):2 + * in(urd) = +in(urd-phonetic):2 + * iu(basic) = +ca(ike):2 + * lo(basic) = +la(basic):2 + * kan(basic) = +in(kan):2 + * mal(basic) = +in(mal):2 + * mal(mlplusnum) = +in(mal):2 + * ogham(basic) = +ie(ogam):2 + * ogham(laptop) = +ie(ogam):2 + * ogham(is434) = +ie(ogam_is434):2 + * ogham(is434laptop) = +ie(ogam_is434):2 + * ori(basic) = +in(ori):2 + * ro(de) = +ro(winkeys):2 + * ro(us) = +ro(std):2 + * ro(academic) = +ro(std):2 + * ro(std_comma) = +ro(std):2 + * ro(comma) = +ro(basic):2 + * ru(os) = +ru(os_legacy):2 + * pk(urd) = +pk(urd-phonetic):2 + * sapmi(basic) = +no(smi):2 + * sapmi(nodeadkeys) = +no(smi_nodeadkeys):2 + * sapmi(sefi) = +fi(smi):2 + * sin(phonetic-static) = +in(sin_phonetic):2 + * syr(basic) = +sy(syc):2 + * syr(phonetic) = +sy(syc_phonetic):2 + * tam(INSCRIPT) = +in(tam):2 + * tam(UNI) = +in(tam_unicode):2 + * tam(NUMERAL-KEYBOARD) = +in(tam_keyboard_with_numerals):2 + * tam(TAB) = +in(tam_TAB):2 + * tam(TSCII) = +in(tam_TSCII):2 + * tel(basic) = +in(tel):2 + * yu(basic) = +srp(latin):2 + * yu(unicode) = +srp(latinunicode):2 + * yu(yz) = +srp(latinyz):2 + * yu(unicodeyz) = +srp(latinunicodeyz):2 + nokiarx51 cz(qwerty) = +nokia_vndr/rx-51(cz_qwerty):2 + nokiarx51 * = +nokia_vndr/rx-51(%l[2]%_v[2]):2 + * * = +%l[2]%(v[2]):2 + +! model layout[3] = symbols + * ar = +ara%(v[3]):3 + * ben = +in(ben):3 + * bs = +ba%(v[3]):3 + * cs = +rs%(v[3]):3 + * cz_qwerty = +cz(qwerty):3 + * dev = +in(deva):3 + * dvorak = +us(dvorak):3 + * dzdwi = +bt%(v[3]):3 + * el = +gr%(v[3]):3 + * en_US = +latin%(v[3]):3 + * guj = +in(guj):3 + * gur = +in(guru):3 + * iu = +ca(ike):3 + * lo = +la%(v[3]):3 + * kan = +in(kan):3 + * mi = +mao%(v[3]):3 + * ml = +in(mal):3 + * ogham = +ie(ogam):3 + * ori = +ie(ori):3 + * sapmi = +no(smi):3 + * sr = +srp%(v[3]):3 + * syr = +sy(syc):3 + * tel = +in(tel):3 + * tml = +in(tam):3 + * yu = +srp%(v[3]):3 + * fr-latin9 = +fr(latin9):3 + * us_intl = +us(alt-intl):3 + * ben(basic) = +in(ben):3 + * ben(probhat) = +in(ben_probhat):3 + * dev(basic) = +in(deva):3 + * dvorak($dvoraklayouts) = +%v(dvorak):3 + * dvorak(basic) = +us(dvorak):3 + * dvorak(pl_basic) = +pl(dvorak):3 + * dvorak(pl) = +pl(dvorak_quotes):3 + * dvorak(pl_altquotes) = +pl(dvorak_altquotes):3 + * dzdwi(basic) = +bt(basic):3 + * fi(basic) = +fi(classic):3 + * ge(azerty_tskapo) = +fr(geo):3 + * guj(basic) = +in(guj):3 + * gur(basic) = +in(guru):3 + * ie(laptop) = +ie(basic):3 + * ie(CloGaelachLaptop) = +ie(CloGaelach):3 + * in(urd) = +in(urd-phonetic):3 + * iu(basic) = +ca(ike):3 + * lo(basic) = +la(basic):3 + * kan(basic) = +in(kan):3 + * mal(basic) = +in(mal):3 + * mal(mlplusnum) = +in(mal):3 + * ogham(basic) = +ie(ogam):3 + * ogham(laptop) = +ie(ogam):3 + * ogham(is434) = +ie(ogam_is434):3 + * ogham(is434laptop) = +ie(ogam_is434):3 + * ori(basic) = +in(ori):3 + * ro(de) = +ro(winkeys):3 + * ro(us) = +ro(std):3 + * ro(academic) = +ro(std):3 + * ro(std_comma) = +ro(std):3 + * ro(comma) = +ro(basic):3 + * ru(os) = +ru(os_legacy):3 + * pk(urd) = +pk(urd-phonetic):3 + * sapmi(basic) = +no(smi):3 + * sapmi(nodeadkeys) = +no(smi_nodeadkeys):3 + * sapmi(sefi) = +fi(smi):3 + * sin(phonetic-static) = +in(sin_phonetic):3 + * syr(basic) = +sy(syc):3 + * syr(phonetic) = +sy(syc_phonetic):3 + * tam(INSCRIPT) = +in(tam):3 + * tam(UNI) = +in(tam_unicode):3 + * tam(NUMERAL-KEYBOARD) = +in(tam_keyboard_with_numerals):3 + * tam(TAB) = +in(tam_TAB):3 + * tam(TSCII) = +in(tam_TSCII):3 + * tel(basic) = +in(tel):3 + * yu(basic) = +srp(latin):3 + * yu(unicode) = +srp(latinunicode):3 + * yu(yz) = +srp(latinyz):3 + * yu(unicodeyz) = +srp(latinunicodeyz):3 + nokiarx51 cz(qwerty) = +nokia_vndr/rx-51(cz_qwerty):3 + nokiarx51 * = +nokia_vndr/rx-51(%l[3]%_v[3]):3 + * * = +%l[3]%(v[3]):3 + +! model layout[4] = symbols + * ar = +ara%(v[4]):4 + * ben = +in(ben):4 + * bs = +ba%(v[4]):4 + * cs = +rs%(v[4]):4 + * cz_qwerty = +cz(qwerty):4 + * dev = +in(deva):4 + * dvorak = +us(dvorak):4 + * dzdwi = +bt%(v[4]):4 + * el = +gr%(v[4]):4 + * en_US = +latin%(v[4]):4 + * guj = +in(guj):4 + * gur = +in(guru):4 + * iu = +ca(ike):4 + * lo = +la%(v[4]):4 + * kan = +in(kan):4 + * mi = +mao%(v[4]):4 + * ml = +in(mal):4 + * ogham = +ie(ogam):4 + * ori = +ie(ori):4 + * sapmi = +no(smi):4 + * sr = +srp%(v[4]):4 + * syr = +sy(syc):4 + * tel = +in(tel):4 + * tml = +in(tam):4 + * yu = +srp%(v[4]):4 + * fr-latin9 = +fr(latin9):4 + * us_intl = +us(alt-intl):4 + * ben(basic) = +in(ben):4 + * ben(probhat) = +in(ben_probhat):4 + * dev(basic) = +in(deva):4 + * dvorak($dvoraklayouts) = +%v(dvorak):4 + * dvorak(basic) = +us(dvorak):4 + * dvorak(pl_basic) = +pl(dvorak):4 + * dvorak(pl) = +pl(dvorak_quotes):4 + * dvorak(pl_altquotes) = +pl(dvorak_altquotes):4 + * dzdwi(basic) = +bt(basic):4 + * fi(basic) = +fi(classic):4 + * ge(azerty_tskapo) = +fr(geo):4 + * guj(basic) = +in(guj):4 + * gur(basic) = +in(guru):4 + * ie(laptop) = +ie(basic):4 + * ie(CloGaelachLaptop) = +ie(CloGaelach):4 + * in(urd) = +in(urd-phonetic):4 + * iu(basic) = +ca(ike):4 + * lo(basic) = +la(basic):4 + * kan(basic) = +in(kan):4 + * mal(basic) = +in(mal):4 + * mal(mlplusnum) = +in(mal):4 + * ogham(basic) = +ie(ogam):4 + * ogham(laptop) = +ie(ogam):4 + * ogham(is434) = +ie(ogam_is434):4 + * ogham(is434laptop) = +ie(ogam_is434):4 + * ori(basic) = +in(ori):4 + * ro(de) = +ro(winkeys):4 + * ro(us) = +ro(std):4 + * ro(academic) = +ro(std):4 + * ro(std_comma) = +ro(std):4 + * ro(comma) = +ro(basic):4 + * ru(os) = +ru(os_legacy):4 + * pk(urd) = +pk(urd-phonetic):4 + * sapmi(basic) = +no(smi):4 + * sapmi(nodeadkeys) = +no(smi_nodeadkeys):4 + * sapmi(sefi) = +fi(smi):4 + * sin(phonetic-static) = +in(sin_phonetic):4 + * syr(basic) = +sy(syc):4 + * syr(phonetic) = +sy(syc_phonetic):4 + * tam(INSCRIPT) = +in(tam):4 + * tam(UNI) = +in(tam_unicode):4 + * tam(NUMERAL-KEYBOARD) = +in(tam_keyboard_with_numerals):4 + * tam(TAB) = +in(tam_TAB):4 + * tam(TSCII) = +in(tam_TSCII):4 + * tel(basic) = +in(tel):4 + * yu(basic) = +srp(latin):4 + * yu(unicode) = +srp(latinunicode):4 + * yu(yz) = +srp(latinyz):4 + * yu(unicodeyz) = +srp(latinunicodeyz):4 + nokiarx51 cz(qwerty) = +nokia_vndr/rx-51(cz_qwerty):4 + nokiarx51 * = +nokia_vndr/rx-51(%l[4]%_v[4]):4 + * * = +%l[4]%(v[4]):4 + +! model layout[2] variant[2] = symbols + * ben basic = +in(ben):2 + * ben probhat = +in(ben_probhat):2 + * dev basic = +in(deva):2 + * dvorak $dvoraklayouts = +%v(dvorak):2 + * dvorak basic = +us(dvorak):2 + * dvorak pl_basic = +pl(dvorak):2 + * dvorak pl = +pl(dvorak_quotes):2 + * dvorak pl_altquotes = +pl(dvorak_altquotes):2 + * dzdwi basic = +bt(basic):2 + * fi basic = +fi(classic):2 + * ge azerty_tskapo = +fr(geo):2 + * guj basic = +in(guj):2 + * gur basic = +in(guru):2 + * ie laptop = +ie(basic):2 + * ie CloGaelachLaptop = +ie(CloGaelach):2 + * in urd = +in(urd-phonetic):2 + * iu basic = +ca(ike):2 + * lo basic = +la(basic):2 + * kan basic = +in(kan):2 + * mal basic = +in(mal):2 + * mal mlplusnum = +in(mal):2 + * ogham basic = +ie(ogam):2 + * ogham laptop = +ie(ogam):2 + * ogham is434 = +ie(ogam_is434):2 + * ogham is434laptop = +ie(ogam_is434):2 + * ori basic = +in(ori):2 + * ro de = +ro(winkeys):2 + * ro us = +ro(std):2 + * ro academic = +ro(std):2 + * ro std_comma = +ro(std):2 + * ro comma = +ro(basic):2 + * ru os = +ru(os_legacy):2 + * pk urd = +pk(urd-phonetic):2 + * sapmi basic = +no(smi):2 + * sapmi nodeadkeys = +no(smi_nodeadkeys):2 + * sapmi sefi = +fi(smi):2 + * sin phonetic-static = +in(sin_phonetic):2 + * syr basic = +sy(syc):2 + * syr phonetic = +sy(syc_phonetic):2 + * tam INSCRIPT = +in(tam):2 + * tam UNI = +in(tam_unicode):2 + * tam NUMERAL-KEYBOARD = +in(tam_keyboard_with_numerals):2 + * tam TAB = +in(tam_TAB):2 + * tam TSCII = +in(tam_TSCII):2 + * tel basic = +in(tel):2 + * yu basic = +srp(latin):2 + * yu unicode = +srp(latinunicode):2 + * yu yz = +srp(latinyz):2 + * yu unicodeyz = +srp(latinunicodeyz):2 + +! model layout[3] variant[3] = symbols + * ben basic = +in(ben):3 + * ben probhat = +in(ben_probhat):3 + * dev basic = +in(deva):3 + * dvorak $dvoraklayouts = +%v(dvorak):3 + * dvorak basic = +us(dvorak):3 + * dvorak pl_basic = +pl(dvorak):3 + * dvorak pl = +pl(dvorak_quotes):3 + * dvorak pl_altquotes = +pl(dvorak_altquotes):3 + * dzdwi basic = +bt(basic):3 + * fi basic = +fi(classic):3 + * ge azerty_tskapo = +fr(geo):3 + * guj basic = +in(guj):3 + * gur basic = +in(guru):3 + * ie laptop = +ie(basic):3 + * ie CloGaelachLaptop = +ie(CloGaelach):3 + * in urd = +in(urd-phonetic):3 + * iu basic = +ca(ike):3 + * lo basic = +la(basic):3 + * kan basic = +in(kan):3 + * mal basic = +in(mal):3 + * mal mlplusnum = +in(mal):3 + * ogham basic = +ie(ogam):3 + * ogham laptop = +ie(ogam):3 + * ogham is434 = +ie(ogam_is434):3 + * ogham is434laptop = +ie(ogam_is434):3 + * ori basic = +in(ori):3 + * ro de = +ro(winkeys):3 + * ro us = +ro(std):3 + * ro academic = +ro(std):3 + * ro std_comma = +ro(std):3 + * ro comma = +ro(basic):3 + * ru os = +ru(os_legacy):3 + * pk urd = +pk(urd-phonetic):3 + * sapmi basic = +no(smi):3 + * sapmi nodeadkeys = +no(smi_nodeadkeys):3 + * sapmi sefi = +fi(smi):3 + * sin phonetic-static = +in(sin_phonetic):3 + * syr basic = +sy(syc):3 + * syr phonetic = +sy(syc_phonetic):3 + * tam INSCRIPT = +in(tam):3 + * tam UNI = +in(tam_unicode):3 + * tam NUMERAL-KEYBOARD = +in(tam_keyboard_with_numerals):3 + * tam TAB = +in(tam_TAB):3 + * tam TSCII = +in(tam_TSCII):3 + * tel basic = +in(tel):3 + * yu basic = +srp(latin):3 + * yu unicode = +srp(latinunicode):3 + * yu yz = +srp(latinyz):3 + * yu unicodeyz = +srp(latinunicodeyz):3 + +! model layout[4] variant[4] = symbols + * ben basic = +in(ben):4 + * ben probhat = +in(ben_probhat):4 + * dev basic = +in(deva):4 + * dvorak $dvoraklayouts = +%v(dvorak):4 + * dvorak basic = +us(dvorak):4 + * dvorak pl_basic = +pl(dvorak):4 + * dvorak pl = +pl(dvorak_quotes):4 + * dvorak pl_altquotes = +pl(dvorak_altquotes):4 + * dzdwi basic = +bt(basic):4 + * fi basic = +fi(classic):4 + * ge azerty_tskapo = +fr(geo):4 + * guj basic = +in(guj):4 + * gur basic = +in(guru):4 + * ie laptop = +ie(basic):4 + * ie CloGaelachLaptop = +ie(CloGaelach):4 + * in urd = +in(urd-phonetic):4 + * iu basic = +ca(ike):4 + * lo basic = +la(basic):4 + * kan basic = +in(kan):4 + * mal basic = +in(mal):4 + * mal mlplusnum = +in(mal):4 + * ogham basic = +ie(ogam):4 + * ogham laptop = +ie(ogam):4 + * ogham is434 = +ie(ogam_is434):4 + * ogham is434laptop = +ie(ogam_is434):4 + * ori basic = +in(ori):4 + * ro de = +ro(winkeys):4 + * ro us = +ro(std):4 + * ro academic = +ro(std):4 + * ro std_comma = +ro(std):4 + * ro comma = +ro(basic):4 + * ru os = +ru(os_legacy):4 + * pk urd = +pk(urd-phonetic):4 + * sapmi basic = +no(smi):4 + * sapmi nodeadkeys = +no(smi_nodeadkeys):4 + * sapmi sefi = +fi(smi):4 + * sin phonetic-static = +in(sin_phonetic):4 + * syr basic = +sy(syc):4 + * syr phonetic = +sy(syc_phonetic):4 + * tam INSCRIPT = +in(tam):4 + * tam UNI = +in(tam_unicode):4 + * tam NUMERAL-KEYBOARD = +in(tam_keyboard_with_numerals):4 + * tam TAB = +in(tam_TAB):4 + * tam TSCII = +in(tam_TSCII):4 + * tel basic = +in(tel):4 + * yu basic = +srp(latin):4 + * yu unicode = +srp(latinunicode):4 + * yu yz = +srp(latinyz):4 + * yu unicodeyz = +srp(latinunicodeyz):4 + +! model = symbols + $evdevkbds = +inet(evdev)+inet(%m) + applealu_jis = +inet(evdev)+macintosh_vndr/jp(alujiskeys) + * = +inet(evdev) + +! layout variant = compat + de neo = +caps(caps_lock)+misc(assign_shift_left_action)+level5(level5_lock) + +! layout[1] variant[1] = compat + de neo = +caps(caps_lock)+misc(assign_shift_left_action)+level5(level5_lock) + +! layout[2] variant[2] = compat + de neo = +caps(caps_lock):2+misc(assign_shift_left_action):2+level5(level5_lock):2 + +! layout[3] variant[3] = compat + de neo = +caps(caps_lock):3+misc(assign_shift_left_action):3+level5(level5_lock):3 + +! layout[4] variant[4] = compat + de neo = +caps(caps_lock):4+misc(assign_shift_left_action):4+level5(level5_lock):4 + +! model layout = compat + pc98 nec_vndr/jp = pc98(basic) + * jp = complete+japan + olpc * = olpc + * * = complete + +! model layout[1] = compat + * * = complete + +! model = types + $macs = complete+numpad(mac) + $applealu = complete+numpad(mac) + $nokiamodels = complete+nokia + * = complete + +! layout option = symbols + $threelevellayouts grp:alts_toggle = +level3(ralt_switch_for_alts_toggle) + * misc:typo = +typo(base) + +! layout[1] option = symbols + $threelevellayouts grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):1 + * misc:typo = +typo(base):1 + +! layout[2] option = symbols + $threelevellayouts grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):2 + * misc:typo = +typo(base):2 + +! layout[3] option = symbols + $threelevellayouts grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):3 + * misc:typo = +typo(base):3 + +! layout[4] option = symbols + $threelevellayouts grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):4 + * misc:typo = +typo(base):4 + +! option = symbols + grp:shift_toggle = +group(shifts_toggle) + altwin:menu = +altwin(menu) + altwin:meta_alt = +altwin(meta_alt) + altwin:ctrl_win = +altwin(ctrl_win) + altwin:ctrl_alt_win = +altwin(ctrl_alt_win) + altwin:meta_win = +altwin(meta_win) + altwin:left_meta_win = +altwin(left_meta_win) + altwin:hyper_win = +altwin(hyper_win) + altwin:alt_super_win = +altwin(alt_super_win) + altwin:swap_lalt_lwin = +altwin(swap_lalt_lwin) + grp:switch = +group(switch) + grp:lswitch = +group(lswitch) + grp:win_switch = +group(win_switch) + grp:lwin_switch = +group(lwin_switch) + grp:rwin_switch = +group(rwin_switch) + grp:toggle = +group(toggle) + grp:shifts_toggle = +group(shifts_toggle) + grp:ctrls_toggle = +group(ctrls_toggle) + grp:alts_toggle = +group(alts_toggle) + grp:caps_toggle = +capslock(grouplock) + grp:caps_switch = +capslock(groupshift) + grp:shift_caps_toggle = +group(shift_caps_toggle) + grp:shift_caps_switch = +group(shift_caps_switch) + grp:win_menu_switch = +group(win_menu_switch) + grp:alt_caps_toggle = +group(alt_caps_toggle) + grp:alt_space_toggle = +group(alt_space_toggle) + grp:menu_toggle = +group(menu_toggle) + grp:lwin_toggle = +group(lwin_toggle) + grp:rwin_toggle = +group(rwin_toggle) + grp:lshift_toggle = +group(lshift_toggle) + grp:rshift_toggle = +group(rshift_toggle) + grp:rctrl_switch = +group(rctrl_switch) + grp:lctrl_toggle = +group(lctrl_toggle) + grp:rctrl_toggle = +group(rctrl_toggle) + grp:lalt_toggle = +group(lalt_toggle) + grp:sclk_toggle = +group(sclk_toggle) + grp:lctrl_rctrl_switch = +group(lctrl_rctrl_switch) + grp:lctrl_lwin_rctrl_menu = +group(lctrl_lwin_rctrl_menu) + grp:lctrl_lalt_toggle = +group(lctrl_lalt_toggle) + grp:rctrl_ralt_toggle = +group(rctrl_ralt_toggle) + grp:ctrl_alt_toggle = +group(ctrl_alt_toggle) + grp:ctrl_alt_toggle_bidir = +group(ctrl_alt_toggle_bidir) + grp:lctrl_lshift_toggle = +group(lctrl_lshift_toggle) + grp:rctrl_rshift_toggle = +group(rctrl_rshift_toggle) + grp:ctrl_shift_toggle = +group(ctrl_shift_toggle) + grp:ctrl_shift_toggle_bidir = +group(ctrl_shift_toggle_bidir) + grp:lalt_lshift_toggle = +group(lalt_lshift_toggle) + grp:ralt_rshift_toggle = +group(ralt_rshift_toggle) + grp:alt_shift_toggle = +group(alt_shift_toggle) + grp:alt_shift_toggle_bidir = +group(alt_shift_toggle_bidir) + lv3:switch = +level3(switch) + lv3:ralt_switch = +level3(ralt_switch) + lv3:ralt_switch_multikey = +level3(ralt_switch_multikey) + lv3:ralt_alt = +level3(ralt_alt) + lv3:lalt_switch = +level3(lalt_switch) + lv3:alt_switch = +level3(alt_switch) + lv3:menu_switch = +level3(menu_switch) + lv3:win_switch = +level3(win_switch) + lv3:lwin_switch = +level3(lwin_switch) + lv3:rwin_switch = +level3(rwin_switch) + lv3:enter_switch = +level3(enter_switch) + caps:capslock = +capslock(capslock) + caps:numlock = +capslock(numlock) + caps:shiftlock = +capslock(shiftlock) + caps:swapescape = +capslock(swapescape) + caps:escape = +capslock(escape) + caps:backspace = +capslock(backspace) + caps:super = +capslock(super) + caps:hyper = +capslock(hyper) + caps:none = +capslock(none) + caps:ctrl_modifier = +capslock(ctrl_modifier) + ctrl:nocaps = +ctrl(nocaps) + ctrl:lctrl_meta = +ctrl(lctrl_meta) + ctrl:swapcaps = +ctrl(swapcaps) + ctrl:ac_ctrl = +ctrl(ac_ctrl) + ctrl:aa_ctrl = +ctrl(aa_ctrl) + ctrl:rctrl_ralt = +ctrl(rctrl_ralt) + ctrl:menu_rctrl = +ctrl(menu_rctrl) + ctrl:ralt_rctrl = +ctrl(ralt_rctrl) + compose:ralt = +compose(ralt) + compose:lwin = +compose(lwin) + compose:rwin = +compose(rwin) + compose:menu = +compose(menu) + compose:lctrl = +compose(lctrl) + compose:rctrl = +compose(rctrl) + compose:caps = +compose(caps) + compose:102 = +compose(102) + compose:paus = +compose(paus) + compose:prsc = +compose(prsc) + compose:sclk = +compose(sclk) + srvrkeys:none = +srvr_ctrl(no_srvr_keys) + eurosign:e = +eurosign(e) + eurosign:2 = +eurosign(2) + eurosign:4 = +eurosign(4) + eurosign:5 = +eurosign(5) + rupeesign:4 = +rupeesign(4) + keypad:oss = +keypad(oss) + keypad:legacy = +keypad(legacy) + keypad:legacy_wang = +keypad(legacy_wang) + keypad:oss_wang = +keypad(oss_wang) + keypad:future = +keypad(future) + keypad:future_wang = +keypad(future_wang) + keypad:hex = +keypad(ops)+keypad(hex) + keypad:atm = +keypad(ops)+keypad(hex)+keypad(atm) + nbsp:none = +nbsp(none) + nbsp:level2 = +nbsp(level2) + nbsp:level3 = +nbsp(level3) + nbsp:level3s = +nbsp(level3s) + nbsp:level3n = +nbsp(level3n) + nbsp:level4 = +nbsp(level4) + nbsp:level4n = +nbsp(level4n) + nbsp:level4nl = +nbsp(level4nl) + japan:nicola_f_bs = +jp(nicola_f_bs) + japan:hztg_escape = +jp(hztg_escape) + kpdl:dot = +kpdl(dot) + kpdl:comma = +kpdl(comma) + kpdl:dotoss = +kpdl(dotoss) + kpdl:dotoss_latin9 = +kpdl(dotoss_latin9) + kpdl:commaoss = +kpdl(commaoss) + kpdl:momayyezoss = +kpdl(momayyezoss) + kpdl:kposs = +kpdl(kposs) + kpdl:semi = +kpdl(semi) + shift:breaks_caps = +shift(breaks_caps) + esperanto:qwerty = +epo(qwerty) + esperanto:dvorak = +epo(dvorak) + terminate:ctrl_alt_bksp = +terminate(ctrl_alt_bksp) + keypad:pointerkeys = +keypad(pointerkeys) + apple:alupckeys = +macintosh_vndr/apple(alupckeys) + shift:both_capslock = +shift(both_capslock) + shift:lshift_both_capslock = +shift(lshift_both_capslock) + shift:rshift_both_capslock = +shift(rshift_both_capslock) + shift:both_capslock_cancel = +shift(both_capslock_cancel) + shift:lshift_both_capslock_cancel = +shift(lshift_both_capslock_cancel) + shift:rshift_both_capslock_cancel = +shift(rshift_both_capslock_cancel) + shift:both_shiftlock = +shift(both_shiftlock) + shift:lshift_both_shiftlock = +shift(lshift_both_shiftlock) + shift:rshift_both_shiftlock = +shift(rshift_both_shiftlock) + lv3:caps_switch = +level3(caps_switch) + lv3:bksl_switch = +level3(bksl_switch) + lv3:lsgt_switch = +level3(lsgt_switch) + lv3:caps_switch_latch = +level3(caps_switch_latch) + lv3:bksl_switch_latch = +level3(bksl_switch_latch) + lv3:lsgt_switch_latch = +level3(lsgt_switch_latch) + lv5:lsgt_switch_lock = +level5(lsgt_switch_lock) + lv5:ralt_switch_lock = +level5(ralt_switch_lock) + lv5:lwin_switch_lock = +level5(lwin_switch_lock) + lv5:rwin_switch_lock = +level5(rwin_switch_lock) + lv5:lsgt_switch_lock_cancel = +level5(lsgt_switch_lock_cancel) + lv5:ralt_switch_lock_cancel = +level5(ralt_switch_lock_cancel) + lv5:lwin_switch_lock_cancel = +level5(lwin_switch_lock_cancel) + lv5:rwin_switch_lock_cancel = +level5(rwin_switch_lock_cancel) + + + +! option = compat + grp_led:num = +lednum(group_lock) + grp_led:caps = +ledcaps(group_lock) + grp_led:scroll = +ledscroll(group_lock) + caps:shiftlock = +ledcaps(shift_lock) + grab:break_actions = +xfree86(grab_break) diff --git a/test/data/symbols/altwin b/test/data/symbols/altwin new file mode 100644 index 0000000..9259912 --- /dev/null +++ b/test/data/symbols/altwin @@ -0,0 +1,79 @@ +partial modifier_keys +xkb_symbols "meta_alt" { + key { [ Alt_L, Meta_L ] }; + key { type[Group1] = "TWO_LEVEL", + symbols[Group1] = [ Alt_R, Meta_R ] }; + modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R }; +// modifier_map Mod4 {}; +}; + +// Control is mapped to the Win-keys (and the usual Ctrl keys). +partial modifier_keys +xkb_symbols "ctrl_win" { + key { [ Control_L ] }; + key { [ Control_R ] }; + modifier_map Control { , }; +}; + +// Ctrl is mapped to the Alt-keys, Alt is mapped to the Win-keys, Win is mapped to the Ctrl-keys. +partial modifier_keys +xkb_symbols "ctrl_alt_win" { + key { [ Control_L, Control_L ] }; + key { type[Group1] = "TWO_LEVEL", + symbols[Group1] = [ Control_R, Control_R ] }; + key { [ Alt_L, Meta_L ] }; + key { [ Alt_R, Meta_R ] }; + modifier_map Control { , }; + modifier_map Mod1 { , }; +}; + + +partial modifier_keys +xkb_symbols "meta_win" { + key { [ Alt_L, Alt_L ] }; + key { type[Group1] = "TWO_LEVEL", + symbols[Group1] = [ Alt_R, Alt_R ] }; + key { [ Meta_L ] }; + key { [ Meta_R ] }; + modifier_map Mod1 { Alt_L, Alt_R }; + modifier_map Mod4 { , Meta_L, Meta_R }; +}; + +partial modifier_keys +xkb_symbols "left_meta_win" { + key { [ Alt_L, Alt_L ] }; + key { [ Meta_L ] }; + modifier_map Mod1 { Alt_L }; + modifier_map Mod4 { , Meta_L }; +}; + +partial modifier_keys +xkb_symbols "hyper_win" { + key { [ Hyper_L ] }; + key { [ Hyper_R ] }; + modifier_map Mod4 { Hyper_L, Hyper_R }; +}; + +// Use Menu for the menu key +partial modifier_keys +xkb_symbols "menu" { + key { [ Menu ] }; +}; + +// Layout for Tux key caps with additional right Alt key +partial modifier_keys +xkb_symbols "alt_super_win" { + key { [ Alt_L, Meta_L ] }; + key { [ Alt_R, Meta_R ] }; + key { [ Super_L ] }; + key { [ Super_R ] }; + modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R }; + modifier_map Mod4 { Super_L, Super_R }; +}; + +partial modifier_keys +xkb_symbols "swap_lalt_lwin" { + key { type[Group1] = "ONE_LEVEL", + symbols[Group1] = [ Super_L ] }; + key { [ Alt_L, Meta_L ] }; +}; diff --git a/test/data/symbols/ca b/test/data/symbols/ca new file mode 100644 index 0000000..ab9cef1 --- /dev/null +++ b/test/data/symbols/ca @@ -0,0 +1,530 @@ +default partial +xkb_symbols "fr" { + name[Group1] = "French (Canada)"; + + key { [ numbersign, bar, backslash ] }; + key { [ 1, exclam, plusminus ] }; + key { [ 2, quotedbl, at ] }; + key { [ 3, slash, sterling ] }; + key { [ 4, dollar, cent ] }; + key { [ 5, percent, currency ] }; + key { [ 6, question, notsign ] }; + key { [ 7, ampersand, brokenbar ] }; + key { [ 8, asterisk, twosuperior ] }; + key { [ 9, parenleft, threesuperior ] }; + key { [ 0, parenright, onequarter ] }; + key { [ minus, underscore, onehalf ] }; + key { [ equal, plus, threequarters ] }; + + key { [ q, Q ] }; + key { [ w, W ] }; + key { [ e, E ] }; + key { [ r, R ] }; + key { [ t, T ] }; + key { [ y, Y ] }; + key { [ u, U ] }; + key { [ i, I ] }; + key { [ o, O, section ] }; + key { [ p, P, paragraph ] }; + key { [dead_circumflex, dead_circumflex, bracketleft ] }; + key { [ dead_cedilla, dead_diaeresis, bracketright ] }; + + key { [ a, A ] }; + key { [ s, S ] }; + key { [ d, D ] }; + key { [ f, F ] }; + key { [ g, G ] }; + key { [ h, H ] }; + key { [ j, J ] }; + key { [ k, K ] }; + key { [ l, L ] }; + key { [ semicolon, colon, asciitilde ] }; + key { [dead_grave, dead_grave, braceleft ] }; + key { [ less, greater, braceright ] }; + + key { [guillemotleft, guillemotright, degree] }; + key { [ z, Z ] }; + key { [ x, X ] }; + key { [ c, C ] }; + key { [ v, V ] }; + key { [ b, B ] }; + key { [ n, N ] }; + key { [ m, M, mu ] }; + key { [ comma, apostrophe, macron ] }; + key { [ period, period, hyphen ] }; + key { [ eacute, Eacute, dead_acute ] }; + + key { [ space, space, nobreakspace ] }; + + include "level3(ralt_switch)" +}; + +xkb_symbols "fr-dvorak" { + name[Group1] = "French (Canada, Dvorak)"; + + key { [ numbersign, bar, backslash ] }; + key { [ 1, exclam, plusminus ] }; + key { [ 2, quotedbl, at ] }; + key { [ 3, slash, sterling ] }; + key { [ 4, dollar, cent ] }; + key { [ 5, percent, currency ] }; + key { [ 6, question, notsign ] }; + key { [ 7, ampersand, brokenbar ] }; + key { [ 8, asterisk, twosuperior ] }; + key { [ 9, parenleft, threesuperior ] }; + key { [ 0, parenright, onequarter ] }; + key { [dead_circumflex, dead_circumflex, bracketleft ] }; + key { [ dead_cedilla, dead_diaeresis, bracketright ] }; + + key { [dead_grave, dead_grave, braceleft ] }; + key { [ comma, apostrophe, macron ] }; + key { [ period, period, hyphen ] }; + key { [ p, P, paragraph ] }; + key { [ y, Y ] }; + key { [ f, F ] }; + key { [ g, G ] }; + key { [ c, C ] }; + key { [ r, R ] }; + key { [ l, L ] }; + key { [ eacute, Eacute, dead_acute ] }; + key { [ equal, plus, threequarters ] }; + + key { [ a, A ] }; + key { [ o, O, section ] }; + key { [ e, E ] }; + key { [ u, U ] }; + key { [ i, I ] }; + key { [ d, D ] }; + key { [ h, H ] }; + key { [ t, T ] }; + key { [ n, N ] }; + key { [ s, S ] }; + key { [ minus, underscore, onehalf ] }; + key { [ less, greater, braceright ] }; + + key { [guillemotleft, guillemotright, degree] }; + key { [ semicolon, colon, asciitilde ] }; + key { [ q, Q ] }; + key { [ j, J ] }; + key { [ k, K ] }; + key { [ x, X ] }; + key { [ b, B ] }; + key { [ m, M, mu ] }; + key { [ w, W ] }; + key { [ v, V ] }; + key { [ z, Z ] }; + + key { [ space, space, nobreakspace ] }; + + include "level3(ralt_switch)" +}; + +partial +xkb_symbols "fr-legacy" { + + name[Group1] = "French (Canada, legacy)"; + + include "ca(fr)" + + key { [ degree, degree, notsign ] }; + key { [ 1, exclam, onesuperior ] }; + + key { [ 3, numbersign, threesuperior ] }; + key { [ 4, dollar, onequarter ] }; + key { [ 5, percent, onehalf ] }; + key { [ 6, question, threequarters ] }; + key { [ 7, ampersand, braceleft ] }; + key { [ 8, asterisk, bracketleft ] }; + key { [ 9, parenleft, bracketright, plusminus ] }; + key { [ 0, parenright, braceright ] }; + key { [ minus, underscore, bar, questiondown] }; + key { [ equal, plus, dead_cedilla ] }; + + key { [ r, R, paragraph, registered ] }; + key { [ y, Y, yen ] }; + key { [ o, O, oslash, Ooblique ] }; + key { [ p, P, thorn, THORN ] }; + key { [dead_circumflex, dead_circumflex, degree ] }; + key { [ ccedilla, Ccedilla, dead_tilde, dead_diaeresis ] }; + + key { [ a, A, ae, AE ] }; + key { [ s, S, ssharp, section ] }; + key { [ d, D, eth, ETH ] }; + key { [ f, F, ordfeminine ] }; + key { [ semicolon, colon, dead_acute, dead_acute ] }; + key { [ egrave, Egrave ] }; + key { [ agrave, Agrave, dead_grave ] }; + + key { [ ugrave, Ugrave, backslash, bar ] }; + key { [ z, Z, guillemotleft ] }; + key { [ x, X, guillemotright ] }; + key { [ c, C, cent, copyright ] }; + key { [ m, M, mu, masculine ] }; + key { [ comma, apostrophe, less ] }; + key { [ period, period, greater ] }; + key { [ eacute, Eacute, slash ] }; +}; + +partial +xkb_symbols "multi" { + + name[Group1] = "Canadian Multilingual (first part)"; + + include "ca(fr)" + + key { [ slash, backslash, bar ] }; + key { [ 1, exclam ] }; + key { [ 2, at ] }; + key { [ 3, numbersign ] }; + key { [ 4, dollar ] }; + key { [ 5, percent ] }; + key { [ 6, question ] }; + key { [ 7, ampersand, braceleft ] }; + key { [ 8, asterisk, braceright ] }; + key { [ 9, parenleft, bracketleft ] }; + key { [ 0, parenright, bracketright ] }; + key { [ minus, underscore ] }; + key { [ equal, plus, notsign ] }; + + key { [ o, O ] }; + key { [ p, P ] }; + key { [dead_circumflex, dead_diaeresis, dead_grave ] }; + key { [ ccedilla, Ccedilla, asciitilde ] }; + + key { [ semicolon, colon, degree ] }; + key { [ egrave, Egrave ] }; + key { [ agrave, Agrave ] }; + + key { [ ugrave, Ugrave ] }; + key { [ z, Z, guillemotleft ] }; + key { [ x, X, guillemotright ] }; + key { [ comma, apostrophe, less ] }; + key { [ period, quotedbl, greater ] }; + key { [ eacute, Eacute ] }; +}; + +partial +xkb_symbols "multi-2gr" { + + name[Group1] = "Canadian Multilingual (second part)"; + + key { [ NoSymbol, hyphen ] }; + key { [ onesuperior, exclamdown ] }; + key { [ twosuperior, NoSymbol ] }; + key { [ threesuperior, sterling ] }; + key { [ onequarter, currency ] }; + key { [ onehalf,threeeighths ] }; + key { [ threequarters, fiveeighths ] }; + key { [ NoSymbol,seveneighths ] }; + key { [ NoSymbol, trademark ] }; + key { [ NoSymbol, plusminus ] }; + + key { [ NoSymbol, questiondown] }; + key { [ dead_cedilla, dead_ogonek ] }; + + key { [ NoSymbol, Greek_OMEGA ] }; + key { [ lstroke, Lstroke ] }; + key { [ oe, OE ] }; + key { [ paragraph, registered ] }; + key { [ tslash, Tslash ] }; + key { [ leftarrow, yen ] }; + key { [ downarrow, uparrow ] }; + key { [ rightarrow, idotless ] }; + key { [ oslash, Ooblique ] }; + key { [ thorn, THORN ] }; + key { [ NoSymbol, dead_abovering ] }; + key { [ dead_tilde, dead_macron ] }; + + key { [ ae, AE ] }; + key { [ ssharp, section ] }; + key { [ eth, ETH ] }; + key { [ NoSymbol, ordfeminine ] }; + key { [ eng, ENG ] }; + key { [ hstroke, Hstroke ] }; + key { [ U0133, U0132 ] }; + key { [ kra, NoSymbol ] }; + key { [ U0140, U013F ] }; + key { [ dead_acute, dead_doubleacute ] }; + key { [ NoSymbol, dead_caron ] }; + key { [ NoSymbol, dead_breve ] }; + + + key { [ NoSymbol, brokenbar ] }; + + key { [ cent, copyright ] }; + key { [ leftdoublequotemark, leftsinglequotemark ] }; + key { [ rightdoublequotemark, rightsinglequotemark ] }; + key { [ U0149, U266A ] }; + key { [ mu, masculine ] }; + key { [ Greek_horizbar, multiply ] }; + key { [ periodcentered, division ] }; + key { [ NoSymbol, dead_abovedot ] }; + +}; + +// based on +// Inuktitut keyboard for X11 +// written by Pablo Saratxaga + +alphanumeric_keys +xkb_symbols "ike" { + + name[Group1]= "Inuktitut"; + + key { [ 0x01001595, 1 ] }; + key { [ 0x01001449, 2 ] }; + key { [ 0x01001550, 3 ] }; + key { [ 0x01001483, 4 ] }; + key { [ 0x01001466, 5 ] }; + key { [ 0x01001585, 6 ] }; + key { [ 0x010014bb, 7 ] }; + key { [ 0x010014d0, 8 ] }; + key { [ 0x010014ea, 9 ] }; + key { [ 0x0100153e, 0 ] }; + key { [ minus, underscore ] }; + key { [ 0x0100155d, equal ] }; + + key { [ 0x0100158f, 0x0100148b ] }; + key { [ 0x01001403, 0x01001431 ] }; + key { [ 0x0100157f, 0x01001546 ] }; + key { [ 0x0100146d, 0x01001596 ] }; + key { [ 0x0100144e, 0x01001671 ] }; + key { [ 0x010014ef, 0x01001673 ] }; + key { [ 0x010014a5, 0x01001675 ] }; + key { [ 0x010014c2, 0x010015a4 ] }; + key { [ 0x010014d5, 0x010015a0 ] }; + key { [ 0x01001528, 0x010015a6 ] }; + key { [ 0x010014a1, 0x01001505 ] }; + key { [ dead_abovedot, 0x0100141e] }; + + key { [ 0x01001591, 0x0100148d ] }; + key { [ 0x01001405, 0x01001433 ] }; + key { [ 0x01001581, 0x01001548 ] }; + key { [ 0x0100146f, 0x01001555 ] }; + key { [ 0x01001450, parenleft ] }; + key { [ 0x010014f1, parenright ] }; + key { [ 0x010014a7, 0x0100152a ] }; + key { [ 0x010014c4, 0x01001557 ] }; + key { [ 0x010014d7, 0x010015a2 ] }; + key { [ semicolon, colon ] }; + key { [ apostrophe, quotedbl ] }; + + key { [ 0x01001593, 0x01001490 ] }; + key { [ 0x0100140a, 0x01001438 ] }; + key { [ 0x01001583, 0x0100154b ] }; + key { [ 0x01001472, question ] }; + key { [ 0x01001455, 0x0100157c ] }; + key { [ 0x010014f4, 0x010014c7 ] }; + key { [ 0x010014aa, 0x010014da ] }; + key { [ comma, less ] }; + key { [ period, greater ] }; + key { [ 0x0100152d, 0x01001559 ] }; + + key { [ 0x0100157b, 0x01001575 ] }; + key { [ 0x01001579, 0x01001577 ] }; + key { [ backslash, bar ] }; + +// End alphanumeric section +}; + +partial +xkb_symbols "multix" { + + name[Group1] = "Canadian Multilingual"; + + key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC"; + key { [ slash, backslash, bar, NoSymbol, + NoSymbol, hyphen ] }; + key { [ 1, exclam, plusminus, NoSymbol, + onesuperior, exclamdown ] }; + key { [ 2, at, at, NoSymbol, + twosuperior, NoSymbol ] }; + key { [ 3, numbersign, sterling, NoSymbol, + threesuperior, sterling ] }; + key { [ 4, dollar, cent, NoSymbol, + onequarter, currency ] }; + key { [ 5, percent, currency, NoSymbol, + onehalf, threeeighths ] }; + key { [ 6, question, notsign, NoSymbol, + threequarters, fiveeighths ] }; + key { [ 7, ampersand, braceleft, NoSymbol, + NoSymbol, seveneighths ] }; + key { [ 8, asterisk, braceright, NoSymbol, + NoSymbol, trademark ] }; + key { [ 9, parenleft, bracketleft, NoSymbol, + NoSymbol, plusminus ] }; + key { [ 0, parenright, bracketright, NoSymbol ] }; + key { [ minus, underscore, onehalf, NoSymbol, + NoSymbol, questiondown] }; + key { [ equal, plus, notsign, NoSymbol, + dead_cedilla, dead_ogonek ] }; + + key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC"; + key { [ q, Q, NoSymbol, NoSymbol, + NoSymbol, Greek_OMEGA ] }; + key { [ w, W, NoSymbol, NoSymbol, + lstroke, Lstroke ] }; + key { [ e, E, NoSymbol, NoSymbol, + oe, OE ] }; + key { [ r, R, NoSymbol, NoSymbol, + paragraph, registered ] }; + key { [ t, T, NoSymbol, NoSymbol, + tslash, Tslash ] }; + key { [ y, Y, NoSymbol, NoSymbol, + leftarrow, yen ] }; + key { [ u, U, NoSymbol, NoSymbol, + downarrow, uparrow ] }; + key { [ i, I, NoSymbol, NoSymbol, + rightarrow, idotless ] }; + key { [ o, O, section, NoSymbol, + oslash, Ooblique ] }; + key { [ p, P, paragraph, NoSymbol, + thorn, THORN ] }; + + key.type[group1]="EIGHT_LEVEL"; + key { [dead_circumflex, dead_diaeresis, dead_grave, NoSymbol, + NoSymbol, dead_abovering ] }; + + key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC"; + key { [ ccedilla, Ccedilla, asciitilde, NoSymbol, + dead_tilde, dead_macron ] }; + + key { [ a, A, NoSymbol, NoSymbol, + ae, AE ] }; + key { [ s, S, NoSymbol, NoSymbol, + ssharp, section ] }; + key { [ d, D, NoSymbol, NoSymbol, + eth, ETH ] }; + key { [ f, F, NoSymbol, NoSymbol, + NoSymbol, ordfeminine ] }; + key { [ g, G, NoSymbol, NoSymbol, + eng, ENG ] }; + key { [ h, H, NoSymbol, NoSymbol, + hstroke, Hstroke ] }; + key { [ j, J, NoSymbol, NoSymbol, + U0133, U0132 ] }; + key { [ k, K, NoSymbol, NoSymbol, + kra, NoSymbol ] }; + key { [ l, L, NoSymbol, NoSymbol, + U0140, U013F ] }; + + key.type[group1]="EIGHT_LEVEL"; + key { [ semicolon, colon, degree, NoSymbol, + dead_acute, dead_doubleacute ] }; + + key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC"; + key { [ egrave, Egrave, braceleft, NoSymbol, + NoSymbol, dead_caron ] }; + key { [ agrave, Agrave, braceright, NoSymbol, + NoSymbol, dead_breve ] }; + + key { [ ugrave, Ugrave, degree, NoSymbol, + NoSymbol, brokenbar ] }; + + key.type[group1]="FOUR_LEVEL_SEMIALPHABETIC"; + key { [ z, Z, guillemotleft, NoSymbol ] }; + key { [ x, X, guillemotright, NoSymbol ] }; + + key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC"; + key { [ c, C, NoSymbol, NoSymbol, + cent, copyright ] }; + key { [ v, V, NoSymbol, NoSymbol, + leftdoublequotemark, leftsinglequotemark ] }; + key { [ b, B, NoSymbol, NoSymbol, + rightdoublequotemark, rightsinglequotemark ] }; + key { [ n, N, NoSymbol, NoSymbol, + U0149, U266A ] }; + key { [ m, M, mu, NoSymbol, + mu, masculine ] }; + key { [ comma, apostrophe, less, NoSymbol, + Greek_horizbar, multiply ] }; + key { [ period, quotedbl, greater, NoSymbol, + periodcentered, division ] }; + key { [ eacute, Eacute, dead_acute, NoSymbol, + NoSymbol, dead_abovedot ] }; + + include "nbsp(level3s)" + + modifier_map Control{ Control_L }; + + include "level3(ralt_switch)" + include "level5(rctrl_switch)" +}; + +// OLPC Section +xkb_symbols "olpc" { + + include "ca(fr)" + + key { [ 2, quotedbl, ograve, Ograve ] }; + key { [ 3, slash, at, VoidSymbol ] }; + + key { [ e, E, EuroSign, VoidSymbol] }; + + key { [ period, period, 0x1002010 ] }; + + key { [ guillemotleft, guillemotright, degree, VoidSymbol ] }; +}; + +partial alphanumeric_keys +xkb_symbols "eng" { + name[Group1] = "English (Canada)"; + include "us(basic)" +}; + +// EXTRAS: + +partial alphanumeric_keys +xkb_symbols "kut" { + + //Ejective U0313 and compose accents are from shs layout + include "ca(shs)" + + name[Group1]= "Kutenai"; + + // Alphanumeric section + + // Alveolar Click + key { [ t, T,U01C2 ,U01C2 ] }; + + //Cent sign + key { [ c, C,U00A2,U00A2 ] }; + + //Mid dot + key { [ period, greater,U00B7 ] }; + + //Glottal stop + key { [ slash, question, U0294 ] }; + + //COMBINING COMMA ABOVE RIGHT + key { [ apostrophe, quotedbl, U0315,U0315 ] }; + + //MODIFIER LETTER RIGHT HALF RING + key { [ semicolon, colon,U02BE,U02BE ] }; +}; + +// Secwepemctsin keyboard for X11 +// written by Neskie Manuel + +partial alphanumeric_keys +xkb_symbols "shs" { + + include "us" + + name[Group1]= "Secwepemctsin"; + + //Using Dead key to get COMBINING COMMA ABOVE for ejectives on + //q, l, t, s, m, g, k, p, w, y, r + //XCompose key is used for the other accute and grave. + + key { [ comma, less, U0313 ] }; + key { [ a, A, aacute, Aacute ] }; + key { [ e, E, eacute, Eacute ] }; + key { [ u, U, uacute, Uacute ] }; + key { [ i, I, iacute, Iacute ] }; + key { [ o, O, oacute, Oacute ] }; + + include "level3(ralt_switch)" + include "compose(rctrl)" +}; + diff --git a/test/data/symbols/capslock b/test/data/symbols/capslock new file mode 100644 index 0000000..3e08805 --- /dev/null +++ b/test/data/symbols/capslock @@ -0,0 +1,74 @@ +default partial hidden modifier_keys +xkb_symbols "capslock" { + replace key { [ Caps_Lock ] }; + modifier_map Lock { Caps_Lock }; +}; + +partial hidden modifier_keys +xkb_symbols "shiftlock" { + replace key { [ Shift_Lock ] }; + modifier_map Shift { Shift_Lock }; +}; + +partial hidden modifier_keys +xkb_symbols "grouplock" { + replace key { [ ISO_Next_Group, Caps_Lock ] }; +}; + +partial hidden modifier_keys +xkb_symbols "swapescape" { + key { [ Escape ] }; + key { [ Caps_Lock ] }; +}; + +partial hidden modifier_keys +xkb_symbols "groupshift" { + key { + type[Group1]="PC_ALT_LEVEL2", + [ Mode_switch, Caps_Lock ] + }; +}; + +partial hidden modifier_keys +xkb_symbols "escape" { + key { [ Escape ] }; +}; + +partial hidden modifier_keys +xkb_symbols "backspace" { + key { [ BackSpace ] }; +}; + +partial hidden modifier_keys +xkb_symbols "super" { + key { [ Super_L ] }; + modifier_map Mod4 { }; +}; + +partial hidden modifier_keys +xkb_symbols "hyper" { + key { [ Hyper_L ] }; + modifier_map Mod4 { }; +}; + +partial hidden modifier_keys +xkb_symbols "none" { + key { [ VoidSymbol ] }; +}; + +partial hidden modifier_keys +xkb_symbols "numlock" { + key { [ Num_Lock ] }; +}; + +// This changes the modifier behavior of the key. +// The keysym will be reset to Caps_Lock +partial hidden modifier_keys +xkb_symbols "ctrl_modifier" { + replace key { + type[Group1] = "ONE_LEVEL", + symbols[Group1] = [ Caps_Lock ], + actions[Group1] = [ SetMods(modifiers=Control) ] + }; + modifier_map Control { }; +}; diff --git a/test/data/symbols/compose b/test/data/symbols/compose new file mode 100644 index 0000000..d725732 --- /dev/null +++ b/test/data/symbols/compose @@ -0,0 +1,54 @@ +partial modifier_keys +xkb_symbols "ralt" { + key { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] }; +}; + +partial modifier_keys +xkb_symbols "lwin" { + key { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] }; +}; + +partial modifier_keys +xkb_symbols "rwin" { + key { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] }; +}; + +partial modifier_keys +xkb_symbols "menu" { + key { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] }; +}; + +partial modifier_keys +xkb_symbols "rctrl" { + key { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] }; +}; + +partial modifier_keys +xkb_symbols "lctrl" { + key { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] }; +}; + +partial modifier_keys +xkb_symbols "caps" { + key { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] }; +}; + +partial modifier_keys +xkb_symbols "102" { + key { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] }; +}; + +partial modifier_keys +xkb_symbols "paus" { + key { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] }; +}; + +partial modifier_keys +xkb_symbols "prsc" { + key { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] }; +}; + +partial modifier_keys +xkb_symbols "sclk" { + key { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] }; +}; diff --git a/test/data/symbols/ctrl b/test/data/symbols/ctrl new file mode 100644 index 0000000..09d76b5 --- /dev/null +++ b/test/data/symbols/ctrl @@ -0,0 +1,57 @@ +// eliminate the caps lock key completely (replace with control) +partial modifier_keys +xkb_symbols "nocaps" { + replace key { [ Control_L, Control_L ] }; + modifier_map Control { , }; +}; + +// replace left control with Meta +xkb_symbols "lctrl_meta" { + replace key { [ Meta_L ] }; +}; + +// swap the caps lock key with the left control key +partial modifier_keys +xkb_symbols "swapcaps" { + replace key { [ Control_L ] }; + replace key { [ Caps_Lock ] }; +}; + +// moves the control key to the middle row and the caps lock +// to the bottom row. Only works if the geometry or keycodes +// file has defined appropriate aliases for the keys in question. +partial modifier_keys +xkb_symbols "ac_ctrl" { + replace key { [ Control_L ] }; + replace key { [ Caps_Lock ] }; +}; + +// Moves the control key to the bottom row and the caps lock +// to the middle row. Only works if the geometry or keycodes +// file has defined appropriate aliases for the keys in question. +partial modifier_keys +xkb_symbols "aa_ctrl" { + replace key { [ Control_L ] }; + replace key { [ Caps_Lock ] }; +}; + +// Right Ctrl works as Right Alt +partial modifier_keys +xkb_symbols "rctrl_ralt" { + key { symbols[Group1]= [ Alt_R ] }; +}; + +// Menu works as Right Ctrl +partial modifier_keys +xkb_symbols "menu_rctrl" { + replace key { [ Control_R, Control_R ] }; + modifier_map Control { Control_L, }; +}; + +// right alt functions as another ctrl key +partial modifier_keys +xkb_symbols "ralt_rctrl" { + replace key { type[Group1] = "TWO_LEVEL", + symbols[Group1] = [ Control_R, Control_R ] }; + modifier_map Control { }; +}; diff --git a/test/data/symbols/de b/test/data/symbols/de new file mode 100644 index 0000000..13f5c87 --- /dev/null +++ b/test/data/symbols/de @@ -0,0 +1,627 @@ +// based on a keyboard map from an 'xkb/symbols/de' file + +default +xkb_symbols "basic" { + + include "latin(type4)" + + name[Group1]="German"; + + key { [ 2, quotedbl, twosuperior, oneeighth ] }; + key { [ 3, section, threesuperior, sterling ] }; + key { [ 4, dollar, onequarter, currency ] }; + + key {type[Group1]="FOUR_LEVEL_PLUS_LOCK", symbols[Group1]= + [ssharp, question, backslash, questiondown, 0x1001E9E ]}; +// The unicode capital letter sharp s U+1E9E is transformed to "SS" +// to match the rules for capitalizing sharp s in german. +// If the capital sharp s is needed, delete the line +// starting with from /usr/share/X11/locale/iso8859-15/Compose. +// If both doubled S and capital sharp s are needed, use 0x1001E9E +// for capital sharp s and some free unicode codepoint like 0x1001E9C +// for doubled S. Don`t forget to change this in the Compose file, too. + + key { [dead_acute, dead_grave, dead_cedilla, dead_ogonek ] }; + + key { [ e, E, EuroSign, EuroSign ] }; + key { [ z, Z, leftarrow, yen ] }; + key { [udiaeresis, Udiaeresis, dead_diaeresis, dead_abovering ] }; + key { [ plus, asterisk, dead_tilde, dead_macron ] }; + + key { [ s, S, U017F, U1E9E ] }; + key { [ j, J, dead_belowdot, dead_abovedot ] }; + key { [odiaeresis, Odiaeresis, dead_doubleacute, dead_belowdot ] }; + key { [adiaeresis, Adiaeresis, dead_circumflex, dead_caron ] }; + key { [dead_circumflex, degree, U2032, U2033 ] }; + + key { [numbersign, apostrophe, rightsinglequotemark, dead_breve ] }; + key { [ y, Y, guillemotright, U203A ] }; + key { [ x, X, guillemotleft, U2039 ] }; + key { [ v, V, doublelowquotemark, singlelowquotemark ] }; + key { [ b, B, leftdoublequotemark, leftsinglequotemark ] }; + key { [ n, N, rightdoublequotemark, rightsinglequotemark ] }; + key { [ comma, semicolon, periodcentered, multiply ] }; + key { [ period, colon, U2026, division ] }; + key { [ minus, underscore, endash, emdash ] }; + + include "kpdl(comma)" + + include "level3(ralt_switch)" +}; + +partial alphanumeric_keys +xkb_symbols "nodeadkeys" { + + // modify the basic German layout to not have any dead keys + + include "de(basic)" + name[Group1]="German (eliminate dead keys)"; + + key { [asciicircum, degree, notsign, notsign ] }; + key { [ acute, grave, cedilla, cedilla ] }; + key { [udiaeresis, Udiaeresis, diaeresis, diaeresis ] }; + key { [ plus, asterisk, asciitilde, macron ] }; + key { [odiaeresis, Odiaeresis, doubleacute, doubleacute ] }; + key { [adiaeresis, Adiaeresis, asciicircum, asciicircum ] }; + key { [numbersign, apostrophe, grave, grave ] }; +}; + +partial alphanumeric_keys +xkb_symbols "deadgraveacute" { + // modify the basic German layout to have only acute and grave + // as dead keys (tilde and circumflex are needed as spacing characters + // in many programming languages) + + include "de(basic)" + name[Group1]="German (dead grave acute)"; + + key { [asciicircum, degree, notsign, notsign ] }; + key { [ plus, asterisk, asciitilde, dead_macron ] }; + key { [numbersign, apostrophe, grave, grave ] }; +}; + +partial alphanumeric_keys +xkb_symbols "deadacute" { + // modify the basic German layout to have only acute as + // dead keys (ASCII grave, tilde and circumflex are needed as + // spacing characters in many programming languages and text formatters) + + include "de(deadgraveacute)" + + name[Group1]="German (dead acute)"; + + key { [dead_acute, grave, dead_cedilla, dead_ogonek ] }; + key { [numbersign, apostrophe, dead_grave, dead_grave ] }; +}; + +partial alphanumeric_keys +xkb_symbols "ro" { + // add romanian-specific letters to the basic German layout. + // Romanian symbols are accessible with combination of and + // 'a', 's', 't', 'i', 'ä (ä)' (+ for capital letters). + // To view romanian-specific symbols, add "export LC_CTYPE=ro_RO" + // or "export LC_CTYPE=de_DE.utf8" to your .profile. + + include "de(basic)" + + name[Group1]="Romanian (Germany)"; + + key { [ t, T, tcedilla, Tcedilla ] }; + key { [ i, I, icircumflex, Icircumflex ] }; + key { [ a, A, acircumflex, Acircumflex ] }; + key { [ s, S, scedilla, Scedilla ] }; + key { [ adiaeresis, Adiaeresis, abreve, Abreve ] }; +}; + +partial alphanumeric_keys +xkb_symbols "ro_nodeadkeys" { + // add romanian-specific letters to the German nodeadkeys layout. + // Read the comment for de_ro ! + + include "de(nodeadkeys)" + name[Group1]="Romanian (Germany, eliminate dead keys)"; + + key { [ t, T, tcedilla, Tcedilla ] }; + key { [ i, I, icircumflex, Icircumflex ] }; + key { [ a, A, acircumflex, Acircumflex ] }; + key { [ s, S, scedilla, Scedilla ] }; + key { [ adiaeresis, Adiaeresis, abreve, Abreve ] }; +}; + +// German Dvorak keymap by Thorsten Staerk (www.staerk.de/thorsten) +// Have acute and grave as dead keys, tilde and circumflex alive as they are needed +// in many programming languages. +// to use this keymap, use a 105-key-keyboard and the command setxkbmap -model pc105 -layout dvorak -variant de +// source: http://www-lehre.informatik.uni-osnabrueck.de/~rfreund/dvorak.php +partial alphanumeric_keys +xkb_symbols "dvorak" { + include "us(dvorak)" + + name[Group1]="German (Dvorak)"; + + key { [ asciicircum, degree ] }; + + key { [ 1, exclam, onesuperior ] }; + key { [ 2, quotedbl, twosuperior ] }; + key { [ 3, section, threesuperior ] }; + key { [ 4, dollar, bar ] }; + key { [ 5, percent, bar ] }; + key { [ 6, ampersand, brokenbar ] }; + key { [ 7, slash, braceleft ] }; + key { [ 8, parenleft, bracketleft ] }; + key { [ 9, parenright, bracketright ] }; + key { [ 0, equal, braceright ] }; + key { [ plus, asterisk, asciitilde ] }; + key { [ less, greater, dead_grave ] }; + + key { [ udiaeresis, Udiaeresis, at ] }; + key { [ comma, semicolon, dead_diaeresis ] }; + key { [ period, colon ] }; + key { [ c, C, copyright, Cacute ] }; + key { [ t, T, trademark ] }; + key { [ z, Z, zabovedot, Zabovedot ] }; + key { [ question, ssharp ] }; + key { [ slash, backslash, dead_acute ] }; + + key { [ a, A, at, aogonek ] }; + key { [ o, O, oacute, Oacute ] }; + key { [ e, E, EuroSign, eogonek ] }; + key { [ i, I ] }; + key { [ u, U ] }; + key { [ h, H ] }; + key { [ d, D ] }; + key { [ r, R, registered ] }; + key { [ n, N, nacute, Nacute ] }; + key { [ s, S, sacute, Sacute] }; + key { [ l, L, lstroke, Lstroke ] }; + + key { [ odiaeresis, Odiaeresis ] }; + key { [ q, Q, at ] }; + key { [ m, M, mu ] }; + key { [ numbersign, apostrophe ] }; + + key { [ minus, underscore, hyphen, diaeresis] }; + + key { [ adiaeresis, Adiaeresis, bar ] }; + + include "level3(ralt_switch)" +}; + +partial alphanumeric_keys +xkb_symbols "Sundeadkeys" { + + // For naming consistency + + include "de(basic)" + +}; + +partial alphanumeric_keys +xkb_symbols "sundeadkeys" { + + // For naming consistency + + include "de(Sundeadkeys)" + + name[Group1]="German (Sun dead keys)"; +}; + + +// German Neo-Layout Version 2 +// adopted 2004 by Hanno Behrens +// inspired by Dvorak/de-ergo http://www.goebel-consult.de/de-ergo/ +// +// Authors: +// Stephan Hilb +// +// Benjamin Kellermann +// Erik Streb +// and many other contributors +// +// http://www.neo-layout.org +// +// $Revision$, $Date$ + +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"; + + // Tab as Multi_key (Compose) + // -------------------------------------------------------------- + key { [ Tab, ISO_Left_Tab, Multi_key, ISO_Level5_Lock, NoSymbol, NoSymbol, NoSymbol, ISO_Level5_Lock ] }; + + + // Number row + // -------------------------------------------------------------- + key { [ dead_circumflex, dead_caron, U21BB, U02DE, dead_abovedot, Pointer_EnableKeys, dead_belowdot, NoSymbol ] }; + + key { [ 1, degree, onesuperior, onesubscript, ordfeminine, NoSymbol, notsign, NoSymbol ] }; + key { [ 2, section, twosuperior, twosubscript, masculine, NoSymbol, logicalor, NoSymbol ] }; + key { [ 3, U2113, threesuperior, threesubscript, numerosign, NoSymbol, logicaland, NoSymbol ] }; + key { [ 4, guillemotright, U203A, femalesymbol, NoSymbol, NoSymbol, U22A5, NoSymbol ] }; + key { [ 5, guillemotleft, U2039, malesymbol, periodcentered, NoSymbol, U2221, NoSymbol ] }; + key { [ 6, dollar, cent, U26A5, sterling, NoSymbol, U2225, NoSymbol ] }; + + key { [ 7, EuroSign, yen, U03F0, currency, NoSymbol, rightarrow, NoSymbol ] }; + key { [ 8, doublelowquotemark, singlelowquotemark, U27E8, Tab, ISO_Left_Tab, U221E, NoSymbol ] }; + key { [ 9, leftdoublequotemark, leftsinglequotemark, U27E9, KP_Divide, KP_Divide, variation, NoSymbol ] }; + key { [ 0, rightdoublequotemark, rightsinglequotemark, zerosubscript, KP_Multiply, KP_Multiply, emptyset, NoSymbol ] }; + + key { [ minus, emdash, NoSymbol, U2011, KP_Subtract, KP_Subtract, hyphen, NoSymbol ] }; + key { [ dead_grave, dead_cedilla, dead_abovering, dead_dasia, dead_diaeresis, NoSymbol, dead_macron, NoSymbol ] }; + + // Top row + // -------------------------------------------------------------- + key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC"; + key { [ x, X, ellipsis, Greek_xi, Prior, Prior, Greek_XI, NoSymbol ] }; + key { [ v, V, underscore, NoSymbol, BackSpace, BackSpace, radical, NoSymbol ] }; + key { [ l, L, bracketleft, Greek_lambda, Up, Up, Greek_LAMBDA, NoSymbol ] }; + key { [ c, C, bracketright, Greek_chi, Delete, Delete, U2102, NoSymbol ] }; + key { [ w, W, asciicircum, Greek_omega, Next, Next, Greek_OMEGA, NoSymbol ] }; + + key { [ k, K, exclam, Greek_kappa, exclamdown, NoSymbol, multiply, NoSymbol ] }; + key { [ h, H, less, Greek_psi, KP_7, KP_7, Greek_PSI, NoSymbol ] }; + key { [ g, G, greater, Greek_gamma, KP_8, KP_8, Greek_GAMMA, NoSymbol ] }; + key { [ f, F, equal, Greek_phi, KP_9, KP_9, Greek_PHI, NoSymbol ] }; + key { [ q, Q, ampersand, U03D5, KP_Add, KP_Add, U211A, NoSymbol ] }; + + key { [ ssharp, U1E9E, U017F, Greek_finalsmallsigma, U2212, NoSymbol, jot, NoSymbol ] }; + + key.type[Group1] = "EIGHT_LEVEL"; + key { [ dead_acute, dead_tilde, dead_stroke, dead_psili, dead_doubleacute, NoSymbol, dead_breve, NoSymbol ] }; + + // Middle row + // -------------------------------------------------------------- + key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC"; + key { [ u, U, backslash, NoSymbol, Home, Home, includedin, NoSymbol ] }; + key { [ i, I, slash, Greek_iota, Left, Left, integral, NoSymbol ] }; + key { [ a, A, braceleft, Greek_alpha, Down, Down, U2200, NoSymbol ] }; + key { [ e, E, braceright, Greek_epsilon, Right, Right, U2203, NoSymbol ] }; + key { [ o, O, asterisk, Greek_omicron, End, End, elementof, NoSymbol ] }; + + key { [ s, S, question, Greek_sigma, questiondown, NoSymbol, Greek_SIGMA, NoSymbol ] }; + key { [ n, N, parenleft, Greek_nu, KP_4, KP_4, U2115, NoSymbol ] }; + key { [ r, R, parenright, Greek_rho, KP_5, KP_5, U211D, NoSymbol ] }; + key { [ t, T, minus, Greek_tau, KP_6, KP_6, partialderivative, NoSymbol ] }; + key { [ d, D, colon, Greek_delta, KP_Separator, comma, Greek_DELTA, NoSymbol ] }; + + key { [ y, Y, at, Greek_upsilon, period, KP_Decimal, nabla, NoSymbol ] }; + + // Bottom row + // -------------------------------------------------------------- + key { [ udiaeresis, Udiaeresis, numbersign, NoSymbol, Escape, Escape, union, NoSymbol ] }; + key { [ odiaeresis, Odiaeresis, dollar, U03F5, Tab, Tab, intersection, NoSymbol ] }; + key { [ adiaeresis, Adiaeresis, bar, Greek_eta, Insert, Insert, U2135, NoSymbol ] }; + key { [ p, P, asciitilde, Greek_pi, Return, Return, Greek_PI, NoSymbol ] }; + key { [ z, Z, grave, Greek_zeta, Undo, Undo, U2124, NoSymbol ] }; + + key { [ b, B, plus, Greek_beta, colon, NoSymbol, U21D0, NoSymbol ] }; + key { [ m, M, percent, Greek_mu, KP_1, KP_1, ifonlyif, NoSymbol ] }; + key.type[Group1] = "EIGHT_LEVEL"; + key { [ comma, endash, quotedbl, U03F1, KP_2, KP_2, U21D2, NoSymbol ] }; + key { [ period, enfilledcircbullet, apostrophe, U03D1, KP_3, KP_3, U21A6, NoSymbol ] }; + key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC"; + key { [ j, J, semicolon, Greek_theta, semicolon, NoSymbol, Greek_THETA, NoSymbol ] }; + key.type[Group1] = "EIGHT_LEVEL"; + + // Space key + // -------------------------------------------------------------- + key { [ space, space, space, nobreakspace, KP_0, KP_0, U202F, NoSymbol ] }; + + + // Keypad-keys + // =============== + + // The former Numlock key: + key { [ Tab, ISO_Left_Tab, equal, approxeq, notequal, Pointer_EnableKeys, identical, NoSymbol ] }; + + // Topmost row + // -------------------------------------------------------------- + key { [ KP_Divide, KP_Divide, division, U2300, U2215, NoSymbol, U2223, NoSymbol ] }; + key { [ KP_Multiply, KP_Multiply, U2219, U2299, multiply, NoSymbol, U2297, NoSymbol ] }; + key { [ KP_Subtract, KP_Subtract, U2212, U2296, U2216, NoSymbol, U2238, NoSymbol ] }; + + // Top row + // -------------------------------------------------------------- + key { [ KP_7, U2714, U2195, U226A, KP_Home, KP_Home, upstile, NoSymbol ] }; + key { [ KP_8, U2718, uparrow, intersection, KP_Up, KP_Up, U22C2, NoSymbol ] }; + key { [ KP_9, dagger, U20D7, U226B, KP_Prior, KP_Prior, U2309, NoSymbol ] }; + key { [ KP_Add, KP_Add, plusminus, U2295, U2213, NoSymbol, U2214, NoSymbol ] }; + + // Middle row + // -------------------------------------------------------------- + key { [ KP_4, club, leftarrow, includedin, KP_Left, KP_Left, U2286, NoSymbol ] }; + key { [ KP_5, EuroSign, colon, U22B6, KP_Begin, KP_Begin, U22B7, NoSymbol ] }; + key { [ KP_6, U2023, rightarrow, includes, KP_Right, KP_Right, U2287, NoSymbol ] }; + + // Bottom row + // -------------------------------------------------------------- + key { [ KP_1, diamond, U2194, lessthanequal, KP_End, KP_End, downstile, NoSymbol ] }; + key { [ KP_2, heart, downarrow, union, KP_Down, KP_Down, U22C3, NoSymbol ] }; + key { [ KP_3, U2660, U21CC, greaterthanequal, KP_Next, KP_Next, U230B, NoSymbol ] }; + key { [ KP_Enter, KP_Enter, KP_Enter, KP_Enter, KP_Enter, KP_Enter, KP_Enter, NoSymbol ] }; + key { [ KP_Equal, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] }; + + // Bottommost row + // -------------------------------------------------------------- + key { [ KP_0, U2423, percent, U2030, KP_Insert, KP_Insert, U25A1, NoSymbol ] }; + key { [ KP_Separator, period, comma, minutes, KP_Delete, KP_Delete, seconds, NoSymbol ] }; +}; + +partial alphanumeric_keys modifier_keys keypad_keys +xkb_symbols "neo" { + + include "de(neo_base)" + + name[Group1]= "German (Neo 2)"; + + include "shift(both_capslock)" + include "level3(caps_switch)" + include "level3(bksl_switch)" + include "level5(lsgt_switch)" + include "level5(ralt_switch)" +}; + +// Copied from macintosh_vndr/de +// olh@suse.de very close to MacOS map + +partial alphanumeric_keys +xkb_symbols "mac" { + + include "de" + name[Group1]= "German (Macintosh)"; + + // Alphanumeric section + key { [ 1, exclam, exclamdown, at ] }; + key { [ 5, percent, bracketleft ] }; + key { [ 6, ampersand, bracketright ] }; + key { [ 7, slash, bar, backslash ] }; + key { [ 8, parenleft, braceleft, asciitilde ] }; + key { [ 9, parenright, braceright ] }; + key { [ q, Q, guillemotleft, guillemotright ] }; + key { [ r, R, registered ] }; + key { [ u, U, diaeresis, Aacute ] }; + key { [ i, I, slash, Ucircumflex ] }; + key { [ udiaeresis, Udiaeresis, periodcentered, degree ] }; + key { [ plus, asterisk, asciitilde ] }; + key { [ a, A, aring, Aring ] }; + key { [ g, G, copyright ] }; + key { [ h, H, ordfeminine ] }; + key { [ l, L, at ] }; + key { [ odiaeresis, Odiaeresis, dead_acute ] }; + key { [ n, N, asciitilde ] }; + +}; + +partial alphanumeric_keys +xkb_symbols "mac_nodeadkeys" { + // modify the standard German mac layout to not have any dead keys + include "de(mac)" + name[Group1]= "German (Macintosh, eliminate dead keys)"; + key { [ 4, dollar, onequarter, currency ] }; + + key { [ asciicircum, degree, notsign ] }; + key { [ acute, grave, cedilla ] }; + key { [ udiaeresis, Udiaeresis, diaeresis ] }; + key { [ plus, asterisk, asciitilde, macron ] }; + key { [ odiaeresis, Odiaeresis, acute ] }; + key { [ adiaeresis, Adiaeresis, asciicircum ] }; + + key { [ numbersign, apostrophe, grave ] }; +}; + +partial alphanumeric_keys +xkb_symbols "dsb" +{ + name[Group1] = "Lower Sorbian"; + include "latin(basic)" + include "level3(ralt_switch)" + include "kpdl(comma)" + key { [ z, Z, zcaron, Zcaron ] }; + key { [ x, X, zacute, Zacute ] }; + key { [ c, C, cacute, Cacute ] }; + key { [ v, V, ccaron, Ccaron ] }; + key { [ n, N, nacute, Nacute ] }; + key { [ s, S, sacute, Sacute ] }; + key { [ d, D, scaron, Scaron ] }; + key { [ f, F ] }; + key { [ q, Q ] }; + key { [ w, W ] }; + key { [ e, E, ecaron, Ecaron ] }; + key { [ r, R, racute, Racute ] }; + key { [ t, T, U20B5, EuroSign ] }; + key { [ o, O, oacute, Oacute ] }; +}; + +partial alphanumeric_keys +xkb_symbols "dsb_qwertz" +{ + name[Group1] = "Lower Sorbian (qwertz)"; + include "latin(basic)" + include "level3(ralt_switch)" + include "kpdl(comma)" + key { [ y, Y ] }; + key { [ x, X ] }; + key { [ c, C, cacute, Cacute ] }; + key { [ v, V, ccaron, Ccaron ] }; + key { [ n, N, nacute, Nacute ] }; + key { [ s, S, sacute, Sacute ] }; + key { [ d, D, scaron, Scaron ] }; + key { [ f, F ] }; + key { [ q, Q ] }; + key { [ w, W ] }; + key { [ e, E, ecaron, Ecaron ] }; + key { [ r, R, racute, Racute ] }; + key { [ t, T, U20B5, EuroSign ] }; + key { [ z, Z, zcaron, Zcaron ] }; + key { [ u, U, zacute, Zacute ] }; + key { [ o, O, oacute, Oacute ] }; +}; + +// layout for Russian letters on an german keyboard +// based on US-RU layout by Ivan Popov 2005-07-17 +// adopted for german layout by Alexey Fisher 2010-08-19 + +partial alphanumeric_keys +xkb_symbols "ru" { + + include "de(basic)" + + name[Group1]= "Russian (Germany, phonetic)"; + +key.type[group1]="FOUR_LEVEL_ALPHABETIC"; + + key { [ Cyrillic_a, Cyrillic_A ] }; + key { [ Cyrillic_be, Cyrillic_BE ] }; + key { [ Cyrillic_ve, Cyrillic_VE ] }; + key { [ Cyrillic_ghe, Cyrillic_GHE ] }; + key { [ Cyrillic_de, Cyrillic_DE ] }; + key { [ Cyrillic_ie, Cyrillic_IE ] }; + key { [ Cyrillic_io, Cyrillic_IO, asciitilde ] }; + key { [ Cyrillic_zhe, Cyrillic_ZHE ] }; + key { [ Cyrillic_ze, Cyrillic_ZE ] }; + key { [ Cyrillic_i, Cyrillic_I ] }; + key { [ Cyrillic_shorti, Cyrillic_SHORTI ] }; + key { [ Cyrillic_ka, Cyrillic_KA ] }; + key { [ Cyrillic_el, Cyrillic_EL ] }; + key { [ Cyrillic_em, Cyrillic_EM ] }; + key { [ Cyrillic_en, Cyrillic_EN ] }; + key { [ Cyrillic_o, Cyrillic_O ] }; + key { [ Cyrillic_pe, Cyrillic_PE ] }; + key { [ Cyrillic_er, Cyrillic_ER ] }; + key { [ Cyrillic_es, Cyrillic_ES ] }; + key { [ Cyrillic_te, Cyrillic_TE ] }; + key { [ Cyrillic_u, Cyrillic_U ] }; + key { [ Cyrillic_ef, Cyrillic_EF ] }; + key { [ Cyrillic_ha, Cyrillic_HA ] }; + key { [ Cyrillic_tse, Cyrillic_TSE ] }; + key { [ Cyrillic_che, Cyrillic_CHE ] }; + key { [ Cyrillic_sha, Cyrillic_SHA ] }; + key { [ Cyrillic_shcha, Cyrillic_SHCHA, plus, asterisk ] }; + key { [ Cyrillic_hardsign, Cyrillic_HARDSIGN ] }; + key { [ Cyrillic_yeru, Cyrillic_YERU ] }; + key { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] }; + key { [ Cyrillic_e, Cyrillic_E ] }; + key { [ Cyrillic_yu, Cyrillic_YU, numbersign, apostrophe ] }; + key { [ Cyrillic_ya, Cyrillic_YA ] }; + + include "level3(ralt_switch)" +}; + +partial alphanumeric_keys +xkb_symbols "htcdream" { + include "inet(htcdream)" + + name[Group1]= "German"; + + //second row + key { [ q, Q, Tab, Tab ] }; + key { [ w, W, grave, grave ] }; + key { [ e, E, EuroSign, EuroSign ] }; + key { [ r, R, underscore, underscore ] }; + key { [ t, T, sterling, sterling] }; + key { [ z, Z, division, division ] }; + key { [ u, U, udiaeresis, udiaeresis ] }; + key { [ i, I, minus, minus ] }; + key { [ o, O, odiaeresis, odiaeresis ] }; + key { [ p, P, equal, equal ] }; + + //third row + key { [ a, A, adiaeresis, adiaeresis ] }; + key { [ s, S, ssharp, ssharp] }; + key { [ d ,D, backslash, backslash ] }; + key { [ f, F, braceleft, braceleft ] }; + key { [ g, G, braceright, braceright ] }; + key { [ h, H, multiply, multiply ] }; + key { [ j, J, colon, colon ] }; + key { [ k, K, plus, plus ] }; + key { [ l, L, apostrophe, apostrophe ] }; + + //forth row + key { [ y, Y, bar, bar ] }; + key { [ x, X, bracketleft, bracketleft ] }; + key { [ c, C, bracketright, bracketright ] }; + key { [ v, V, less, less ] }; + key { [ b, B, greater, greater ] }; + key { [ n, N, semicolon, semicolon ] }; + key { [ m, M, quotedbl, quotedbl ] }; + key { [ comma, comma, question, question ] }; + + //fifth row + key { [ at, at, asciitilde, asciitilde ] }; + + include "level3(alt_switch)" +}; + +// EXTRAS: + +partial alphanumeric_keys +xkb_symbols "us" { + include "us" + + name[Group1]="German (US keyboard with German letters)"; + + key { [ a, A, adiaeresis, Adiaeresis ] }; + key { [ s, S, ssharp, ssharp ] }; + key { [ semicolon, colon, odiaeresis, Odiaeresis ] }; + key { [ apostrophe, quotedbl, adiaeresis, Adiaeresis ] }; + key { [ e, E, EuroSign, EuroSign ] }; + key { [ u, U, udiaeresis, Udiaeresis ] }; + key { [ o, O, odiaeresis, Odiaeresis ] }; + key { [ bracketleft, braceleft, udiaeresis, Udiaeresis ] }; + key { [ 3, numbersign, section, section ] }; + key { [ minus, underscore, ssharp, question ] }; + + include "level3(ralt_switch)" +}; + +partial alphanumeric_keys +xkb_symbols "hu" { + + // modify the basic German layout to not have any dead keys and add Hungarian letters + + include "de(basic)" + name[Group1]="German (with Hungarian letters and no dead keys)"; + + key { [ y, Y, guillemotleft, less ] }; + key { [odiaeresis, Odiaeresis, eacute, Eacute ] }; + key { [adiaeresis, Adiaeresis, aacute, Aacute] }; + key { [ e, E, EuroSign, EuroSign ] }; + key { [ z, Z, leftarrow, yen ] }; + key { [ u, U, uacute, Uacute ] }; + key { [ i, I, iacute, Iacute ] }; + key { [ o, O, odoubleacute,Odoubleacute ] }; + key { [udiaeresis, Udiaeresis, udoubleacute,Udoubleacute ] }; + key { [ plus, asterisk, asciitilde, macron ] }; + key { [ acute, grave, oacute, Oacute ] }; + key { [numbersign, apostrophe, grave, grave ] }; + key { [asciicircum, degree, notsign, notsign ] }; + + +}; diff --git a/test/data/symbols/eurosign b/test/data/symbols/eurosign new file mode 100644 index 0000000..0d95a90 --- /dev/null +++ b/test/data/symbols/eurosign @@ -0,0 +1,23 @@ +// Most keyboards have the EuroSign engraved on the E key +partial +xkb_symbols "e" { + key { [ NoSymbol, NoSymbol, EuroSign, NoSymbol ] }; +}; + +// Many Apple keyboards have the EuroSign engraved on the 2 key +partial +xkb_symbols "2" { + key { [ NoSymbol, NoSymbol, EuroSign, NoSymbol ] }; +}; + +// Some keyboards have the EuroSign engraved on the 4 key +partial +xkb_symbols "4" { + key { [ NoSymbol, NoSymbol, EuroSign, NoSymbol ] }; +}; + +// Many keyboards have the EuroSign engraved on the 5 key +partial +xkb_symbols "5" { + key { [ NoSymbol, NoSymbol, EuroSign, NoSymbol ] }; +}; diff --git a/test/data/symbols/group b/test/data/symbols/group new file mode 100644 index 0000000..fb2f879 --- /dev/null +++ b/test/data/symbols/group @@ -0,0 +1,457 @@ +// using the group(switch) map, the right alt key temporarily chooses +// the second keyboard group (until it is released). +// +partial modifier_keys +xkb_symbols "switch" { + key { + symbols[Group1]= [ Mode_switch, Multi_key ], + virtualMods= AltGr + }; +}; + +// using the group(lswitch) map, the left alt key temporarily chooses +// the second keyboard group (until it is released). +// +partial modifier_keys +xkb_symbols "lswitch" { + key { + symbols[Group1]= [ Mode_switch, Multi_key ], + virtualMods= AltGr + }; +}; + + +// using the group(win_switch) map, both Windows'logo keys temporarily +// choose the second keyboard group (until release). If you use this +// map, you would declare you keyboard as pc101 or pc102 instead of +// pc104 or pc105. +partial modifier_keys +xkb_symbols "win_switch" { + include "group(lwin_switch)" + include "group(rwin_switch)" +}; + +// using the group(lwin_switch) map, the left Windows' logo key +// temporarily chooses the second keyboard group (until it is +// released). If you use this map, you would declare you keyboard as +// pc101 or pc102 instead of pc104 or pc105. +partial modifier_keys +xkb_symbols "lwin_switch" { + key { + symbols[Group1] = [ Mode_switch, Multi_key ], + virtualMods= AltGr + }; +}; + +// using the group(rwin_switch) map, the right Windows' logo key +// temporarily chooses the second keyboard group (until it is +// released). If you use this map, you would declare you keyboard as +// pc101 or pc102 instead of pc104 or pc105. +partial modifier_keys +xkb_symbols "rwin_switch" { + key { + symbols[Group1] = [ Mode_switch, Multi_key ], + virtualMods= AltGr + }; +}; + +// Right Ctrl key temporary chooses the second keyboard group. +// Needed mainly for Canadian keyboard +partial modifier_keys +xkb_symbols "rctrl_switch" { + key { + symbols[Group1]= [ Mode_switch ] + }; +}; + +// using the group(toggle) map, pressing the right alt key switches to +// the next sequential group (until the next explicit group change). +partial modifier_keys +xkb_symbols "toggle" { + virtual_modifiers AltGr; + key { + symbols[Group1]= [ ISO_Next_Group ], + virtualMods= AltGr + }; +}; + +// using the group(shifts_toggle) map, pressing both shift keys together +// locks the next or previous sequential keyboard group +// (depending on which shift is pressed first - right or left, +// correspongingly) +partial modifier_keys +xkb_symbols "shifts_toggle" { + key { [ Shift_L, ISO_Prev_Group ] }; + key { [ Shift_R, ISO_Next_Group ] }; +}; + +// using the group(shift_caps_toggle) map, pressing: +// Shift+Caps Lock toggles group +partial modifier_keys +xkb_symbols "shift_caps_toggle" { + key { [ Caps_Lock, ISO_Next_Group ] }; +}; + +// using the group(shift_caps_switch) map, pressing: +// Caps Lock selects the first group +// Shift+Caps Lock selects the last group +partial modifier_keys +xkb_symbols "shift_caps_switch" { + key { [ ISO_First_Group, ISO_Last_Group ] }; +}; + +// using the group(win_menu_switch) map, pressing: +// LWIN selects the first group +// RWIN or MENU selects the last group +partial modifier_keys +xkb_symbols "win_menu_switch" { + virtual_modifiers AltGr; + key { + virtualMods= AltGr, + symbols[Group1] = [ ISO_First_Group ] + }; + key { + virtualMods= AltGr, + symbols[Group1] = [ ISO_Last_Group ] + }; + key { + virtualMods= AltGr, + symbols[Group1] = [ ISO_Last_Group ] + }; +}; + +// using the group(lctrl_rctrl_switch) map, pressing: +// Left Control selects the first group +// Right Control selects the last group +partial modifier_keys +xkb_symbols "lctrl_rctrl_switch" { + virtual_modifiers AltGr; + key { + virtualMods= AltGr, + symbols[Group1] = [ ISO_First_Group ] + }; + key { + virtualMods= AltGr, + symbols[Group1] = [ ISO_Last_Group ] + }; +}; + + +// +// CTRL-SHIFT toggle section +// +partial modifier_keys +xkb_symbols "lctrl_lshift_toggle" { + key { + type[Group1]="PC_CONTROL_LEVEL2", + symbols[Group1]= [ Shift_L, ISO_Next_Group ] + }; + key { [ Control_L, ISO_Next_Group ] }; +}; + +partial modifier_keys +xkb_symbols "lctrl_lshift_toggle_rev" { + key { + type[Group1]="PC_CONTROL_LEVEL2", + symbols[Group1]= [ Shift_L, ISO_Prev_Group ] + }; + key { [ Control_L, ISO_Prev_Group ] }; +}; + +partial modifier_keys +xkb_symbols "rctrl_rshift_toggle" { + key { + type[Group1]="PC_CONTROL_LEVEL2", + symbols[Group1]= [ Shift_R, ISO_Next_Group ] + }; + key { [ Control_R, ISO_Next_Group ] }; +}; + +partial modifier_keys +xkb_symbols "ctrl_shift_toggle" { + include "group(lctrl_lshift_toggle)" + include "group(rctrl_rshift_toggle)" +}; + +partial modifier_keys +xkb_symbols "ctrl_shift_toggle_bidir" { + include "group(lctrl_lshift_toggle_rev)" + include "group(rctrl_rshift_toggle)" +}; + + +// +// CTRL-ALT toggle section +// +partial modifier_keys +xkb_symbols "lctrl_lalt_toggle" { + virtual_modifiers Alt; + key { + type[Group1]="PC_CONTROL_LEVEL2", + symbols[Group1]= [ NoSymbol, ISO_Next_Group ], + virtualMods= Alt + }; + key { + type[Group1]="PC_ALT_LEVEL2", + symbols[Group1]= [ Control_L, ISO_Next_Group ] + }; +}; + +partial modifier_keys +xkb_symbols "lctrl_lalt_toggle_rev" { + virtual_modifiers Alt; + key { + type[Group1]="PC_CONTROL_LEVEL2", + symbols[Group1]= [ NoSymbol, ISO_Prev_Group ], + virtualMods= Alt + }; + key { + type[Group1]="PC_ALT_LEVEL2", + symbols[Group1]= [ Control_L, ISO_Prev_Group ] + }; +}; + +partial modifier_keys +xkb_symbols "rctrl_ralt_toggle" { + virtual_modifiers Alt; + key { + type[Group1]="PC_CONTROL_LEVEL2", + symbols[Group1]= [ NoSymbol, ISO_Next_Group ], + virtualMods= Alt + }; + key { + type[Group1]="PC_ALT_LEVEL2", + symbols[Group1]= [ Control_R, ISO_Next_Group ] + }; +}; + +partial modifier_keys +xkb_symbols "ctrl_alt_toggle" { + include "group(lctrl_lalt_toggle)" + include "group(rctrl_ralt_toggle)" +}; + +partial modifier_keys +xkb_symbols "ctrl_alt_toggle_bidir" { + include "group(lctrl_lalt_toggle_rev)" + include "group(rctrl_ralt_toggle)" +}; + + +// +// ALT-SHIFT toggle section +// +partial modifier_keys +xkb_symbols "lalt_lshift_toggle" { + virtual_modifiers Alt; + key { + symbols[Group1]= [ NoSymbol, ISO_Next_Group ], + virtualMods= Alt + }; + key { + type[Group1]="PC_ALT_LEVEL2", + symbols[Group1]= [ Shift_L, ISO_Next_Group ] + }; +}; + +partial modifier_keys +xkb_symbols "lalt_lshift_toggle_rev" { + virtual_modifiers Alt; + key { + symbols[Group1]= [ NoSymbol, ISO_Prev_Group ], + virtualMods= Alt + }; + key { + type[Group1]="PC_ALT_LEVEL2", + symbols[Group1]= [ Shift_L, ISO_Prev_Group ] + }; +}; + +partial modifier_keys +xkb_symbols "ralt_rshift_toggle" { + virtual_modifiers Alt; + key { + symbols[Group1]= [ NoSymbol, ISO_Next_Group ], + virtualMods= Alt + }; + key { + type[Group1]="PC_ALT_LEVEL2", + symbols[Group1]= [ Shift_R, ISO_Next_Group ] + }; +}; + +partial modifier_keys +xkb_symbols "alt_shift_toggle" { + include "group(lalt_lshift_toggle)" + include "group(ralt_rshift_toggle)" +}; + +partial modifier_keys +xkb_symbols "alt_shift_toggle_bidir" { + include "group(lalt_lshift_toggle_rev)" + include "group(ralt_rshift_toggle)" +}; + + +// using the group(menu_toggle) map, pressing: +// Menu key toggles groups +// Shift+Menu acts as Menu +partial modifier_keys +xkb_symbols "menu_toggle" { + key { [ ISO_Next_Group, Menu ] }; +}; + +// using the group(lwin_toggle) map, pressing the left Windows' logo key +// toggles groups. If you use this map, you would declare you keyboard +// as pc101 or pc102 instead of pc104 or pc105. +partial modifier_keys +xkb_symbols "lwin_toggle" { + virtual_modifiers AltGr; + key { + virtualMods= AltGr, + symbols[Group1] = [ ISO_Next_Group ] + }; +}; + +// using the group(rwin_toggle) map, pressing the right Windows' logo key +// toggles groups. If you use this map, you would declare you keyboard +// as pc101 or pc102 instead of pc104 or pc105. +partial modifier_keys +xkb_symbols "rwin_toggle" { + virtual_modifiers AltGr; + key { + virtualMods= AltGr, + symbols[Group1] = [ ISO_Next_Group ] + }; +}; + +// Both Ctrls pressed together toggle group +partial modifier_keys +xkb_symbols "ctrls_toggle" { + virtual_modifiers LControl, RControl; + key { + type[Group1]="PC_RCONTROL_LEVEL2", + symbols[Group1]= [ NoSymbol, ISO_Prev_Group ], + virtualMods= LControl + }; + key { + type[Group1]="PC_LCONTROL_LEVEL2", + symbols[Group1]= [ NoSymbol, ISO_Next_Group ], + virtualMods= RControl + }; +}; + +// Both Alts pressed together toggle group +partial modifier_keys +xkb_symbols "alts_toggle" { + virtual_modifiers LAlt, RAlt; + key { + type[Group1]="PC_RALT_LEVEL2", + symbols[Group1]= [ NoSymbol, ISO_Prev_Group ], + virtualMods= LAlt + }; + key { + type[Group1]="PC_LALT_LEVEL2", + symbols[Group1]= [ NoSymbol, ISO_Next_Group ], + virtualMods= RAlt + }; +}; + +// Left Shift key toggles group +partial modifier_keys +xkb_symbols "lshift_toggle" { + virtual_modifiers AltGr; + key { + symbols[Group1]= [ ISO_Next_Group ], + virtualMods= AltGr + }; +}; + +// Right Shift key toggles group +partial modifier_keys +xkb_symbols "rshift_toggle" { + virtual_modifiers AltGr; + key { + symbols[Group1]= [ ISO_Next_Group ], + virtualMods= AltGr + }; +}; + +// Left Alt key toggles group +partial modifier_keys +xkb_symbols "lalt_toggle" { + virtual_modifiers AltGr; + key { + symbols[Group1]= [ ISO_Next_Group ], + virtualMods= AltGr + }; +}; + +// Left Ctrl key toggles group +partial modifier_keys +xkb_symbols "lctrl_toggle" { + virtual_modifiers AltGr; + key { + symbols[Group1]= [ ISO_Next_Group ], + virtualMods= AltGr + }; +}; + +// Right Ctrl key toggles group +partial modifier_keys +xkb_symbols "rctrl_toggle" { + virtual_modifiers AltGr; + key { + symbols[Group1]= [ ISO_Next_Group ], + virtualMods= AltGr + }; +}; + +// using the group(alt_caps_toggle) map, pressing: +// Alt+Caps Lock toggles group +// Caps Lock toggles caps lock +partial modifier_keys +xkb_symbols "alt_caps_toggle" { + key { + type="PC_ALT_LEVEL2", + symbols[Group1]= [ Caps_Lock, ISO_Next_Group] + }; +}; + +partial hidden modifier_keys +xkb_symbols "olpc" { + key { [ ISO_Next_Group, ISO_Prev_Group ] }; +}; + +partial modifier_keys +xkb_symbols "alt_space_toggle" { + key { + type[Group1]="PC_ALT_LEVEL2", + symbols[Group1]= [ space, ISO_Next_Group ] + }; +}; + +// using the group(sclk_toggle) map, pressing the Scroll Lock key +// toggles groups. +partial modifier_keys +xkb_symbols "sclk_toggle" { + virtual_modifiers AltGr; + key { + virtualMods= AltGr, + symbols[Group1] = [ ISO_Next_Group ] + }; +}; + +// Control_L+Win_L locks the first group (presumably Lat). +// Control_R+Menu locks the second group (presumably Rus). +partial modifier_keys +xkb_symbols "lctrl_lwin_rctrl_menu" { + key { + type[ Group1 ] = "PC_CONTROL_LEVEL2", + symbols[ Group1 ] = [ Super_L, ISO_First_Group ] + }; + key { + type[ Group1 ] = "PC_CONTROL_LEVEL2", + symbols[ Group1 ] = [ Menu, ISO_Last_Group ] + }; +}; // lctrl_lwin_rctrl_menu diff --git a/test/data/symbols/il b/test/data/symbols/il new file mode 100644 index 0000000..8bbeaaa --- /dev/null +++ b/test/data/symbols/il @@ -0,0 +1,251 @@ +// based on a keyboard map from an 'xkb/symbols/il' file + +// This is a partial implemetation of the Israeli standard SI-1452 +// It does not implement changes to the English layout ("Alt-English"), +// as I believe that it is not the job of this layout to modify the English +// layout. +partial default alphanumeric_keys +xkb_symbols "basic" { + // uses the kbd layout in use in Israel. + + name[Group1]= "Hebrew"; + + key { [ slash, Q ] }; + key { [ apostrophe, W ] }; + key { [ hebrew_resh, R ] }; + key { [ hebrew_aleph,T ] }; + key { [ hebrew_tet, Y ] }; + key { [ hebrew_waw, U ] }; + key { [ hebrew_finalnun, I ] }; + key { [ hebrew_finalmem, O ] }; + key { [ hebrew_pe, P ] }; + + key { [ hebrew_dalet,S ] }; + key { [ hebrew_gimel,D ] }; + key { [ hebrew_kaph, F ] }; + key { [ hebrew_ayin, G ] }; + key { [ hebrew_yod, H ] }; + key { [ hebrew_chet, J ] }; + key { [ hebrew_lamed, K ] }; + key { [ hebrew_finalkaph, L ] }; + key { [ hebrew_finalpe, colon ] }; + key { [ comma, quotedbl ] }; + + key { [ hebrew_zain, Z ] }; + key { [ hebrew_samech, X ] }; + key { [ hebrew_bet, C ] }; + key { [ hebrew_he, V ] }; + key { [ hebrew_nun, B ] }; + key { [ hebrew_mem, N ] }; + key { [ hebrew_zade, M ] }; + // Mirrored: + key { [ hebrew_taw, greater ] }; + key { [ hebrew_finalzade, less ] }; + + key.type[Group1] = "THREE_LEVEL"; + + key { [ semicolon, asciitilde,0x10005b0 ]}; // Sheva + key { [ period, question, 0x10005c3 ]}; // Sof Pasuq + key { [ hebrew_qoph, E, EuroSign ]}; + key { [ hebrew_shin, A, 0x10020AA ]}; + + // The following may get overriden by the iso9995-3(basic101) symbols. + // therefore they are included here. + // Including them isn't a great idea (for instance: what if group 1 uses + // UK keyboard mapping, and maps shift-3 to sterling? This mapping won't + // preserve that, and I'm not sure that this is a good feature. + key { [ 1, exclam , 0x10005b1 ]}; // H. Segol + key { [ 2, at , 0x10005b2 ]}; // H. Patah + key { [ 3, numbersign , 0x10005b3 ]}; // H. Qamats + key { [ 4, dollar , 0x10005b4 ]}; // Hiriq + key { [ 5, percent , 0x10005b5 ]}; // Tsere + key { [ 6, asciicircum , 0x10005b6 ]}; // Segol + key { [ 7, ampersand , 0x10005b7 ]}; // Patah + key { [ 8, asterisk , 0x10005b8 ]}; // Qamats + // Mirrored: + key { [ 9, parenright , 0x10005c2 ]}; // Sin dot + key { [ 0, parenleft , 0x10005c1 ]}; // Shin dot + key { [ minus, underscore , 0x10005b9 ]}; // Holam + key { [ equal, plus , 0x10005bc ]}; // Dagesh/Shuruq + + // Mirrored: + key { [ bracketright, braceright, 0x10005bf ]}; // Rafe + key { [ bracketleft, braceleft, 0x10005bd ]}; // Meteg + + key { [ backslash, bar, 0x10005bb ]}; // Qubuts + + include "level3(ralt_switch)" +}; + + +// nikud patter based on Dekel Tsur's Hebrew mapping for LyX +partial alphanumeric_keys +xkb_symbols "lyx" { + name[Group1]= "Hebrew (lyx)"; + + key { [ semicolon, asciitilde ] }; + // On some key (e.g. AD01, right below) there is not yet mapping for the + // second shift level. Since I could not figure a simple way to map this + // to "emit nothing", it is currently mapped to the same letter of the + // first shift level (avoiding mapping may risk it be used by a character + // from a different group). + key { [ slash, slash ] }; + key { [ apostrophe, apostrophe ] }; + key { [ hebrew_qoph, 0x10005b8 ] }; // Qamats + key { [ hebrew_resh, 0x10005bc ] }; // Dagesh/Shuruq + key { [ hebrew_aleph, 0x100200e ] }; // LRM + key { [ hebrew_tet, 0x100200f ] }; // RLM + key { [ hebrew_waw, 0x10005b9 ] }; // Holam + key { [ hebrew_finalnun,hebrew_finalnun] }; + key { [ hebrew_finalmem,hebrew_finalmem] }; + key { [ hebrew_pe, 0x10005b7 ] }; // Patah + + key { [ hebrew_shin, 0x10005b0 ] }; // Sheva + key { [ hebrew_dalet, 0x10005bc ] }; // Dagesh/Shuruq + key { [ hebrew_gimel, hebrew_gimel ] }; + key { [ hebrew_kaph, hebrew_kaph ] }; + key { [ hebrew_ayin, 0x10005c2 ] }; // Sin dot + key { [ hebrew_yod, 0x10005c1 ] }; // Shin dot + key { [ hebrew_chet, 0x10005b4 ] }; // Hiriq + key { [ hebrew_lamed, 0x10020aa ] }; // NIS + key { [ hebrew_finalkaph,hebrew_finalkaph] }; + key { [ hebrew_finalpe, colon ] }; + key { [ comma, quotedbl ] }; + + key { [ hebrew_zain, hebrew_zain ] }; + key { [ hebrew_samech,0x10005b6 ] }; // Segol + key { [ hebrew_bet, 0x10005bb ] }; // Qubuts + key { [ hebrew_he, 0x10005b1 ] }; // H. Segol + key { [ hebrew_nun, 0x10005b2 ] }; // H. Patah + key { [ hebrew_mem, 0x10005b3 ] }; // H. Qamats + key { [ hebrew_zade, 0x10005b5 ] }; // Tsere + key { [ hebrew_taw, greater ] }; + key { [ hebrew_finalzade, less ] }; + key { [ period, question ] }; + + // Note the parens mirroring below: + key { [ bracketright, braceright ] }; + key { [ bracketleft, braceleft ] }; + key { [ 9 , parenright ] }; + key { [ 0 , parenleft ] }; + + key { [ minus , 0x10005be ] }; // H. Hiphen + key { [ equal , plus ] }; +}; + + +partial alphanumeric_keys +xkb_symbols "phonetic" { + + // uses the phonetic layout from old Slackware 'il.map' file + + name[Group1]= "Hebrew (phonetic)"; + + key { [ equal, plus, hebrew_doublelowline, hebrew_doublelowline ]}; + + key { [ hebrew_qoph, hebrew_qoph ] }; + key { [ hebrew_waw, hebrew_waw ] }; + key { [ hebrew_aleph, hebrew_aleph ] }; + key { [ hebrew_resh, hebrew_resh ] }; + key { [ hebrew_taw, hebrew_tet ] }; + key { [ hebrew_ayin, hebrew_ayin ] }; + key { [ hebrew_waw, hebrew_waw ] }; + key { [ hebrew_yod, hebrew_yod ] }; + key { [ hebrew_samech, hebrew_samech ] }; + key { [ hebrew_pe, hebrew_finalpe ] }; + + key { [ hebrew_aleph, hebrew_aleph ] }; + key { [ hebrew_shin, hebrew_shin ] }; + key { [ hebrew_dalet, hebrew_dalet ] }; + key { [ hebrew_pe, hebrew_finalpe ] }; + key { [ hebrew_gimel, hebrew_gimel ] }; + key { [ hebrew_he, hebrew_he ] }; + key { [ hebrew_yod, hebrew_yod ] }; + key { [ hebrew_kaph, hebrew_finalkaph ] }; + key { [ hebrew_lamed, hebrew_lamed ] }; + + key { [ hebrew_zain, hebrew_zain ] }; + key { [ hebrew_chet, hebrew_chet ] }; + key { [ hebrew_zade, hebrew_finalzade ] }; + key { [ hebrew_waw, hebrew_waw ] }; + key { [ hebrew_bet, hebrew_bet ] }; + key { [ hebrew_nun, hebrew_finalnun ] }; + key { [ hebrew_mem, hebrew_finalmem ] }; +}; + +// The 'Biblical Hebrew' keyboard layout as defined by Tiro for use with the +// 'SBL Hebrew' font was added 2006.11.13 by Sebastian J. Bronner +// . Its primary features (as compared to the lyx layout) +// are that the consonants are in the Israeli standard positions, that a great +// multitude of glyphs can be input directly from the keyboard, and that it is +// the closest thing to a standard layout a theologian can hope for. +// Documentation (including printable keyboard tables), SBL Hebrew font, and +// keyboard layout for Windows are available at +// http://www.sbl-site.org/Resources/Resources_BiblicalFonts.aspx. +// +// It is of interest that the 'basic' layout defined first in this file (as +// ships with x.org disagrees in the non-consonant characters that the Tiro- +// layout claims to be the Israeli standard. Tiros apparent diligence in the +// PDF-documentation accompanying the keyboard-layout-files lead me to put +// greater stock in their claim than in this file. Therefore, the 'biblical' +// layout below does not include 'il(basic)' but redoes the _whole_ thing from +// scratch. + +partial alphanumeric_keys +xkb_symbols "biblical" { + name[Group1]= "Hebrew (Biblical, Tiro)"; + key.type = "FOUR_LEVEL_SEMIALPHABETIC"; + + key { [ U05C3, U05AE, semicolon, asciitilde ] }; + key { [ 1, U05A9, VoidSymbol, exclam ] }; + key { [ 2, U0599, VoidSymbol, at ] }; + key { [ 3, U0592, VoidSymbol, numbersign ] }; + key { [ 4, U05AF, NewSheqelSign, dollar ] }; + key { [ 5, VoidSymbol, U200D, percent ] }; + key { [ 6, U05B9, U200C, asciicircum ] }; + key { [ 7, U05BF, U034F, ampersand ] }; + key { [ 8, U05C2, U200E, asterisk ] }; + key { [ 9, U05C1, U200F, parenright ] }; + key { [ 0, U059D, U25CC, parenleft ] }; + key { [ U05BE, U05A0, minus, underscore ] }; + key { [ equal, U05BC, VoidSymbol, plus ] }; + + key { [ U0307, U05C4, U0308, slash ] }; + key { [ U05F3, U05AC, U05F4, apostrophe ] }; + key { [ hebrew_qoph, U05AB, U20AC ] }; + key { [ hebrew_resh, U059F ] }; + key { [ hebrew_aleph, U0593 ] }; + key { [ hebrew_tet, U059E ] }; + key { [ hebrew_waw, U059C, U05F0 ] }; + key { [ hebrew_finalnun, U05A1 ] }; + key { [ hebrew_finalmem, U0595 ] }; + key { [ hebrew_pe, U0594 ] }; + key { [ bracketright, U0597, VoidSymbol, braceright ] }; + key { [ bracketleft, U0598, VoidSymbol, braceleft ] }; + key { [ U05C0, U05A8, backslash, bar ] }; + + key { [ hebrew_shin, U05BD ] }; + key { [ hebrew_dalet, U05B0 ] }; + key { [ hebrew_gimel, U05BB ] }; + key { [ hebrew_kaph, U05B4 ] }; + key { [ hebrew_ayin, U05B1 ] }; + key { [ hebrew_yod, U05B6, U05F2 ] }; + key { [ hebrew_chet, U05B5, U05F1 ] }; + key { [ hebrew_lamed, U05B3 ] }; + key { [ hebrew_finalkaph, U05B8, U05C7 ] }; + key { [ hebrew_finalpe, U05B2, VoidSymbol, colon ] }; + key { [ U059a, U05B7, comma, quotedbl ] }; + + key { [ hebrew_zain, U05C5 ] }; + key { [ hebrew_samech, U05A4 ] }; + key { [ hebrew_bet, U05AA, U05A2 ] }; + key { [ hebrew_he, U05A6 ] }; + key { [ hebrew_nun, U05A5, U05C6 ] }; + key { [ hebrew_mem, U05A7 ] }; + key { [ hebrew_zade, U059B ] }; + key { [ hebrew_taw, U0591, VoidSymbol, greater ] }; + key { [ hebrew_finalzade, U0596, VoidSymbol, less ] }; + key { [ U05AD, U05A3, period, question ] }; + + key { [ space, space, thinspace, nobreakspace ] }; +}; diff --git a/test/data/symbols/in b/test/data/symbols/in new file mode 100644 index 0000000..84d9b06 --- /dev/null +++ b/test/data/symbols/in @@ -0,0 +1,1726 @@ +// This layout includes all Indian layouts, including: +// - Bengali +// - Gujarati +// - Kannada +// - Malayalam +// - Oriya +// - Tamil +// - Telugu +// - Urdu + +// Links: +// - Indic INSCRIPT keyboard layout diagrams: +// http://java.sun.com/products/jfc/tsc/articles/InputMethod/indiclayout.html +// - Bengali Baishakhi (Bengali layouts): +// - Bengali Baishakhi Inscript (Bengali layouts): +// - Bengali Bornona (Bengali layouts): +// - Uni Gitanjali (Bengali layouts): +// http://nltr.org +// - Ekusheyr Shadhinota (Bengali layouts): +// http://ekushey.org/projects/shadhinota/index.html +// - Microsoft Windows XP SP2: Indic Language Standards - an Introduction: +// http://www.bhashaindia.com/MSProducts/XpSp2/Articles/IndicLanguageStandards.aspx + +// based on a keyboard map from an 'xkb/symbols/dev' file + +// Devangari is the default. Kill me if I am wrong:) +default partial alphanumeric_keys +xkb_symbols "deva" { + // March 2004 -- David Holl + name[Group1]="Indian"; + + key.type="FOUR_LEVEL"; + + key { [ U094a, U0912, grave, asciitilde ] }; + key { [ U0967, U090d, 1, exclam ] }; + key { [ U0968, U0945, 2, at ] }; + // Shift+AE0[3-8] really need to return a macro of keys defined by + // INSCRIPT in place of the symbols that are here for now. But this + // requires XKB to map 1 key into two to three other key presses. + key { [ U0969, numbersign, 3, numbersign ] }; + key { [ U096a, dollar, 4, dollar ] }; + key { [ U096b, percent, 5, percent ] }; + key { [ U096c, asciicircum, 6, asciicircum ] }; + key { [ U096d, ampersand, 7, ampersand ] }; + key { [ U096e, asterisk, 8, asterisk ] }; + key { [ U096f, parenleft, 9, parenleft ] }; + key { [ U0966, parenright, 0, parenright ] }; + key { [ minus, U0903, minus, underscore ] }; + key { [ U0943, U090b, U0944, U0960 ] }; + + key { [ U094c, U0914 ] }; + key { [ U0948, U0910 ] }; + key { [ U093e, U0906 ] }; + key { [ U0940, U0908, U0963, U0961 ] }; + key { [ U0942, U090a ] }; + key { [ U092c, U092d ] }; + key { [ U0939, U0919 ] }; + key { [ U0917, U0918, U095a ] }; + key { [ U0926, U0927 ] }; + key { [ U091c, U091d, U095b ] }; + key { [ U0921, U0922, U095c, U095d ] }; + key { [ U093c, U091e ] }; + // I added \ / ? | for shell-convenience (file names and piping) + key { [ U0949, U0911, U005C, U007C ] }; + + key { [ U094b, U0913 ] }; + key { [ U0947, U090f ] }; + key { [ U094d, U0905 ] }; + key { [ U093f, U0907, U0962, U090c ] }; + key { [ U0941, U0909 ] }; + key { [ U092a, U092b, NoSymbol, U095e ] }; + key { [ U0930, U0931 ] }; + key { [ U0915, U0916, U0958, U0959 ] }; + key { [ U0924, U0925 ] }; + key { [ U091a, U091b, U0952 ] }; + key { [ U091f, U0920, NoSymbol, U0951 ] }; + + key { [ U0946, U090e, U0953 ] }; + key { [ U0902, U0901, NoSymbol, U0950 ] }; + key { [ U092e, U0923, U0954 ] }; + key { [ U0928, U0929 ] }; + key { [ U0935, U0934 ] }; + key { [ U0932, U0933 ] }; + key { [ U0938, U0936 ] }; + key { [ comma, U0937, U0970 ] }; + key { [ period, U0964, U0965, U093d ] }; + // I added \ / ? | for shell-convenience (file names and piping) + key { [ U092f, U095f, slash, question ] }; + + // space, space, Zero-Width-Non-Joiner (ZWNJ), Zero-Width-Joiner (ZWJ): + include "nbsp(zwnj3zwj4)" +}; + +//Name : Bolnagri (Combined) +//Description : A phonetic keyboard layout for Devnagari(Hindi) +// http://www.indlinux.org/wiki/index.php/BolNagri +//NOTE : This is a combined map of bolnagri_matras and bolnagri_vowels. +//Inspired by "devrom" keymap by Steve Smith for the windows tool "keyman" +//Original Author : Noah Levitt +//Past Authors : Pramod.R and Ravikant +// Current Main.: G Karunakar + +partial alphanumeric_keys +xkb_symbols "bolnagri" { + name[Group1] = "Hindi (Bolnagri)"; + key.type="FOUR_LEVEL"; + //Top Alphanumeric row + // Roman digits + key { [ U0902, U0901, apostrophe, asciitilde ] }; // apostrophe: anusvara, candrabindu + key { [ 1, exclam, U0967, exclam ] }; + key { [ 2, at, U0968, at ] }; + key { [ 3, numbersign, U0969, numbersign ] }; + key { [ 4, dollar, U096A, dollar ] }; + key { [ 5, percent, U096B, percent ] }; + key { [ 6, asciicircum, U096C, asciicircum ] }; + key { [ 7, ampersand, U096D, ampersand ] }; + key { [ 8, asterisk, U096E, asterisk ] }; + key { [ 9, parenleft, U096F, parenleft ] }; + key { [ 0, parenright, U0966, parenright ] }; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + key { [ U0964, U0965, U007C, U005C ] }; //pipe : danda, double danda + + //Q Row + key { [ U200C, U200D ] }; // Q: ZWNJ, ZWJ + key { [ U0935, U950 ] }; // W: wa, OM + key { [ U0947, U0948, U090F, U0910 ] }; // E: e, ai matras + key { [ U0930, U0943 ] }; // R: ra, vocalic Ri + key { [ U0924, U0925 ] }; // T: ta, tha + key { [ U092f, U091E ] }; // Y: ya, nya + key { [ U0941, U0942, U0909, U090A ] }; // U: u, uu matras + key { [ U093F, U0940, U0907, U0908 ] }; // I: i, ii matras + key { [ U094B, U094C, U0913, U0914 ] }; // O: o, au matras + key { [ U092A, U092B ] }; // P: pa, pha + key { [ bracketleft, braceleft ] }; + key { [ bracketright, braceright ] }; + + //A Row + key { [ U093E, U0906, U0905, U0906 ] }; // A: aa + key { [ U0938, U0937 ] }; // S: sa, ssa + key { [ U0926, U0927 ] }; // D: da, dha + key { [ U091F, U0920 ] }; // F: TA, THA + key { [ U0917, U0918 ] }; // G: ga, gha + key { [ U0939, U0903 ] }; // H: ha, visarg + key { [ U091C, U091D ] }; // J: ja, jha + key { [ U0915, U0916 ] }; // K: ka, kha + key { [ U0932, U0962 ] }; // L: la, vocalic L or lru matra` + key { [ semicolon, colon ] }; + key { [apostrophe, quotedbl ] }; + + //Z Row + key { [ U0936, U0945 ] }; // Z: sha, akaar candra + key { [ U094D, U0949 ] }; // X: halant, aakaar candra + key { [ U091A, U091B ] }; // C: ca, cha + key { [ U0921, U0922 ] }; // V: da, dha + key { [ U092C, U092D ] }; // B: ba, bha + key { [ U0928, U0923 ] }; // N: na, nha + key { [ U092E, U093D, U092E, U093D ] }; // M: ma, avagraha + key { [ comma, U0970 ] };// comma: comma, dev abbreviation sign + key { [ period, U093C ] }; // period: period, nukta + key { [ slash, question ] }; + + // begin modifier mappings +// modifier_map Shift { Shift_L }; +// modifier_map Lock { Caps_Lock }; +// modifier_map Control{ Control_L }; +// modifier_map Mod3 { Mode_switch }; + include "level3(ralt_switch)" +}; + +// based on a keyboard map from an 'xkb/symbols/ben' file + +partial alphanumeric_keys +xkb_symbols "ben" { + name[Group1]= "Bengali (India)"; + + // Mainly numbers. + key { [ U09E7 ] }; + key { [ U09E8 ] }; + key { [ U09E9 ] }; + key { [ U09EA ] }; + key { [ U09EB ] }; + key { [ U09EC ] }; + key { [ U09ED ] }; + key { [ U09EE ] }; + key { [ U09EF, parenleft ] }; + key { [ U09E6, parenright ] }; + key { [ minus, U0983 ] }; + key { [ U098B, U09C3 ] }; + +// Mainly long vowels + + key { [ U09CC, U0994 ] }; + key { [ U09C8, U0990 ] }; + key { [ U09BE, U0986 ] }; + key { [ U09C0, U0988 ] }; + key { [ U09C2, U098A ] }; + +// Mainly voiced consonants + + key { [ U09AC, U09AD ] }; + key { [ U09B9, U0999 ] }; + key { [ U0997, U0998 ] }; + key { [ U09A6, U09A7 ] }; + key { [ U099C, U099D ] }; + key { [ U09A1, U09A2 ] }; + key { [ U09BC, U099E ] }; + +// Mainly short vowels + key { [ U09CB, U0993 ] }; + key { [ U09C7, U098F ] }; + key { [ U09CD, U0985 ] }; + key { [ U09BF, U0987 ] }; + key { [ U09C1, U0989 ] }; + + +// Mainly unvoiced consonants + + key { [ U09AA, U09AB ] }; + key { [ U09B0, U09DD ] }; + key { [ U0995, U0996 ] }; + key { [ U09A4, U09A5 ] }; + key { [ U099A, U099B ] }; + key { [ U099F, U09A0 ] }; + key { [ U005C, U007C ] }; + + key { [ z, Z ] }; + key { [ U0982, U0981 ] }; + key { [ U09AE, U09A3 ] }; + key { [ U09A8, U09A8 ] }; + key { [ U09AC, U09AC ] }; + key { [ U09B2, U09B2 ] }; + key { [ U09B8, U09B6 ] }; + key { [ comma, U09B7 ] }; + key { [ period, U0964 ] }; + key { [ U09DF, U09AF ] }; +}; + +xkb_symbols "ben_probhat" { + name[Group1]= "Bengali (India, Probhat)"; + key { [ Escape ] }; + +// numbers + key { [ U200D, asciitilde ] }; + key { [ U09E7, exclam ] }; + key { [ U09E8, at ] }; + key { [ U09E9, numbersign ] }; + key { [ U09EA, U09F3 ] }; + key { [ U09EB, percent ] }; + key { [ U09EC, asciicircum ] }; + key { [ U09ED, U099E ] }; + key { [ U09EE, U09CE ] }; + key { [ U09EF, parenleft ] }; + key { [ U09E6, parenright ] }; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + key { [ BackSpace ] }; + +// tab, q to ] + key { [ Tab, ISO_Left_Tab ] }; + key { [ U09A6, U09A7 ] }; + key { [ U09C2, U098A ] }; + key { [ U09C0, U0988 ] }; + key { [ U09B0, U09DC ] }; + key { [ U099F, U09A0 ] }; + key { [ U098F, U0990 ] }; + key { [ U09C1, U0989 ] }; + key { [ U09BF, U0987 ] }; + key { [ U0993, U0994 ] }; + key { [ U09AA, U09AB ] }; + key { [ U09C7, U09C8 ] }; + key { [ U09CB, U09CC ] }; + key { [ Return ] }; + +// caps, a to ' +// key { [ Caps_Lock ] }; + key { [ U09BE, U0985 ] }; + key { [ U09B8, U09B7 ] }; + key { [ U09A1, U09A2 ] }; + key { [ U09A4, U09A5 ] }; + key { [ U0997, U0998 ] }; + key { [ U09B9, U0983 ] }; + key { [ U099C, U099D ] }; + key { [ U0995, U0996 ] }; + key { [ U09B2, U0982 ] }; + key { [ semicolon, colon ] }; + key { [ quoteright, quotedbl ] }; + +// shift, z to / +// key { [ Shift_L ] }; + key { [ U09DF, U09AF ] }; + key { [ U09B6, U09DD ] }; + key { [ U099A, U099B ] }; + key { [ U0986, U098B ] }; + key { [ U09AC, U09AD ] }; + key { [ U09A8, U09A3 ] }; + key { [ U09AE, U0999 ] }; + key { [ comma, U09C3 ] }; + key { [ U0964, U0981 ] }; + key { [ U09CD, question ] }; + key { [ U200C, U0965 ] }; + +// key { [ Control_L ] }; +// key { [ space ] }; + +// modifier_map Shift { Shift_L }; +// modifier_map Lock { Caps_Lock }; +// modifier_map Control{ Control_L }; + +}; + +// Bengali Baishakhi, Bengali Baishakhi Inscript, Bengali Bornona, Uni Gitanjali Layouts are added by Promathesh Mandal + +xkb_symbols "ben_baishakhi" { + name[Group1]= "Bengali (India, Baishakhi)"; + key { [ Escape ] }; + +// numbers + key { [ 0x100200D, 0x100200C ] }; + key { [ 0x10009E7, exclam ] }; + key { [ 0x10009E8, at ] }; + key { [ 0x10009E9, numbersign ] }; + key { [ 0x10009EA, dollar, 0x10009F2 ] }; + key { [ 0x10009EB, percent ] }; + key { [ 0x10009EC, asciicircum, 0x10009D7 ] }; + key { [ 0x10009ED, ampersand ] }; + key { [ 0x10009EE, asterisk,0x10009FA ] }; + key { [ 0x10009EF, parenleft ] }; + key { [ 0x10009E6, parenright ] }; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + key { [ BackSpace ] }; + +// tab, q to ] + key { [ Tab, ISO_Left_Tab ] }; + key { [ 0x10009A1, 0x10009A2 ] }; + key { [ 0x10009C0 , 0x10009C2 ] }; + key { [ 0x10009C7, 0x100098F, 0x1000990 ] }; + key { [ 0x10009B0 , 0x10009C3, 0x100098B ] }; + key { [ 0x100099F, 0x10009A0 ] }; + key { [ 0x10009AF, 0x10009DF ] }; + key { [ 0x10009C1, 0x1000989, 0x100098A ] }; + key { [ 0x10009BF, 0x1000987, 0x1000988 ] }; + key { [ 0x10009CB, 0x1000993, 0x1000994 ] }; + key { [ 0x10009AA, 0x10009AB ] }; + key { [ bracketleft, braceleft] }; + key { [ bracketright, braceright ] }; + key { [ Return ] }; + +// caps, a to ' +// key { [ Caps_Lock ] }; + key { [ 0x10009BE, 0x1000985, 0x1000986 ] }; + key { [ 0x10009B8, 0x10009B6, 0x10009B7 ] }; + key { [ 0x10009A6, 0x10009A7 ] }; + key { [ 0x10009A4, 0x10009A5, 0x10009CE ] }; + key { [ 0x1000997, 0x1000998 ] }; + key { [ 0x10009CD, 0x10009B9, 0x1000983 ] }; + key { [ 0x100099C, 0x100099D ] }; + key { [ 0x1000995, 0x1000996 ] }; + key { [ 0x10009B2, 0x1000964, 0x100098C ] }; + key { [ semicolon, colon ] }; + key { [ quoteright, quotedbl ] }; + +// shift, z to / +// key { [ Shift_L ] }; + key { [ 0x10009C8, 0x10009CC ] }; + key { [ 0x10009DC, 0x10009DD ] }; + key { [ 0x100099A, 0x100099B ] }; + key { [ 0x10009F1, 0x10009F0 ] }; + key { [ 0x10009AC, 0x10009AD ] }; + key { [ 0x10009A8, 0x10009A3, 0x100099E ] }; + key { [ 0x10009AE, 0x1000999, 0x1000981 ] }; + key { [ comma, less ] }; + key { [ period, greater,0x10009BC ] }; + key { [ slash, question, 0x1000982 ] }; + key { [ backslash, bar ] }; + +// third level with right-alt + include "level3(ralt_switch)" + +// key { [ Control_L ] }; +// key { [ space ] }; + +// modifier_map Shift { Shift_L }; +// modifier_map Lock { Caps_Lock }; +// modifier_map Control{ Control_L }; + + +}; + +xkb_symbols "ben_inscript" { + name[Group1]= "Bengali (India, Baishakhi Inscript)"; + + // Mainly numbers. + key { [ 0x100200D, 0x100200C ] }; + key { [ 0x10009E7 ] }; + key { [ 0x10009E8 ] }; + key { [ 0x10009E9 ] }; + key { [ 0x10009EA ] }; + key { [ 0x10009EB ] }; + key { [ 0x10009EC ] }; + key { [ 0x10009ED ] }; + key { [ 0x10009EE ] }; + key { [ 0x10009EF, parenleft ] }; + key { [ 0x10009E6, parenright ] }; + key { [ minus, 0x1000983 ] }; + key { [ 0x10009C3, 0x100098B ] }; + +// Mainly long vowels + + key { [ 0x10009CC, 0x1000994 ] }; + key { [ 0x10009C8, 0x1000990 ] }; + key { [ 0x10009BE, 0x1000986 ] }; + key { [ 0x10009C0, 0x1000988 ] }; + key { [ 0x10009C2, 0x100098A ] }; + +// Mainly voiced consonants + + key { [ 0x10009AC, 0x10009AD ] }; + key { [ 0x10009B9, 0x1000999 ] }; + key { [ 0x1000997, 0x1000998 ] }; + key { [ 0x10009A6, 0x10009A7 ] }; + key { [ 0x100099C, 0x100099D ] }; + key { [ 0x10009A1, 0x10009A2 ] }; + key { [ 0x10009BC, 0x100099E ] }; + +// Mainly short vowels + key { [ 0x10009CB, 0x1000993 ] }; + key { [ 0x10009C7, 0x100098F ] }; + key { [ 0x10009CD, 0x1000985 ] }; + key { [ 0x10009BF, 0x1000987 ] }; + key { [ 0x10009C1, 0x1000989 ] }; + + +// Mainly unvoiced consonants + + key { [ 0x10009AA, 0x10009AB ] }; + key { [ 0x10009B0, 0x10009DD ] }; + key { [ 0x1000995, 0x1000996 ] }; + key { [ 0x10009A4, 0x10009A5 ] }; + key { [ 0x100099A, 0x100099B ] }; + key { [ 0x100099F, 0x10009A0 ] }; + key { [ backslash, bar ] }; + + key { [ 0x10009CE ] }; + key { [ 0x1000982, 0x1000981 ] }; + key { [ 0x10009AE, 0x10009A3 ] }; + key { [ 0x10009A8, 0x10009A8 ] }; + key { [ 0x10009AC, 0x10009AC ] }; + key { [ 0x10009B2, 0x10009B2 ] }; + key { [ 0x10009B8, 0x10009B6 ] }; + key { [ comma, 0x10009B7 ] }; + key { [ period, 0x1000964 ] }; + key { [ 0x10009DF, 0x10009AF ] }; +}; + +xkb_symbols "ben_gitanjali" { + name[Group1]= "Bengali (India, Uni Gitanjali)"; + key { [ Escape ] }; + +// numbers + key { [ colon, question ] }; + key { [ 0x10009E7, 0x10009CE ] }; + key { [ 0x10009E8, quoteright ] }; + key { [ 0x10009E9, numbersign ] }; + key { [ 0x10009EA, 0x10009F3 ] }; + key { [ 0x10009EB, slash ] }; + key { [ 0x10009EC, period ] }; + key { [ 0x10009ED, ampersand ] }; + key { [ 0x10009EE, asterisk ] }; + key { [ 0x10009EF, parenleft ] }; + key { [ 0x10009E6, parenright ] }; + key { [ minus, 0x1000983 ] }; + key { [ 0x10009C3, 0x100098B ] }; + key { [ BackSpace ] }; + +// tab, q to ] + key { [ Tab, ISO_Left_Tab ] }; + key { [ 0x10009D7, 0x1000994 ] }; + key { [ 0x10009C8, 0x1000990 ] }; + key { [ 0x10009BE, 0x1000985 ] }; + key { [ 0x10009C0, 0x1000988 ] }; + key { [ 0x10009C2, 0x100098A ] }; + key { [ 0x10009AC, 0x10009AD ] }; + key { [ 0x10009B9, 0x1000999 ] }; + key { [ 0x1000997, 0x1000998 ] }; + key { [ 0x10009A6, 0x10009A7 ] }; + key { [ 0x100099C, 0x100099D ] }; + key { [ 0x10009A1, 0x10009A2 ] }; + key { [ 0x100200C, 0x100099E ] }; + key { [ Return ] }; + +// caps, a to ' +// key { [ Caps_Lock ] }; + key { [ 0x100200D, 0x1000993 ] }; + key { [ 0x10009C7, 0x100098F ] }; + key { [ 0x10009CD ] }; + key { [ 0x10009BF, 0x1000987 ] }; + key { [ 0x10009C1, 0x1000989 ] }; + key { [ 0x10009AA, 0x10009AB ] }; + key { [ 0x10009B0, 0x10009F0 ] }; + key { [ 0x1000995, 0x1000996 ] }; + key { [ 0x10009A4, 0x10009A5 ] }; + key { [ 0x100099A, 0x100099B ] }; + key { [ 0x100099F, 0x10009A0 ] }; + +// shift, z to / +// key { [ Shift_L ] }; + key { [ 0x10009C7, 0x100098F ] }; + key { [ 0x1000982, 0x1000981 ] }; + key { [ 0x10009AE, 0x10009A3 ] }; + key { [ 0x10009A8, 0x10009DC ] }; + key { [ 0x10009F1, 0x10009DD ] }; + key { [ 0x10009B2 ] }; + key { [ 0x10009B8, 0x10009B6 ] }; + key { [ comma, 0x10009B7 ] }; + key { [ 0x1000964, 0x10009FA ] }; + key { [ 0x10009AF, 0x10009DF ] }; + key { [ backslash, bar ] }; + +// third level with right-win +// include "level3(lwin_switch)" + +// key { [ Control_L ] }; +// key { [ space ] }; + +// modifier_map Shift { Shift_L }; +// modifier_map Lock { Caps_Lock }; +// modifier_map Control{ Control_L }; + + +}; + + +xkb_symbols "ben_bornona" { + name[Group1]= "Bengali (India, Bornona)"; + key { [ Escape ] }; + +// numbers + key { [ 0x100200D, 0x100200C ] }; + key { [ 0x10009E7, exclam ] }; + key { [ 0x10009E8, 0x1000981 ] }; + key { [ 0x10009E9, numbersign ] }; + key { [ 0x10009EA, 0x10009F3 ] }; + key { [ 0x10009EB, percent ] }; + key { [ 0x10009EC, 0x1000983 ] }; + key { [ 0x10009ED, 0x10009CE ] }; + key { [ 0x10009EE, asterisk ] }; + key { [ 0x10009EF, parenleft ] }; + key { [ 0x10009E6, parenright ] }; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + key { [ BackSpace ] }; + +// tab, q to ] + key { [ Tab, ISO_Left_Tab ] }; + key { [ 0x1000982, 0x1000999, 0x10009D7 ] }; + key { [ 0x10009A2, 0x10009A0, 0x100098A ] }; + key { [ 0x10009C7, 0x10009C8, 0x1000988 ] }; + key { [ 0x10009B0, 0x10009C3, 0x100098B ] }; + key { [ 0x10009A4, 0x100099F ] }; + key { [ 0x10009A7, 0x10009A5, 0x100098F ] }; + key { [ 0x10009C1, 0x10009C2, 0x1000989 ] }; + key { [ 0x10009BF, 0x10009C0, 0x1000987 ] }; + key { [ 0x10009CB, 0x10009CC, 0x1000993 ] }; + key { [ 0x10009AA, 0x1000990, 0x1000994 ] }; + key { [ 0x100005B, 0x100007B, 0x10009DC ] }; + key { [ 0x100005D, 0x100007D ] }; + key { [ Return ] }; + +// caps, a to ' +// key { [ Caps_Lock ] }; + key { [ 0x10009BE, 0x1000985, 0x10009F4 ] }; + key { [ 0x10009B8, 0x10009B6, 0x10009F5 ] }; + key { [ 0x10009A6, 0x10009A1, 0x10009F8 ] }; + key { [ 0x10009AB ] }; + key { [ 0x1000997, 0x1000998 ] }; + key { [ 0x10009CD, 0x10009B9 ] }; + key { [ 0x100099C, 0x100099D ] }; + key { [ 0x1000995, 0x1000996 ] }; + key { [ 0x10009B2, 0x1000964 ] }; + key { [ semicolon, 0x100003A ] }; + key { [ quoteright, quotedbl ] }; + +// shift, z to / +// key { [ Shift_L ] }; + key { [ 0x10009AF, 0x10009DC ] }; + key { [ 0x10009B7, 0x10009DD, 0x10009FA ] }; + key { [ 0x100099A, 0x100099B ] }; + key { [ 0x10009AD ] }; + key { [ 0x10009AC, 0x10009DF ] }; + key { [ 0x10009A8, 0x10009A3 ] }; + key { [ 0x10009AE, 0x100099E ] }; + key { [ comma, 0x100003C ] }; + key { [ 0x100002E, 0x100003E ] }; + key { [ 0x100002F, question ] }; + key { [ 0x10009F1, 0x10009F0 ] }; + +// key { [ Control_L ] }; +// key { [ space ] }; + +// modifier_map Shift { Shift_L }; +// modifier_map Lock { Caps_Lock }; +// modifier_map Control{ Control_L }; +// third level with right-alt + include "level3(ralt_switch)" + +}; + +partial alphanumeric_keys +xkb_symbols "guj" { + name[Group1]= "Gujarati"; + + // Mainly numbers. + key { [ U0AE7, U0A8D ] }; + key { [ U0AE8, U0AC5 ] }; + key { [ U0AE9 ] }; + key { [ U0AEA ] }; + key { [ U0AEB ] }; + key { [ U0AEC ] }; + key { [ U0AED ] }; + key { [ U0AEE ] }; + key { [ U0AEF, parenleft ] }; + key { [ U0AE6, parenright ] }; + key { [ minus, U0A83 ] }; + key { [ U0A8B, U0AC3 ] }; + +// Mainly long vowels + + key { [ U0ACC, U0A94 ] }; + key { [ U0AC8, U0A90 ] }; + key { [ U0ABE, U0A86 ] }; + key { [ U0AC0, U0A88 ] }; + key { [ U0AC2, U0A8A ] }; + +// Mainly voiced consonants + + key { [ U0AAC, U0AAD ] }; + key { [ U0AB9, U0A99 ] }; + key { [ U0A97, U0A98 ] }; + key { [ U0AA6, U0AA7 ] }; + key { [ U0A9C, U0A9D ] }; + key { [ U0AA1, U0AA2 ] }; + key { [ U0ABC, U0A9E ] }; + +// Mainly short vowels + key { [ U0ACB, U0A93 ] }; + key { [ U0AC7, U0A8F ] }; + key { [ U0ACD, U0A85 ] }; + key { [ U0ABF, U0A87 ] }; + key { [ U0AC1, U0A89 ] }; + +// Mainly unvoiced consonants + + key { [ U0AAA, U0AAB ] }; + key { [ U0AB0, U0AB0 ] }; + key { [ U0A95, U0A96 ] }; + key { [ U0AA4, U0AA5 ] }; + key { [ U0A9A, U0A9B ] }; + key { [ U0A9F, U0AA0 ] }; + key { [ U0AC9, U0A91 ] }; + + key { [ z , Z ] }; + key { [ U0A82, U0A81 ] }; + key { [ U0AAE, U0AA3 ] }; + key { [ U0AA8, U0AA8 ] }; + key { [ U0AB5, U0AB5 ] }; + key { [ U0AB2, U0AB3 ] }; + key { [ U0AB8, U0AB6 ] }; + key { [ comma, U0AB7 ] }; + key { [ period, U0964 ] }; + key { [ U0AAF, question ] }; +}; + +partial alphanumeric_keys +xkb_symbols "kan" { + + // Inscript layout for Kannada + // Author : G Karunakar + // Date : Wed Nov 13 17:22:58 IST 2002 + // Kannada digits mapped in basic only + + name[Group1]= "Kannada"; + + key { [ U0cca, U0c92 ] }; + key { [ U0ce7 ] }; + key { [ U0ce8 ] }; + key { [ U0ce9 ] }; + key { [ U0cea ] }; + key { [ U0ceb ] }; + key { [ U0cec ] }; + key { [ U0ced ] }; + key { [ U0cee ] }; + key { [ U0cef ] }; + key { [ U0ce6 ] }; + key { [ U0c83 ] }; + key { [ U0cc3, U0c8b ] }; + + key { [ U0ccc, U0c94 ] }; + key { [ U0cc8, U0c90 ] }; + key { [ U0cbe, U0c86 ] }; + key { [ U0cc0, U0c88 ] }; + key { [ U0cc2, U0c8a ] }; + key { [ U0cac, U0cad ] }; + key { [ U0cb9, U0c99 ] }; + key { [ U0c97, U0c98 ] }; + key { [ U0ca6, U0ca7 ] }; + key { [ U0c9c, U0c9d ] }; + key { [ U0ca1, U0ca2 ] }; + key { [ U0cbc, U0c9e ] }; + + key { [ U0ccb, U0c93 ] }; + key { [ U0cc7, U0c8f ] }; + key { [ U0ccd, U0c85 ] }; + key { [ U0cbf, U0c87 ] }; + key { [ U0cc1, U0c89 ] }; + key { [ U0caa, U0cab ] }; + key { [ U0cb0, U0cb1 ] }; + key { [ U0c95, U0c96 ] }; + key { [ U0ca4, U0ca5 ] }; + key { [ U0c9a, U0c9b ] }; + key { [ U0c9f, U0ca0 ] }; + + key { [ U0cc6, U0c8e ] }; + key { [ U0c82 ] }; + key { [ U0cae, U0ca3 ] }; + key { [ U0ca8 ] }; + key { [ U0cb5, U0cb4 ] }; + key { [ U0cb2, U0cb3 ] }; + key { [ U0cb8, U0cb6 ] }; + key { [ comma , U0cb7 ] }; + key { [ period ] }; + key { [ U0caf, U0040 ] }; + + key { + symbols[Group1] = [ Mode_switch, Multi_key ], + virtualMods = AltGr + }; + +}; + +// Description : A keymap for Malayalam +// Encoding : Unicode (http://www.unicode.org) +// Author : Baiju M +// Date : Sat Aug 17 21:10:48 IST 2002 +// Mapping: + +partial alphanumeric_keys +xkb_symbols "mal" { + + name[Group1] = "Malayalam"; + + //From grave to backslash (\) + + key { [ U0d4a , U0d12 ] }; + +// svu: +// These lines were in former "mal" variant - +// but the digits are replaced with the ones from 'mal_plusnum' - +// for the integrity of all Indian layouts +// +// key { [1 , exclam ] }; +// key { [2 , at ] }; +// key { [3 , numbersign ] }; +// key { [4 , dollar ] }; +// key { [5 , percent ] }; +// key { [6 ,asciicircum ] }; +// key { [7 , ampersand ] }; +// key { [8 , asterisk ] }; +// key { [9 , parenleft ] }; +// key { [0 , parenright ] }; + + key { [ U0d67 , exclam ] }; + key { [ U0d68 , at ] }; + key { [ U0d69 , numbersign ] }; + key { [ U0d6a , dollar ] }; + key { [ U0d6b , percent ] }; + key { [ U0d6c , asciicircum ] }; + key { [ U0d6d , ampersand ] }; + key { [ U0d6e , asterisk ] }; + key { [ U0d6f , parenleft ] }; + key { [ U0d66 , parenright ] }; + + key { [ minus , U0d03 ] }; + key { [ U0d43 , U0d0b ] }; + key { [U0200c, U05C ]};//bksl: ZWNJ + + + // From 'q' to right bracket (]) + + key { [ U0d4c , U0d14 ] }; + key { [ U0d48 , U0d10 ] }; + key { [ U0d3e , U0d06 ] }; + key { [ U0d40 , U0d08 ] }; + key { [ U0d42 , U0d0a ] }; + key { [ U0d2c , U0d2d ] }; + key { [ U0d39 , U0d19 ] }; + key { [ U0d17 , U0d18 ] }; + key { [ U0d26 , U0d27 ] }; + key { [ U0d1c , U0d1d ] }; + key { [ U0d21 , U0d22 ] }; + key { [ U0200d , U0d1e ] }; + + // From 'a' to apostrophe (') + + key { [ U0d4b , U0d13 ] }; + key { [ U0d47 , U0d0f ] }; + key { [ U0d4d , U0d05 ] }; + key { [ U0d3f , U0d07 ] }; + key { [ U0d41 , U0d09 ] }; + key { [ U0d2a , U0d2b ] }; + key { [ U0d30 , U0d31 ] }; + key { [ U0d15 , U0d16 ] }; + key { [ U0d24 , U0d25 ] }; + key { [ U0d1a , U0d1b ] }; + key { [ U0d1f , U0d20 ] }; + + // From 'z' to slash (/) + + key { [ U0d46 , U0d0e ] }; + key { [ U0d02 , U200b ] };//X:ZWSP + key { [ U0d2e , U0d23 ] }; + key { [ U0d28 ] }; + key { [ U0d35 , U0d34 ] }; + key { [ U0d32 , U0d33 ] }; + key { [ U0d38 , U0d36 ] }; + key { [ comma , U0d37 ] }; + key { [ period , U0200d ] }; + key { [ U0d2f , question ] }; + +}; + +//Name : Lalitha +//Description : A transliteration keyboard layout for Malayalam +//Original Author : Noah Levitt +//Current Main : Jinesh K.J, Swathantra Malayalam Computing (SMC) + +partial alphanumeric_keys +xkb_symbols "mal_lalitha" { + name[Group1] = "Malayalam (Lalitha)"; + key.type="FOUR_LEVEL"; + //Top Alphanumeric row + // Roman digits + key { [ U0D4D, U0D02, apostrophe, asciitilde ] }; // apostrophe: virama(chandrakala),anusvara + key { [ 1, exclam, U0D67, exclam ] }; + key { [ 2, at, U0D68, at ] }; + key { [ 3, numbersign, U0D69, numbersign ] }; + key { [ 4, dollar, U0D6A, dollar ] }; + key { [ 5, percent, U0D6B, percent ] }; + key { [ 6, asciicircum, U0D6C, asciicircum ] }; + key { [ 7, ampersand, U0D6D, ampersand ] }; + key { [ 8, asterisk, U0D6E, asterisk ] }; + key { [ 9, parenleft, U0D6F, parenleft ] }; + key { [ 0, parenright, U0D66, parenright ] }; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + key { [ U005C, U007C, U200C ] };//backslash:pipe,backslash,ZWNJ + + //Q Row + key { [ U0D48, U0D4C, U0D10, U0D14 ] }; // Q: ai and au matras + key { [ U0D35 ] }; // W: wa, OM + key { [ U0D46, U0D47, U0D0E, U0D0F ] }; // E: e,ee matras + key { [ U0D30, U0D31, U0D43, U0D0B ] }; // R: ra,rra, vocalic Ri + key { [ U0D24, U0D25, U0D1F, U0D20 ] }; // T: tha, ttha,ta,tta + key { [ U0D2f ] }; // Y: ya + key { [ U0D41, U0D42, U0D09, U0D0A ] }; // U: u, uu matras + key { [ U0D3F, U0D40, U0D07, U0D08 ] }; // I: i, ii matras + key { [ U0D4A, U0D4B, U0D12, U0D13 ] }; // O: o, oo matras + key { [ U0D2A ] }; // P: pa + key { [ bracketleft, braceleft ] };//braceleft: + key { [ bracketright, braceright ] };//braceright: + + //A Row + key { [ U0D3E, U0D05, U0D06, U0D05 ] }; // A: a,aa + key { [ U0D38, U0D37 ] }; // S: sa, ssa + key { [ U0D26, U0D27, U0D21, U0D22 ] }; // D: soft da,soft dda,hard da,hard dda, + key { [ U0D2B ] }; // F: pha + key { [ U0D17, U0D18 ] }; // G: ga, gha + key { [ U0D39, U0D03 ] }; // H: ha, visarg + key { [ U0D1C, U0D1D ] }; // J: ja, jha + key { [ U0D15, U0D16 ] }; // K: ka, kha + key { [ U0D32, U0D33 ] }; // L: la, vocalic L or lru matra` + key { [ semicolon, colon ] }; + key { [apostrophe, quotedbl ] }; + + //Z Row + key { [ U0D34, U0D36 ] }; // Z: sha,zha + key { [ U0D4D, U200B ] }; // X: chandrakala,ZWSP + key { [ U0D1A, U0D1B ] }; // C: ca, cha + key { [ U0D35, U200D ] }; // V: va,ZWJ + key { [ U0D2C, U0D2D ] }; // B: ba, bha + key { [ U0D28, U0D23, U0D19, U0D1E ] }; // N: na, hard na,nga,nha + key { [ U0D2E, U0D02 ] }; // M: ma + key { [ comma, U003C ] };// comma: comma + key { [ period, U003E ] }; // period: period + key { [ slash, question ] }; + + // begin modifier mappings +// modifier_map Shift { Shift_L }; +// modifier_map Lock { Caps_Lock }; +// modifier_map Control{ Control_L }; +// modifier_map Mod3 { Mode_switch }; + include "level3(ralt_switch)" +}; + + +partial alphanumeric_keys +xkb_symbols "ori" { + // Inscript layout for Oriya + // Author: G Karunakar + // Date: Wed Nov 13 18:16:19 IST 2002 + + name[Group1]= "Oriya"; + + key { [ U0b67 ] }; + key { [ U0b68 ] }; + key { [ U0b69 ] }; + key { [ U0b6a ] }; + key { [ U0b6b ] }; + key { [ U0b6c ] }; + key { [ U0b6d ] }; + key { [ U0b6e ] }; + key { [ U0b6f ] }; + key { [ U0b66 ] }; + key { [ U0b03 ] }; + key { [ U0b43, U0b0b ] }; + + key { [ U0b4c, U0b14 ] }; + key { [ U0b48, U0b10 ] }; + key { [ U0b3e, U0b06 ] }; + key { [ U0b40, U0b08 ] }; + key { [ U0b42, U0b0a ] }; + key { [ U0b2c, U0b2d ] }; + key { [ U0b39, U0b19 ] }; + key { [ U0b17, U0b18 ] }; + key { [ U0b26, U0b27 ] }; + key { [ U0b1c, U0b1d ] }; + key { [ U0b21, U0b22 ] }; + key { [ U0b3c, U0b1e ] }; + + key { [ U0b4b, U0b13 ] }; + key { [ U0b47, U0b0f ] }; + key { [ U0b4d, U0b05 ] }; + key { [ U0b3f, U0b07 ] }; + key { [ U0b41, U0b09 ] }; + key { [ U0b2a, U0b2b ] }; + key { [ U0b30 ] }; + key { [ U0b15, U0b16 ] }; + key { [ U0b24, U0b25 ] }; + key { [ U0b1a, U0b1b ] }; + key { [ U0b1f, U0b20 ] }; + + key { [ U0b02, U0b01 ] }; + key { [ U0b2e, U0b23 ] }; + key { [ U0b28 ] }; + key { [ U0b35 ] }; + key { [ U0b32, U0b33 ] }; + key { [ U0b38, U0b36 ] }; + key { [ comma , U0b37 ] }; + key { [ period ] }; + key { [ U0b2f, U0040 ] }; + + key { + symbols[Group1] = [ Mode_switch, Multi_key ], + virtualMods = AltGr + }; +}; + +// based on a keyboard map from an 'xkb/symbols/tml' file +// INSCRIPT +partial alphanumeric_keys +xkb_symbols "tam" { + name[Group1]= "Tamil"; + + key { [ U0BCA, U0B92 ] }; + + // Mainly numbers. + key { [ U0BE7 ] }; + key { [ U0BE8 ] }; + key { [ U0BE9 ] }; + key { [ U0BEA ] }; + key { [ U0BEB ] }; + key { [ U0BEC ] }; + key { [ U0BED ] }; + key { [ U0BEE ] }; + key { [ U0BEF, parenleft ] }; + key { [ U0BF0, parenright ] }; + key { [ U0BF1, U0B83 ] }; + key { [ U0BF2, plus ] }; + +// Mainly long vowels + + key { [ U0BCC, U0B94 ] }; + key { [ U0BC8, U0B90 ] }; + key { [ U0BBE, U0B86 ] }; + key { [ U0BC0, U0B88 ] }; + key { [ U0BC2, U0B8A ] }; + +// Mainly voiced consonants + + key { [ U0BB9, U0B99 ] }; + key { [ U0B9c ] }; + key { [ U0B9E ] }; + +// Mainly short vowels + key { [ U0BCB, U0B93 ] }; + key { [ U0BC7, U0B8F ] }; + key { [ U0BCD, U0B85 ] }; + key { [ U0BBF, U0B87 ] }; + key { [ U0BC1, U0B89 ] }; + +// Mainly unvoiced consonants + + key { [ U0BAA ] }; + key { [ U0BB0, U0BB1 ] }; + key { [ U0B95 ] }; + key { [ U0BA4 ] }; + key { [ U0B9A ] }; + key { [ U0B9F ] }; + key { [ U005C, U007C ] };//backslash-bar - Changed to Unicode + + key { [ U0BC6, U0B8E ] }; + key { [ U0B82 ] }; + key { [ U0BAE, U0BA3 ] }; + key { [ U0BA8, U0BA9 ] }; + key { [ U0BB5, U0BB4 ] }; + key { [ U0BB2, U0BB3 ] }; + key { [ U0BB8, U0BB6 ] }; + key { [ comma, U0BB7 ] }; + key { [ period, U0964 ] }; + key { [ U0BAF, question ] }; +}; + +partial alphanumeric_keys +xkb_symbols "tam_unicode" { + +// Description: A keymap based on the TamilNet'99 typewriter keyboard +// Encoding: Unicode (http://www.unicode.org) +// Author: Thuraiappah Vaseeharan +// Modifed by: Malathi S +// Secondary contact: Sri Ramadoss M +// Date : Fri Sep 4 11:32:00 CST 2009 +// Mapping: + + name[Group1]= "Tamil (Unicode)"; + + // granthas + key { [ apostrophe, asciitilde ] }; + key { [ U0031, exclam ] } ; + key { [ U0032, at ] } ; + key { [ U0033, numbersign ] } ; + key { [ U0034, U0BF9 ] } ; + key { [ U0035, percent ] } ; + key { [ U0036, asciicircum ] } ; + key { [ U0037, ampersand ] } ; + key { [ U0038, asterisk ] } ; + key { [ U0039, parenleft ] } ; + key { [ U0030, parenright ] } ; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + + + // Qrow + key { [ U0B9E, U0BB6 ] }; + key { [ U0BB1, U0BB7 ] }; + key { [ U0BA8, U0BB8 ] }; + key { [ U0B9A, U0BB9 ] }; + key { [ U0BB5, U0B9C ] }; + key { [ U0BB2 ] }; + key { [ U0BB0 ] }; + key { [ U0BC8, U0B90 ] }; + key { [ U0BCA, U0BCB ] }; + key { [ U0BBF, U0BC0 ] }; + key { [ U0BC1, U0BC2 ] }; + + // Arow + key { [ U0BAF ] }; + key { [ U0BB3 ] }; + key { [ U0BA9 ] }; + key { [ U0B95 ] }; + key { [ U0BAA ] }; + key { [ U0BBE, U0BB4 ] }; + key { [ U0BA4 ] }; + key { [ U0BAE ] }; + key { [ U0B9F ] }; + key { [ U0BCD, U0B83 ] }; + key { [ U0B99 ] }; + + // Zrow + key { [ U0BA3 ] }; + key { [ U0B92, U0B93 ] }; + key { [ U0B89, U0B8A ] }; + key { [ U0B8E, U0B8F ] }; + key { [ U0BC6, U0BC7 ] }; + key { [ U0B94, U0BCC ] }; + key { [ U0B85, U0B86 ] }; + key { [ U0B87, U0B88 ] }; +}; + +partial alphanumeric_keys +xkb_symbols "tam_keyboard_with_numerals" { + +// Description: A keymap based on the TamilNet'99 typewriter keyboard +// Encoding: Unicode (http://www.unicode.org) +// Author: Malathi S +// Secondary contact: Sri Ramadoss M +// Date : Fri Sep 4 11:33:00 CST 2009 +// Mapping: + + name[Group1]= "Tamil (keyboard with numerals)"; + + // Mainly numbers. + key { [ apostrophe, asciitilde ] }; + key { [ U0BE7, exclam ] }; + key { [ U0BE8, at ] }; + key { [ U0BE9, numbersign ] }; + key { [ U0BEA, U0BF9 ] }; + key { [ U0BEB, percent ] }; + key { [ U0BEC, asciicircum ] }; + key { [ U0BED, ampersand ] }; + key { [ U0BEE, asterisk ] }; + key { [ U0BEF, parenleft ] }; + key { [ U0BE6, parenright ] }; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + + + // Qrow + key { [ U0B9E, U0BB6 ] }; + key { [ U0BB1, U0BB7 ] }; + key { [ U0BA8, U0BB8 ] }; + key { [ U0B9a, U0BB9 ] }; + key { [ U0BB5, U0B9c ] }; + key { [ U0BB2 ] }; + key { [ U0BB0 ] }; + key { [ U0BC8, U0B90 ] }; + key { [ U0BCA, U0BCB ] }; + key { [ U0BBF, U0BC0 ] }; + key { [ U0BC1, U0BC2 ] }; + + // Arow + key { [ U0BAF ] }; + key { [ U0BB3 ] }; + key { [ U0BA9 ] }; + key { [ U0B95 ] }; + key { [ U0BAA ] }; + key { [ U0BBE, U0BB4 ] }; + key { [ U0BA4 ] }; + key { [ U0BAE ] }; + key { [ U0B9F ] }; + key { [ U0BCD, U0B83 ] }; + key { [ U0B99 ] }; + + // Zrow + key { [ U0BA3 ] }; + key { [ U0B92, U0B93 ] }; + key { [ U0B89, U0B8A ] }; + key { [ U0B8E, U0B8F ] }; + key { [ U0BC6, U0BC7 ] }; + key { [ U0B94, U0BCC ] }; + key { [ U0B85, U0B86 ] }; + key { [ U0B87, U0B88 ] }; +}; + +partial alphanumeric_keys +xkb_symbols "tam_TSCII" { + +// Description : A Tamil typewrite-style keymap +// loosely based on TamilNet'99 reommendations +// Encoding : TSCII (http://www.tscii.org) +// Author : Thuraiappah Vaseeharan +// Last Modified: Sat Jan 5 17:11:26 CST 2002 + + name[Group1]= "Tamil (TSCII typewriter)"; + + key { [ 0x10000b7, 0x10000a4 ] }; // aytham + key { [ 0x1000082, 0x10000a5 ] }; // shri + key { [ 0x1000083, 0x1000088 ] }; // ja + key { [ 0x1000084, 0x1000089 ] }; // sha + key { [ 0x1000085, 0x100008a ] }; // sa + key { [ 0x1000086, 0x100008b ] }; // ha + key { [ 0x1000087, 0x100008c ] }; // ksha + + // Qrow + key { [ 0x10000bb, 0x100009a ] }; // nja + key { [ 0x10000c8, 0x10000da ] }; // Ra + key { [ 0x10000bf, 0x10000d1 ] }; // NNa + key { [ 0x10000ba, 0x10000cd ] }; // ca + key { [ 0x10000c5, 0x10000d7 ] }; // va + key { [ 0x10000c4, 0x10000d6 ] }; // la + key { [ 0x10000c3, 0x10000d5 ] }; // ra + key { [ 0x10000a8, 0x10000b3 ] }; // sangili, ai + key { [ 0x10000ca, 0x10000cb ] }; // di, dI + key { [ 0x10000a2, 0x10000a3 ] }; // visiri + key { [ dead_acute, 0x10000a3 ] }; // Ukaaram + + // Arow + key { [ 0x10000c2, 0x10000d4 ] }; // ya + key { [ 0x10000c7, 0x10000d9 ] }; // La + key { [ 0x10000c9, 0x10000db ] }; // na + key { [ 0x10000b8, 0x10000cc ] }; // ka + key { [ 0x10000c0, 0x10000d2 ] }; // pa + key { [ dead_grave,0x10000a1 ] }; // pulli,aravu + key { [ 0x10000be, 0x10000d0 ] }; // tha + key { [ 0x10000c1, 0x10000d3 ] }; // ma + key { [ 0x10000bc, 0x10000ce ] }; // da + key { [ 0x10000c6, 0x10000d8 ] }; // zha + key { [ 0x10000b9, 0x1000099 ] }; // nga + + // Zrow + key { [ 0x10000bd, 0x10000cf ] }; // Na + key { [ 0x10000b4, 0x10000b5 ] }; // o, O + key { [ 0x10000af, 0x10000b0 ] }; // u, U + key { [ 0x10000b1, 0x10000b2 ] }; // e, E + key { [ 0x10000a6, 0x10000a7 ] }; // kombus + key { [ 0x10000b6, 0x10000aa ] }; // au + key { [ 0x10000ab, 0x10000ac ] }; // a, A + key { [ 0x10000fe, 0x10000ae ] }; // i, I + +}; + +partial alphanumeric_keys +xkb_symbols "tam_TAB" { + +// Description: A keymap based on the TamilNet'99 typewriter keyboard +// Encoding: TAB (http://www.tamilnet99.org) +// Author: Thuraiappah Vaseeharan +// Date : Sun Aug 12 02:23:00 CDT 2001 + + name[Group1]= "Tamil (TAB typewriter)"; + + // numeral row + key { [ 0x10000e7, 0x10000a7 ] } ; + key { [ 0x10000fa, 0x10000a8 ] } ; + key { [ 0x10000fb ] } ; + key { [ 0x10000fc ] } ; + key { [ 0x10000fd ] } ; + key { [ 0x10000fe ] } ; + key { [ 0x10000ff ] } ; + + // q-row + key { [ 0x10000eb, 0x10000b3 ] }; + key { [ 0x10000f8, 0x10000c1 ] }; + key { [ 0x10000ef, 0x10000b8 ] }; + key { [ 0x10000ea, 0x10000b2 ] }; + key { [ 0x10000f5, 0x10000be ] }; + key { [ 0x10000f4, 0x10000bd ] }; + key { [ 0x10000f3, 0x10000bc ] }; + key { [ 0x10000ac, 0x10000e4 ] }; + key { [ 0x10000ae, 0x10000af ] }; + key { [ 0x10000a4, 0x10000a6 ] }; + key { [ dead_circumflex, 0x10000a6 ] }; // Ukaaram + + // a-row + key { [ 0x10000f2, 0x10000bb ] }; + key { [ 0x10000f7, 0x10000c0 ] }; + key { [ 0x10000f9, 0x10000c2 ] }; + key { [ 0x10000e8, 0x10000b0 ] }; + key { [ 0x10000f0, 0x10000b9 ] }; + key { [ 0x10000a2, 0x10000a3 ] }; + key { [ 0x10000ee, 0x10000b6 ] }; + key { [ 0x10000f1, 0x10000ba ] }; + key { [ 0x10000ec, 0x10000b4 ] }; + key { [ 0x10000f6, 0x10000bf ] }; + key { [ 0x10000e9, 0x10000b1 ] }; + + // z-row + key { [ 0x10000ed, 0x10000b5 ] }; + key { [ 0x10000e5, 0x10000e6 ] }; + key { [ 0x10000e0, 0x10000e1 ] }; + key { [ 0x10000e2, 0x10000e3 ] }; + key { [ 0x10000aa, 0x10000ab ] }; + key { [ 0x10000ac, 0x10000a3 ] }; + key { [ 0x10000dc, 0x10000dd ] }; + key { [ 0x10000de, 0x10000df ] }; +}; + +partial alphanumeric_keys +xkb_symbols "tel" { + + // Inscript layout for Telugu using Unicode + // Author: G Karunakar + // Date: + // See layout at http://www.indlinux.org/keymap/telugu.php + + name[Group1]= "Telugu"; + + key { [ U0c4a, U0c12 ] }; + key { [ U0c67 ] }; + key { [ U0c68 ] }; + key { [ U0c69, numbersign ] }; + key { [ U0c6a, dollar ] }; + key { [ U0c6b, percent ] }; + key { [ U0c6c, asciicircum ] }; + key { [ U0c6d, ampersand ] }; + key { [ U0c6e, asterisk ] }; + key { [ U0c6f, parenleft ] }; + key { [ U0c66, parenright ] }; + key { [ U0c03, underscore ] }; + key { [ U0c43, U0c0b ] }; + key { [ BackSpace ] }; + + key { [ U0c4c, U0c14 ] }; + key { [ U0c48, U0c10 ] }; + key { [ U0c3e, U0c06 ] }; + key { [ U0c40, U0c08 ] }; + key { [ U0c42, U0c0a ] }; + key { [ U0c2c, U0c2d ] }; + key { [ U0c39, U0c19 ] }; + key { [ U0c17, U0c18 ] }; + key { [ U0c26, U0c27 ] }; + key { [ U0c1c, U0c1d ] }; + key { [ U0c21, U0c22 ] }; + key { [ U0c1e ] }; + + key { [ U0c4b, U0c13 ] }; + key { [ U0c47, U0c0f ] }; + key { [ U0c4d, U0c05 ] }; + key { [ U0c3f, U0c07 ] }; + key { [ U0c41, U0c09 ] }; + key { [ U0c2a, U0c2b ] }; + key { [ U0c30, U0c31 ] }; + key { [ U0c15, U0c16 ] }; + key { [ U0c24, U0c25 ] }; + key { [ U0c1a, U0c1b ] }; + key { [ U0c1f, U0c20 ] }; + + key { [ U0c46, U0c0e ] }; + key { [ U0c02, U0c01 ] }; + key { [ U0c2e, U0c23 ] }; + key { [ U0c28 ] }; + key { [ U0c35 ] }; + key { [ U0c32, U0c33 ] }; + key { [ U0c38, U0c36 ] }; + key { [ comma , U0c37 ] }; + key { [ period ] }; + key { [ U0c2f, U0040 ] }; + + key { + symbols[Group1] = [ Mode_switch, Multi_key ], + virtualMods = AltGr + }; +}; + +partial alphanumeric_keys +xkb_symbols "urd-phonetic" { + include "pk(urd-phonetic)" + name[Group1]= "Urdu (phonetic)"; +}; + +partial alphanumeric_keys +xkb_symbols "urd-phonetic3" { + include "pk(urd-crulp)" + name[Group1]= "Urdu (alternative phonetic)"; +}; + +partial alphanumeric_keys +xkb_symbols "urd-winkeys" { + include "pk(urd-nla)" + name[Group1]= "Urdu (WinKeys)"; +}; + +// based on a keyboard map from an 'xkb/symbols/gur' file + +partial alphanumeric_keys +xkb_symbols "guru" { + name[Group1]= "Punjabi (Gurmukhi)"; + + // Mainly numbers. + key { [ U0A67 ] }; + key { [ U0A68 ] }; + key { [ U0A69, U0A71 ] }; + key { [ U0A6A, U0A74 ] }; + key { [ U0A6B, U262C ] }; + key { [ U0A6C ] }; + key { [ U0A6D ] }; + key { [ U0A6e ] }; + key { [ U0A6F, parenleft ] }; + key { [ U0A66, parenright ] }; + key { [ gur_visarga ] }; + key { [ equal, plus ] }; + +// Mainly long vowels + + key { [ U0A4C, U0A14 ] }; + key { [ U0A48, U0A10 ] }; + key { [ U0A3E, U0A06 ] }; + key { [ U0A40, U0A08 ] }; + key { [ U0A42, U0A0A ] }; + +// Mainly voiced consonants + + key { [ U0A2C, U0A2D ] }; + key { [ U0A39, U0A19 ] }; + key { [ U0A17, U0A18 ] }; + key { [ U0A26, U0A27 ] }; + key { [ U0A1C, U0A1D ] }; + key { [ U0A21, U0A22 ] }; + key { [ U0A3C, U0A1E ] }; + +// Mainly short vowels + key { [ U0A4B, U0A13 ] }; + key { [ U0A47, U0A0F ] }; + key { [ U0A4D, U0A05 ] }; + key { [ U0A3F, U0A07 ] }; + key { [ U0A41, U0A09 ] }; + +// Mainly unvoiced consonants + + key { [ U0A2A, U0A2B ] }; + key { [ U0A30, U0A5C ] }; + key { [ U0A15, U0A16 ] }; + key { [ U0A24, U0A25 ] }; + key { [ U0A1A, U0A1B ] }; + key { [ U0A1F, U0A20 ] }; + key { [ U005C, U007C ] }; + + key { [ z, U0A01 ] }; + key { [ U0A02, U0A70, U0A71 ] }; + key { [ U0A2E, U0A23 ] }; + key { [ U0A28, U0A28 ] }; + key { [ U0A35, U0A35 ] }; + key { [ U0A32, U0A33 ] }; + key { [ U0A38, U0A36 ] }; + key { [ comma, less ] }; + key { [ period, U0964 ] }; + key { [ U0A2F, question ] }; +}; + +//Name : Jhelum (Refind Inscript) +//Description : A Jhelum keyboard layout for Gurmukhi (Punjabi) +// http://www.satluj.org/Jhelum.html +//Modified for Inscript to make +//Original Author : Amanpreet Singh Alam { [ apostrophe, asciitilde, U0A02,U0A01 ] }; // apostrophe: anusvara, candrabindu + key { [ 1,exclam, U0A67, exclam ] }; + key { [ 2,at, U0A68, at ] }; + key { [ 3,numbersign, U0A69, numbersign ] }; + key { [ 4,dollar, U0A6A, dollar ] }; + key { [ 5,percent,U0A6B, percent ] }; + key { [ 6,asciicircum, U0A6C,asciicircum ] }; + key { [ 7,ampersand,U0A6D,ampersand ] }; + key { [ 8,asterisk,U0A6E, asterisk ] }; + key { [ 9,parenleft,U0A6F,parenleft ] }; + key { [ 0,parenright,U0A66,parenright ] }; + key { [ minus,underscore] }; + key { [ equal,plus] }; + key { [ U0964,U0965,U007C,U005C] }; //pipe : danda, double danda + + //Q Row + key { [ U0A4C, U0A14 ] }; // Q: oo, ooh + key { [ U0A48, U0A10 ] }; // W: ee, ae + key { [ U0A3E, U0A06 ] }; // E: a, aa + key { [ U0A40, U0A08 ] }; // R: ee, ai + key { [ U0A42, U0A0A ] }; // T: u, uu + key { [ U0A30, U0A5C ] }; // Y: ra, raa + key { [ U0A26, U0A27 ] }; // U: tha, thha + key { [ U0A17, U0A18 ] }; // I:ga, gha + key { [ U0A24, U0A1F ] }; // O: ta, tha + key { [ U0A2A, U0A5E ] }; // P: pa, pha + key { [ U0A21, U0A22, bracketleft, braceleft ] }; + key { [ U0A19, U0A1E, bracketright, braceright ] }; + + //A Row + key { [ U0A4B, U0A13 ] }; // A: o, oo + key { [ U0A40, U0A0F ] }; // S: e, ee + key { [ U0A4D, U0A05 ] }; // D: halant, aa + key { [ U0A3F, U0A07 ] }; // F: i, aa + key { [ U0A41, U0A09 ] }; // G: u, uh + key { [ U0A39, U0A20 ] }; // H: ha, thha + key { [ U0A1C, U0A1D ] }; // J: ja, jha + key { [ U0A15, U0A16 ] }; // K: ka, kha + key { [ U0A32, U0A25 ] }; // L: la, tha + key { [ U0A38, semicolon, colon ] }; //; sa + key { [apostrophe, quotedbl ] }; + + //Z Row + key { [ U0A71, U0A3C ] }; // Z: addak, par bindi + key { [ U0A02, U0A70 ] }; // X: bindi, tippi + key { [ U0A1A, U0A1B ] }; // C: ca, cha + key { [ U0A35, U0A2F ] }; // V: va, ya + key { [ U0A2C, U0A2D ] }; // B: ba, bha + key { [ U0A28, U0A23 ] }; // N: na, nha + key { [ U0A2E, U0A2E ] }; // M: ma + key { [ comma, U262C ] };// comma: comma, dev abbreviation sign + key { [ period, U0A74 ] }; // period: period, nukta + key { [ slash, question ] }; + +// begin modifier mappings +// modifier_map Shift { Shift_L }; +// modifier_map Lock { Caps_Lock }; +// modifier_map Control{ Control_L }; +// modifier_map Mod3 { Mode_switch }; + include "level3(ralt_switch)" +}; + +partial alphanumeric_keys +xkb_symbols "olpc" { + +// Contact: Walter Bender + + include "in(deva)" + key { [ U094A, U0912 ] }; // DEVANAGARI VOWEL SIGN SHORT O; DEVANAGARI LETTER SHORT O + key { [ U0967, U090D ] }; // DEVANAGARI DIGIT ONE; DEVANAGARI LETTER CANDRA E + key { [ U0968, U0945 ] }; // DEVANAGARI DIGIT TWO; DEVANAGARI VOWEL SIGN CANDRA E + key { [ U0969 ] }; // DEVANAGARI DIGIT THREE; + key { [ U096A ] }; // DEVANAGARI DIGIT FOUR; + key { [ U096B ] }; // DEVANAGARI DIGIT FIVE; + key { [ U096C ] }; // DEVANAGARI DIGIT SIX; + key { [ U096D ] }; // DEVANAGARI DIGIT SEVEN; + key { [ U096E ] }; // DEVANAGARI DIGIT EIGHT; + key { [ U096F, parenleft ] }; // DEVANAGARI DIGIT NINE; + key { [ U0966, parenright ] }; // DEVANAGARI DIGIT ZERO; + key { [ minus, U0903 ] }; // DEVANAGARI SIGN VISARGA; + key { [ U0943, U090B ] }; // DEVANAGARI VOWEL SIGN VOCALIC R; DEVANAGARI LETTER VOCALIC R + + key { [ U094C, U0914 ] }; // DEVANAGARI VOWEL SIGN AU; DEVANAGARI LETTER AU + key { [ U0948, U0910 ] }; // DEVANAGARI VOWEL SIGN AI; DEVANAGARI LETTER AI + key { [ U093E, U0906 ] }; // DEVANAGARI VOWEL SIGN AA; DEVANAGARI LETTER AA + key { [ U0940, U0908 ] }; // DEVANAGARI VOWEL SIGN II; DEVANAGARI LETTER II + key { [ U0942, U090A ] }; // DEVANAGARI VOWEL SIGN UU; DEVANAGARI LETTER UU + key { [ U092C, U092D ] }; // DEVANAGARI LETTER BA; DEVANAGARI LETTER BHA + key { [ U0939, U0919 ] }; // DEVANAGARI LETTER HA; DEVANAGARI LETTER NGA + key { [ U0917, U0918 ] }; // DEVANAGARI LETTER GA; DEVANAGARI LETTER GHA + key { [ U0926, U0927 ] }; // DEVANAGARI LETTER DA; DEVANAGARI LETTER DHA + key { [ U091C, U091D ] }; // DEVANAGARI LETTER JA; DEVANAGARI LETTER JHA + key { [ U0921, U0922 ] }; // DEVANAGARI LETTER DDA; DEVANAGARI LETTER DDHA + key { [ U093C, U091E ] }; // DEVANAGARI SIGN NUKTA; DEVANAGARI LETTER NYA + + key { [ U0949, U0911 ] }; // DEVANAGARI VOWEL SIGN CANDRA O; DEVANAGARI LETTER CANDRA O + + key { [ U094B, U0913 ] }; // DEVANAGARI VOWEL SIGN O; DEVANAGARI LETTER O + key { [ U0947, U090F ] }; // DEVANAGARI VOWEL SIGN E; DEVANAGARI LETTER E + key { [ U094D, U0905 ] }; // DEVANAGARI SIGN VIRAMA; DEVANAGARI LETTER A + key { [ U093F, U0907 ] }; // DEVANAGARI VOWEL SIGN I; DEVANAGARI LETTER I + key { [ U0941, U0909 ] }; // DEVANAGARI VOWEL SIGN U; DEVANAGARI LETTER U + key { [ U092A, U092B ] }; // DEVANAGARI LETTER PA; DEVANAGARI LETTER PHA + key { [ U0930, U0931 ] }; // DEVANAGARI LETTER RA; DEVANAGARI LETTER RRA + key { [ U0915, U0916 ] }; // DEVANAGARI LETTER KA; DEVANAGARI LETTER KHA + key { [ U0924, U0925 ] }; // DEVANAGARI LETTER TA; DEVANAGARI LETTER THA + key { [ U091A, U091B ] }; // DEVANAGARI LETTER CA; DEVANAGARI LETTER CHA + key { [ U091F, U0920 ] }; // DEVANAGARI LETTER TTA; DEVANAGARI LETTER TTHA + + key { [ U0946, U090E ] }; // DEVANAGARI VOWEL SIGN SHORT E; DEVANAGARI LETTER SHORT E + key { [ U0902, U0901 ] }; // DEVANAGARI SIGN ANUSVARA; DEVANAGARI SIGN CANDRABINDU + key { [ U092E, U0923 ] }; // DEVANAGARI LETTER MA; DEVANAGARI LETTER NNA + key { [ U0928, U0929 ] }; // DEVANAGARI LETTER NA; DEVANAGARI LETTER NNNA + key { [ U0935, U0934 ] }; // DEVANAGARI LETTER VA; DEVANAGARI LETTER LLLA + key { [ U0932, U0933 ] }; // DEVANAGARI LETTER LA; DEVANAGARI LETTER LLA + key { [ U0938, U0936 ] }; // DEVANAGARI LETTER SA; DEVANAGARI LETTER SHA + key { [ comma, U0937 ] }; // DEVANAGARI LETTER SSA + key { [ period, U0964 ] }; // DEVANAGARI DANDA + key { [ U092F, U095F ] }; // DEVANAGARI LETTER YA; DEVANAGARI LETTER YYA + + // space, space, Zero-Width-Non-Joiner (ZWNJ), Zero-Width-Joiner (ZWJ): + include "nbsp(zwnj3zwj4)" + + include "group(olpc)" +}; + +partial alphanumeric_keys +xkb_symbols "hin-wx" { + + name[Group1]= "Hindi (Wx)"; + + key { [ grave, asciitilde, 2, 3 ] }; + + key { [ 0x1000967, exclam ] }; + key { [ 0x1000968, at ] }; + key { [ 0x1000969 , numbersign ] }; + key { [ 0x100096A , dollar ] }; + key { [ 0x100096B , percent ] }; + key { [ 0x100096C , asciicircum ] }; + key { [ 0x100096D , ampersand ] }; + key { [ 0x100096e , asterisk ] }; + key { [ 0x100096F, parenleft ] }; + key { [ 0x1000966, parenright ] }; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + + + key { [ 0x1000943, 0x1000944, 0x100090B, 0x1000960] }; + key { [ 0x1000924, 0x1000925 ] }; + key { [ 0x1000947, 0x1000948, 0x100090F, 0x1000910] }; + key { [ 0x1000930, 0x1000937 ] }; + key { [ 0x100091F, 0x1000920 ] }; + + + key { [ 0x100092F ] }; + key { [ 0x1000941, 0x1000942, 0x1000909, 0x100090A ] }; + key { [ 0x100093F, 0x1000940, 0x1000907, 0x1000908 ] }; + key { [ 0x100094B, 0x100094C, 0x1000913, 0x1000914] }; + key { [ 0x100092A, 0x100092B ] }; + key { [ bracketleft, braceleft ] }; + key { [ bracketright, braceright ] }; + key { [ backslash, bar, 0x1000964, 0x1000965 ] }; + + key { [ 0x100094D, 0x100093E, 0x1000905,0x1000906 ] }; + key { [ 0x1000938, 0x1000936 ] }; + key { [ 0x1000921, 0x1000922 ] }; + key { [ 0x1000919, 0x100091E ] }; + key { [ 0x1000917, 0x1000918 ] }; + + + key { [ 0x1000939, 0x1000903 ] }; + key { [ 0x100091C, 0x100091D ] }; + key { [ 0x1000915, 0x1000916 ] }; + key { [ 0x1000932, 0x1000962, 0x1000933, 0x100090C] }; + key { [ semicolon, colon ] }; + key { [ quoteright, quotedbl ] }; + + key { [ 0x1000901, 0x100093C, 0x100093D, 0x1000950] }; + key { [ 0x1000926, 0x1000927 ] }; + key { [ 0x100091A, 0x100091B ] }; + key { [ 0x1000935, dead_V ] }; + key { [ 0x100092C, 0x100092D ] }; + key { [ 0x1000928, 0x1000923 ] }; + key { [ 0x100092E, 0x1000902 ] }; + key { [ comma, less ] }; + key { [ period, greater ] }; + key { [ slash, question ] }; + + include "level3(ralt_switch)" +}; + +partial alphanumeric_keys +xkb_symbols "eng" { + + name[Group1]= "English (India, with RupeeSign)"; + + include "us(basic)" + + include "rupeesign(4)" + + include "level3(ralt_switch)" +}; + + +// Description : Enhanced INSCRIPT keymap for Malayalam +// Encoding : Unicode (http://www.unicode.org) +// Author : Mahesh T Pai +// Date : March, 2011 +// Source : http://www.nongnu.org/smc/docs/images/ml_inscript_layout.jpg +// Comment : Based on the Inscript Keyboard created by M Baiju +// Mapping: + +partial alphanumeric_keys +xkb_symbols "mal_enhanced" { + + name[Group1] = "Malayalam (enhanced Inscript with Rupee Sign)"; + + //From grave to backslash (\) + + key { [ U0d4a , U0d12 ] }; + key { [ U0d67 , exclam ] }; + key { [ U0d68 , at ] }; + key { [ U0d69 , numbersign ] }; + key { [ U0d6a , dollar ] }; + key { [ U0d6b , percent ] }; + key { [ U0d6c , asciicircum ] }; + key { [ U0d6d , ampersand ] }; + key { [ U0d6e , U0d7e ] }; + key { [ U0d6f , parenleft ] }; + key { [ U0d66 , parenright ] }; + + key { [ minus , U0d03 ] }; + key { [ U0d43 , U0d0b ] }; + key { [ U0d7c , U05C ] }; //bksl: chillu RR + + + // From 'q' to right bracket (]) + + key { [ U0d57 , U0d14 ] }; + key { [ U0d48 , U0d10 ] }; + key { [ U0d3e , U0d06 ] }; + key { [ U0d40 , U0d08 ] }; + key { [ U0d42 , U0d0a ] }; + key { [ U0d2c , U0d2d ] }; + key { [ U0d39 , U0d19 ] }; + key { [ U0d17 , U0d18 ] }; + key { [ U0d26 , U0d27 ] }; + key { [ U0d1c , U0d1d ] }; + key { [ U0d21 , U0d22 ] }; + key { [ U0200d , U0d1e ] }; + + // From 'a' to apostrophe (') + + key { [ U0d4b , U0d13 ] }; + key { [ U0d47 , U0d0f ] }; + key { [ U0d4d , U0d05 ] }; + key { [ U0d3f , U0d07 ] }; + key { [ U0d41 , U0d09 ] }; + key { [ U0d2a , U0d2b ] }; + key { [ U0d30 , U0d31 ] }; + key { [ U0d15 , U0d16 ] }; + key { [ U0d24 , U0d25 ] }; + key { [ U0d1a , U0d1b ] }; + key { [ U0d1f , U0d20 ] }; + + // From 'z' to slash (/) + + key { [ U0d46 , U0d0e ] }; + key { [ U0d02 , U0d7a ] }; + key { [ U0d2e , U0d23 ] }; + key { [ U0d28 , U0d7b ] }; + key { [ U0d35 , U0d34 ] }; + key { [ U0d32 , U0d33 ] }; + key { [ U0d38 , U0d36 ] }; + key { [ comma , U0d37 ] }; + key { [ period , U0d7d ] }; //chillu l + key { [ U0d2f , question ] }; + + // hope this includes the rupee sign at alt + 4 + + include "rupeesign(4)" + include "level3(ralt_switch)" + +}; + diff --git a/test/data/symbols/inet b/test/data/symbols/inet new file mode 100644 index 0000000..b8f4d19 --- /dev/null +++ b/test/data/symbols/inet @@ -0,0 +1,1873 @@ +// EAK (Easy Access, Internet, Multimedia, PDA) keyboards +// Copyright (C) 2002 Stanislav Brabec +// +// Based on LinEAK project +// LinEAK - Linux support for Easy Access and Internet Keyboards +// Copyright (C) 2001, 2002 Mark Smulders + +// Usage in XF86Config: +// Option "XkbLayout" "my_kb_layout" +// Option "XkbVariant" "my_kb_variant" +// Option "XkbModel" "my_eak_type" +// Option "XkbRules" "xfree86" +// Simple command line usage: +// setxkbmap 'my_kb_layout' -variant 'my_kb_variant' -model 'my_eak_type' + +// All keyboards listed here should be also mentioned in +// rules/base, base.lst and base.xml. + +// Very common set of media keys +partial hidden alphanumeric_keys +xkb_symbols "media_common" { + key { [ XF86AudioMedia ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioMute ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioStop, XF86Eject ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86Eject ] }; + key { [ XF86Eject ] }; +}; + +// popular web navigation combination +partial hidden alphanumeric_keys +xkb_symbols "nav_common" { + key { [ XF86Calculator ] }; + key { [ XF86WWW ] }; + key { [ XF86Search ] }; + key { [ XF86Favorites ] }; + key { [ XF86Reload ] }; + key { [ XF86Stop ] }; + key { [ XF86Forward ] }; + key { [ XF86Back ] }; + key { [ XF86MyComputer ] }; + key { [ XF86Mail ] }; + key { [ XF86AudioMedia ] }; +}; + +// ACPI Standard +partial hidden alphanumeric_keys +xkb_symbols "acpi_common" { + key { [ XF86PowerOff ] }; + key { [ XF86Standby ] }; + key { [ XF86WakeUp ] }; + key { [ XF86Battery ] }; + key { [ XF86WLAN ] }; + key { [ XF86Sleep ] }; +}; + +// Combined sections, for simplicity +partial hidden alphanumeric_keys +xkb_symbols "media_nav_common" { + include "inet(media_common)" + include "inet(nav_common)" +}; + +partial hidden alphanumeric_keys +xkb_symbols "media_nav_acpi_common" { + include "inet(media_common)" + include "inet(nav_common)" + include "inet(acpi_common)" +}; + +partial hidden alphanumeric_keys +xkb_symbols "nav_acpi_common" { + include "inet(nav_common)" + include "inet(acpi_common)" +}; + +partial hidden alphanumeric_keys +xkb_symbols "media_acpi_common" { + include "inet(media_common)" + include "inet(acpi_common)" +}; + +// Evdev Standardized Keycodes +partial alphanumeric_keys +xkb_symbols "evdev" { + key { [ XF86AudioMute ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86PowerOff ] }; + key { [ Cancel ] }; + key { [ Redo ] }; + key { [ SunProps ] }; + key { [ Undo ] }; + key { [ SunFront ] }; + key { [ XF86Copy ] }; + key { [ SunOpen ] }; + key { [ XF86Paste ] }; + key { [ Find ] }; + key { [ XF86Cut ] }; + key { [ Help ] }; + key { [ Linefeed ] }; + +// Commented out because HZTG has same keycode as TLDE +// key { [ Zenkaku_Hankaku ] }; + + key { [ Hiragana_Katakana ] }; + key { [ Henkan ] }; + key { [ Muhenkan ] }; + key { [ Katakana ] }; + key { [ Hiragana ] }; + key { [ Romaji ] }; + + key { [ Hangul ] }; + key { [ Hangul_Hanja ] }; + key { [ XF86TouchpadToggle ] }; + key { [ XF86TouchpadOn ] }; + key { [ XF86TouchpadOff ] }; + +// key { [ ] }; // KEY_MACRO + key { [ plusminus ] }; + key { [ XF86LaunchA ] }; + key { [ XF86MenuKB ] }; + key { [ XF86Calculator ] }; +// key { [ ] }; // KEY_SETUP + key { [ XF86Sleep ] }; + key { [ XF86WakeUp ] }; + key { [ XF86Explorer ] }; + key { [ XF86Send ] }; +// key { [ ] }; // KEY_DELETEFILE + key { [ XF86Xfer ] }; + key { [ XF86Launch1 ] }; + key { [ XF86Launch2 ] }; + key { [ XF86WWW ] }; + key { [ XF86DOS ] }; + key { [ XF86ScreenSaver ] }; +// key { [ ] }; // KEY_DIRECTION + key { [ XF86RotateWindows ] }; + key { [ XF86Mail ] }; + key { [ XF86Favorites ] }; + key { [ XF86MyComputer ] }; + key { [ XF86Back ] }; + key { [ XF86Forward ] }; +// key { [ ] }; // KEY_CLOSECD (opposite of eject) + key { [ XF86Eject ] }; + key { [ XF86Eject, XF86Eject ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioStop, XF86Eject ] }; + key { [ XF86AudioRecord ] }; + key { [ XF86AudioRewind ] }; + key { [ XF86Phone ] }; +// key { [ ] }; // KEY_ISO + key { [ XF86Tools ] }; + key { [ XF86HomePage ] }; + key { [ XF86Reload ] }; + key { [ XF86Close ] }; +// key { [ ] }; // KEY_MOVE +// key { [ ] }; // KEY_EDIT + key { [ XF86ScrollUp ] }; + key { [ XF86ScrollDown ] }; + key { [ parenleft ] }; + key { [ parenright ] }; + key { [ XF86New ] }; + key { [ Redo ] }; + key { [ XF86LaunchA ] }; + key { [ XF86LaunchC ] }; + key { [ XF86LaunchD ] }; + key { [ XF86LaunchE ] }; + key { [ XF86LaunchF ] }; + key { [ XF86AudioPlay ] }; + key { [ XF86AudioPause ] }; + key { [ XF86Launch3 ] }; + key { [ XF86Launch4 ] }; + key { [ XF86LaunchB ] }; + key { [ XF86Suspend ] }; + key { [ XF86Close ] }; + key { [ XF86AudioPlay ] }; + key { [ XF86AudioForward ] }; +// key { [ ] }; // KEY_BASSBOOST + key { [ Print ] }; +// key { [ ] }; // KEY_HP + key { [ XF86WebCam ] }; +// key { [ ] }; // KEY_SOUND +// key { [ ] }; // KEY_QUESTION + key { [ XF86Mail ] }; + key { [ XF86Messenger ] }; // KEY_CHAT + key { [ XF86Search ] }; + key { [ XF86Go ] }; // KEY_CONNECT + key { [ XF86Finance ] }; + key { [ XF86Game ] }; // KEY_SPORT + key { [ XF86Shop ] }; +// key { [ ] }; // KEY_ALTERASE + key { [ Cancel ] }; + key { [ XF86MonBrightnessDown ] }; + key { [ XF86MonBrightnessUp ] }; + key { [ XF86AudioMedia ] }; + key { [ XF86Display ] }; + key { [ XF86KbdLightOnOff ] }; // KEY_KBDILLUMTOGGLE + key { [ XF86KbdBrightnessDown ] }; // KEY_KBDILLUMDOWN + key { [ XF86KbdBrightnessUp ] }; // KEY_KBDILLUMUP + key { [ XF86Send ] }; + key { [ XF86Reply ] }; + key { [ XF86MailForward ] }; + key { [ XF86Save ] }; + key { [ XF86Documents ] }; + key { [ XF86Battery ] }; + key { [ XF86Bluetooth ] }; + key { [ XF86WLAN ] }; +// key { [ ] }; // KEY_VIDEO_NEXT -- drive next video source +// key { [ ] }; // KEY_VIDEO_PREV -- drive previous video source +// key { [ ] }; // KEY_BRIGHTNESS_CYCLE -- bright up, max++ == min +// key { [ ] }; // KEY_BRIGHTNESS_ZERO -- brightness off +// key { [ ] }; // KEY_DISPLAY_OFF -- turn off display +// key { [ ] }; // KEY_WIMAX + key { [ XF86Hibernate ] }; // KEY_HIBERNATE + + key { [ XF86Tools ] }; + key { [ XF86Launch5 ] }; + key { [ XF86Launch6 ] }; + key { [ XF86Launch7 ] }; + key { [ XF86Launch8 ] }; + key { [ XF86Launch9 ] }; +}; + + +// Acer AirKey V +partial alphanumeric_keys +xkb_symbols "airkey" { + include "inet(acpi_common)" + key { [ XF86AudioNext ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86Mail ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioMute ] }; + key { [ XF86WWW ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86Terminal ] }; + key { [ XF86AudioStop, XF86Eject ] }; +}; + +// Acer C300 Laptop +partial alphanumeric_keys +xkb_symbols "acer_c300" { + include "inet(nav_common)" + key { [ F14 ] }; + key { [ F13 ] }; + key { [ XF86AudioMute ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86Launch2 ] }; + key { [ Help ] }; + key { [ XF86Launch1 ] }; +}; + +// Acer Ferrari 4000 Keyboard +// From Alex Dubov +partial alphanumeric_keys +xkb_symbols "acer_ferrari4k" { + include "inet(media_nav_common)" + key { [ dollar ] }; + key { [ EuroSign ] }; + key { [ XF86Display ] }; + // Missing keycodes - set-up with setkeycodes + key { [ Help ] }; + key { [ XF86Launch1 ] }; + key { [ XF86Launch2 ] }; + key { [ XF86Launch3 ] }; + key { [ XF86Launch4 ] }; +}; + +// Acer Laptop (Generic layout for Acer laptops from 2004 onwards) +// From Carlos Corbacho +// Keys marked (HAL) require HAL 0.5.10 (or newer) to be set up correctly +// (Your laptop must also be added to hal-info) +// (Not all these keys will be available on every Acer laptop) +partial alphanumeric_keys +xkb_symbols "acer_laptop" { + include "inet(media_nav_acpi_common)" + key { [ XF86Launch2 ] }; // "P" or "P2" (HAL) + key { [ XF86Launch1 ] }; // "e" or "P1" (HAL) + + // Hotkeys (Function) + // Launch Keys + // Device keys + key { [ XF86Display ] }; // Fn+F5 (HAL) + key { [ XF86Launch4 ] }; // Fn+F3 (HAL) + key { [ XF86LaunchB ] }; // Bluetooth (HAL) + key { [ XF86LaunchA ] }; // Wireless (HAL) + key { [ Help ] }; // Fn+F1 (HAL) + key { [ XF86Launch5 ] }; // Fn+F7 (HAL) + key { [ XF86Launch3 ] }; // Fn+F2 (HAL) + + // Special Characters + // To avoid setting a precedent/ standard that will be broken in later + // versions of HAL, these keys are commented out for now. When they are no + // longer marked 'FIXME' and have saner keycodes, these two entries can be + // fixed and permanently uncommented. In the meantime, just uncomment these + // to make the keys work +// key { [ EuroSign ] }; // Euro (HAL) +// key { [ dollar ] }; // Dollar (HAL) +}; + +// Azona + +// Azona RF2300 wireless Internet Keyboard +partial alphanumeric_keys +xkb_symbols "azonaRF2300" { + // From Radics Laszlo + include "inet(nav_acpi_common)" + key { [ XF86HomePage ] }; + key { [ XF86AudioStop ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioMute ] }; + key { [ XF86Copy ] }; + key { [ XF86Cut ] }; +// key { [ XF86Paste ] }; +}; + + +// Brother + +// Brother Internet Keyboard +partial alphanumeric_keys +xkb_symbols "brother" { + include "inet(acpi_common)" + key { [ XF86ScrollUp ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86ScrollDown ] }; + key { [ XF86ZoomOut ] }; + key { [ XF86AudioMute ] }; + key { [ XF86WWW ] }; + key { [ Menu ] }; + key { [ XF86AudioStop ] }; + key { [ XF86Calculator ] }; + key { [ XF86Xfer ] }; + key { [ XF86Mail ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86ZoomIn ] }; + key { [ XF86AudioLowerVolume ] }; +}; + + +// BTC + +// BTC 5113RF Multimedia +partial alphanumeric_keys +xkb_symbols "btc5113rf" { + include "inet(acpi_common)" + key { [ XF86AudioStop ] }; + key { [ XF86AudioMute ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86Favorites ] }; + key { [ XF86Eject ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86Back ] }; + key { [ XF86WWW ] }; + key { [ XF86Search ] }; +}; + + +// BTC 9000 +partial alphanumeric_keys +xkb_symbols "btc9000" { + include "inet(acpi_common)" + key { [ XF86AudioStop ] }; + key { [ XF86AudioMute ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86Favorites ] }; + key { [ XF86AudioMedia ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86Reload ] }; + key { [ XF86Mail ] }; + key { [ XF86HomePage ] }; + key { [ XF86Search ] }; +}; + +// BTC 9000A +partial alphanumeric_keys +xkb_symbols "btc9000a" { + include "inet(acpi_common)" + key { [ XF86AudioStop ] }; + key { [ XF86AudioMute ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86Favorites ] }; + key { [ XF86Eject ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86HomePage ] }; + key { [ Help ] }; + key { [ XF86WWW ] }; + key { [ XF86Search ] }; +}; + +// BTC 9001AH +xkb_symbols "btc9001ah" { + include "inet(acpi_common)" + key { [ XF86HomePage ] }; + key { [ XF86AudioStop ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioMute ] }; + key { [ XF86Mail ] }; + key { [ XF86Eject ] }; +}; + +// BTC 5090 +partial alphanumeric_keys +xkb_symbols "btc5090" { + include "inet(media_nav_acpi_common)" + key { [ XF86Start ] }; + key { [ XF86Eject ] }; +}; + +// BTC 9019U +partial alphanumeric_keys +xkb_symbols "btc9019u" { + include "inet(media_nav_acpi_common)" + key { [ XF86Search ] }; + key { [ XF86HomePage ] }; +}; + +// Cherry Blue Line + +// Cherry Blue Line CyBo@rd +partial alphanumeric_keys +xkb_symbols "cherryblue" { + include "inet(nav_common)" + key { [ XF86Reload ] }; + key { [ XF86HomePage ] }; + key { [ XF86AudioStop ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioMute ] }; + key { [ XF86Standby ] }; + key { [ XF86Terminal ] }; + key { [ XF86Go ] }; +}; + +// Cherry CyMotion Master XPress +partial alphanumeric_keys +xkb_symbols "cherryblueb" { + include "inet(media_nav_common)" + key { [ XF86Reload ] }; + key { [ XF86HomePage ] }; + key { [ XF86Forward ] }; + key { [ XF86Back ] }; + key { [ XF86Copy ] }; + key { [ XF86ScrollUp ] }; + key { [ XF86ScrollDown ] }; + key { [ XF86Cut ] }; + key { [ XF86Paste ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioMute ] }; + key { [ XF86Book ] }; + key { [ XF86Finance ] }; + key { [ XF86Standby ] }; + key { [ XF86AudioRewind ] }; + key { [ XF86Eject ] }; + key { [ XF86Book ] }; + key { [ XF86Book ] }; + key { [ XF86Terminal ] }; + key { [ XF86Go ] }; +}; + +// Cherry Blue Line CyBo@rd (alternate option) +partial alphanumeric_keys +xkb_symbols "cherrybluea" { + include "inet(media_nav_acpi_common)" + key { [ XF86Go ] }; +}; + +// Cherry CyBo@rd USB-Hub +partial alphanumeric_keys +xkb_symbols "cherrycyboard" { + include "inet(media_nav_acpi_common)" + key { [ XF86Search ] }; + key { [ XF86HomePage ] }; + key { [ XF86Terminal ] }; + key { [ XF86AudioMedia ] }; +}; + +// Cherry CyMotion Expert +partial alphanumeric_keys +xkb_symbols "cherrycmexpert" { + include "inet(cherryblueb)" + include "inet(acpi_common)" + key { [ XF86Mail ] }; +}; + + +// Chicony + +// Chicony Internet Keyboard +partial alphanumeric_keys +xkb_symbols "chicony" { + include "inet(acpi_common)" + key { [ XF86AudioMute ] }; + key { [ XF86Mail ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86Forward ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioStop ] }; + key { [ XF86Back ] }; + key { [ XF86LaunchB ] }; + key { [ XF86LaunchC ] }; + key { [ XF86LaunchA ] }; + key { [ XF86WWW ] }; + key { [ XF86ContrastAdjust ] }; + key { [ XF86BrightnessAdjust ] }; +}; + +// Chicony KU-0108 +partial alphanumeric_keys +xkb_symbols "chicony0108" { + include "inet(cherrycyboard)" +}; + +// Chicony KU-0420 AKA Targus Slim Internet Media USB Keyboard +partial alphanumeric_keys +xkb_symbols "chicony0420" { + include "inet(media_nav_acpi_common)" + key { [ XF86AudioMedia ] }; + key { [ XF86MyComputer ] }; +}; + +// Chicony KB-9885 +partial alphanumeric_keys +xkb_symbols "chicony9885" { + include "inet(acpi_common)" + key { [ XF86AudioMute ] }; + key { [ XF86Mail ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86Forward ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioStop ] }; + key { [ XF86Back ] }; + key { [ XF86LaunchB ] }; + key { [ XF86LaunchC ] }; + key { [ XF86LaunchA ] }; + key { [ XF86WWW ] }; +}; + + +// Compaq + +// Compaq Easy Access Keyboard +partial alphanumeric_keys +xkb_symbols "compaqeak8" { + key { [ XF86Community ] }; + key { [ XF86Market ] }; + key { [ XF86Meeting ] }; + key { [ XF86Search ] }; + key { [ XF86News ] }; + key { [ XF86Mail ] }; + key { [ XF86HomePage ] }; + key { [ XF86WWW ] }; +}; + +// Compaq Internet Keyboard (7 keys) +partial alphanumeric_keys +xkb_symbols "compaqik7" { + key { [ XF86LightBulb ] }; + key { [ XF86Mail ] }; + key { [ XF86Search ] }; + key { [ Help ] }; + key { [ XF86VendorHome ] }; + key { [ XF86HomePage ] }; + key { [ XF86Shop ] }; +}; + +// Compaq Internet Keyboard (13 keys) +partial alphanumeric_keys +xkb_symbols "compaqik13" { + include "inet(media_acpi_common)" + key { [ XF86Mail ] }; + key { [ XF86Go ] }; + key { [ XF86Search ] }; + key { [ XF86WWW ] }; + key { [ XF86Shop ] }; +}; + +// Compaq Internet Keyboard (18 keys) +partial alphanumeric_keys +xkb_symbols "compaqik18" { + include "inet(media_acpi_common)" + key { [ XF86LightBulb ] }; + key { [ XF86Eject ] }; + key { [ XF86Mail ] }; + key { [ XF86Go ] }; + key { [ XF86Search ] }; + key { [ XF86WWW ] }; + key { [ XF86VendorHome ] }; + key { [ XF86Community ] }; + key { [ XF86Shop ] }; + key { [ Print ] }; +}; + + +// Laptop/notebook Compaq (eg. Armada, Evo) Laptop Keyboard +partial alphanumeric_keys +xkb_symbols "armada" { + include "inet(media_acpi_common)" + key { [ XF86Search ] }; + key { [ XF86Mail ] }; + key { [ XF86HomePage ] }; + key { [ XF86WWW ] }; + key { [ XF86Launch2 ] }; // Battery Monitor + key { [ XF86AudioMedia ] }; + key { [ XF86Launch0 ] }; // Info Center +}; + +// Laptop/notebook Compaq (eg. Presario) Internet Keyboard +partial alphanumeric_keys +xkb_symbols "presario" { + include "inet(media_acpi_common)" + key { [ XF86Q ] }; + key { [ XF86Launch2 ] }; + key { [ XF86Mail ] }; + key { [ XF86Launch1 ] }; + key { [ XF86WWW ] }; + key { [ XF86Shop ] }; + key { [ XF86AudioMedia ] }; +}; + +// Compaq iPaq Keyboard +partial alphanumeric_keys +xkb_symbols "ipaq" { + key { [ XF86Shop ] }; + key { [ XF86Standby ] }; + key { [ XF86Search ] }; + key { [ XF86Travel ] }; + key { [ XF86BackForward ] }; + key { [ XF86Q ] }; + key { [ XF86Mail ] }; +}; + + +// Dell + +partial alphanumeric_keys +xkb_symbols "dell" { + include "inet(acpi_common)" + key { [ XF86Mail ] }; + key { [ XF86Search ] }; + key { [ XF86HomePage ] }; +}; + +// Dell Precision M65 +partial alphanumeric_keys +xkb_symbols "dellm65" { + include "inet(media_common)" + key { [ XF86PowerOff ] }; + key { [ Super_L ] }; +}; + +// Laptop/notebook Dell Inspiron 8xxx +partial alphanumeric_keys +xkb_symbols "inspiron" { + include "inet(media_common)" + key { [ XF86AudioStop ] }; + key { [ XF86AudioNext ] }; + key { [ XF86Eject ] }; + key { [ XF86Display ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; +}; + +// DELL USB Multimedia Keyboard (former 8135, generalized, superset of 8125) +partial alphanumeric_keys +xkb_symbols "dellusbmm" { + // Describes the extra keys on a SK-8135 Multimedia keyboard + // From Olivier Lahaye + include "inet(media_nav_acpi_common)" + key { [ XF86HomePage ] }; + key { [ XF86MyComputer ] }; + key { [ XF86AudioMedia ] }; +}; + + +// Diamond + +// Diamond 9801 / 9802 series +partial alphanumeric_keys +xkb_symbols "diamond" { + include "inet(media_nav_acpi_common)" + key { [ XF86Go ] }; +}; + + +// Ennyah + +// Ennyah DKB-1008 +partial alphanumeric_keys +xkb_symbols "ennyah_dkb1008" { + include "inet(media_nav_acpi_common)" + key { [ XF86AudioMedia ] }; +}; + + +// Genius + +// Genius Comfy KB-16M / Genius MM Keyboard KWD-910 +partial alphanumeric_keys +xkb_symbols "genius" { + include "inet(media_acpi_common)" + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86Calculator ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86Forward ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86Back ] }; + key { [ XF86ScreenSaver ] }; + key { [ XF86Mail ] }; + key { [ XF86Eject ] }; + key { [ XF86WWW ] }; +}; + + +// GeniusComfy21e +partial alphanumeric_keys +xkb_symbols "geniuscomfy2" { + // Describes the extra keys on a Genius Comfy KB-21e-Scroll + // From Radics Laszlo + include "inet(media_nav_acpi_common)" + key { [ Return ] }; +}; + +// Gyration + +partial alphanumeric_keys +xkb_symbols "gyration" { + include "inet(nav_common)" + key { [ XF86Reload ] }; + key { [ XF86HomePage ] }; + key { [ XF86AudioStop ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioMute ] }; +}; + + +// Hewlett-Packard + +// Hewlett-Packard Internet Keyboard +partial alphanumeric_keys +xkb_symbols "hpi6" { + include "inet(media_nav_acpi_common)" + key { [ XF86HomePage ] }; + key { [ XF86Search ] }; + key { [ XF86VendorHome ] }; + key { [ XF86Community ] }; + key { [ XF86AudioMedia ] }; + key { [ XF86Eject ] }; + key { [ XF86Shop ] }; + key { [ XF86Launch1 ] }; + key { [ Help ] }; + key { [ XF86Finance ] }; + key { [ Print ] }; + key { [ Help ] }; +}; + +// Hewlett-Packard SK-2501, SK-2505 Multimedia Keyboard +partial alphanumeric_keys +xkb_symbols "hp250x" { + key { [ XF86Tools ] }; + key { [ XF86Search ] }; + key { [ XF86Eject ] }; + key { [ XF86Mail ] }; + key { [ XF86AudioMute ] }; + key { [ XF86Launch5 ] }; + key { [ XF86Launch3 ] }; + key { [ XF86Launch2 ] }; + key { [ XF86Launch4 ] }; + key { [ XF86Standby ] }; + key { [ Help ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86WWW ] }; +}; + +// Hewlett-Packard Omnibook XE3 GC, GD, GE and Pavilion N5xxx +partial alphanumeric_keys +xkb_symbols "hpxe3gc" { + // Describes the OneTouch buttons on HP Omnibook XE3 GC and + // HP Pavilion N52XX models. + // See http://sourceforge.net/projects/omke for details on enabling + // these keys + include "inet(media_common)" + key { [ Help ] }; + key { [ XF86Launch1 ] }; + key { [ XF86WWW ] }; + key { [ XF86Mail ] }; +}; + +// Hewlett-Packard Omnibook XE3 GF +partial alphanumeric_keys +xkb_symbols "hpxe3gf" { + // Describes the OneTouch buttons on HP Omnibook XE3 GF models. + // See http://sourceforge.net/projects/omke for details on enabling + // these keys + include "inet(media_nav_common)" + key { [ Help ] }; + key { [ XF86Launch1 ] }; +}; + +// Hewlett-Packard Omnibook XT1000 +partial alphanumeric_keys +xkb_symbols "hpxt1000" { + // Describes the OneTouch buttons on HP Omnibook XT1000 models. + // See http://sourceforge.net/projects/omke for details on enabling + // these keys + include "inet(media_nav_common)" + key { [ XF86Launch3 ] }; + key { [ Help ] }; + key { [ XF86Launch2 ] }; + key { [ XF86Launch1 ] }; +}; + +// Hewlett-Packard Pavilion ZT11xx +partial alphanumeric_keys +xkb_symbols "hpzt11xx" { + // Describes the OneTouch buttons on HP Pavilion ZT11xx models. + // See http://sourceforge.net/projects/omke for details on enabling + // these keys + include "inet(media_nav_common)" + key { [ XF86Launch3 ] }; + key { [ Help ] }; + key { [ XF86Launch2 ] }; + key { [ XF86Launch1 ] }; +}; + +// Hewlett-Packard Pavilion dv5 +partial alphanumeric_keys +xkb_symbols "hpdv5" { + // Describes the OneTouch buttons on HP Pavilion dv5 models. + // See http://sourceforge.net/projects/omke for details on enabling + // these keys + include "inet(media_common)" + key { [ XF86ScreenSaver ] }; + key { [ XF86WWW ] }; + key { [ Help ] }; + key { [ XF86Launch1 ] }; +}; + +// Hewlett-Packard Omnibook XE4xxx and ZE4xxx +partial alphanumeric_keys +xkb_symbols "hpxe4xxx" { + // Describes the OneTouch buttons on HP Omnibook XE4xxx and ZE4xxx + // models. + // See http://sourceforge.net/projects/omke for details on enabling + // these keys + include "inet(media_nav_common)" + key { [ Help ] }; + key { [ XF86Launch2 ] }; + key { [ XF86Launch1 ] }; +}; + +// Hewlett-Packard Omnibook 500 FA +partial alphanumeric_keys +xkb_symbols "hp500fa" { + // Describes the OneTouch buttons on HP Omnibook 500 FA models. + // See http://sourceforge.net/projects/omke for details on enabling + // these keys + key { [ Help ] }; + key { [ XF86Launch1 ] }; +}; + +// Hewlett-Packard Omnibook 5xx +partial alphanumeric_keys +xkb_symbols "hp5xx" { + // Describes the OneTouch buttons on HP Omnibook 5xx models. + // See http://sourceforge.net/projects/omke for details on enabling + // these keys + include "inet(media_common)" + key { [ Help ] }; + key { [ XF86Launch1 ] }; +}; + + +// Honeywell + +// Honeywell Euroboard +partial alphanumeric_keys +xkb_symbols "honeywell_euroboard" { + // January 2002 + // Scott Penrose + // http://linux.dd.com.au/quest/linux/keyboard/honeywell/ + key { [ XF86Game ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86Eject ] }; + key { [ XF86Launch2 ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86Launch1 ] }; + key { [ XF86AudioMute ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioStop ] }; + key { [ XF86Mail ] }; + key { [ XF86ScreenSaver ] }; + key { [ XF86Calculator ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86WWW ] }; +}; + + +// IBM + + +// IBM Rapid Access +partial alphanumeric_keys +xkb_symbols "rapidaccess" { + key { [ XF86AudioMute ] }; + key { [ XF86Launch2 ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioPause ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioStop ] }; + key { [ XF86Standby ] }; + key { [ Help ] }; + key { [ XF86Launch4 ] }; + key { [ XF86Launch3 ] }; + key { [ XF86Launch1 ] }; +}; + +// IBM Rapid Access II +partial alphanumeric_keys +xkb_symbols "rapidaccess2" { + include "inet(acpi_common)" + key { [ XF86AudioNext ] }; + key { [ XF86Favorites ] }; + key { [ XF86AudioMute ] }; + key { [ XF86AudioStop ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86HomePage ] }; + key { [ XF86Shop ] }; + key { [ XF86Search ] }; + key { [ XF86MyComputer ] }; + key { [ XF86VendorHome ] }; +}; + +// IBM ThinkPad 60 series +partial alphanumeric_keys +xkb_symbols "thinkpad60" { + include "inet(media_nav_common)" + key { [ XF86VendorHome ] }; +}; + +// IBM Space Saver +partial alphanumeric_keys +xkb_symbols "ibm_spacesaver" { + key { + type="ONE_LEVEL", + symbols[Group1]= [ Num_Lock ] + }; +}; + +// Logitech + +// Logitech common definitions +partial hidden alphanumeric_keys +xkb_symbols "logitech_base" { + include "inet(media_nav_acpi_common)" + key { [ XF86HomePage ] }; + key { [ XF86Community ] }; + key { [ XF86ScrollClick ] }; + key { [ XF86VendorHome ] }; + key { [ XF86New ] }; + key { [ XF86Reply ] }; + key { [ XF86MyComputer ] }; + key { [ XF86Documents ] }; + key { [ XF86Pictures ] }; + key { [ XF86Music ] }; +}; + +// Logitech second set of common keys +partial hidden alphanumeric_keys +xkb_symbols "logitech_set3" { + key { [ XF86AudioStop ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioMute ] }; + key { [ XF86New ] }; // F1 + key { [ XF86Reply ] }; // F2 + key { [ XF86Send ] }; // F4 + key { [ Print ] }; // F7 + key { [ XF86Save ] }; // F8 + key { [ XF86Documents ] }; // F10 + key { [ XF86Go ] }; + key { [ XF86AudioMedia ] }; +}; + +// Logitech Access Keyboard +partial alphanumeric_keys +xkb_symbols "logiaccess" { + include "inet(logitech_base)" + key { [ XF86MailForward ] }; + key { [ XF86Send ] }; + key { [ XF86Messenger ] }; + key { [ XF86WebCam ] }; +}; + +// Logitech Cordless Desktop (alternate option) +partial alphanumeric_keys +xkb_symbols "logicda" { + include "inet(logitech_base)" + include "inet(logitech_set3)" +}; + +// Logitech Internet Navigator Keyboard +partial alphanumeric_keys +xkb_symbols "logicink" { + include "inet(logitech_base)" + key { [ XF86Shop ] }; + key { [ XF86VendorHome ] }; + key { [ XF86Finance ] }; + key { [ XF86Start ] }; +}; + +// Logitech Cordless Desktop EX110 +partial alphanumeric_keys +xkb_symbols "logiex110" { + include "inet(logitech_base)" + key { [ XF86Close ] }; // Close + +// Extended function keys +// In the Console before starting X +// Using setkeycodes e03b 212 e03c 213 e03d 214 e03e 215 e03f 216 e040 217 +// setkeycodes e041 218 e042 219 e043 220 e044 221 e057 222 e058 223 6d 206 +// *=keys that are there but need different symbol names. + key { [ Help ] }; // F1 + key { [ XF86Word ] }; // F2 + key { [ XF86Excel ] }; // F3 + key { [ XF86Pictures ] }; // F4 + key { [ Undo ] }; // F5 + key { [ Redo ] }; // F6 * + key { [ Print ] }; // F7 + key { [ XF86Save ] }; // F8 + key { [ XF86Launch1 ] }; // F9 * + key { [ XF86Launch2 ] }; // F10 + key { [ XF86Launch3 ] }; // F11 + key { [ XF86Launch4 ] }; // F12 +}; + +// Logitech iTouch Internet Navigator Keyboard SE +partial alphanumeric_keys +xkb_symbols "logiinkse" { + include "inet(logitech_base)" + key { [ XF86MailForward ] }; // F3 + key { [ XF86Send ] }; // F4 + key { [ Undo ] }; // F5 + key { [ Redo ] }; // F6 + key { [ Print ] }; // F7 + key { [ XF86Messenger ] }; + key { [ XF86WebCam ] }; + key { [ XF86VendorHome ] }; + key { [ XF86Shop ] }; + key { [ XF86Save ] }; // F8 +}; + +// Logitech iTouch Internet Navigator Keyboard SE (USB) +partial alphanumeric_keys +xkb_symbols "logiinkseusb" { + include "inet(logitech_base)" + include "inet(logitech_set3)" +}; + +// Logitech iTouch Cordless Keyboard (model Y-RB6) +partial alphanumeric_keys +xkb_symbols "logiitc" { + include "inet(logitech_base)" + key { [ XF86AudioRaiseVolume ] }; + + // Just to override RaiseVolume from logitech_base, + // since no keysym can have two keycodes, see + // https://bugs.freedesktop.org/show_bug.cgi?id=7095 + key { [ XF86Launch1 ] }; +}; + +// Logitech Internet Keyboard +partial alphanumeric_keys +xkb_symbols "logiik" { + include "inet(logitech_base)" + key { [ Find ] }; + key { [ Print ] }; + key { [ XF86Favorites ] }; + key { [ XF86Reload ] }; + key { [ XF86Search ] }; + key { [ XF86HotLinks ] }; + key { [ XF86Forward ] }; + key { [ XF86HomePage ] }; + key { [ XF86Stop ] }; + key { [ XF86OpenURL ] }; + key { [ XF86AddFavorite ] }; + key { [ XF86History ] }; + key { [ XF86WWW ] }; +}; + +// Logitech iTouch +partial alphanumeric_keys +xkb_symbols "itouch" { + include "inet(logitech_base)" + key { [ XF86AudioMute ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioRaiseVolume ] }; +}; + +// Logitech UltraX Cordless Media Desktop +partial alphanumeric_keys +xkb_symbols "logiultraxc" { + key { [ XF86AudioMute ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioRaiseVolume ] }; +}; + +partial alphanumeric_keys +xkb_symbols "logidinovo" { + include "inet(media_nav_common)" + key { [ XF86HomePage ] }; + key { [ XF86Standby ] }; + key { [ XF86Search ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioMute ] }; + key { [ XF86AudioMedia ] }; +}; + +partial alphanumeric_keys +xkb_symbols "logidinovoedge" { + include "inet(media_acpi_common)" + key { [ XF86HomePage ] }; + key { [ XF86Mail ] }; + key { [ XF86Search ] }; + key { [ XF86AudioMedia ] }; +}; + +partial alphanumeric_keys +xkb_symbols "logitech_g15" { + include "inet(media_nav_acpi_common)" + key { [ XF86Messenger ] }; + key { [ XF86Launch7 ] }; + key { [ XF86Launch9 ] }; + key { [ XF86Phone ] }; + key { [ XF86LaunchD ] }; + key { [ XF86Support ] }; + key { [ XF86LaunchF ] }; + key { [ XF86LogOff ] }; + key { [ XF86Launch5 ] }; + key { [ XF86Travel ] }; + key { [ XF86Spell ] }; + key { [ XF86Launch4 ] }; + key { [ XF86Music ] }; + key { [ XF86Forward ] }; + key { [ XF86Send ] }; + key { [ XF86Save ] }; + key { [ XF86Pictures ] }; + key { [ XF86LaunchA ] }; + key { [ XF86iTouch ] }; + key { [ XF86Launch3 ] }; + key { [ XF86ToDoList ] }; + key { [ XF86Calculator ] }; + key { [ XF86VendorHome ] }; + key { [ XF86Away ] }; + key { [ XF86WebCam ] }; + key { [ XF86Launch0 ] }; + key { [ XF86Launch6 ] }; + key { [ XF86Calendar ] }; + key { [ XF86LaunchB ] }; + key { [ XF86LaunchC ] }; + key { [ XF86WWW ] }; + key { [ XF86LaunchE ] }; + key { [ XF86Launch1 ] }; + key { [ XF86Launch2 ] }; + key { [ XF86Launch8 ] }; +}; + + +// Memorex + +// Memorex MX1998 +partial alphanumeric_keys +xkb_symbols "mx1998" { + include "inet(media_acpi_common)" + key { [ XF86ScrollDown ] }; + key { [ XF86AudioRewind ] }; + key { [ XF86Close ] }; + key { [ XF86Xfer ] }; + key { [ XF86AudioRecord ] }; + key { [ XF86Documents ] }; + key { [ XF86Game ] }; + key { [ XF86Calculator ] }; + key { [ Menu ] }; + key { [ XF86WWW ] }; + key { [ XF86WakeUp ] }; + key { [ XF86DOS ] }; + key { [ XF86ScreenSaver ] }; + key { [ XF86ScrollUp ] }; +}; + +// Memorex MX2500 EZ-Access Keyboard +partial alphanumeric_keys +xkb_symbols "mx2500" { + include "inet(media_nav_acpi_common)" + key { [ XF86Clear ] }; + key { [ XF86Phone ] }; + key { [ XF86DOS ] }; + key { [ XF86Close ] }; + key { [ XF86Xfer ] }; + key { [ XF86Eject ] }; + key { [ XF86Documents ] }; + key { [ XF86News ] }; + key { [ XF86WakeUp ] }; + key { [ XF86RotateWindows ] }; +}; + +// Memorex MX2750 +partial alphanumeric_keys +xkb_symbols "mx2750" { + include "inet(media_nav_acpi_common)" + key { [ XF86Launch0 ] }; +}; + + +// Microsoft + +// Microsoft Natural Wireless Ergonomic Keyboard 4000 +partial alphanumeric_keys +xkb_symbols "microsoft4000" { + include "inet(media_nav_common)" + key { [ XF86Launch1 ] }; + key { [ XF86Launch2 ] }; + key { [ XF86Launch3 ] }; + key { [ XF86Launch4 ] }; + key { [ XF86Launch5 ] }; +// Missing because of lack of support from kbd driver: Zoom in and +// slider. +}; + +// Microsoft Natural Wireless Ergonomic Keyboard 7000 +partial alphanumeric_keys +xkb_symbols "microsoft7000" { + include "inet(media_nav_common)" + key { [ Undo ] }; + key { [ XF86New ] }; + key { [ Redo ] }; + key { [ XF86MailForward ] }; + key { [ XF86Close ] }; + key { [ Print ] }; + key { [ XF86Save ] }; + key { [ XF86Send ] }; + key { [ Help ] }; + key { [ XF86Reply ] }; + key { [ parenleft ] }; + key { [ parenright ] }; + key { [ KP_Equal ] }; + key { [ XF86Open ] }; +// Missing because of lack of support from kbd driver: Spell, Launch, +// and Zoom in and out buttons. +}; + +// Microsoft Internet Keyboard +partial alphanumeric_keys +xkb_symbols "microsoftinet" { + include "inet(nav_acpi_common)" + key { [ XF86AudioStop ] }; +}; + +// Microsoft Natural Keyboard Pro USB +partial alphanumeric_keys + xkb_symbols "microsoftprousb" { + include "inet(nav_common)" + key { [ XF86Reload ] }; + key { [ XF86AudioMedia ] }; + key { [ XF86HomePage ] }; + key { [ XF86AudioStop ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioMute ] }; + key { [ XF86Standby ] }; + // Internet Section -- Left Side + // Multimedia Section -- Right Side + // My Computer Section -- Far Right + // My computer maps to printscreen, so leaving commented out for now + // key { [ XF86MyComputer ] }; +}; + +// Microsoft Natural Keyboard Pro OEM +partial alphanumeric_keys +xkb_symbols "microsoftprooem" { + include "inet(media_nav_common)" + key { [ XF86Search ] }; + key { [ XF86HomePage ] }; + key { [ XF86Standby ] }; + key { [ XF86MyComputer ] }; +// Internet Section -- Left Side +// Multimedia Section -- Right Side +// My Computer Section -- Far Right +}; + +// Microsoft Internet Keyboard Pro, Swedish +partial alphanumeric_keys +xkb_symbols "microsoftprose" { + include "inet(nav_common)" + key { [ XF86Reload ] }; + key { [ XF86HomePage ] }; + key { [ XF86AudioStop ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioMute ] }; + key { [ XF86Standby ] }; + key { [ XF86AudioStop ] }; + key { [ XF86MyComputer ] }; + key { [ XF86AudioMedia ] }; +}; + +// Microsoft Office Keyboard +partial alphanumeric_keys +xkb_symbols "microsoftoffice" { + include "inet(nav_acpi_common)" + key { [ XF86Calendar ] }; + key { [ Undo ] }; + key { [ XF86HomePage ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioMute ] }; + key { [ XF86Cut ] }; + key { [ XF86LogOff ] }; + key { [ XF86ApplicationLeft ] }; + key { [ XF86TaskPane ] }; + key { [ XF86Spell ] }; + key { [ XF86WWW ] }; + key { [ XF86New ] }; + key { [ XF86Open ] }; + key { [ XF86Close ] }; + key { [ Help ] }; + key { [ XF86Save ] }; + key { [ Print ] }; + key { [ XF86OfficeHome ] }; + key { [ Redo ] }; + key { [ XF86Reply ] }; + key { [ XF86MailForward ] }; + key { [ XF86Send ] }; + key { [ XF86Copy ] }; + key { [ XF86ApplicationRight ] }; + key { [ XF86Paste ] }; +}; + +// Microsoft Wireless Multimedia Keyboard 1.0A +partial alphanumeric_keys +xkb_symbols "microsoftmult" { + include "inet(media_nav_acpi_common)" + key { [ XF86Messenger ] }; + key { [ XF86New ] }; + key { [ XF86Open ] }; + key { [ XF86Close ] }; + key { [ XF86Reply ] }; + key { [ Redo ] }; + key { [ Undo ] }; + key { [ XF86LogOff ] }; + key { [ XF86Spell ] }; + key { [ Help ] }; + key { [ XF86Music ] }; + key { [ XF86Forward ] }; + key { [ XF86Send ] }; + key { [ XF86Save ] }; + key { [ Print ] }; + key { [ XF86Pictures ] }; + key { [ XF86Documents ] }; +}; + + +// Oretec + +// Oretec MCK-800 MM/Internet keyboard +partial alphanumeric_keys +xkb_symbols "oretec" { + include "inet(acpi_common)" + key { [ XF86ScrollUp ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86ScrollDown ] }; + key { [ XF86ZoomOut ] }; + key { [ XF86AudioMute ] }; + key { [ XF86WWW ] }; + key { [ Menu ] }; + key { [ XF86AudioStop ] }; + key { [ XF86Calculator ] }; + key { [ XF86Xfer ] }; + key { [ XF86Mail ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86ZoomIn ] }; + key { [ XF86AudioLowerVolume ] }; +}; + + +// Propeller + +// Propeller Voyager (KTEZ-1000) +partial alphanumeric_keys +xkb_symbols "propeller" { + include "inet(media_common)" + key { [ XF86AudioRewind ] }; + key { [ XF86Close ] }; + key { [ XF86Xfer ] }; + key { [ XF86AudioRecord ] }; + key { [ XF86Documents ] }; + key { [ XF86Game ] }; + key { [ XF86Calculator ] }; + key { [ Menu ] }; + key { [ XF86WWW ] }; + key { [ XF86DOS ] }; + key { [ XF86Standby ] }; +}; + + +// QTronix + +// QTronix Scorpius 98N+ +partial alphanumeric_keys +xkb_symbols "qtronix" { + key { [ XF86ScrollDown ] }; + key { [ XF86Forward ] }; + key { [ XF86WakeUp ] }; + key { [ XF86Search ] }; + key { [ XF86Standby ] }; + key { [ XF86ScrollUp ] }; + key { [ XF86Back ] }; + key { [ XF86Reload ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioStop ] }; + key { [ XF86HomePage ] }; + key { [ XF86AudioMute ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioRecord ] }; + key { [ XF86PowerOff ] }; + key { [ XF86Stop ] }; + key { [ XF86Calculator ] }; +}; + + +// Samsung + +// Samsung SDM 4500P +partial alphanumeric_keys +xkb_symbols "samsung4500" { + include "inet(media_nav_acpi_common)" + key { [ XF86Launch4 ] }; + key { [ XF86Launch1 ] }; + key { [ XF86Launch3 ] }; + key { [ XF86Launch5 ] }; + key { [ XF86Close ] }; + key { [ XF86Book ] }; + key { [ XF86Eject ] }; + key { [ Help ] }; + key { [ XF86Explorer ] }; + key { [ XF86Launch2 ] }; +}; + +// Samsung SDM 4510P +partial alphanumeric_keys +xkb_symbols "samsung4510" { + include "inet(media_acpi_common)" + key { [ XF86Launch1 ] }; + key { [ XF86Launch3 ] }; + key { [ XF86Eject ] }; + key { [ XF86Launch2 ] }; +}; + + +// SK + +// SK-1300 +partial alphanumeric_keys +xkb_symbols "sk1300" { + include "inet(media_common)" + key { [ XF86Eject ] }; + key { [ XF86Forward ] }; + key { [ XF86WWW ] }; + key { [ XF86Standby ] }; + key { [ XF86Back ] }; + key { [ XF86Stop ] }; +}; + +// SK-2500 +partial alphanumeric_keys +xkb_symbols "sk2500" { + include "inet(media_nav_common)" + key { [ XF86AudioRewind ] }; + key { [ XF86Close ] }; + key { [ XF86Eject ] }; + key { [ XF86Eject ] }; + key { [ XF86Forward ] }; + key { [ XF86AudioRecord ] }; + key { [ XF86Xfer ] }; + key { [ XF86PowerOff ] }; + key { [ Menu ] }; + key { [ XF86ScreenSaver ] }; +}; + +// SK-6200 +partial alphanumeric_keys +xkb_symbols "sk6200" { + include "inet(acpi_common)" + key { [ XF86Favorites ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86Back ] }; + key { [ XF86Forward ] }; + key { [ XF86WWW ] }; + key { [ XF86AudioMute ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioStop ] }; + key { [ XF86Mail ] }; +}; + +// SK-7100 +partial alphanumeric_keys +xkb_symbols "sk7100" { + include "inet(media_common)" + key { [ XF86AudioPause ] }; + key { [ XF86Close ] }; + key { [ XF86Video ] }; + key { [ XF86Eject ] }; + key { [ XF86CD ] }; + key { [ XF86Display ] }; + key { [ XF86WWW ] }; +}; + + +// Sven + +// SVEN Ergonomic 2500 +partial alphanumeric_keys +xkb_symbols "sven" { + include "inet(acpi_common)" + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86Forward ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86ZoomOut ] }; + key { [ XF86AudioPrev ] }; + key { [ XF86AudioStop ] }; + key { [ XF86HomePage ] }; + key { [ XF86Mail ] }; + key { [ XF86ZoomIn ] }; + key { [ XF86MyComputer ] }; + key { [ XF86Stop ] }; + key { [ XF86ScreenSaver ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioMute ] }; + key { [ XF86Calculator ] }; + key { [ XF86Reload ] }; + key { [ XF86Search ] }; + key { [ XF86Favorites ] }; + key { [ XF86ScrollUp ] }; + key { [ XF86ScrollDown ] }; + key { [ XF86AudioNext ] }; + key { [ XF86Back ] }; +}; + +// SVEN Slim 303 +partial alphanumeric_keys +xkb_symbols "sven303" { + key { [ XF86PowerOff ] }; + key { [ XF86Sleep ] }; + key { [ XF86WakeUp ] }; +}; + + +// Symplon + +// Symplon PaceBook (tablet PC) +partial alphanumeric_keys +xkb_symbols "symplon" { + include "inet(nav_acpi_common)" + key { [ XF86RotationPB ] }; + key { [ XF86SplitScreen ] }; + key { [ XF86Support ] }; + key { [ XF86New ] }; + key { [ XF86User2KB ] }; + key { [ XF86RotationKB ] }; + key { [ XF86MenuKB ] }; + key { [ XF86User1KB ] }; + key { [ XF86UserPB ] }; + key { [ XF86MenuPB ] }; +}; + +// Toshiba + +// Toshiba Satellite S3000 +partial alphanumeric_keys +xkb_symbols "toshiba_s3000" { + include "inet(media_common)" + // Describes the Special buttons on Toshiba Satellite 3000 models. + // See http://sourceforge.net/projects/omke for details on enabling + // these keys + key { [ XF86Launch1 ] }; + key { [ XF86Launch2 ] }; + key { [ XF86WWW ] }; + key { [ XF86Mail ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioLowerVolume ] }; +}; + +// Trust + +// Trust Wireless Keyboard Classic +partial alphanumeric_keys +xkb_symbols "trust" { + include "inet(media_nav_acpi_common)" + key { [ XF86ScreenSaver ] }; + key { [ XF86Eject ] }; +}; + + +// Trust Direct Access Keyboard +partial alphanumeric_keys +xkb_symbols "trustda" { + include "inet(media_common)" + key { [ XF86AudioRewind ] }; + key { [ XF86Close ] }; + key { [ XF86Eject ] }; + key { [ XF86AudioRecord ] }; + key { [ XF86Xfer ] }; + key { [ XF86Standby ] }; + key { [ Help ] }; + key { [ XF86WWW ] }; + key { [ XF86Away ] }; +}; + + +// YaHoo! + +// Yahoo! Internet Keyboard +partial alphanumeric_keys +xkb_symbols "yahoo" { + include "inet(acpi_common)" + key { [ XF86AudioPrev ] }; + key { [ XF86AudioPlay, XF86AudioPause ] }; + key { [ XF86AudioStop ] }; + key { [ XF86AudioNext ] }; + key { [ XF86AudioRecord ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86AudioMute ] }; + key { [ XF86Close ] }; + key { [ XF86Calculator ] }; + key { [ Help ] }; + key { [ XF86Mail ] }; + key { [ XF86WWW ] }; +}; + +// Apple keyboards (macbooks, powerbooks, powermac G5, etc) +partial alphanumeric_keys +xkb_symbols "apple" { +// Really brightness up/down + key { [ XF86BrightnessAdjust ] }; + key { [ XF86BrightnessAdjust ] }; + key { [ XF86AudioMute ] }; + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioRaiseVolume ] }; + key { [ XF86RotateWindows ] }; +// Really keyboard backlight off/up/down + key { [ XF86Launch0 ] }; + key { [ XF86Launch1 ] }; + key { [ XF86Launch2 ] }; + key { [ XF86PowerOff ] }; + key { [ F13 ] }; + key { [ F14 ] }; + key { [ F15 ] }; + key { [ XF86Eject ] }; + key { [ F16 ] }; + key { [ KP_Equal ] }; +}; + +partial alphanumeric_keys +xkb_symbols "cymotionlinux" { + include "inet(media_nav_acpi_common)" + key { [ Undo ] }; + key { [ Redo ] }; + key { [ XF86ScrollDown ] }; + key { [ XF86Launch2 ] }; + key { [ XF86Launch1 ] }; + key { [ XF86MenuKB ] }; + key { [ XF86Launch3 ] }; + key { [ XF86Cut ] }; + key { [ XF86Copy ] }; + key { [ XF86Paste ] }; + key { [ XF86ScrollUp ] }; + key { [ XF86AudioMedia ] }; +}; + +partial alphanumeric_keys +xkb_symbols "silvercrest" { + include "inet(media_nav_acpi_common)" + key { [ XF86HomePage ] }; + key { [ XF86Launch2 ] }; + key { [ XF86Launch1 ] }; +}; + +// eMachines + +partial alphanumeric_keys +xkb_symbols "emachines" { + include "inet(media_nav_acpi_common)" + key { [ XF86iTouch ] }; + key { [ KP_0 ] }; + key { [ KP_1 ] }; + key { [ KP_2 ] }; + key { [ KP_3 ] }; + key { [ KP_4 ] }; + key { [ KP_5 ] }; + key { [ KP_6 ] }; + key { [ KP_7 ] }; + key { [ KP_8 ] }; + key { [ KP_9 ] }; + key { [ KP_Add ] }; + key { [ KP_Decimal ] }; + key { [ KP_Divide ] }; + key { [ KP_Multiply ] }; + key { [ KP_Subtract ] }; +}; + +// BenQ + +// +// BenQ X* +// (X730, X500, X800) +// +// to make the FN_LOCK and CONFIG key work on the BenQ X500 , use ... +// setkeycodes e074 130 # KEY_PROPS from /usr/include/linux/input.h +// setkeycodes e075 171 # KEY_CONFIG from /usr/include/linux/input.h +partial alphanumeric_keys +xkb_symbols "benqx" { + include "inet(media_nav_acpi_common)" + key { [ XF86ModeLock ] }; + key { [ XF86WWW ] }; + key { [ XF86Go ] }; + key { [ XF86Calendar ] }; +}; + +// Intel + +// Intel Classmate +partial alphanumeric_keys +xkb_symbols "classmate" { + key { [ XF86AudioLowerVolume ] }; + key { [ XF86AudioRaiseVolume ] }; +}; + +// Unitek + +partial alphanumeric_keys +xkb_symbols "unitekkb1925" { + include "inet(media_nav_common)" + key { [ XF86AudioMute ] }; + key { [ XF86PowerOff ] }; + key { [ XF86Sleep ] }; + key { [ XF86WakeUp ] }; + key { [ XF86Search ] }; + key { [ XF86Reload ] }; +}; + +// Creative + +// Creative Desktop Wireless 7000 +partial alphanumeric_keys +xkb_symbols "creativedw7000" { + include "inet(media_nav_acpi_common)" + key { [ XF86Pictures ] }; +}; + +// Compal + +// Compal FL90 +partial alphanumeric_keys +xkb_symbols "compalfl90" { + include "inet(media_nav_acpi_common)" + key { [ XF86MonBrightnessUp ] }; + key { [ XF86MonBrightnessDown ] }; +}; + +partial alphanumeric_keys +xkb_symbols "pc105" { + include "inet(media_nav_acpi_common)" +}; + +// HTC Dream +partial alphanumeric_keys +xkb_symbols "htcdream" { + key { [ BackSpace ] }; + key { [ Return ] }; + + //first row + key { [ 1, 1, exclam, exclam ] }; + key { [ 2, 2, at, at ] }; + key { [ 3, 3, numbersign, numbersign ] }; + key { [ 4, 4, dollar, dollar ] }; + key { [ 5, 5, percent, percent ] }; + key { [ 6, 6, dead_circumflex, dead_circumflex ] }; + key { [ 7, 7, ampersand, ampersand ] }; + key { [ 8, 8, asterisk, asterisk ] }; + key { [ 9, 9, parenleft, parenleft ] }; + key { [ 0, 0, parenright, parenright ] }; + + //fifth row + key { [ Shift_L ] }; + key { [ space ] }; + key { [ period, period, slash, slash ] }; + key { [ Shift_R ] }; + + //modifiers + modifier_map Shift { , }; +}; diff --git a/test/data/symbols/keypad b/test/data/symbols/keypad new file mode 100644 index 0000000..1bab391 --- /dev/null +++ b/test/data/symbols/keypad @@ -0,0 +1,633 @@ +partial hidden keypad_keys +xkb_symbols "overlay" { + include "keypad(overlay1)" +}; + +partial hidden keypad_keys +xkb_symbols "overlay1" { + + // Begin "Keypad" section + + key { [ KP_Home ], overlay1= }; + key { [ KP_Up ], overlay1= }; + key { [ KP_Prior ], overlay1= }; + + key { [ KP_Left ], overlay1= }; + key { [ KP_Begin ], overlay1= }; + key { [ KP_Right ], overlay1= }; + + key { [ KP_End ], overlay1= }; + key { [ KP_Down ], overlay1= }; + key { [ KP_Next ], overlay1= }; + + key { [ KP_Insert ], overlay1= }; + key { [ KP_Delete ], overlay1= }; + + key { [ KP_7 ] }; + key { [ KP_8 ] }; + key { [ KP_9 ] }; + + key { [ KP_4 ] }; + key { [ KP_5 ] }; + key { [ KP_6 ] }; + + key { [ KP_1 ] }; + key { [ KP_2 ] }; + key { [ KP_3 ] }; + + key { [ KP_0 ] }; + key { [ KP_Decimal ] }; + + // End "Keypad" section +}; + +partial hidden keypad_keys +xkb_symbols "overlay2" { + + // Begin "Keypad" section + + key { [ KP_Home ], overlay2= }; + key { [ KP_Up ], overlay2= }; + key { [ KP_Prior ], overlay2= }; + + key { [ KP_Left ], overlay2= }; + key { [ KP_Begin ], overlay2= }; + key { [ KP_Right ], overlay2= }; + + key { [ KP_End ], overlay2= }; + key { [ KP_Down ], overlay2= }; + key { [ KP_Next ], overlay2= }; + + key { [ KP_Insert ], overlay2= }; + key { [ KP_Delete ], overlay2= }; + + key { [ KP_7 ] }; + key { [ KP_8 ] }; + key { [ KP_9 ] }; + + key { [ KP_4 ] }; + key { [ KP_5 ] }; + key { [ KP_6 ] }; + + key { [ KP_1 ] }; + key { [ KP_2 ] }; + key { [ KP_3 ] }; + + key { [ KP_0 ] }; + key { [ KP_Decimal ] }; + + // End "Keypad" section +}; + +partial hidden default keypad_keys +xkb_symbols "x11" { +// Ungrab cancels server/keyboard/pointer grabs + key { + type="CTRL+ALT", + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86_Ungrab ] + }; + +// ClsGrb kills whichever client has a grab in effect + key { + type="CTRL+ALT", + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86_ClearGrab ] + }; + +// -VMode switches to the previous video mode + key { + type="CTRL+ALT", + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86_Prev_VMode ] + }; + + key { [ KP_Home, KP_7 ] }; + key { [ KP_Up, KP_8 ] }; + key { [ KP_Prior, KP_9 ] }; + +// +VMode switches to the next video mode + key { + type="CTRL+ALT", + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86_Next_VMode ] + }; + + key { [ KP_Left, KP_4 ] }; + key { [ KP_Begin, KP_5 ] }; + key { [ KP_Right, KP_6 ] }; + + key { [ KP_End, KP_1 ] }; + key { [ KP_Down, KP_2 ] }; + key { [ KP_Next, KP_3 ] }; + key { [ KP_Enter ] }; + key { [ KP_Equal ] }; + + key { [ KP_Insert, KP_0 ] }; + key { [ KP_Delete, KP_Decimal ] }; + key { [ KP_Decimal, KP_Decimal ] }; +}; + + +// Legacy PC keypad definition +// Copyright © 2006-2007 Nicolas Mailhot +keypad_keys +xkb_symbols "legacy" { + + include "keypad(core)" + include "keypad(legacymath)" + include "keypad(legacynumber)" + include "kpdl(dot)" +}; + + +// Legacy Wang 725-3771-ae and 725-3771-uk keypad definition +// Copyright © 2006-2007 Nicolas Mailhot +keypad_keys +xkb_symbols "legacy_wang" { + + include "keypad(core)" + include "keypad(legacymath)" + include "keypad(legacynumber_wang)" + include "kpdl(dot)" +}; + + +// Complete new keypad definition +// Copyright © 2006-2007 Nicolas Mailhot +keypad_keys +xkb_symbols "oss" { + + include "keypad(core)" + include "keypad(ossmath)" + include "keypad(ossnumber)" + include "kpdl(dotoss)" +}; + + +// Latin9 restriction of new keypad definition +// Copyright © 2006-2007 Nicolas Mailhot +keypad_keys +xkb_symbols "oss_latin9" { + + include "keypad(core)" + include "keypad(ossmath_latin9)" + include "keypad(legacynumber)" + include "kpdl(dotoss_latin9)" +}; + + +// Wang 725-3771-ae and 725-3771-uk keypad variant of oss keypad +// Copyright © 2006-2007 Nicolas Mailhot +keypad_keys +xkb_symbols "oss_wang" { + + include "keypad(core)" + include "keypad(ossmath)" + include "keypad(ossnumber_wang)" + include "kpdl(dotoss)" +}; + + +// Forward-looking keypad definition +// Won't work with applications that make ASCII assumptions +// Copyright © 2007 Nicolas Mailhot +keypad_keys +xkb_symbols "future" { + + include "keypad(core)" + include "keypad(futuremath)" + include "keypad(ossnumber)" + include "kpdl(commaoss)" +}; + + +// Forward-looking keypad definition +// Won't work with applications that make ASCII assumptions +// Copyright © 2007 Nicolas Mailhot +keypad_keys +xkb_symbols "future_wang" { + + include "keypad(core)" + include "keypad(futuremath)" + include "keypad(ossnumber_wang)" + include "kpdl(commaoss)" +}; + + +// Keypad keys nobody changes +// Copyright © 2006 Nicolas Mailhot +partial keypad_keys +xkb_symbols "core" { + + modifier_map Mod2 { Num_Lock }; + + key { [ Num_Lock, Pointer_EnableKeys ] }; + key { [ KP_Enter ] }; + key { [ KP_Equal ] }; +}; + + +// Legacy keypad math area +// Copyright © 2006 Nicolas Mailhot +// +// ┏━━━━━┱─────┬─────┬─────┐ +// ┃Num ┃ ₁ │ ₂ │ ₃ │ ₁ +// ┃Lock⇭┃ / │ * │ - │ ₂ +// ┡━━━━━╃─────┼─────┼─────┤ ₃ +// │ ₄ │ ₄ +// │ │ +// ┤ │ 1 None +// │ │ 2 Ctrl+Alt +// │ + │ +// ╆━━━━━┪ +partial keypad_keys +xkb_symbols "legacymath" { + + key.type[Group1]="CTRL+ALT" ; + + key { [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86_Ungrab ] }; // / + key { [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86_ClearGrab ] }; // * + key { [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86_Prev_VMode ] }; // - + + key { [ KP_Add, KP_Add, KP_Add, KP_Add, XF86_Next_VMode ] }; // + + +}; + + +// Keypad math area with non-CS operators +// Copyright © 2006 Nicolas Mailhot +// +// ┏━━━━━┱─────┬─────┬─────┐ +// ┃Num ┃ ∕ ₁ │ . ₂ │ − ₃ │ ₁ +// ┃Lock⇭┃ / ÷ │ * × │ - − │ ₂ +// ┡━━━━━╃─────┼─────┼─────┤ ₃ +// │ + ₄ │ ₄ +// │ │ +// ┤ │ 1 None +// │ │ 2 Level3 ⇮ +// │ + + │ 3 Shift+Level3 ⇧⇮ +// ╆━━━━━┪ 4 Ctrl+Alt +partial keypad_keys +xkb_symbols "ossmath" { + + key.type[Group1]="FOUR_LEVEL_X" ; + + key { [ KP_Divide, 0x1002215, 0x10000F7, XF86_Ungrab ] }; // / ∕ ÷ + key { [ KP_Multiply, 0x10022C5, 0x10000D7, XF86_ClearGrab ] }; // * ⋅ × + key { [ KP_Subtract, 0x1002212, 0x1002212, XF86_Prev_VMode ] }; // - − − + + key { [ KP_Add, 0x100002B, 0x100002B, XF86_Next_VMode ] }; // + + + + +}; + + +// Keypad math area with non-CS operators in first levels +// As demanded by users not interested in legacy pre-unicode junk +// Copyright © 2007 Nicolas Mailhot +// +// ┏━━━━━┱─────┬─────┬─────┐ +// ┃Num ┃ / ₁ │ * ₂ │ - ₃ │ ₁ +// ┃Lock⇭┃ ∕ ÷ │ . × │ − − │ ₂ +// ┡━━━━━╃─────┼─────┼─────┤ ₃ +// │ + ₄ │ ₄ +// │ │ +// ┤ │ 1 None +// │ │ 2 Level3 ⇮ +// │ + + │ 3 Shift+Level3 ⇧⇮ +// ╆━━━━━┪ 4 Ctrl+Alt +partial keypad_keys +xkb_symbols "futuremath" { + + key.type[Group1]="FOUR_LEVEL_X" ; + + key { [ 0x1002215, KP_Divide, 0x10000F7, XF86_Ungrab ] }; // ∕ / ÷ + key { [ 0x10022C5, KP_Multiply, 0x10000D7, XF86_ClearGrab ] }; // ⋅ * × + key { [ 0x1002212, KP_Subtract, 0x1002212, XF86_Prev_VMode ] }; // − - − + + key { [ 0x100002B, KP_Add, 0x100002B, XF86_Next_VMode ] }; // + + + +}; + + +// Keypad math area with non-CS operators, restricted to latin9 +// Copyright © 2006 Nicolas Mailhot +// +// ┏━━━━━┱─────┬─────┬─────┐ +// ┃Num ┃ / ₁ │ · ₂ │ - ₃ │ ₁ +// ┃Lock⇭┃ / ÷ │ * × │ - - │ ₂ +// ┡━━━━━╃─────┼─────┼─────┤ ₃ +// │ + ₄ │ ₄ +// │ │ +// ┤ │ 1 None +// │ │ 2 Level3 ⇮ +// │ + + │ 3 Shift+Level3 ⇧⇮ +// ╆━━━━━┪ 4 Ctrl+Alt +partial keypad_keys +xkb_symbols "ossmath_latin9" { + + key.type[Group1]="FOUR_LEVEL_X"; + + key { [ KP_Divide, slash, division, XF86_Ungrab ] }; // / / ÷ + key { [ KP_Multiply, periodcentered, multiply, XF86_ClearGrab ] }; // * · × + key { [ KP_Subtract, minus, minus, XF86_Prev_VMode ] }; // - - - + + key { [ KP_Add, plus, plus, XF86_Next_VMode ] }; // + + + +}; + + +// Legacy keypad number area +// Copyright © 2006 Nicolas Mailhot +// +// ┏━━━━━┱ ⇱ Home +// ┃Num ┃ ⇲ End +// ┃Lock⇭┃ ⇞ Page up +// ┡━━━━━╃─────┼─────┼ ⇟ Page down +// │ 7 │ 8 │ 9 │ ⇞ Page up +// │ ⇱ │ ⇧ │ ⇞ │ ⎀ Insert +// ├─────┼─────┼─────┤ ␥ Delete +// │ 4 │ 5 │ 6 │ ⇦⇧⇨⇩ Directions +// │ ⇦ │ │ ⇨ │ +// ├─────┼─────┼─────╆ +// │ 1 │ 2 │ 3 ┃ +// │ ⇲ │ ⇩ │ ⇟ ┃ 1 None +// ├─────┴─────┼─────┨ 2 Num Lock ⇭ +// │ 0 │ +// │ ⎀ │ +// └───────────┴ +partial keypad_keys +xkb_symbols "legacynumber" { + + key.type[Group1]="KEYPAD" ; + + key { [ KP_Home, KP_7 ] }; // 7 + key { [ KP_Up, KP_8 ] }; // 8 + key { [ KP_Prior, KP_9 ] }; // 9 + + key { [ KP_Left, KP_4 ] }; // 4 + key { [ KP_Begin, KP_5 ] }; // 5 + key { [ KP_Right, KP_6 ] }; // 6 + + key { [ KP_End, KP_1 ] }; // 1 + key { [ KP_Down, KP_2 ] }; // 2 + key { [ KP_Next, KP_3 ] }; // 3 + + key { [ KP_Insert, KP_0 ] }; // 0 +}; + + +// Legacy Wang 725-3771-ae and 725-3771-uk keypad number area +// Copyright © 2007 Nicolas Mailhot +// This is actually a three-level keypad, declared as four-level +// to avoid defining a new type +// +// ┏━━━━━┱ ⇱ Home +// ┃Num ┃ ⇲ End +// ┃Lock⇭┃ ⇞ Page up +// ┡━━━━━╃─────┼─────┼ ⇟ Page down +// │ 7 │ 8 │ 9 │ ⇞ Page up +// │ ⇱ < │ ⇧ > │ ⇞ ^ │ ⎀ Insert +// ├─────┼─────┼─────┤ ␥ Delete +// │ 4 │ 5 │ 6 │ ⇦⇧⇨⇩ Directions +// │ ⇦ [ │ ] │ ⇨ $ │ +// ├─────┼─────┼─────╆ +// │ 1 │ 2 │ 3 ┃ +// │ ⇲ & │ ⇩ @ │ ⇟ # ┃ 1 None +// ├─────┴─────┼─────┨ 2 Num Lock ⇭ +// │ 0 │ 3 Level3 ⇮ +// │ ⎀ │ +// └───────────┴ +partial keypad_keys +xkb_symbols "legacynumber_wang" { + + key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ; + + key { [ KP_Home, KP_7, less ] }; // 7 < + key { [ KP_Up, KP_8, greater ] }; // 8 > + key { [ KP_Prior, KP_9, asciicircum ] }; // 9 ^ + + key { [ KP_Left, KP_4, bracketleft ] }; // 4 [ + key { [ KP_Begin, KP_5, bracketright ] }; // 5 ] + key { [ KP_Right, KP_6, dollar ] }; // 6 $ + + key { [ KP_End, KP_1, ampersand ] }; // 1 & + key { [ KP_Down, KP_2, at ] }; // 2 @ + key { [ KP_Next, KP_3, numbersign ] }; // 3 # + + key { [ KP_Insert, KP_0, apostrophe ] }; // 0 ' +}; + + +// Keypad number area with arrow symbols +// Copyright © 2006 Nicolas Mailhot +// +// ┏━━━━━┱ ⇱ Home +// ┃Num ┃ ⇲ End +// ┃Lock⇭┃ ⇞ Page up +// ┡━━━━━╃─────┼─────┼ ⇟ Page down +// │ 7 ⇖ │ 8 ⇑ │ 9 ⇗ │ ⇞ Page up +// │ ⇱ ↖ │ ⇧ ↑ │ ⇞ ↗ │ ⎀ Insert +// ├─────┼─────┼─────┤ ␥ Delete +// │ 4 ⇐ │ 5 ⇔ │ 6 ⇗ │ ⇦⇧⇨⇩ Directions +// │ ⇦ ← │ ↔ │ ⇨ ↗ │ ⍽ narrow no-break space +// ├─────┼─────┼─────╆ +// │ 1 ⇙ │ 2 ⇓ │ 3 ⇘ ┃ +// │ ⇲ ↙ │ ⇩ ↓ │ ⇟ ↘ ┃ 1 None +// ├─────┴─────┼─────┨ 2 Num Lock ⇭ +// │ 0 ⇕ │ 3 Level3 ⇮ +// │ ⎀ ↕ │ 4 Shift+Level3 ⇧⇮ +// └───────────┴ +partial keypad_keys +xkb_symbols "ossnumber" { + + key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ; + + key { [ KP_Home, KP_7, 0x1002196, 0x10021D6 ] }; // 7 ↖ ⇖ + key { [ KP_Up, KP_8, 0x1002191, 0x10021D1 ] }; // 8 ↑ ⇑ + key { [ KP_Prior, KP_9, 0x1002197, 0x10021D7 ] }; // 9 ↗ ⇗ + + key { [ KP_Left, KP_4, 0x1002190, 0x10021D0 ] }; // 4 ← ⇐ + key { [ KP_Begin, KP_5, 0x1002194, 0x10021D4 ] }; // 5 ↔ ⇔ + key { [ KP_Right, KP_6, 0x1002192, 0x10021D2 ] }; // 6 → ⇒ + + key { [ KP_End, KP_1, 0x1002199, 0x10021D9 ] }; // 1 ↙ ⇙ + key { [ KP_Down, KP_2, 0x1002193, 0x10021D3 ] }; // 2 ↓ ⇓ + key { [ KP_Next, KP_3, 0x1002198, 0x10021D8 ] }; // 3 ↘ ⇘ + + key { [ KP_Insert, KP_0, 0x1002195, 0x10021D5 ] }; // 0 ↕ ⇕ +}; + + +// Wang 725-3771-ae and 725-3771-uk keypad number area with additional arrow symbols +// Copyright © 2007 Nicolas Mailhot +// +// ┏━━━━━┱ ⇱ Home +// ┃Num ┃ ⇲ End +// ┃Lock⇭┃ ⇞ Page up +// ┡━━━━━╃─────┼─────┼ ⇟ Page down +// │ 7 ↖ │ 8 ↑ │ 9 ↗ │ ⇞ Page up +// │ ⇱ < │ ⇧ > │ ⇞ ^ │ ⎀ Insert +// ├─────┼─────┼─────┤ ␥ Delete +// │ 4 ← │ 5 ↔ │ 6 → │ ⇦⇧⇨⇩ Directions +// │ ⇦ [ │ ] │ ⇨ $ │ ⍽ narrow no-break space +// ├─────┼─────┼─────╆ +// │ 1 ↙ │ 2 ↓ │ 3 ↘ ┃ +// │ ⇲ & │ ⇩ @ │ ⇟ # ┃ 1 None +// ├─────┴─────┼─────┨ 2 Num Lock ⇭ +// │ 0 ↕ │ 3 Level3 ⇮ +// │ ⎀ ' │ 4 Shift+Level3 ⇧⇮ +// └───────────┴ +partial keypad_keys +xkb_symbols "ossnumber_wang" { + + key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ; + + key { [ KP_Home, KP_7, less, 0x1002196 ] }; // 7 < ↖ + key { [ KP_Up, KP_8, greater, 0x1002191 ] }; // 8 > ↑ + key { [ KP_Prior, KP_9, asciicircum, 0x1002197 ] }; // 9 ^ ↗ + + key { [ KP_Left, KP_4, bracketleft, 0x1002190 ] }; // 4 [ ← + key { [ KP_Begin, KP_5, bracketright, 0x1002194 ] }; // 5 ] ↔ + key { [ KP_Right, KP_6, dollar, 0x1002192 ] }; // 6 $ → + + key { [ KP_End, KP_1, ampersand, 0x1002199 ] }; // 1 & ↙ + key { [ KP_Down, KP_2, at, 0x1002193 ] }; // 2 @ ↓ + key { [ KP_Next, KP_3, numbersign, 0x1002198 ] }; // 3 # ↘ + + key { [ KP_Insert, KP_0, apostrophe, 0x1002195 ] }; // 0 ' ↕ +}; + +// Standard base "pc" layout only contains cursor keys, and then gets +// augmented with the digits later. If you define your own layout for +// the numpad you can inherit the cursors, but you'll have to define +// the digits yourself. This module can be included in the rules to +// define math operators; these are the variants used in computer +// languages that are based on ASCII. NoSymbol doesn't mean that +// nothing is bound to the key but that no assignment is done here. +// srvr_ctrl(stdkeypad) and keypad(x11) declare the operator keys to +// be of type CTRL+ALT in order to assign server control events to +// them, but it uses the second level which is overwritten if we have +// more than one definition (shift state) for the key. Instead, here +// the commands are put at the fourth level. +partial keypad_keys +xkb_symbols "ops" { + key { [ NoSymbol, slash, NoSymbol, XF86_Ungrab ] }; + key { [ NoSymbol, asterisk, NoSymbol, XF86_ClearGrab ] }; + key { [ NoSymbol, minus, NoSymbol, XF86_Prev_VMode ] }; + key { [ NoSymbol, plus, NoSymbol, XF86_Next_VMode ] }; + key { [ NoSymbol, equal ] }; +}; + +// Hexadecimal Numpad, by Roland Kaufmann +// License: BSD (also covers variant with ATM digit order) +// Third-level gives the letters used in hexadecimal numbers, or +// columns in small spreadsheets. As a bonus, having 'e' available at +// the center of the keyboard makes it easy to enter floating point +// numbers in scientific notation. +// Equal is added to start formulas (most numpads on PCs don't have +// their own equal key), comma as a list separator (as most +// programming languages wants period as a decimal separator) and +// colon to enter times and ranges. Someone also may want to represent +// multiplication and division in prose using x and colon. +// Two first levels are specified as NoSymbol to not override any +// previous specification. Combine this with another keypad specifier, +// e.g. "legacy". +partial keypad_keys +xkb_symbols "hex" { + key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ; + + // None NumLock AltGr + // symbol row + key { [ NoSymbol, NoSymbol, parenleft ] }; + key { [ NoSymbol, NoSymbol, parenright ] }; + key { [ NoSymbol, NoSymbol, dollar ] }; + + // upper row + key { [ NoSymbol, NoSymbol, a ] }; + key { [ NoSymbol, NoSymbol, b ] }; + key { [ NoSymbol, NoSymbol, c ] }; + + // home row + key { [ NoSymbol, NoSymbol, d ] }; + key { [ NoSymbol, NoSymbol, e ] }; + key { [ NoSymbol, NoSymbol, f ] }; + key { [ NoSymbol, NoSymbol, comma ] }; + + // lower row + key { [ NoSymbol, NoSymbol, equal ] }; + key { [ NoSymbol, NoSymbol, x ] }; + key { [ NoSymbol, NoSymbol, colon ] }; + + // decimal row + key { [ NoSymbol, NoSymbol, backslash ] }; +}; + +// Main numbers follows the traditions from ATMs and phones with +// numbers increasing downwards to the right. (It is easier to +// change the keyboard layout than to reprogram your local ATM; +// also cell-phones are becoming more common while calculators are +// becoming more rare). +// First level is left unspecified, so it may be combined with another +// layout, e.g. "legacy". +partial keypad_keys +xkb_symbols "atm" { + // upper row + key { [ NoSymbol, KP_1 ] }; + key { [ NoSymbol, KP_2 ] }; + key { [ NoSymbol, KP_3 ] }; + + // lower row + key { [ NoSymbol, KP_7 ] }; + key { [ NoSymbol, KP_8 ] }; + key { [ NoSymbol, KP_9 ] }; +}; + + +partial default modifier_keys +xkb_symbols "pointerkeys" { + key { [ Num_Lock, Pointer_EnableKeys ] }; +}; + +// Only numbers, operators and decimal separator, +// as seen on keypad overlay on Japanese keyboard. +// ┌─┬─┬─┬─┐ +// │7│8│9│*│ +// ├─┼─┼─┼─┤ +// │4│5│6│-│ +// ├─┼─┼─┼─┤ +// │1│2│3│+│ +// ├─┼─┼─┼─┤ +// │0│ │·│/│ +// └─┴─┴─┴─┘ +partial keypad_keys +xkb_symbols "numoperdecsep" { + key { [ KP_7 ] }; + key { [ KP_8 ] }; + key { [ KP_9 ] }; +// ClsGrb kills whichever client has a grab in effect + key { + type="CTRL+ALT", + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86_ClearGrab ] + }; + + key { [ KP_4 ] }; + key { [ KP_5 ] }; + key { [ KP_6 ] }; +// -VMode switches to the previous video mode + key { + type="CTRL+ALT", + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86_Prev_VMode ] + }; + + key { [ KP_1 ] }; + key { [ KP_2 ] }; + key { [ KP_3 ] }; +// +VMode switches to the next video mode + key { + type="CTRL+ALT", + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86_Next_VMode ] + }; + + key { [ KP_0 ] }; + key { [ KP_Decimal ] }; +// Ungrab cancels server/keyboard/pointer grabs + key { + type="CTRL+ALT", + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86_Ungrab ] + }; +}; diff --git a/test/data/symbols/kpdl b/test/data/symbols/kpdl new file mode 100644 index 0000000..968dbd2 --- /dev/null +++ b/test/data/symbols/kpdl @@ -0,0 +1,102 @@ +// The key is a mess. +// It was probably originally meant to be a decimal separator. +// Except since it was declared by USA people it didn't use the original +// SI separator "," but a "." (since then the USA managed to f-up the SI +// by making "." an accepted alternative, but standards still use "," as +// default) +// As a result users of SI-abiding countries expect either a "." or a "," +// or a "decimal_separator" which may or may not be translated in one of the +// above depending on applications. +// It's not possible to define a default per-country since user expectations +// depend on the conflicting choices of their most-used applications, +// operating system, etc. Therefore it needs to be a configuration setting +// Copyright © 2007 Nicolas Mailhot + + +// Legacy #1 +// This assumes KP_Decimal will be translated in a dot +partial keypad_keys +xkb_symbols "dot" { + + key.type[Group1]="KEYPAD" ; + + key { [ KP_Delete, KP_Decimal ] }; // +}; + + +// Legacy #2 +// This assumes KP_Separator will be translated in a comma +partial keypad_keys +xkb_symbols "comma" { + + key.type[Group1]="KEYPAD" ; + + key { [ KP_Delete, KP_Separator ] }; // +}; + + +// Period , usual keyboard serigraphy in most countries +partial keypad_keys +xkb_symbols "dotoss" { + + key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ; + + key { [ KP_Delete, period, comma, 0x100202F ] }; // . , ⍽ (narrow no-break space) +}; + + +// Period , usual keyboard serigraphy in most countries, latin-9 restriction +partial keypad_keys +xkb_symbols "dotoss_latin9" { + + key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ; + + key { [ KP_Delete, period, comma, nobreakspace ] }; // . , ⍽ (no-break space) +}; + + +// Comma , what most non anglo-saxon people consider the real separator +partial keypad_keys +xkb_symbols "commaoss" { + + key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ; + + key { [ KP_Delete, comma, period, 0x100202F ] }; // , . ⍽ (narrow no-break space) +}; + + +// Momayyez : Bahrain, Iran, Iraq, Kuwait, Oman, Qatar, Saudi Arabia, Syria, UAE +partial keypad_keys +xkb_symbols "momayyezoss" { + + key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ; + + key { [ KP_Delete, 0x100066B, comma, 0x100202F ] }; // ? , ⍽ (narrow no-break space) +}; + + +// Abstracted , pray everything will work out (it usually does not) +partial keypad_keys +xkb_symbols "kposs" { + + key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ; + + key { [ KP_Delete, KP_Decimal, KP_Separator, 0x100202F ] }; // ? ? ⍽ (narrow no-break space) +}; + +// Spreadsheets may be configured to use the dot as decimal +// punctuation, comma as a thousands separator and then semi-colon as +// the list separator. Of these, dot and semi-colon is most important +// when entering data by the keyboard; the comma can then be inferred +// and added to the presentation afterwards. Using semi-colon as a +// general separator may in fact be preferred to avoid ambiguities +// in data files. Most times a decimal separator is hard-coded, it +// seems to be period, probably since this is the syntax used in +// (most) programming languages. +partial keypad_keys +xkb_symbols "semi" { + + key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ; + + key { [ NoSymbol, NoSymbol, semicolon ] }; +}; diff --git a/test/data/symbols/latin b/test/data/symbols/latin new file mode 100644 index 0000000..77b99d4 --- /dev/null +++ b/test/data/symbols/latin @@ -0,0 +1,256 @@ +// Common Latin alphabet layout + +default partial +xkb_symbols "basic" { + + key { [ 1, exclam, onesuperior, exclamdown ] }; + key { [ 2, at, twosuperior, oneeighth ] }; + key { [ 3, numbersign, threesuperior, sterling ] }; + key { [ 4, dollar, onequarter, dollar ] }; + key { [ 5, percent, onehalf, threeeighths ] }; + key { [ 6, asciicircum, threequarters, fiveeighths ] }; + key { [ 7, ampersand, braceleft, seveneighths ] }; + key { [ 8, asterisk, bracketleft, trademark ] }; + key { [ 9, parenleft, bracketright, plusminus ] }; + key { [ 0, parenright, braceright, degree ] }; + key { [ minus, underscore, backslash, questiondown ] }; + key { [ equal, plus, dead_cedilla, dead_ogonek ] }; + + key { [ q, Q, at, Greek_OMEGA ] }; + key { [ w, W, lstroke, Lstroke ] }; + key { [ e, E, e, E ] }; + key { [ r, R, paragraph, registered ] }; + key { [ t, T, tslash, Tslash ] }; + key { [ y, Y, leftarrow, yen ] }; + key { [ u, U, downarrow, uparrow ] }; + key { [ i, I, rightarrow, idotless ] }; + key { [ o, O, oslash, Ooblique ] }; + key { [ p, P, thorn, THORN ] }; + key { [bracketleft, braceleft, dead_diaeresis, dead_abovering ] }; + key { [bracketright, braceright, dead_tilde, dead_macron ] }; + + key { [ a, A, ae, AE ] }; + key { [ s, S, ssharp, section ] }; + key { [ d, D, eth, ETH ] }; + key { [ f, F, dstroke, ordfeminine ] }; + key { [ g, G, eng, ENG ] }; + key { [ h, H, hstroke, Hstroke ] }; + key { [ j, J, j, J ] }; + key { [ k, K, kra, ampersand ] }; + key { [ l, L, lstroke, Lstroke ] }; + key { [ semicolon, colon, dead_acute, dead_doubleacute ] }; + key { [apostrophe, quotedbl, dead_circumflex, dead_caron ] }; + key { [ grave, asciitilde, notsign, notsign ] }; + + key { [ backslash, bar, dead_grave, dead_breve ] }; + key { [ z, Z, guillemotleft, less ] }; + key { [ x, X, guillemotright, greater ] }; + key { [ c, C, cent, copyright ] }; + key { [ v, V, leftdoublequotemark, leftsinglequotemark ] }; + key { [ b, B, rightdoublequotemark, rightsinglequotemark ] }; + key { [ n, N, n, N ] }; + key { [ m, M, mu, masculine ] }; + key { [ comma, less, horizconnector, multiply ] }; + key { [ period, greater, periodcentered, division ] }; + key { [ slash, question, dead_belowdot, dead_abovedot ] }; + +}; + +// Northern Europe ( Danish, Finnish, Norwegian, Swedish) common layout + +partial +xkb_symbols "type2" { + + include "latin" + + key { [ 1, exclam, exclamdown, onesuperior ] }; + key { [ 2, quotedbl, at, twosuperior ] }; + key { [ 3, numbersign, sterling, threesuperior] }; + key { [ 4, currency, dollar, onequarter ] }; + key { [ 5, percent, onehalf, cent ] }; + key { [ 6, ampersand, yen, fiveeighths ] }; + key { [ 7, slash, braceleft, division ] }; + key { [ 8, parenleft, bracketleft, guillemotleft] }; + key { [ 9, parenright, bracketright, guillemotright] }; + key { [ 0, equal, braceright, degree ] }; + + key { [ e, E, EuroSign, cent ] }; + key { [ r, R, registered, registered ] }; + key { [ t, T, thorn, THORN ] }; + key { [ o, O, oe, OE ] }; + key { [ aring, Aring, dead_diaeresis, dead_abovering ] }; + key { [dead_diaeresis, dead_circumflex, dead_tilde, dead_caron ] }; + + key { [ a, A, ordfeminine, masculine ] }; + + key { [ c, C, copyright, copyright ] }; + key { [ comma, semicolon, dead_cedilla, dead_ogonek ] }; + key { [ period, colon, periodcentered, dead_abovedot ] }; + key { [ minus, underscore, dead_belowdot, dead_abovedot ] }; +}; + +// Slavic Latin ( Albanian, Croatian, Polish, Slovene, Yugoslav) +// common layout + +partial +xkb_symbols "type3" { + + include "latin" + + key { [ q, Q, backslash, Greek_OMEGA ] }; + key { [ w, W, bar, Lstroke ] }; + key { [ z, Z, leftarrow, yen ] }; + + key { [ f, F, bracketleft, ordfeminine ] }; + key { [ g, G, bracketright, ENG ] }; + key { [ k, K, lstroke, ampersand ] }; + + key { [ y, Y, guillemotleft, less ] }; + key { [ v, V, at, grave ] }; + key { [ b, B, braceleft, apostrophe ] }; + key { [ n, N, braceright, braceright ] }; + key { [ m, M, section, masculine ] }; + key { [ comma, semicolon, less, multiply ] }; + key { [ period, colon, greater, division ] }; +}; + +// Another one Latin common layout +// (German, Estonian, Spanish, Icelandic, Italian, Latin American, Portuguese) + +partial +xkb_symbols "type4" { + + include "latin" + + key { [ 2, quotedbl, at, oneeighth ] }; + key { [ 6, ampersand, notsign, fiveeighths ] }; + key { [ 7, slash, braceleft, seveneighths ] }; + key { [ 8, parenleft, bracketleft, trademark ] }; + key { [ 9, parenright, bracketright, plusminus ] }; + key { [ 0, equal, braceright, degree ] }; + + key { [ e, E, EuroSign, cent ] }; + + key { [ comma, semicolon, horizconnector, multiply ] }; + key { [ period, colon, periodcentered, division ] }; + key { [ minus, underscore, dead_belowdot, dead_abovedot ] }; +}; + +partial +xkb_symbols "nodeadkeys" { + + key { [ equal, plus, cedilla, ogonek ] }; + key { [bracketleft, braceleft, diaeresis, degree ] }; + key { [bracketright, braceright, asciitilde, macron ] }; + key { [ semicolon, colon, acute, doubleacute ] }; + key { [apostrophe, quotedbl, asciicircum, caron ] }; + key { [ backslash, bar, grave, breve ] }; + key { [ slash, question, dead_belowdot, abovedot ] }; +}; + +partial +xkb_symbols "type2_nodeadkeys" { + + include "latin(nodeadkeys)" + + key { [ aring, Aring, diaeresis, degree ] }; + key { [ diaeresis, asciicircum, asciitilde, caron ] }; + key { [ comma, semicolon, cedilla, ogonek ] }; + key { [ period, colon, periodcentered, abovedot ] }; + key { [ minus, underscore, dead_belowdot, abovedot ] }; +}; + +partial +xkb_symbols "type3_nodeadkeys" { + + include "latin(nodeadkeys)" +}; + +partial +xkb_symbols "type4_nodeadkeys" { + + include "latin(nodeadkeys)" + + key { [ minus, underscore, dead_belowdot, abovedot ] }; +}; + +// Added 2008.03.05 by Marcin Woliński +// See http://marcinwolinski.pl/keyboard/ for a description. +// Used by pl(intl) +// +// ┌────┐ +// │ 2 4│ 2 = Shift, 4 = Level3 + Shift +// │ 1 3│ 1 = Normal, 3 = Level3 +// └────┘ +// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓ +// │ ~ ~ │ ! ' │ @ " │ # ˝ │ $ ¸ │ % ˇ │ ^ ^ │ & ˘ │ * ˙ │ ( Ì£ │ ) ° │ _ ¯ │ + ˛ ┃ ⌫ Back ┃ +// │ ` ` │ 1 ¡ │ 2 © │ 3 • │ 4 § │ 5 € │ 6 ¢ │ 7 − │ 8 × │ 9 ÷ │ 0 ° │ - – │ = — ┃ space ┃ +// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫ +// ┃ ┃ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ { « │ } » ┃ Enter ┃ +// ┃Tab ↹ ┃ q │ w │ e │ r │ t │ y │ u │ i │ o │ p │ [ ‹ │ ] › ┃ ⏎ ┃ +// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃ +// ┃ ┃ A │ S │ D │ F │ G │ H │ J │ K │ L │ : “ │ " ” │ | ¶ ┃ ┃ +// ┃Caps ⇬ ┃ a │ s │ d │ f │ g │ h │ j │ k │ l │ ; ‘ │ ' ’ │ \ ┃ ┃ +// ┣━━━━━━━━┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫ +// ┃ │ Z │ X │ C │ V │ B │ N │ M │ < „ │ > · │ ? ¿ ┃ ┃ +// ┃Shift ⇧ │ z │ x │ c │ v │ b │ n │ m │ , ‚ │ . … │ / ⁄ ┃Shift ⇧ ┃ +// ┣━━━━━━━┳━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛ +// ┃ ┃ ┃ ┃ ␣ ⍽ ┃ ┃ ┃ ┃ +// ┃Ctrl ┃Meta ┃Alt ┃ ␣ Space ⍽ ┃AltGr ⇮┃Menu ┃Ctrl ┃ +// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛ + +partial +xkb_symbols "intl" { + + key { [ grave, asciitilde, dead_grave, dead_tilde ] }; + key { [ 1, exclam, exclamdown, dead_acute ] }; + key { [ 2, at, copyright, dead_diaeresis ] }; + key { [ 3, numbersign, U2022, dead_doubleacute ] }; // U+2022 is bullet (the name bullet doesn't work) + key { [ 4, dollar, section, dead_cedilla ] }; + key { [ 5, percent, EuroSign, dead_caron ] }; + key { [ 6, asciicircum, cent, dead_circumflex ] }; + key { [ 7, ampersand, U2212, dead_breve ] }; // U+2212 is MINUS SIGN + key { [ 8, asterisk, multiply, dead_abovedot ] }; + key { [ 9, parenleft, division, dead_belowdot ] }; + key { [ 0, parenright, degree, dead_abovering ] }; + key { [ minus, underscore, endash, dead_macron ] }; + key { [ equal, plus, emdash, dead_ogonek ] }; + + key { [ q, Q ] }; + key { [ w, W ] }; + key { [ e, E ] }; + key { [ r, R ] }; + key { [ t, T ] }; + key { [ y, Y ] }; + key { [ u, U ] }; + key { [ i, I ] }; + key { [ o, O ] }; + key { [ p, P ] }; + key { [bracketleft, braceleft, U2039, guillemotleft ] }; + key { [bracketright, braceright, U203A, guillemotright ] }; + + key { [ a, A ] }; + key { [ s, S ] }; + key { [ d, D ] }; + key { [ f, F ] }; + key { [ g, G ] }; + key { [ h, H ] }; + key { [ j, J ] }; + key { [ k, K ] }; + key { [ l, L ] }; + key { [ semicolon, colon, leftsinglequotemark, leftdoublequotemark ] }; + key { [apostrophe, quotedbl, rightsinglequotemark, rightdoublequotemark ] }; + + key { [ backslash, bar, NoSymbol, paragraph ] }; + key { [ z, Z ] }; + key { [ x, X ] }; + key { [ c, C ] }; + key { [ v, V ] }; + key { [ b, B ] }; + key { [ n, N ] }; + key { [ m, M ] }; + key { [ comma, less, singlelowquotemark, doublelowquotemark ] }; + key { [ period, greater, ellipsis, periodcentered ] }; + key { [ slash, question, U2044, questiondown ] }; // U+2044 is FRACTION SLASH + +}; diff --git a/test/data/symbols/level3 b/test/data/symbols/level3 new file mode 100644 index 0000000..9d49555 --- /dev/null +++ b/test/data/symbols/level3 @@ -0,0 +1,196 @@ +// these variants assign various XKB keycodes to ISO_Level3_Shift so that +// the third shift level can be reached +// + +// the default behavior is for the right Alt key (AltGr) to generate the +// third engraved symbol +default partial modifier_keys +xkb_symbols "ralt_switch" { + key { + type[Group1]="ONE_LEVEL", + symbols[Group1] = [ ISO_Level3_Shift ] + }; + modifier_map Mod5 { ISO_Level3_Shift }; +}; + +// Right Alt key never chooses 3rd level. +// This option attempts to undo the effect of a layout's +// including ralt_switch. You may also want to select another +// level3 option that maps the level3 shift to some other key. +partial modifier_keys +xkb_symbols "ralt_alt" { + key { + 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 { }; +}; + +partial modifier_keys +xkb_symbols "ralt_switch_multikey" { + key { + type[Group1]="TWO_LEVEL", + symbols[Group1] = [ ISO_Level3_Shift, Multi_key ] + }; +}; + +// special case or right Alt switch - for use with grp:alts_toggle +// +partial hidden modifier_keys +xkb_symbols "ralt_switch_for_alts_toggle" { + virtual_modifiers LAlt, AlGr; + key { + type[Group1]="PC_RALT_LEVEL2", + symbols[Group1] = [ Alt_L, ISO_Prev_Group, ISO_Prev_Group ], + virtualMods= LAlt + }; + key { + type[Group1]="PC_ALT_LEVEL2", + symbols[Group1] = [ ISO_Level3_Shift, ISO_Next_Group ], + virtualMods= AltGr + }; + modifier_map Mod5 { ISO_Level3_Shift }; +}; + +// using the level(alt_switch) map, either Alt key temporarily chooses +// the third shift level. (Mostly be used to imitate Mac OS functionality.) +partial modifier_keys +xkb_symbols "alt_switch" { + include "level3(lalt_switch)" + include "level3(ralt_switch)" +}; + +partial modifier_keys +xkb_symbols "lalt_switch" { + key { + type[Group1]="ONE_LEVEL", + symbols[Group1] = [ ISO_Level3_Shift ] + }; + modifier_map Mod5 { }; +}; + +// using the level(switch) map, the right Control key temporarily +// chooses the third shift level (until it is released). +partial modifier_keys +xkb_symbols "switch" { + key { + type[Group1]="ONE_LEVEL", + symbols[Group1] = [ ISO_Level3_Shift ] + }; + modifier_map Mod5 { ISO_Level3_Shift }; +}; + +// using the level(menu_switch) map, the Menu key temporarily +// chooses the third shift level (until it is released). +partial modifier_keys +xkb_symbols "menu_switch" { + key { + type[Group1]="ONE_LEVEL", + symbols[Group1] = [ ISO_Level3_Shift ] + }; + modifier_map Mod5 { ISO_Level3_Shift }; +}; + +// using the level3(win_switch) map, the either Windows' logo key +// temporarily chooses the third shift level. +partial modifier_keys +xkb_symbols "win_switch" { + include "level3(lwin_switch)" + include "level3(rwin_switch)" +}; + +// using the level3(lwin_switch) map, the left Windows' logo key +// temporarily chooses the third shift level. +partial modifier_keys +xkb_symbols "lwin_switch" { + key { + type[Group1]="ONE_LEVEL", + symbols[Group1] = [ ISO_Level3_Shift ] + }; + modifier_map Mod5 { ISO_Level3_Shift }; +}; + +// using the level(rwin_switch) map, the right Windows' logo key +// temporarily chooses the third shift level. If you use this map, +// you should define your keyboard as pc101 or pc102 instead of pc104 +// or pc105. +partial modifier_keys +xkb_symbols "rwin_switch" { + key { + type[Group1]="ONE_LEVEL", + symbols[Group1] = [ ISO_Level3_Shift ] + }; + modifier_map Mod5 { ISO_Level3_Shift }; +}; + +// using the level3(enter_switch) map, the Enter key on the keypad +// temporarily 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 { + type[Group1]="ONE_LEVEL", + symbols[Group1] = [ ISO_Level3_Shift ] + }; + modifier_map Mod5 { ISO_Level3_Shift }; +}; + +partial modifier_keys +xkb_symbols "caps_switch" { + key { + type[Group1]="ONE_LEVEL", + symbols[Group1] = [ ISO_Level3_Shift ] + }; + modifier_map Mod5 { ISO_Level3_Shift }; +}; + +partial modifier_keys +xkb_symbols "bksl_switch" { + key { + type[Group1]="ONE_LEVEL", + symbols[Group1] = [ ISO_Level3_Shift ] + }; + modifier_map Mod5 { ISO_Level3_Shift }; +}; + +partial modifier_keys +xkb_symbols "lsgt_switch" { + key { + type[Group1]="ONE_LEVEL", + symbols[Group1] = [ ISO_Level3_Shift ] + }; + modifier_map Mod5 { ISO_Level3_Shift }; +}; + +partial modifier_keys +xkb_symbols "caps_switch_latch" { + key { + type[Group1]="THREE_LEVEL", + symbols[Group1] = [ ISO_Level3_Shift, ISO_Level3_Shift, ISO_Level3_Latch ] + }; + modifier_map Mod5 { ISO_Level3_Shift }; +}; + +partial modifier_keys +xkb_symbols "bksl_switch_latch" { + key { + type[Group1]="THREE_LEVEL", + symbols[Group1] = [ ISO_Level3_Shift, ISO_Level3_Shift, ISO_Level3_Latch ] + }; + modifier_map Mod5 { ISO_Level3_Shift }; +}; + +partial modifier_keys +xkb_symbols "lsgt_switch_latch" { + key { + type[Group1]="THREE_LEVEL", + symbols[Group1] = [ ISO_Level3_Shift, ISO_Level3_Shift, ISO_Level3_Latch ] + }; + modifier_map Mod5 { ISO_Level3_Shift }; +}; diff --git a/test/data/symbols/level5 b/test/data/symbols/level5 new file mode 100644 index 0000000..ce219b5 --- /dev/null +++ b/test/data/symbols/level5 @@ -0,0 +1,147 @@ +// these variants assign various XKB keycodes to ISO_Level5_Shift so that +// the third shift level can be reached +// + +// using the level(switch) map, the right Control key temporarily +// chooses the fifth shift level (until it is released). +partial modifier_keys +xkb_symbols "rctrl_switch" { + key { + type[Group1]="ONE_LEVEL", + symbols[Group1] = [ ISO_Level5_Shift ] + }; + modifier_map Mod3 { ISO_Level5_Shift }; +}; + +partial modifier_keys +xkb_symbols "lsgt_switch" { + key { + type[Group1]="ONE_LEVEL", + symbols[Group1] = [ ISO_Level5_Shift ] + }; + modifier_map Mod3 { ISO_Level5_Shift }; +}; + +partial modifier_keys +xkb_symbols "ralt_switch" { + key { + type[Group1]="ONE_LEVEL", + symbols[Group1] = [ ISO_Level5_Shift ] + }; + modifier_map Mod3 { ISO_Level5_Shift }; +}; + + +// The following modifier keys are used to switch to the third shift and to set a +// corresponding lock, implemented as NumLock. + +partial modifier_keys +xkb_symbols "lock" { + // This adds the definitions needed to create a level5-lock behaviour, using + // the real modifier NumLock as a lock indicator. + // See also: types/level5 : EIGHT_LEVEL_LEVEL_FIVE_LOCK + // See also: compat/level5(level5_lock) + key.type[Group1] = "ONE_LEVEL"; + + replace key { + vmods = LevelFive, + symbols[Group1] = [ ISO_Level5_Shift ], + actions[Group1] = [ SetMods(modifiers=LevelFive) ] + }; + modifier_map Mod3 { }; + + replace key { + vmods = NumLock, + symbols[Group1] = [ NoSymbol ], + actions[Group1] = [ SetMods(modifiers=NumLock) ] + }; + modifier_map Mod2 { }; +}; + +partial modifier_keys +xkb_symbols "lsgt_switch_lock" { + + include "level5(lock)" + + key { + type[Group1] = "EIGHT_LEVEL", + symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ] + }; +}; + +partial modifier_keys +xkb_symbols "lwin_switch_lock" { + + include "level5(lock)" + + key { + type[Group1] = "EIGHT_LEVEL", + symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ] + }; +}; + +partial modifier_keys +xkb_symbols "ralt_switch_lock" { + + include "level5(lock)" + + key { + type[Group1] = "EIGHT_LEVEL", + symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ] + }; +}; + +partial modifier_keys +xkb_symbols "rwin_switch_lock" { + + include "level5(lock)" + + key { + type[Group1] = "EIGHT_LEVEL", + symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ] + }; +}; + +partial modifier_keys +xkb_symbols "lsgt_switch_lock_cancel" { + + include "level5(lock)" + + key { + type[Group1] = "EIGHT_LEVEL_LEVEL_FIVE_LOCK", + symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ] + }; +}; + +partial modifier_keys +xkb_symbols "lwin_switch_lock_cancel" { + + include "level5(lock)" + + key { + type[Group1] = "EIGHT_LEVEL_LEVEL_FIVE_LOCK", + symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ] + }; +}; + +partial modifier_keys +xkb_symbols "ralt_switch_lock_cancel" { + + include "level5(lock)" + + key { + type[Group1] = "EIGHT_LEVEL_LEVEL_FIVE_LOCK", + symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ] + }; +}; + +partial modifier_keys +xkb_symbols "rwin_switch_lock_cancel" { + + include "level5(lock)" + + key { + type[Group1] = "EIGHT_LEVEL_LEVEL_FIVE_LOCK", + symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ] + }; +}; diff --git a/test/data/symbols/nbsp b/test/data/symbols/nbsp new file mode 100644 index 0000000..77b40df --- /dev/null +++ b/test/data/symbols/nbsp @@ -0,0 +1,204 @@ +// Let Space key provide No-Break Space (NBSP), Narrow No-Break Space (NNBSP), +// Zero-Width Non-Joiner (ZWNJ), and Zero-Width Joiner (ZWJ) for the desired +// levels. + + +//////////////////////////////////////// +// Only Space + +partial +xkb_symbols "none" { + key { + type[Group1]="ONE_LEVEL", + symbols[Group1]= [ space ] + }; +}; + + +//////////////////////////////////////// +// No-Break Space + +partial +xkb_symbols "level2" { + key { + type[Group1]="TWO_LEVEL", + symbols[Group1]= [ space, nobreakspace ] + }; +}; + + +// level3 & level3ns provide no-breaking spaces starting from level3 +// This is good for typographers but experience shows many users accidently +// type no-breaking spaces on the CLI (resulting in errors) +// Used by fr(latin9) and lt(std) +partial +xkb_symbols "level3" { + key { + type[Group1]="FOUR_LEVEL", + symbols[Group1]= [ space, space, nobreakspace ] + }; +}; + +// level3s kills fourth level +// Used by ca(multix) +partial +xkb_symbols "level3s" { + key { + type[Group1]="FOUR_LEVEL", + symbols[Group1]= [ space, space, nobreakspace, NoSymbol ] + }; +}; + +// for this reason pushing no-breaking spaces to level4 is the safe default nowadays +partial +xkb_symbols "level4" { + key { + type[Group1]="FOUR_LEVEL", + symbols[Group1]= [ space, space, space, nobreakspace ] + }; +}; + + +//////////////////////////////////////// +// Narrow No-Break Space + +// level3n provides narrow no-breaking space in addition to the normal one +partial +xkb_symbols "level3n" { + key { + type[Group1]="FOUR_LEVEL", + symbols[Group1]= [ space, space, nobreakspace, 0x100202F ] + }; +}; + +// level4n provides narrow no-breaking space in addition to the normal one +partial +xkb_symbols "level4n" { + key { + type[Group1]="EIGHT_LEVEL", + symbols[Group1]= [ space, space, space, nobreakspace, space, 0x100202F, NoSymbol, NoSymbol ] + }; +}; + +// level4nl provides narrow no-breaking space in addition to the normal one +// without forcing the use of level5 for mostly four-level layouts +// Used by fr(oss), be(oss)… +partial +xkb_symbols "level4nl" { + key { + type[Group1]="LOCAL_EIGHT_LEVEL", + symbols[Group1]= [ space, space, space, nobreakspace, space, 0x100202F, NoSymbol, NoSymbol ] + }; +}; + + +//////////////////////////////////////// +// Zero-Width Non-Joiner & Zero-Width Joiner +// Author: Behnam Esfahbod + +// ZWNJ and ZWJ are widely used in Persian, Kurdinsh, Pashto, Uzbek and other +// languages that use PersoArabic script. + + +// ZWNJ on level 2 +partial +xkb_symbols "zwnj2" { + key { + type[Group1]="TWO_LEVEL", + symbols[Group1]= [ space, 0x100200c ] + }; +}; + + +// ZWNJ on level 2 +// ZWJ on level 3 +partial +xkb_symbols "zwnj2zwj3" { + key { + type[Group1]="FOUR_LEVEL", + symbols[Group1]= [ space, 0x100200c, 0x100200d ] + }; +}; + + +// ZWNJ on level 2 +// ZWJ on level 3 +// NBSP on level 4 +partial +xkb_symbols "zwnj2zwj3nb4" { + key { + type[Group1]="FOUR_LEVEL", + symbols[Group1]= [ space, 0x100200c, 0x100200d, nobreakspace ] + }; +}; + +// ZWNJ on level 2 +// NBSP on level 3 +// Used by ir(ku_ara), af(basic), af(ps), af(uz), af(olpc-fa), af(olpc-ps), af(olpc-uz) +partial +xkb_symbols "zwnj2nb3" { + key { + type[Group1]="FOUR_LEVEL", + symbols[Group1]= [ space, 0x100200c, nobreakspace ] + }; +}; + + +// ZWNJ on level 2 +// NBSP on level 3 +partial +xkb_symbols "zwnj2nb3s" { + key { + type[Group1]="FOUR_LEVEL", + symbols[Group1]= [ space, 0x100200c, nobreakspace, NoSymbol ] + }; +}; + + +// ZWNJ on level 2 +// NBSP on level 3 +// ZWJ on level 4 +partial +xkb_symbols "zwnj2nb3zwj4" { + key { + type[Group1]="FOUR_LEVEL", + symbols[Group1]= [ space, 0x100200c, nobreakspace, 0x100200d ] + }; +}; + + +// ZWNJ on level 2 +// NBSP on level 3 +// NNBSP on level 4 +// Used by ir(pes) +partial +xkb_symbols "zwnj2nb3nnb4" { + key { + type[Group1]="FOUR_LEVEL", + symbols[Group1]= [ space, 0x100200c, nobreakspace, 0x100202F ] + }; +}; + + +// ZWNJ on level 3 +// ZWJ on level 4 +// Used by in(deva), in(olpc) +partial +xkb_symbols "zwnj3zwj4" { + key { + type[Group1]="FOUR_LEVEL", + symbols[Group1]= [ space, space, 0x100200c, 0x100200d ] + }; +}; + + +// NBSP on level 2 +// ZWNJ on level 3 +// Used by lk(sin_phonetic) +partial +xkb_symbols "nb2zwnj3s" { + key { + type[Group1]="FOUR_LEVEL", + symbols[Group1]= [ space, nobreakspace, 0x100200c, NoSymbol ] + }; +}; diff --git a/test/data/symbols/pc b/test/data/symbols/pc new file mode 100644 index 0000000..7e13ecb --- /dev/null +++ b/test/data/symbols/pc @@ -0,0 +1,90 @@ +default partial alphanumeric_keys modifier_keys +xkb_symbols "pc105" { + + key { [ Escape ] }; + + // the extra key on most European keyboards + key { [ less, greater, bar, brokenbar ] }; + + // these keys are common to all layouts + key { [ backslash, bar ] }; + key { [ space ] }; + + include "srvr_ctrl(fkey2vt)" + include "pc(editing)" + include "keypad(x11)" + + key { [ BackSpace, BackSpace ] }; + + key { [ Tab, ISO_Left_Tab ] }; + key { [ Return ] }; + + key { [ Caps_Lock ] }; + + key { [ Num_Lock ] }; + + key { [ Shift_L ] }; + key { [ Control_L ] }; + + key { [ Super_L ] }; + + key { [ Shift_R ] }; + key { [ Control_R ] }; + + key { [ Super_R ] }; + + key { [ Menu ] }; + + // begin modifier mappings + modifier_map Shift { Shift_L, Shift_R }; + modifier_map Lock { Caps_Lock, ISO_Lock }; + modifier_map Control{ Control_L, Control_R }; + modifier_map Mod2 { Num_Lock }; + modifier_map Mod4 { Super_L, Super_R }; + + // Fake keys for virtual<->real modifiers mapping + key { [ ISO_Level3_Shift ] }; + key { [ Mode_switch ] }; + modifier_map Mod5 { , }; + + key { [ NoSymbol, Alt_L ] }; + include "altwin(meta_alt)" + + key { [ NoSymbol, Meta_L ] }; + modifier_map Mod1 { }; + + key { [ NoSymbol, Super_L ] }; + modifier_map Mod4 { }; + + key { [ NoSymbol, Hyper_L ] }; + modifier_map Mod4 { }; + + key { [ XF86Display ] }; + key { [ XF86KbdLightOnOff ] }; + key { [ XF86KbdBrightnessDown ] }; + key { [ XF86KbdBrightnessUp ] }; +}; + +partial hidden alphanumeric_keys +xkb_symbols "editing" { + key { + type= "PC_ALT_LEVEL2", + symbols[Group1]= [ Print, Sys_Req ] + }; + key { [ Scroll_Lock ] }; + key { + type= "PC_CONTROL_LEVEL2", + symbols[Group1]= [ Pause, Break ] + }; + key { [ Insert ] }; + key { [ Home ] }; + key { [ Prior ] }; + key { [ Delete ] }; + key { [ End ] }; + key { [ Next ] }; + + key { [ Up ] }; + key { [ Left ] }; + key { [ Down ] }; + key { [ Right ] }; +}; diff --git a/test/data/symbols/ru b/test/data/symbols/ru new file mode 100644 index 0000000..408e408 --- /dev/null +++ b/test/data/symbols/ru @@ -0,0 +1,653 @@ +// based on +// russian standard keyboard +// AEN +// 2001/12/23 by Leon Kanter +// 2005/12/09 Valery Inozemtsev + +// Windows layout +partial default alphanumeric_keys +xkb_symbols "winkeys" { + include "ru(common)" + + name[Group1]= "Russian"; + + key { [ 3, numerosign ] }; + key { [ 4, semicolon ] }; + key { [ 5, percent ] }; + key { [ 6, colon ] }; + key { [ 7, question ] }; + key { [ 8, asterisk ] }; + + key { [ period, comma ] }; + key { [ backslash, slash ] }; +}; + +partial hidden alphanumeric_keys +xkb_symbols "common" { + + key { [ 1, exclam ] }; + key { [ 2, quotedbl ] }; + key { [ 3, numbersign ] }; + key { [ 4, asterisk ] }; + key { [ 5, colon ] }; + key { [ 6, comma ] }; + key { [ 7, period ] }; + key { [ 8, semicolon ] }; + key { [ 9, parenleft ] }; + key { [ 0, parenright ] }; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + key { [ backslash, bar ] }; + key { [ slash, question ] }; + key { [ slash, bar ] }; + + key { [ Cyrillic_io, Cyrillic_IO ] }; + key { [ Cyrillic_shorti, Cyrillic_SHORTI ] }; + key { [ Cyrillic_tse, Cyrillic_TSE ] }; + key { [ Cyrillic_u, Cyrillic_U ] }; + key { [ Cyrillic_ka, Cyrillic_KA ] }; + key { [ Cyrillic_ie, Cyrillic_IE ] }; + key { [ Cyrillic_en, Cyrillic_EN ] }; + key { [ Cyrillic_ghe, Cyrillic_GHE ] }; + key { [ Cyrillic_sha, Cyrillic_SHA ] }; + key { [ Cyrillic_shcha, Cyrillic_SHCHA ] }; + key { [ Cyrillic_ze, Cyrillic_ZE ] }; + key { [ Cyrillic_ha, Cyrillic_HA ] }; + key { [Cyrillic_hardsign,Cyrillic_HARDSIGN ] }; + key { [ Cyrillic_ef, Cyrillic_EF ] }; + key { [ Cyrillic_yeru, Cyrillic_YERU ] }; + key { [ Cyrillic_ve, Cyrillic_VE ] }; + key { [ Cyrillic_a, Cyrillic_A ] }; + key { [ Cyrillic_pe, Cyrillic_PE ] }; + key { [ Cyrillic_er, Cyrillic_ER ] }; + key { [ Cyrillic_o, Cyrillic_O ] }; + key { [ Cyrillic_el, Cyrillic_EL ] }; + key { [ Cyrillic_de, Cyrillic_DE ] }; + key { [ Cyrillic_zhe, Cyrillic_ZHE ] }; + key { [ Cyrillic_e, Cyrillic_E ] }; + key { [ Cyrillic_ya, Cyrillic_YA ] }; + key { [ Cyrillic_che, Cyrillic_CHE ] }; + key { [ Cyrillic_es, Cyrillic_ES ] }; + key { [ Cyrillic_em, Cyrillic_EM ] }; + key { [ Cyrillic_i, Cyrillic_I ] }; + key { [ Cyrillic_te, Cyrillic_TE ] }; + key { [Cyrillic_softsign,Cyrillic_SOFTSIGN ] }; + key { [ Cyrillic_be, Cyrillic_BE ] }; + key { [ Cyrillic_yu, Cyrillic_YU ] }; + + key.type[group1]="TWO_LEVEL"; + + include "kpdl(comma)" +}; + +partial alphanumeric_keys +xkb_symbols "legacy" { + include "ru(common)" + + name[Group1]= "Russian (legacy)"; +}; + +partial alphanumeric_keys +xkb_symbols "olpc" { + + include "ru(common)" + + key { [ 0x01000451, 0x01000401, grave ] }; // Ñ‘, Ð + key { [ 3, numbersign, 0x01002116 ] }; // â„– + key { [ 4, dollar, semicolon ] }; + key { [ 6, asciicircum, colon ] }; + key { [ 7, ampersand ] }; + key { [ 9, parenleft, acute ] }; + key { [ backslash, bar, slash ] }; + + include "group(olpc)" +}; + +partial alphanumeric_keys +xkb_symbols "typewriter" { + include "ru(common)" + name[Group1]= "Russian (typewriter)"; + key { [ bar, plus ] }; + key { [ numerosign, 1 ] }; + key { [ minus, 2 ] }; + key { [ slash, 3 ] }; + key { [ quotedbl, 4 ] }; + key { [ colon, 5 ] }; + key { [ comma, 6 ] }; + key { [ period, 7 ] }; + key { [ underscore, 8 ] }; + key { [ question, 9 ] }; + key { [ percent, 0 ] }; + key { [ exclam, equal ] }; + key { [ semicolon, backslash ] }; + + key { [ parenright, parenleft ] }; + + key { [Cyrillic_hardsign,Cyrillic_HARDSIGN ] }; + key { [ Cyrillic_io, Cyrillic_IO ] }; +}; + +partial alphanumeric_keys +xkb_symbols "typewriter-legacy" { + include "ru(common)" + name[Group1]= "Russian (typewriter, legacy)"; + key { [ apostrophe, quotedbl ] }; + key { [ exclam, 1 ] }; + key { [ numerosign, 2 ] }; + key { [ slash, 3 ] }; + key { [ semicolon, 4 ] }; + key { [ colon, 5 ] }; + key { [ comma, 6 ] }; + key { [ period, 7 ] }; + key { [ underscore, 8 ] }; + key { [ question, 9 ] }; + key { [ percent, 0 ] }; + key { [ parenleft, parenright ] }; + + key { [Cyrillic_hardsign,Cyrillic_HARDSIGN ] }; + key { [ Cyrillic_io, Cyrillic_IO ] }; +}; + +partial alphanumeric_keys +xkb_symbols "phonetic" { + + name[Group1]= "Russian (phonetic)"; + + key { [ 1, exclam ] }; + key { [ 2, at ] }; + key { [ 3, Cyrillic_io ] }; + key { [ 4, Cyrillic_IO ] }; + key { [ 5, Cyrillic_hardsign ] }; + key { [ 6, Cyrillic_HARDSIGN ] }; + key { [ 7, ampersand ] }; + key { [ 8, asterisk ] }; + key { [ 9, parenleft ] }; + key { [ 0, parenright ] }; + key { [ minus, underscore ] }; + + key { [ period, greater ] }; + key { [ slash, question ] }; + key { [ comma, less ] }; + key { [ semicolon, colon ] }; + key { [ apostrophe, quotedbl ] }; + key { [ bar, brokenbar ] }; + + key { [ Cyrillic_yu, Cyrillic_YU ] }; + key { [ Cyrillic_ya, Cyrillic_YA ] }; + key { [ Cyrillic_ze, Cyrillic_ZE ] }; + key { [ Cyrillic_es, Cyrillic_ES ] }; + key { [ Cyrillic_a, Cyrillic_A ] }; + key { [ Cyrillic_ve, Cyrillic_VE ] }; + key { [ Cyrillic_tse, Cyrillic_TSE ] }; + key { [Cyrillic_softsign,Cyrillic_SOFTSIGN ] }; + key { [ Cyrillic_de, Cyrillic_DE ] }; + key { [ Cyrillic_ie, Cyrillic_IE ] }; + key { [ Cyrillic_zhe, Cyrillic_ZHE ] }; + key { [ Cyrillic_ef, Cyrillic_EF ] }; + key { [ Cyrillic_te, Cyrillic_TE ] }; + key { [ Cyrillic_er, Cyrillic_ER ] }; + key { [ Cyrillic_en, Cyrillic_EN ] }; + key { [ Cyrillic_be, Cyrillic_BE ] }; + key { [ Cyrillic_ha, Cyrillic_HA ] }; + key { [ Cyrillic_ghe, Cyrillic_GHE ] }; + key { [ Cyrillic_yeru, Cyrillic_YERU ] }; + key { [ Cyrillic_em, Cyrillic_EM ] }; + key { [ Cyrillic_shorti, Cyrillic_SHORTI ] }; + key { [ Cyrillic_u, Cyrillic_U ] }; + key { [ Cyrillic_ka, Cyrillic_KA ] }; + key { [ Cyrillic_i, Cyrillic_I ] }; + key { [ Cyrillic_o, Cyrillic_O ] }; + key { [ Cyrillic_el, Cyrillic_EL ] }; + key { [ Cyrillic_pe, Cyrillic_PE ] }; + + key { [ Cyrillic_sha, Cyrillic_SHA ] }; + key { [ Cyrillic_che, Cyrillic_CHE ] }; + key { [ Cyrillic_shcha, Cyrillic_SHCHA ] }; + key { [ Cyrillic_e, Cyrillic_E ] }; +}; + +partial alphanumeric_keys +xkb_symbols "phonetic_winkeys" { + + include "ru(phonetic)" + name[Group1]= "Russian (phonetic WinKeys)"; + + key { [ Cyrillic_ha, Cyrillic_HA ] }; + key { [ Cyrillic_che, Cyrillic_CHE ] }; + key { [ Cyrillic_softsign, Cyrillic_softsign ] }; + +}; + +partial alphanumeric_keys +xkb_symbols "tt" { + include "ru(winkeys)" + name[Group1]= "Tatar"; + + key.type[group1]="FOUR_LEVEL"; + + key { [ 0x010004bb, 0x010004ba, + Cyrillic_io, Cyrillic_IO ] }; + key { [ 0x010004e9, 0x010004e8, + Cyrillic_tse, Cyrillic_TSE ] }; + key { [ 0x010004d9, 0x010004d8, + Cyrillic_shcha, Cyrillic_SHCHA ] }; + key { [ 0x010004af, 0x010004ae, + Cyrillic_hardsign,Cyrillic_HARDSIGN ] }; + key { [ 0x010004a3, 0x010004a2, + Cyrillic_zhe, Cyrillic_ZHE ] }; + key { [ 0x01000497, 0x01000496, + Cyrillic_softsign,Cyrillic_SOFTSIGN ] }; + + include "level3(ralt_switch)" + +}; + +partial alphanumeric_keys +xkb_symbols "os_legacy" { + include "ru(common)" + + name[Group1]= "Ossetian (legacy)"; + + key { [ Cyrillic_e, Cyrillic_E ] }; + key { [ Cyrillic_o, Cyrillic_O, Cyrillic_io, Cyrillic_IO ] }; + key { [ 0x010004D5, 0x010004D4 ] }; +}; + +partial alphanumeric_keys +xkb_symbols "os_winkeys" { + include "ru(winkeys)" + + name[Group1]= "Ossetian (WinKeys)"; + + key { [ Cyrillic_e, Cyrillic_E ] }; + key { [ Cyrillic_o, Cyrillic_O, Cyrillic_io, Cyrillic_IO ] }; + key { [ 0x010004D5, 0x010004D4 ] }; +}; + +partial alphanumeric_keys +xkb_symbols "cv" { + include "ru(winkeys)" + + name[Group1]= "Chuvash"; + + key.type[group1]="FOUR_LEVEL"; + + key { [ Cyrillic_u, Cyrillic_U, + 0x010004f3, 0x010004f2 ] }; + key { [ Cyrillic_ie, Cyrillic_IE, + 0x01000115, 0x01000114 ] }; + key { [ Cyrillic_a, Cyrillic_A, + abreve, Abreve ] }; + key { [ Cyrillic_es, Cyrillic_ES, + ccedilla, Ccedilla ] }; + + include "level3(ralt_switch)" +}; + +partial alphanumeric_keys +xkb_symbols "udm" { + include "ru(winkeys)" + + name[Group1]= "Udmurt"; + + key.type[group1]="FOUR_LEVEL"; + + key { [ question, exclam, 1, 1 ] }; + key { [ parenleft, quotedbl, 2, 2 ] }; + key { [ parenright, numerosign, 3, 3 ] }; + key { [ colon, semicolon, 4, 4 ] }; + key { [ asterisk, percent, 5, 5 ] }; + key { [ 0x010004dd, 0x010004dc, 6, 6 ] }; + key { [ 0x010004e7, 0x010004e6, 7, 7 ] }; + key { [ 0x010004f5, 0x010004f4, 8, 8 ] }; + key { [ 0x010004e5, 0x010004e4, 9, 9 ] }; + key { [ 0x010004df, 0x010004de, 0, 0 ] }; + + include "level3(ralt_switch)" +}; + +partial alphanumeric_keys +xkb_symbols "cv_latin" { + include "us(alt-intl)" + + name[Group1]= "Chuvash (Latin)"; + + key.type[group1]="FOUR_LEVEL"; + + key { [ q, Q, 0x01000161, 0x01000160 ] }; + key { [ w, W, udiaeresis, Udiaeresis ] }; + key { [ e, E, 0x01000115, 0x01000114 ] }; + key { [ u, U, udiaeresis, Udiaeresis ] }; + key { [ i, I, 0x0100012d, 0x0100012c ] }; + key { [ o, O, odiaeresis, Odiaeresis ] }; + key { [ a, A, abreve, Abreve ] }; + key { [ s, S, scedilla, Scedilla ] }; + key { [ g, G, gbreve, Gbreve ] }; + key { [ j, J, 0x01000131, 0x01000130 ] }; + key { [ c, C, ccedilla, Ccedilla ] }; + + include "level3(ralt_switch)" + +}; + +// Komi language layout +// based on +// russian standard keyboard +// Vlad Shakhov +// Last Changes 2007/10/23 by Vlad Shakhov + +partial alphanumeric_keys +xkb_symbols "kom" { + + include "ru(winkeys)" + + name[Group1]= "Komi"; + + key.type[group1]="FOUR_LEVEL_ALPHABETIC"; + +// cyrilllic o with diaeresis + key { [ Cyrillic_o, Cyrillic_O, + U04E7, U04E6 ] }; + +// hard I as additional key for soft Cyrillic_I + key { [ Cyrillic_i, Cyrillic_I, + Ukrainian_i, Ukrainian_I ] }; + + include "level3(ralt_switch)" +}; + +// Yakut language layout +// 2008/04/23 Yakov Aleksandrov +// 2008/04/23 Anatoliy Zhozhikov +// 2008/04/23 Aleksandr Varlamov +partial alphanumeric_keys +xkb_symbols "sah" { + + include "ru(winkeys)" + + name[Group1]= "Yakut"; + + key.type[group1]="FOUR_LEVEL_ALPHABETIC"; + + key { [ Cyrillic_io, Cyrillic_IO, + U04EB, U04EA ] }; + key { [ Cyrillic_shorti, Cyrillic_SHORTI, + U048B, U048A ] }; + key { [ Cyrillic_u, Cyrillic_U, + Cyrillic_u_straight, Cyrillic_U_straight ] }; + key { [ Cyrillic_ka, Cyrillic_KA, + U04C4, U04C3 ] }; + key { [ Cyrillic_en, Cyrillic_EN, + U04A5, U04A4 ] }; + key { [ Cyrillic_ghe, Cyrillic_GHE, + U0495, U0494 ] }; + key { [ Cyrillic_ze, Cyrillic_ZE, + U04E1, U04E0 ] }; + key { [ Cyrillic_ha, Cyrillic_HA, + Cyrillic_shha, Cyrillic_SHHA ] }; + key { [ Cyrillic_o, Cyrillic_O, + Cyrillic_o_bar, Cyrillic_O_bar ] }; + key { [ Cyrillic_zhe, Cyrillic_ZHE, + U0461, U0460 ] }; + key { [ Cyrillic_che, Cyrillic_CHE, + Cyrillic_u_macron, Cyrillic_U_macron ] }; + key { [ Cyrillic_em, Cyrillic_EM, + U04C8, U04C7 ] }; + key { [ Cyrillic_i, Cyrillic_I, + Cyrillic_i_macron, Cyrillic_I_macron ] }; + + include "level3(ralt_switch)" +}; + + +//Kalmyk language layout +//based on the Kalmyk language layout: http://soft.oyrat.org/ +//Nikolay Korneev +//Toli Miron + +partial alphanumeric_keys +xkb_symbols "xal" { + include "ru(winkeys)" + + name[Group1]= "Kalmyk"; + + key.type[group1]="FOUR_LEVEL"; + + key { [ question, exclam, 1 ] }; + key { [ numerosign, quotedbl, 2 ] }; + key { [ Cyrillic_u_straight, Cyrillic_U_straight, 3 ] }; + key { [ Cyrillic_schwa, Cyrillic_SCHWA, 4 ] }; + key { [ asterisk, percent, 5 ] }; + key { [ Cyrillic_en_descender, Cyrillic_EN_descender, 6 ] }; + key { [ Cyrillic_o_bar, Cyrillic_O_bar, 7 ] }; + key { [ Cyrillic_shha, Cyrillic_SHHA, 8 ] }; + key { [ Cyrillic_zhe_descender, Cyrillic_ZHE_descender, 9 ] }; + key { [ semicolon, colon, 0 ] }; + + key { [ parenleft, parenright, Cyrillic_io, Cyrillic_IO ] }; + + key { [ Cyrillic_tse, Cyrillic_TSE, dollar ] }; + key { [ Cyrillic_u, Cyrillic_U, EuroSign ] }; + key { [ Cyrillic_ka, Cyrillic_KA, registered ] }; + key { [ Cyrillic_ie, Cyrillic_IE, trademark ] }; + key { [ Cyrillic_ha, Cyrillic_HA, bracketleft ] }; + key { [ Cyrillic_hardsign, Cyrillic_HARDSIGN, bracketright ] }; + key { [ Cyrillic_e, Cyrillic_E, apostrophe ] }; + key { [ Cyrillic_es, Cyrillic_ES, copyright ] }; + key { [ Cyrillic_be, Cyrillic_BE, less ] }; + key { [ Cyrillic_yu, Cyrillic_YU, greater ] }; + + include "level3(ralt_switch)" +}; + +partial alphanumeric_keys +xkb_symbols "dos" { + + include "ru(common)" + + name[Group1]= "Russian (DOS)"; + + key { [ parenright, parenleft ] }; + key { [ 4, currency ] }; + key { [ 9, question ] }; + key { [ 0, percent ] }; + + key { [ Cyrillic_io, Cyrillic_IO ] }; +}; + +partial alphanumeric_keys +xkb_symbols "bak" { + include "ru(winkeys)" + + name[Group1]= "Bashkirian"; + key.type[group1]="FOUR_LEVEL"; + + key { [ 0x010004d9, 0x010004d8, Cyrillic_io, Cyrillic_IO ] }; + key { [ exclam, quotedbl, 1, 1 ] }; + key { [ 0x010004e9, 0x010004e8, 2, 2 ] }; + key { [ 0x010004a1, 0x010004a0, 3, 3 ] }; + key { [ 0x01000493, 0x01000492, 4, 4 ] }; + key { [ 0x010004ab, 0x010004aa, 5, 5 ] }; + key { [ colon, semicolon, 6, 6 ] }; + key { [ 0x01000499, 0x01000498, 7, 7 ] }; + key { [ 0x010004bb, 0x010004ba, 8, 8 ] }; + key { [ question, parenleft, 9, 9 ] }; + key { [ numerosign, parenright, 0, 0 ] }; + key { [ minus, percent, minus, underscore ]}; + key { [ 0x010004af, 0x010004ae, equal, plus ]}; + key { [ 0x010004a3, 0x010004a2, backslash, slash ]}; + + include "level3(ralt_switch)" +}; + +// Serbian charecters added as third level symbols to Russian keyboard layout. + +partial alphanumeric_keys +xkb_symbols "srp" { + include "ru(common)" + include "level3(ralt_switch)" + + name[Group1]= "Serbian (Russia)"; + + key { [ 3, numerosign ] }; + key { [ 4, semicolon ] }; + key { [ 5, percent ] }; + key { [ 6, colon ] }; + key { [ 7, question ] }; + key { [ 8, asterisk ] }; + key { [ period, comma ] }; + key { [ backslash, slash ] }; + key { [ Cyrillic_shorti, Cyrillic_SHORTI, U458, U408 ] }; + key { [ Cyrillic_en, Cyrillic_EN, U45A, U40A ] }; + key { [ Cyrillic_el, Cyrillic_EL, U459, U409 ] }; + key { [ Cyrillic_de, Cyrillic_DE, U45F, U40F ] }; + key { [ Cyrillic_zhe, Cyrillic_ZHE, U452, U402 ] }; + key { [ Cyrillic_che, Cyrillic_CHE, U45B, U40B ] }; +}; + +// Mari language layout +// based on Russian standard keyboard +// http://www.marlamuter.ru/ +partial alphanumeric_keys +xkb_symbols "chm" { + include "ru(common)" + + name[Group1]= "Mari"; + + key.type[group1]="FOUR_LEVEL_ALPHABETIC"; + key { [ Cyrillic_a, Cyrillic_A, U04D3, U04D2 ] }; + key { [ Cyrillic_u, Cyrillic_U, U04F1, U04F0 ] }; + key { [ Cyrillic_ui, Cyrillic_UI, U04F9, U04F8 ] }; + key { [ Cyrillic_n, Cyrillic_N, U04A5, U04A4 ] }; + key { [ Cyrillic_e, Cyrillic_E, U04E9, U04E8 ] }; + key { [ Cyrillic_zh, Cyrillic_ZH, U04EB, U04EA ] }; + key { [ Cyrillic_f, Cyrillic_F, UF537, UF536 ] }; + + include "level3(ralt_switch)" +}; + +// EXTRAS: + +// Church Slavonic language layout +// based on +// russian standard keyboard +// Aleksandr Andreev and Yuri Shardt +// Last Changes 2010/08/01. Contact + +partial alphanumeric_keys +xkb_symbols "chu" +{ + name[Group1]= "Church Slavonic"; + key { [ U0457, U0407, U0482, U20DD ] }; // ї Ї ҂ e.g: а⃝ where the last is a combining ten thousands sign + key { [ U0461, U0460, U047D, U047C] }; // Ñ¡ Ñ  ѽ Ѽ + key { [ U0454, U0404, U0465, U0464] }; // є Є Ñ¥ Ѥ + key { [ U046F, U046E, U0469, U0468] }; // ѯ Ñ® Ñ© Ѩ + key { [ U0471, U0470, U046D, U046C] }; // ѱ Ñ° Ñ­ Ѭ + key { [ U0473, U0472, UA657, UA656] }; // ѳ Ѳ iotified A + key { [ U0475, U0474, U0477, U0476] }; // ѵ Ñ´ Ñ· Ѷ + key { [ U047B, U047A, UA64D, UA64C] }; // Ñ» Ѻ ꙍ Ꙍ + key { [ U047F, U047E, U046B, U046A] }; // Ñ¿ Ѿ Ñ« Ѫ + key { [ U0455, U0405, parenleft, U002A ] }; // ѕ Ѕ ( * + key { [ Cyrillic_u, Cyrillic_U, parenright, U0488 ] }; // у У ) NB: for diagraph Ouk, use Cyrillic_o + Cyrillic_u + key { [ U0483, U0486, U0487, U005F] }; // а҃ а҆ а҇, _ (titlo, psili, pokrytie, underscore) + key { [ U0301, U0300, U0484, UA67E] }; // а̀ а́ а҄ ꙾ (oxia, varia, kamora, kavyka) + key { [ Cyrillic_shorti, Cyrillic_SHORTI, U0456 ] }; + key { [ Cyrillic_tse, Cyrillic_TSE, U2DF0 ] }; + key { [ UA64B, UA64A, U2DF9 ] }; // Cyrillic monograph Uk (not U)! + key { [ Cyrillic_ka, Cyrillic_KA, U2DE6 ] }; + key { [ Cyrillic_ie, Cyrillic_IE, U2DF7 ] }; + key { [ Cyrillic_en, Cyrillic_EN, U2DE9 ] }; + key { [ Cyrillic_ghe, Cyrillic_GHE, U2DE2 ] }; + key { [ Cyrillic_sha, Cyrillic_SHA, U2DF2 ] }; + key { [ Cyrillic_shcha, Cyrillic_SHCHA, U2DF3 ] }; + key { [ Cyrillic_ze, Cyrillic_ZE, U2DE5 ] }; + key { [ Cyrillic_ha, Cyrillic_HA, U2DEF ] }; + key { [Cyrillic_hardsign,Cyrillic_HARDSIGN, UA67D ] }; // Payerok + key { [backslash, slash, colon, question] }; // \ / : ? (note, for Slavonic question use semicolon + key { [ Cyrillic_ef, Cyrillic_EF ] }; + key { [ Cyrillic_yeru, Cyrillic_YERU ] }; + key { [ Cyrillic_ve, Cyrillic_VE, U2DE1 ] }; + key { [ Cyrillic_a, Cyrillic_A, U2DF6 ] }; + key { [ Cyrillic_pe, Cyrillic_PE, U2DEB ] }; + key { [ Cyrillic_er, Cyrillic_ER, U2DEC ] }; + key { [ Cyrillic_o, Cyrillic_O, U2DEA ] }; + key { [ Cyrillic_el, Cyrillic_EL, U2DE7 ] }; + key { [ Cyrillic_de, Cyrillic_DE, U2DE3 ] }; + key { [ Cyrillic_zhe, Cyrillic_ZHE, U2DE4 ] }; + key { [ U0463, U0462, U2DFA ] }; // Yat + key { [ U0467, U0466, U2DFD ] }; // Small Yus + key { [ Cyrillic_che, Cyrillic_CHE, U2DF1 ] }; + key { [ Cyrillic_es, Cyrillic_ES, U2DED ] }; + key { [ Cyrillic_em, Cyrillic_EM, U2DE8 ] }; + key { [ Cyrillic_i, Cyrillic_I ] }; + key { [ Cyrillic_te, Cyrillic_TE, U2DEE ] }; + key { [Cyrillic_softsign,Cyrillic_SOFTSIGN ] }; + key { [ Cyrillic_be, Cyrillic_BE, U2DE0 ] }; + key { [ Cyrillic_yu, Cyrillic_YU, U2DFB ] }; + key { [ period, comma, semicolon, exclam ] }; +}; + + +// RUU (Russian-Ukrainian United keyboard layout). +// Modified Russian standart keyboard with third level contains Ukrainian +// and Belorusian alphabetic letters and commonly used Unicode symbols. +// Description http://wiki.opennet.ru/RUU [russian] +// Vasyĺ V. Vercynśkyj +// Last Changes 2011/05/11 +// +// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓ +// │ ' ~ │ ! ≈ │ " ∞ │ № ₴ │ ; € │ % ‰ │ : ≤ │ ? ≥ │ * × │ ( { │ ) } │ _ – │ + ± ┃ ⌫ ┃ +// │ ’ ́ │ 1 ÷ │ 2 ¤ │ 3 § │ 4 $ │ 5 ° │ 6 < │ 7 > │ 8 • │ 9 [ │ 0 ] │ - — │ = ≠ ┃Backspace┃ +// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫ +// ┃ ┃ Й │ Ц │ У Ў │ К │ Е Ё │ Н │ Г Ґ │ Ш │ Щ │ З │ Ð¥ │ Ъ Ї ┃ Enter ┃ +// ┃ Tab ↹ ┃ й │ ц │ у ў │ к ® │ е ё │ н │ г ґ │ ш │ щ │ з │ х │ ъ ї ┃ ⏎ ┃ +// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃ +// ┃ Caps ┃ Ф │ Ы І │ В │ А │ П │ Р │ О │ Л │ Д │ Ж │ Э Є │ | ¦ ┃ ┃ +// ┃ Lock ⇬ ┃ ф │ ы і │ в │ а │ п │ р │ о │ л │ д │ ж │ э є │ / \ ┃ ┃ +// ┣━━━━━━━━┻━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┲━━━┷━━━━━┻━━━━━━┫ +// ┃ ┃ Я │ Ч │ С │ М │ И │ Т │ Ь │ Б „ │ Ю “ │ , … ┃ ┃ +// ┃ Shift ⇧ ┃ я │ ч │ с © │ м │ и │ т ™ │ ь µ │ б « │ ю » │ . / ┃ Shift ⇧ ┃ +// ┣━━━━━━━┳━━┻━━━━┳┷━━━━━┷┱────┴─────┴─────┴─────┴─────┴─────┴┲━━━━┷━━┳━━┻━━━━┳━━━━━━━┳━━━┛ +// ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ +// ┃ Ctrl ┃ Meta ┃ Alt ┃ Space ┃AltGr ⇮┃ Menu ┃ Ctrl ┃ +// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛ + + + +partial alphanumeric_keys +xkb_symbols "ruu" { + include "ru(common)" + + name[Group1]= "Russian (with Ukrainian-Belorussian layout)"; + + key { [ U2019, apostrophe, U0301, asciitilde ] }; // Apostrophe and Stress symbol + key { [ 1, exclam, U00F7, U2248 ] }; // Division Sign and Almost Equal To + key { [ 2, quotedbl, currency, infinity ] }; + key { [ 3, numerosign, U00A7, U20B4 ] }; // Paragraph and Hryvnia sign + key { [ 4, semicolon, dollar, EuroSign ] }; + key { [ 5, percent, degree, U2030 ] }; // Per Mille Sign + key { [ 6, colon, less, U2264 ] }; // Less-Than Or Equal To + key { [ 7, question, greater, U2265 ] }; // Greater-Than Or Equal To + key { [ 8, asterisk, enfilledcircbullet, U00D7 ] }; // Multiplication Sign + key { [ 9, parenleft, bracketleft, braceleft ] }; + key { [ 0, parenright, bracketright, braceright ] }; + key { [ minus, underscore, emdash, endash ] }; + key { [ equal, plus, notequal, plusminus ] }; + key { [ Cyrillic_u, Cyrillic_U, Byelorussian_shortu, Byelorussian_SHORTU ] }; + key { [ Cyrillic_ka, Cyrillic_KA, registered ] }; // Registered tm + key { [ Cyrillic_ie, Cyrillic_IE, Cyrillic_io, Cyrillic_IO ] }; + key { [Cyrillic_ge, Cyrillic_GE, Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] }; + key { [ Cyrillic_ze, Cyrillic_ZE, U00B6 ] }; // Pilcrow Sign + key { [Cyrillic_hardsign, Cyrillic_HARDSIGN, Ukrainian_yi, Ukrainian_YI ] }; + key { [ Cyrillic_yeru, Cyrillic_YERU, Ukrainian_i, Ukrainian_I ] }; + key { [ Cyrillic_e, Cyrillic_E, Ukrainian_ie,Ukrainian_IE ] }; + key { [ slash, bar, backslash, U00A6 ] }; // Broken Bar + key { [ Cyrillic_es, Cyrillic_ES, copyright ] }; + key { [ Cyrillic_te, Cyrillic_TE, trademark ] }; + key { [ Cyrillic_softsign, Cyrillic_SOFTSIGN, U00B5 ] }; // Micro Sign + key { [ Cyrillic_be, Cyrillic_BE, guillemotleft, doublelowquotemark ] }; + key { [ Cyrillic_yu, Cyrillic_YU, guillemotright, leftdoublequotemark ] }; + key { [ period, comma, slash, ellipsis ] }; + + include "level3(ralt_switch)" +}; diff --git a/test/data/symbols/shift b/test/data/symbols/shift new file mode 100644 index 0000000..6fbec5b --- /dev/null +++ b/test/data/symbols/shift @@ -0,0 +1,84 @@ +partial modifier_keys +xkb_symbols "breaks_caps" { + key { + type = "ALPHABETIC", + actions [Group1] = [ + SetMods(modifiers=Shift), + SetMods(modifiers=Shift+Lock,clearLocks) + ] + }; + key { + type = "ALPHABETIC", + actions [Group1] = [ + SetMods(modifiers=Shift), + SetMods(modifiers=Shift+Lock,clearLocks) + ] + }; +}; + +// When pressed together with another Shift key, set/release Lock. +partial modifier_keys +xkb_symbols "lshift_both_capslock" { + key { + type[Group1]="TWO_LEVEL", + symbols[Group1] = [ Shift_L, Caps_Lock ] + }; +}; +// When pressed together with another Shift key, set or unset Lock. +partial modifier_keys +xkb_symbols "rshift_both_capslock" { + key { + type[Group1]="TWO_LEVEL", + symbols[Group1] = [ Shift_R, Caps_Lock ] + }; +}; +partial modifier_keys +xkb_symbols "both_capslock" { + include "shift(lshift_both_capslock)" + include "shift(rshift_both_capslock)" +}; + +// Release Lock when pressed alone and set Lock when pressed with another Shift key. +partial modifier_keys +xkb_symbols "lshift_both_capslock_cancel" { + key { + type[Group1]="ALPHABETIC", + symbols[Group1] = [ Shift_L, Caps_Lock ] + }; +}; +// Release Lock when pressed alone and set Lock when pressed with another Shift key. +partial modifier_keys +xkb_symbols "rshift_both_capslock_cancel" { + key { + type[Group1]="ALPHABETIC", + symbols[Group1] = [ Shift_R, Caps_Lock ] + }; +}; +partial modifier_keys +xkb_symbols "both_capslock_cancel" { + include "shift(lshift_both_capslock_cancel)" + include "shift(rshift_both_capslock_cancel)" +}; + + +// When pressed together with another Shift key, lock/unlock Shift. +partial modifier_keys +xkb_symbols "lshift_both_shiftlock" { + key { + type[Group1]="TWO_LEVEL", + symbols[Group1] = [ Shift_L, Shift_Lock ] + }; +}; +// When pressed together with another Shift key, lock/unlock Shift. +partial modifier_keys +xkb_symbols "rshift_both_shiftlock" { + key { + type[Group1]="TWO_LEVEL", + symbols[Group1] = [ Shift_R, Shift_Lock ] + }; +}; +partial modifier_keys +xkb_symbols "both_shiftlock" { + include "shift(lshift_both_shiftlock)" + include "shift(rshift_both_shiftlock)" +}; diff --git a/test/data/symbols/srvr_ctrl b/test/data/symbols/srvr_ctrl new file mode 100644 index 0000000..73b5af2 --- /dev/null +++ b/test/data/symbols/srvr_ctrl @@ -0,0 +1,125 @@ +// Actions which control the server's behavior + +partial keypad_keys function_keys +xkb_symbols "xfree86" { + include "srvr_ctrl(stdkeypad)" + include "srvr_ctrl(fkey2vt)" +}; + +partial keypad_keys +xkb_symbols "stdkeypad" { + +// Ungrab cancels server/keyboard/pointer grabs + key { + type="CTRL+ALT", + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86_Ungrab ] + }; + +// ClsGrb kills whichever client has a grab in effect + key { + type="CTRL+ALT", + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86_ClearGrab ] + }; + +// -VMode switches to the previous video mode + key { + type="CTRL+ALT", + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86_Prev_VMode ] + }; + +// +VMode switches to the next video mode + key { + type="CTRL+ALT", + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86_Next_VMode] + }; + +}; + +partial function_keys +xkb_symbols "fkey2vt" { + + key { + type="CTRL+ALT", + symbols[Group1]= [ F1, F1, F1, F1, XF86_Switch_VT_1 ] + }; + + key { + type="CTRL+ALT", + symbols[Group1]= [ F2, F2, F2, F2, XF86_Switch_VT_2 ] + }; + + key { + type="CTRL+ALT", + symbols[Group1]= [ F3, F3, F3, F3, XF86_Switch_VT_3 ] + }; + + key { + type="CTRL+ALT", + symbols[Group1]= [ F4, F4, F4, F4, XF86_Switch_VT_4 ] + }; + + key { + type="CTRL+ALT", + symbols[Group1]= [ F5, F5, F5, F5, XF86_Switch_VT_5 ] + }; + + key { + type="CTRL+ALT", + symbols[Group1]= [ F6, F6, F6, F6, XF86_Switch_VT_6 ] + }; + + key { + type="CTRL+ALT", + symbols[Group1]= [ F7, F7, F7, F7, XF86_Switch_VT_7 ] + }; + + key { + type="CTRL+ALT", + symbols[Group1]= [ F8, F8, F8, F8, XF86_Switch_VT_8 ] + }; + + key { + type="CTRL+ALT", + symbols[Group1]= [ F9, F9, F9, F9, XF86_Switch_VT_9 ] + }; + + key { + type="CTRL+ALT", + symbols[Group1]= [ F10, F10, F10, F10, XF86_Switch_VT_10 ] + }; + + key { + type="CTRL+ALT", + symbols[Group1]= [ F11, F11, F11, F11, XF86_Switch_VT_11 ] + }; + + key { + type="CTRL+ALT", + symbols[Group1]= [ F12, F12, F12, F12, XF86_Switch_VT_12 ] + }; + +}; + +partial function_keys keypad_keys +xkb_symbols "no_srvr_keys" { + + key.type="TWO_LEVEL"; + + key { [ F1, F1 ] }; + key { [ F2, F2 ] }; + key { [ F3, F3 ] }; + key { [ F4, F4 ] }; + key { [ F5, F5 ] }; + key { [ F6, F6 ] }; + key { [ F7, F7 ] }; + key { [ F8, F8 ] }; + key { [ F9, F9 ] }; + key { [ F10, F10 ] }; + key { [ F11, F11 ] }; + key { [ F12, F12 ] }; + + key { [ KP_Divide, KP_Divide ] }; + key { [ KP_Multiply, KP_Multiply ] }; + key { [ KP_Subtract, KP_Subtract ] }; + key { [ KP_Add, KP_Add ] }; +}; diff --git a/test/data/symbols/terminate b/test/data/symbols/terminate new file mode 100644 index 0000000..c74220b --- /dev/null +++ b/test/data/symbols/terminate @@ -0,0 +1,7 @@ +partial default modifier_keys +xkb_symbols "ctrl_alt_bksp" { + key { + type="CTRL+ALT", + symbols[Group1] = [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, Terminate_Server ] + }; +}; diff --git a/test/data/symbols/us b/test/data/symbols/us new file mode 100644 index 0000000..7c3ee24 --- /dev/null +++ b/test/data/symbols/us @@ -0,0 +1,1337 @@ +default +partial alphanumeric_keys modifier_keys +xkb_symbols "basic" { + + name[Group1]= "English (US)"; + + // Alphanumeric section + key { [ grave, asciitilde ] }; + key { [ 1, exclam ] }; + key { [ 2, at ] }; + key { [ 3, numbersign ] }; + key { [ 4, dollar ] }; + key { [ 5, percent ] }; + key { [ 6, asciicircum ] }; + key { [ 7, ampersand ] }; + key { [ 8, asterisk ] }; + key { [ 9, parenleft ] }; + key { [ 0, parenright ] }; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + + key { [ q, Q ] }; + key { [ w, W ] }; + key { [ e, E ] }; + key { [ r, R ] }; + key { [ t, T ] }; + key { [ y, Y ] }; + key { [ u, U ] }; + key { [ i, I ] }; + key { [ o, O ] }; + key { [ p, P ] }; + key { [ bracketleft, braceleft ] }; + key { [ bracketright, braceright ] }; + + key { [ a, A ] }; + key { [ s, S ] }; + key { [ d, D ] }; + key { [ f, F ] }; + key { [ g, G ] }; + key { [ h, H ] }; + key { [ j, J ] }; + key { [ k, K ] }; + key { [ l, L ] }; + key { [ semicolon, colon ] }; + key { [ apostrophe, quotedbl ] }; + + key { [ z, Z ] }; + key { [ x, X ] }; + key { [ c, C ] }; + key { [ v, V ] }; + key { [ b, B ] }; + key { [ n, N ] }; + key { [ m, M ] }; + key { [ comma, less ] }; + key { [ period, greater ] }; + key { [ slash, question ] }; + + key { [ backslash, bar ] }; + // End alphanumeric section +}; + +partial alphanumeric_keys +xkb_symbols "euro" { + + name[Group1]= "English (US, with euro on 5)"; + + include "us(basic)" + + include "eurosign(5)" + + include "level3(ralt_switch)" +}; + + +partial alphanumeric_keys +xkb_symbols "intl" { + + name[Group1]= "English (US, international with dead keys)"; + + include "us(basic)" + + // Alphanumeric section + key { [dead_grave, dead_tilde, grave, asciitilde ] }; + key { [ 1, exclam, exclamdown, onesuperior ] }; + key { [ 2, at, twosuperior, dead_doubleacute ] }; + key { [ 3, numbersign, threesuperior, dead_macron ] }; + key { [ 4, dollar, currency, sterling ] }; + key { [ 5, percent, EuroSign, dead_cedilla ] }; + key { [ 6, dead_circumflex, onequarter, asciicircum ] }; + key { [ 7, ampersand, onehalf, dead_horn ] }; + key { [ 8, asterisk, threequarters, dead_ogonek ] }; + key { [ 9, parenleft, leftsinglequotemark, dead_breve ] }; + key { [ 0, parenright, rightsinglequotemark, dead_abovering ] }; + key { [ minus, underscore, yen, dead_belowdot ] }; + key { [ equal, plus, multiply, division ] }; + + key { [ q, Q, adiaeresis, Adiaeresis ] }; + key { [ w, W, aring, Aring ] }; + key { [ e, E, eacute, Eacute ] }; + key { [ r, R, registered, registered ] }; + key { [ t, T, thorn, THORN ] }; + key { [ y, Y, udiaeresis, Udiaeresis ] }; + key { [ u, U, uacute, Uacute ] }; + key { [ i, I, iacute, Iacute ] }; + key { [ o, O, oacute, Oacute ] }; + key { [ p, P, odiaeresis, Odiaeresis ] }; + key { [ bracketleft, braceleft, guillemotleft, leftdoublequotemark ] }; + key { [bracketright, braceright, guillemotright, rightdoublequotemark ] }; + + key { [ a, A, aacute, Aacute ] }; + key { [ s, S, ssharp, section ] }; + key { [ d, D, eth, ETH ] }; + key { [ f, F, f, F ] }; + key { [ g, G, g, G ] }; + key { [ h, H, h, H ] }; + key { [ j, J, j, J ] }; + key { [ k, K, oe, OE ] }; + + key { [ l, L, oslash, Ooblique ] }; + key { [ semicolon, colon, paragraph, degree ] }; + key { [dead_acute, dead_diaeresis, apostrophe, quotedbl ] }; + + key { [ z, Z, ae, AE ] }; + key { [ x, X, x, X ] }; + key { [ c, C, copyright, cent ] }; + key { [ v, V, v, V ] }; + key { [ b, B, b, B ] }; + key { [ n, N, ntilde, Ntilde ] }; + key { [ m, M, mu, mu ] }; + key { [ comma, less, ccedilla, Ccedilla ] }; + key { [ period, greater, dead_abovedot, dead_caron ] }; + key { [ slash, question, questiondown, dead_hook ] }; + key { [ backslash, bar, notsign, brokenbar ] }; + + include "level3(ralt_switch)" +}; + +// Based on symbols/us_intl keyboard map: +// Dead-keys definition for a very simple US/ASCII layout. +// by Conectiva (http://www.conectiva.com.br) +// modified by Ricardo Y. Igarashi (iga@that.com.br) + +// Added the following deadkeys, to make it truly international: +// +// dead_macron: on AltGr-minus +// dead_breve: on AltGr-parenleft +// dead_abovedot: on AltGr-period +// dead_abovering: on AltGr-0 +// dead_doubleacute: on AltGr-equal (as quotedbl is already used) +// dead_caron: on AltGr-less (AltGr-shift-comma) +// dead_cedilla: on AltGr-comma +// dead_ogonek: on AltGr-semicolon +// dead_belowdot: on AltGr-underscore (AltGr-shift-minus) +// dead_hook: on AltGr-question +// dead_horn: on AltGr-plus (AltGr-shift-equal) +// dead_diaeresis: on AltGr-colon (Alt-shift-semicolon) +// +// those were already there: +// dead_grave +// dead_acute +// dead_circumflex +// dead_tilde +// dead_diaeresis + +partial alphanumeric_keys +xkb_symbols "alt-intl" { + + name[Group1]= "English (US, alternative international)"; + + include "us" + + key { [ dead_grave, dead_tilde, grave, asciitilde ] }; + key { [ 5, percent, EuroSign ] }; + key { [ 6, dead_circumflex, asciicircum, asciicircum ] }; + key { [ 9, parenleft, leftsinglequotemark, dead_breve ] }; + key { [ 0, parenright, rightsinglequotemark, dead_abovering ] }; + key { [ minus, underscore, dead_macron, dead_belowdot ] }; + key { [ equal, plus, dead_doubleacute, dead_horn ] }; + + key { [ e, E, EuroSign, cent ] }; + + key { [ semicolon, colon, dead_ogonek, dead_diaeresis ] }; + key { [ dead_acute, dead_diaeresis, apostrophe, quotedbl ] }; + + key { [ comma, less, dead_cedilla, dead_caron ] }; + key { [ period, greater, dead_abovedot, dead_circumflex ] }; + key { [ slash, question, dead_hook, dead_hook ] }; + + include "level3(ralt_switch)" +}; + +// based on a keyboard map from an 'xkb/symbols/dk' file + +partial alphanumeric_keys +xkb_symbols "dvorak" { + + name[Group1]= "English (Dvorak)"; + + // Alphanumeric section + + key { [ grave, asciitilde, dead_grave, dead_tilde ] }; + + key { [ 1, exclam ] }; + key { [ 2, at ] }; + key { [ 3, numbersign ] }; + key { [ 4, dollar ] }; + key { [ 5, percent ] }; + key { [ 6, asciicircum, dead_circumflex, dead_circumflex ] }; + key { [ 7, ampersand ] }; + key { [ 8, asterisk ] }; + key { [ 9, parenleft, dead_grave] }; + key { [ 0, parenright ] }; + key { [ bracketleft, braceleft ] }; + key { [ bracketright, braceright, dead_tilde] }; + + key { [ apostrophe, quotedbl, dead_acute, dead_diaeresis ] }; + key { [ comma, less, dead_cedilla, dead_caron ] }; + key { [ period, greater, dead_abovedot, periodcentered ] }; + key { [ p, P ] }; + key { [ y, Y ] }; + key { [ f, F ] }; + key { [ g, G ] }; + key { [ c, C ] }; + key { [ r, R ] }; + key { [ l, L ] }; + key { [ slash, question ] }; + key { [ equal, plus ] }; + + key { [ a, A ] }; + key { [ o, O ] }; + key { [ e, E ] }; + key { [ u, U ] }; + key { [ i, I ] }; + key { [ d, D ] }; + key { [ h, H ] }; + key { [ t, T ] }; + key { [ n, N ] }; + key { [ s, S ] }; + key { [ minus, underscore ] }; + + key { [ semicolon, colon, dead_ogonek, dead_doubleacute ] }; + key { [ q, Q ] }; + key { [ j, J ] }; + key { [ k, K ] }; + key { [ x, X ] }; + key { [ b, B ] }; + key { [ m, M ] }; + key { [ w, W ] }; + key { [ v, V ] }; + key { [ z, Z ] }; + + key { [ backslash, bar ] }; +}; + +// Dvorak international with dead keys +// Olivier Mehani (shtrom-xorg@ssji.net) +// Reproduce the per-key mapping of us(intl) for the dvorak layout +// aka "I just swapped my keys over" +partial alphanumeric_keys +xkb_symbols "dvorak-intl" { + + name[Group1]= "English (Dvorak international with dead keys)"; + + include "us(dvorak)" + + key { [dead_grave, dead_tilde, grave, asciitilde ] }; + + key { [ 1, exclam, exclamdown, onesuperior ] }; + key { [ 2, at, twosuperior, dead_doubleacute ] }; + key { [ 3, numbersign, threesuperior, dead_macron ] }; + key { [ 4, dollar, currency, sterling ] }; + key { [ 5, percent, EuroSign, dead_cedilla ] }; + key { [ 6, dead_circumflex, onequarter, asciicircum ] }; + key { [ 7, ampersand, onehalf, dead_horn ] }; + key { [ 8, asterisk, threequarters, dead_ogonek ] }; + key { [ 9, parenleft, leftsinglequotemark, dead_breve ] }; + key { [ 0, parenright, rightsinglequotemark, dead_abovering ] }; + key { [ bracketleft, braceleft, guillemotleft, leftdoublequotemark ] }; + key { [bracketright, braceright, guillemotright, rightdoublequotemark ] }; + + key { [dead_acute, dead_diaeresis, apostrophe, quotedbl ] }; + key { [ comma, less, ccedilla, Ccedilla ] }; + key { [ period, greater, dead_abovedot, dead_caron ] }; + key { [ p, P, odiaeresis, Odiaeresis ] }; + key { [ y, Y, udiaeresis, Udiaeresis ] }; + // key { [ f, F ] }; + // key { [ g, G ] }; + key { [ c, C, copyright, cent ] }; + key { [ r, R, registered, registered ] }; + key { [ l, L, oslash, Ooblique ] }; + key { [ slash, question, questiondown, dead_hook ] }; + // key { [ equal, plus, multiply, division ] }; + + key { [ a, A, aacute, Aacute ] }; + key { [ o, O, oacute, Oacute ] }; + key { [ e, E, eacute, Eacute ] }; + key { [ u, U, uacute, Uacute ] }; + key { [ i, I, iacute, Iacute ] }; + key { [ d, D, eth, ETH ] }; + // key { [ h, H ] }; + key { [ t, T, thorn, THORN ] }; + key { [ n, N, ntilde, Ntilde ] }; + key { [ s, S, ssharp, section ] }; + // key { [ minus, underscore, yen, dead_belowdot ] }; + + key { [ semicolon, colon, paragraph, degree ] }; + key { [ q, Q, adiaeresis, Adiaeresis ] }; + // key { [ j, J ] }; + key { [ k, K, oe, OE ] }; + // key { [ x, X ] }; + // key { [ b, B ] }; + key { [ m, M, mu, mu ] }; + key { [ w, W, aring, Aring ] }; + // key { [ v, V ] }; + key { [ z, Z, ae, AE ] }; + + key { [ backslash, bar, notsign, brokenbar ] }; + + include "level3(ralt_switch)" +}; + +// Dvorak international without dead keys +// Stephane Magnenat (stephane at magnenat dot net, http://stephane.magnenat.net) +// Based on information from http://www.poupinou.org/dvorak/index.html +// +// ` 1 2 3 4 5 6 7 8 9 0 [ ] \ +// € +// +// ' , . p y f g c r l / = +// ä ê ë ü ç +// +// a o e u i d h t n s - +// à ô é û î ß +// +// ; q j k x b m w v z +// â ö è ù ï + +partial alphanumeric_keys +xkb_symbols "dvorak-alt-intl" { + + name[Group1]= "English (Dvorak alternative international no dead keys)"; + + include "us(dvorak)" + + key { [ 4, dollar, EuroSign ] }; + + key { [ comma, less, adiaeresis, dead_caron ] }; + key { [ period, greater, ecircumflex, periodcentered ] }; + key { [ p, P, ediaeresis, dead_cedilla ] }; + key { [ y, Y, udiaeresis ] }; + key { [ c, C, ccedilla, dead_abovedot ] }; + + key { [ a, A, agrave ] }; + key { [ o, O, ocircumflex ] }; + key { [ e, E, eacute ] }; + key { [ u, U, ucircumflex ] }; + key { [ i, I, icircumflex ] }; + key { [ s, S, ssharp ] }; + + key { [ semicolon, colon, acircumflex ] }; + key { [ q, Q, odiaeresis, dead_ogonek ] }; + key { [ j, J, egrave, dead_doubleacute ] }; + key { [ k, K, ugrave ] }; + key { [ x, X, idiaeresis ] }; + + include "level3(ralt_switch)" +}; + +// Left and right handed dvorak layouts +// by sqweek 2006-01-30 +// Based on the corresponding layouts in the console-tools package. +partial alphanumeric_keys +xkb_symbols "dvorak-l" { + + include "us(dvorak)" + name[Group1]= "English (left handed Dvorak)"; + + key { [ bracketleft, braceleft ] }; + key { [ bracketright, braceright ] }; + key { [ slash, question ] }; + key { [ p, P ] }; + key { [ f, F ] }; + key { [ m, M ] }; + key { [ l, L ] }; + key { [ j, J ] }; + key { [ 4, dollar ] }; + key { [ 3, numbersign ] }; + key { [ 2, at ] }; + key { [ 1, exclam ] }; + + key { [ semicolon, colon ] }; + key { [ q, Q ] }; + key { [ b, B ] }; + key { [ y, Y ] }; + key { [ u, U ] }; + key { [ r, R ] }; + key { [ s, S ] }; + key { [ o, O ] }; + key { [ period, greater ] }; + key { [ 6, asciicircum ] }; + key { [ 5, percent ] }; + key { [ equal, plus ] }; + + key { [ minus, underscore ] }; + key { [ k, K ] }; + key { [ c, C ] }; + key { [ d, D ] }; + key { [ t, T ] }; + key { [ h, H ] }; + key { [ e, E ] }; + key { [ a, A ] }; + key { [ z, Z ] }; + key { [ 8, asterisk ] }; + key { [ 7, ampersand ] }; + + key { [ apostrophe, quotedbl ] }; + key { [ x, X ] }; + key { [ g, G ] }; + key { [ v, V ] }; + key { [ w, W ] }; + key { [ n, N ] }; + key { [ i, I ] }; + key { [ comma, less ] }; + key { [ 0, parenright ] }; + key { [ 9, parenleft ] }; +}; + +partial alphanumeric_keys +xkb_symbols "dvorak-r" { + + include "us(dvorak)" + name[Group1]= "English (right handed Dvorak)"; + + key { [ 1, exclam ] }; + key { [ 2, at ] }; + key { [ 3, numbersign ] }; + key { [ 4, dollar ] }; + key { [ j, J ] }; + key { [ l, L ] }; + key { [ m, M ] }; + key { [ f, F ] }; + key { [ p, P ] }; + key { [ slash, question ] }; + key { [ bracketleft, braceleft ] }; + key { [ bracketright, braceright ] }; + + key { [ 5, percent ] }; + key { [ 6, asciicircum ] }; + key { [ q, Q ] }; + key { [ period, greater ] }; + key { [ o, O ] }; + key { [ r, R ] }; + key { [ s, S ] }; + key { [ u, U ] }; + key { [ y, Y ] }; + key { [ b, B ] }; + key { [ semicolon, colon ] }; + key { [ equal, plus ] }; + + key { [ 7, ampersand ] }; + key { [ 8, asterisk ] }; + key { [ z, Z ] }; + key { [ a, A ] }; + key { [ e, E ] }; + key { [ h, H ] }; + key { [ t, T ] }; + key { [ d, D ] }; + key { [ c, C ] }; + key { [ k, K ] }; + key { [ minus, underscore ] }; + + key { [ 9, parenleft ] }; + key { [ 0, parenright ] }; + key { [ x, X ] }; + key { [ comma, less ] }; + key { [ i, I ] }; + key { [ n, N ] }; + key { [ w, W ] }; + key { [ v, V ] }; + key { [ g, G ] }; + key { [ apostrophe, quotedbl ] }; +}; + +// Classic dvorak layout +// by Piter Punk - 2006-07-06 +// Based on dvorak layout and e-mail from Russel L. Harris rlharris@oplink.net +// on xorg list. +partial alphanumeric_keys +xkb_symbols "dvorak-classic" { + + name[Group1]= "English (classic Dvorak)"; + + // Alphanumeric section + + key { [ grave, asciitilde, dead_grave, dead_tilde ] }; + + key { [ bracketleft, braceleft ] }; + key { [ 7, ampersand ] }; + key { [ 5, percent ] }; + key { [ 3, numbersign ] }; + key { [ 1, exclam ] }; + key { [ 9, parenleft, dead_grave] }; + key { [ 0, parenright ] }; + key { [ 2, at ] }; + key { [ 4, dollar ] }; + key { [ 6, asciicircum, dead_circumflex, dead_circumflex ] }; + key { [ 8, asterisk ] }; + key { [ bracketright, braceright, dead_tilde] }; + + key { [ slash, question ] }; + key { [ comma, less, dead_cedilla, dead_caron ] }; + key { [ period, greater, dead_abovedot, periodcentered ] }; + key { [ p, P ] }; + key { [ y, Y ] }; + key { [ f, F ] }; + key { [ g, G ] }; + key { [ c, C ] }; + key { [ r, R ] }; + key { [ l, L ] }; + key { [ apostrophe, quotedbl, dead_acute, dead_diaeresis ] }; + key { [ equal, plus ] }; + + key { [ a, A ] }; + key { [ o, O ] }; + key { [ e, E ] }; + key { [ u, U ] }; + key { [ i, I ] }; + key { [ d, D ] }; + key { [ h, H ] }; + key { [ t, T ] }; + key { [ n, N ] }; + key { [ s, S ] }; + key { [ minus, underscore ] }; + + key { [ semicolon, colon, dead_ogonek, dead_doubleacute ] }; + key { [ q, Q ] }; + key { [ j, J ] }; + key { [ k, K ] }; + key { [ x, X ] }; + key { [ b, B ] }; + key { [ m, M ] }; + key { [ w, W ] }; + key { [ v, V ] }; + key { [ z, Z ] }; + key { [ backslash, bar ] }; +}; + +// Programmer Dvorak, by Roland Kaufmann +// License: BSD, available at +// Main features: Numbers are in shift position (like French), symbols have been +// placed in locations that give good hand-alternation and finger rolling with +// symbols that usually follows, accented characters are possible for I18N. +partial alphanumeric_keys +xkb_symbols "dvp" { + include "us(dvorak)" + + name[Group1] = "English (programmer Dvorak)"; + + // Unmodified Shift AltGr Shift+AltGr + // symbols row, left side + key { [ dollar, asciitilde, dead_tilde ] }; + key { [ ampersand, percent ] }; + key { [ bracketleft, 7, currency ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ braceleft, 5, cent ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ braceright, 3, yen ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ parenleft, 1, EuroSign ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ equal, 9, sterling ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + + // symbols row, right side + key { [ asterisk, 0 ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ parenright, 2, onehalf ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ plus, 4 ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ bracketright, 6 ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ exclam, 8, exclamdown ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ numbersign, grave, dead_grave ] }; + key { [ BackSpace, BackSpace ] }; + + // upper row, left side + key { [ semicolon, colon, dead_diaeresis ] }; + key { [ comma, less, guillemotleft ] }; + key { [ period, greater, guillemotright ] }; + key { [ p, P, paragraph, section ] }; + key { [ y, Y, udiaeresis, Udiaeresis ] }; + + // upper row, right side + key { [ c, C, ccedilla, Ccedilla ] }; + key { [ r, R, registered, trademark ] }; + key { [ slash, question, questiondown ] }; + key { [ at, asciicircum, dead_circumflex, dead_caron ] }; + + // home row, left side + key { [ a, A, aring, Aring ] }; + key { [ o, O, oslash, Ooblique ] }; + key { [ e, E, ae, AE ] }; + key { [ u, U, eacute, Eacute ] }; + + // home row, right side + key { [ d, D, eth, ETH ] }; + key { [ h, H, dead_acute ] }; + key { [ t, T, thorn, THORN ] }; + key { [ n, N, ntilde, Ntilde ] }; + key { [ s, S, ssharp ] }; + key { [ minus, underscore, hyphen ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ backslash, bar ] }; + + // lower row, left side + key { [ apostrophe, quotedbl, dead_acute ] }; +}; + +// phonetic layout for Russian letters on an US keyboard +// by Ivan Popov 2005-07-17 + +// level3 modifier is a shortcut to the "us" meaning of the keys where +// we place cyrillic letters, handy for accessing the corresponding +// punctuation marks. +// It is important to have access to punctuation marks, and the rest of +// alphabetical keys are added for being consequent so that the users +// can expect the level3 modifier to give what the key label shows. + +partial alphanumeric_keys +xkb_symbols "rus" { + + name[Group1]= "Russian (US, phonetic)"; + + include "us(basic)" + +key.type[group1]="FOUR_LEVEL_ALPHABETIC"; + + key { [ Cyrillic_a, Cyrillic_A ] }; + key { [ Cyrillic_be, Cyrillic_BE ] }; + key { [ Cyrillic_ve, Cyrillic_VE ] }; + key { [ Cyrillic_ghe, Cyrillic_GHE ] }; + key { [ Cyrillic_de, Cyrillic_DE ] }; + key { [ Cyrillic_ie, Cyrillic_IE ] }; + key { [ Cyrillic_io, Cyrillic_IO, grave, asciitilde ] }; + key { [ Cyrillic_zhe, Cyrillic_ZHE ] }; + key { [ Cyrillic_ze, Cyrillic_ZE ] }; + key { [ Cyrillic_i, Cyrillic_I ] }; + key { [ Cyrillic_shorti, Cyrillic_SHORTI ] }; + key { [ Cyrillic_ka, Cyrillic_KA ] }; + key { [ Cyrillic_el, Cyrillic_EL ] }; + key { [ Cyrillic_em, Cyrillic_EM ] }; + key { [ Cyrillic_en, Cyrillic_EN ] }; + key { [ Cyrillic_o, Cyrillic_O ] }; + key { [ Cyrillic_pe, Cyrillic_PE ] }; + key { [ Cyrillic_er, Cyrillic_ER ] }; + key { [ Cyrillic_es, Cyrillic_ES ] }; + key { [ Cyrillic_te, Cyrillic_TE ] }; + key { [ Cyrillic_u, Cyrillic_U ] }; + key { [ Cyrillic_ef, Cyrillic_EF ] }; + key { [ Cyrillic_ha, Cyrillic_HA ] }; + key { [ Cyrillic_tse, Cyrillic_TSE ] }; + key { [ Cyrillic_che, Cyrillic_CHE, semicolon, colon ] }; + key { [ Cyrillic_sha, Cyrillic_SHA, bracketleft, braceleft] }; + key { [ Cyrillic_shcha, Cyrillic_SHCHA, bracketright, braceright ] }; + key { [ Cyrillic_hardsign, Cyrillic_HARDSIGN, equal, plus ] }; + key { [ Cyrillic_yeru, Cyrillic_YERU ] }; + key { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] }; + key { [ Cyrillic_e, Cyrillic_E, backslash, bar ] }; + key { [ Cyrillic_yu, Cyrillic_YU, apostrophe, quotedbl ] }; + key { [ Cyrillic_ya, Cyrillic_YA ] }; + + include "level3(ralt_switch)" +}; + +partial alphanumeric_keys +xkb_symbols "mac" { + + include "us(basic)" + name[Group1]= "English (Macintosh)"; + key.type[group1]="FOUR_LEVEL"; + + // Slightly improvised from http://homepage.mac.com/thgewecke/kblayout.jpg + key { [ section, plusminus, section, plusminus ] }; + key { [ grave, asciitilde, dead_grave, dead_horn ] }; + key { [ 1, exclam, exclamdown, U2044 ] }; + key { [ 2, at, trademark, EuroSign ] }; + key { [ 3, numbersign, sterling, U2039 ] }; + key { [ 4, dollar, cent, U203A ] }; + key { [ 5, percent, infinity, UFB01 ] }; + key { [ 6,asciicircum, section, UFB02 ] }; + key { [ 7, ampersand, paragraph, doubledagger ] }; + key { [ 8, asterisk, enfilledcircbullet, degree ] }; + key { [ 9, parenleft, ordfeminine, periodcentered ] }; + key { [ 0, parenright, masculine,singlelowquotemark] }; + key { [ minus, underscore, endash, emdash ] }; + key { [ equal, plus, notequal, plusminus ] }; + + key { [ q, Q, oe, OE ] }; + key { [ w, W, U2211,doublelowquotemark] }; + key { [ e, E, dead_acute, acute ] }; + key { [ r, R, registered, U2030 ] }; + key { [ t, T, dagger, dead_caron ] }; + key { [ y, Y, yen, onequarter ] }; + key { [ u, U, dead_diaeresis, diaeresis ] }; + key { [ i, I, dead_circumflex, U02C6 ] }; + key { [ o, O, oslash, Ooblique ] }; + key { [ p, P, Greek_pi, U220F ] }; + key { [ bracketleft, braceleft, leftdoublequotemark, rightdoublequotemark ] }; + key { [bracketright, braceright, leftsinglequotemark, rightsinglequotemark ] }; + key { [ backslash, bar, guillemotleft, guillemotright ] }; + + key { [ a, A, aring, Aring ] }; + key { [ s, S, ssharp, dead_stroke ] }; + key { [ d, D, partialderivative, eth ] }; + key { [ f, F, function, dead_hook ] }; + key { [ g, G, copyright, dead_doubleacute ] }; + key { [ h, H, dead_abovedot, dead_belowdot ] }; + key { [ j, J, U2206, onehalf ] }; + key { [ k, K,dead_abovering, UF8FF ] }; + + key { [ l, L, notsign, THORN ] }; + key { [ semicolon, colon, U2026, thorn ] }; + key { [apostrophe, quotedbl, ae, AE ] }; + + key { [ z, Z, Greek_OMEGA, dead_cedilla ] }; + key { [ x, X, U2248, dead_ogonek ] }; + // unclear whether "approxeq" is 2248 or 2245 + key { [ c, C, ccedilla, Ccedilla ] }; + key { [ v, V, squareroot, U25CA ] }; + key { [ b, B, integral, idotless ] }; + key { [ n, N, dead_tilde, U02DC ] }; + key { [ m, M, mu, threequarters ] }; + key { [ comma, less, lessthanequal, dead_macron ] }; + key { [ period, greater, greaterthanequal, dead_breve ] }; + key { [ slash, question, division, questiondown ] }; + + include "level3(ralt_switch)" +}; + +// Colemak symbols for xkb on X.Org Server 7.x +// 2006-01-01 Shai Coleman, http://colemak.com/ . Public domain. + +partial alphanumeric_keys +xkb_symbols "colemak" { + include "us" + name[Group1]= "English (Colemak)"; + + // Alphanumeric section + key { [ grave, asciitilde, dead_tilde, asciitilde ] }; + key { [ 1, exclam, exclamdown, onesuperior ] }; + key { [ 2, at, masculine, twosuperior ] }; + key { [ 3, numbersign, ordfeminine, threesuperior ] }; + key { [ 4, dollar, cent, sterling ] }; + key { [ 5, percent, EuroSign, yen ] }; + key { [ 6, asciicircum, hstroke, Hstroke ] }; + key { [ 7, ampersand, eth, ETH ] }; + key { [ 8, asterisk, thorn, THORN ] }; + key { [ 9, parenleft, leftsinglequotemark, leftdoublequotemark ] }; + key { [ 0, parenright, rightsinglequotemark, rightdoublequotemark ] }; + key { [ minus, underscore, endash, emdash ] }; + key { [ equal, plus, multiply, division ] }; + + key { [ q, Q, adiaeresis, Adiaeresis ] }; + key { [ w, W, aring, Aring ] }; + key { [ f, F, atilde, Atilde ] }; + key { [ p, P, oslash, Ooblique ] }; + key { [ g, G, dead_ogonek, asciitilde ] }; + key { [ j, J, dstroke, Dstroke ] }; + key { [ l, L, lstroke, Lstroke ] }; + key { [ u, U, uacute, Uacute ] }; + key { [ y, Y, udiaeresis, Udiaeresis ] }; + key { [ semicolon, colon, odiaeresis, Odiaeresis ] }; + key { [ bracketleft, braceleft, guillemotleft, 0x1002039 ] }; + key { [ bracketright, braceright, guillemotright, 0x100203a ] }; + key { [ backslash, bar, asciitilde, asciitilde ] }; + + key { [ a, A, aacute, Aacute ] }; + key { [ r, R, dead_grave, asciitilde ] }; + key { [ s, S, ssharp, asciitilde ] }; + key { [ t, T, dead_acute, dead_doubleacute ] }; + key { [ d, D, dead_diaeresis, asciitilde ] }; + key { [ h, H, dead_caron, asciitilde ] }; + key { [ n, N, ntilde, Ntilde ] }; + key { [ e, E, eacute, Eacute ] }; + key { [ i, I, iacute, Iacute ] }; + key { [ o, O, oacute, Oacute ] }; + key { [ apostrophe, quotedbl, otilde, Otilde ] }; + + key { [ z, Z, ae, AE ] }; + key { [ x, X, dead_circumflex, asciitilde ] }; + key { [ c, C, ccedilla, Ccedilla ] }; + key { [ v, V, oe, OE ] }; + key { [ b, B, dead_breve, asciitilde ] }; + key { [ k, K, dead_abovering, asciitilde ] }; + key { [ m, M, dead_macron, asciitilde ] }; + key { [ comma, less, dead_cedilla, asciitilde ] }; + key { [ period, greater, dead_abovedot, asciitilde ] }; + key { [ slash, question, questiondown, asciitilde ] }; + + key { [ BackSpace, BackSpace, BackSpace, BackSpace ] }; + key { [ minus, underscore, endash, emdash ] }; + key { [ space, space, space, nobreakspace ] }; + + include "level3(ralt_switch)" +}; + +// I do NOT like dead-keys - the International keyboard as defined by Microsoft +// doesn't fit my needs. Why use two keystrokes for all simple characters (eg ' +// and generates a single ') just to have an é (eacute) in two strokes +// as well? I type ' more often than é (eacute). +// +// This file works just like a regular keyboard, BUT has all dead-keys +// accessible at level3 (through AltGr). An ë (ediaeresis) is now: AltGr+" +// followed by an e. In other words, this keyboard is not international as long +// as you leave the right Alt key alone. +// +// The original MS International keyboard was intended for Latin1 (iso8859-1). +// With the introduction of iso8859-15, the (important) ligature oe (and OE) +// became available. I added them next to ae. Because I write ediaeresis more +// often than registered, I moved registered to be next to copyright and added +// ediaeresis and idiaeresis. - Adriaan + +partial alphanumeric_keys +xkb_symbols "altgr-intl" { + + name[Group1]= "English (international AltGr dead keys)"; + + include "us(intl)" + +// five dead keys moved into level3: + + key { [ grave, asciitilde, dead_grave, dead_tilde ] }; + key { [apostrophe,quotedbl, dead_acute, dead_diaeresis ] }; + +// diversions from the MS Intl keyboard: + + key { [ 1, exclam, onesuperior, exclamdown ] }; + key { [ r, R, ediaeresis, Ediaeresis ] }; + key { [ j, J, idiaeresis, Idiaeresis ] }; + key { [ x, X, oe, OE ] }; + key { [ v, V, registered, registered ] }; + +// onequarter etc (not in iso8859-15) moved to get three unshifted deadkeys: + + key { [ 6, asciicircum, dead_circumflex, onequarter ] }; + key { [ 7, ampersand, dead_horn, onehalf ] }; + key { [ 8, asterisk, dead_ogonek, threequarters ] }; + + include "level3(ralt_switch)" +}; + +// Intel ClassmatePC Keyboard Layout +// by Piter PUNK +// +// The keyboard layouts below maps the us(basic), us(intl) and us(alt-intl) +// to ClassmatePC keyboard. All layouts uses RCTL as level3(switch) since +// the keyboard doesn't have AltGr key. The EuroSign is engraved at 5 key. + +// classmate - us(basic) +partial alphanumeric_keys +xkb_symbols "classmate" { + include "us(basic)" + name[Group1]= "USA - ClassmatePC"; + + key { [ backslash, bar, backslash, bar ] }; + + include "eurosign(5)" + include "level3(switch)" +}; + +// classmate-intl - us(intl) +// RCTL is generated by Fn+Alt, because that, when trying to access +// the level3 symbols at 7,8,9,0,u,i,o,p,j,k,l,;,m,. and / we got +// the keypad keycodes. The keypad is changed to make Fn+Alt+ +// generate the same symbol as the original key. +partial alphanumeric_keys +xkb_symbols "classmate-intl" { + include "us(intl)" + name[Group1]= "USA - ClassmatePC (International)"; + key.type[Group1]="FOUR_LEVEL"; + + key { [ backslash, bar, backslash, bar ] }; + + key { [ KP_Home, KP_7, + onehalf, dead_horn ] }; + key { [ KP_Up, KP_8, + threequarters, dead_ogonek ] }; + key { [ KP_Prior, KP_9, + leftsinglequotemark, dead_breve ] }; + key { [ KP_Multiply, KP_Multiply, + rightsinglequotemark, dead_abovering ] }; + + key { [ KP_Left, KP_4, + uacute, Uacute ] }; + key { [ KP_Begin, KP_5, + iacute, Iacute ] }; + key { [ KP_Right, KP_6, + oacute, Oacute ] }; + key { [ KP_Subtract, KP_Subtract, + odiaeresis, Odiaeresis ] }; + + key { [ KP_Down, KP_2, + oe, OE ] }; + key { [ KP_Next, KP_3, + oslash, Ooblique ] }; + key { [ KP_Add, KP_Add, + paragraph, degree ] }; + + key { [ KP_Insert, KP_0, + mu, mu ] }; + key { [ KP_Delete, KP_Decimal, + dead_abovedot, dead_caron ] }; + key { [ KP_Divide, KP_Divide, + questiondown, dead_hook ] }; + + include "level3(switch)" +}; + +// classmate-alt-intl - us(alt-intl) +// RCTL is generated by Fn+Alt, because that, when trying to access +// the level3 symbols at 7,8,9,0,u,i,o,p,j,k,l,;,m,. and / we got +// the keypad keycodes. The keypad is changed to make Fn+Alt+ +// generate the same symbol as the original key. +partial alphanumeric_keys +xkb_symbols "classmate-alt-intl" { + include "us(alt-intl)" + name[Group1]= "USA - ClassmatePC (Alternative international)"; + key.type[Group1]="FOUR_LEVEL"; + + key { [ backslash, bar, backslash, bar ] }; + + key { [ KP_Subtract, KP_Subtract ] }; + + key { [ KP_Prior, KP_9, + leftsinglequotemark, dead_breve ] }; + key { [ KP_Multiply, KP_Multiply, + rightsinglequotemark, dead_abovering ] }; + + key { [ KP_Add, KP_Add, + dead_ogonek, dead_diaeresis ] }; + + key { [ KP_Delete, KP_Decimal, + dead_abovedot, dead_circumflex ] }; + key { [ KP_Divide, KP_Divide, + dead_hook, dead_hook ] }; + + include "level3(switch)" +}; + +// classmate-altgr-intl - us(altgr-intl) +// RCTL is generated by Fn+Alt, because that, when trying to access +// the level3 symbols at 7,8,9,0,u,i,o,p,j,k,l,;,m,. and / we got +// the keypad keycodes. The keypad is changed to make Fn+Alt+ +// generate the same symbol as the original key. +partial alphanumeric_keys +xkb_symbols "classmate-altgr-intl" { + include "us(altgr-intl)" + name[Group1]= "USA - ClassmatePC (International Fn+Alt dead-keys)"; + key.type[Group1]="FOUR_LEVEL"; + + key { [ backslash, bar, backslash, bar ] }; + + key { [ KP_Home, KP_7, + dead_horn, dead_horn ] }; + key { [ KP_Up, KP_8, + dead_ogonek, dead_ogonek ] }; + key { [ KP_Prior, KP_9, + leftsinglequotemark, dead_breve ] }; + key { [ KP_Multiply, KP_Multiply, + rightsinglequotemark, dead_abovering ] }; + + key { [ KP_Left, KP_4, + uacute, Uacute ] }; + key { [ KP_Begin, KP_5, + iacute, Iacute ] }; + key { [ KP_Right, KP_6, + oacute, Oacute ] }; + key { [ KP_Subtract, KP_Subtract, + odiaeresis, Odiaeresis ] }; + + key { [ KP_End, KP_1, + idiaeresis, Idiaeresis ] }; + key { [ KP_Down, KP_2, + oe, OE ] }; + key { [ KP_Next, KP_3, + oslash, Ooblique ] }; + key { [ KP_Add, KP_Add, + paragraph, degree ] }; + + key { [ KP_Insert, KP_0, + mu, mu ] }; + key { [ KP_Delete, KP_Decimal, + dead_abovedot, dead_caron ] }; + key { [ KP_Divide, KP_Divide, + questiondown, dead_hook ] }; + + include "level3(switch)" +}; + +partial alphanumeric_keys +xkb_symbols "olpc" { + + include "us(basic)" + name[Group1]= "English (US)"; + + // OLPC international US English keyboard layout. + // It's a little different from the usual international layout. + // See: http://wiki.laptop.org/go/Image:Keyboard_english.png + + key { [ grave, asciitilde, dead_grave, dead_tilde ] }; + key { [ 1, exclam, exclamdown, exclamdown ] }; + key { [ 2, at, notsign, notsign ] }; + key { [ 3, numbersign, 0x1000300, 0x1000300 ] }; // combining grave + key { [ 4, dollar, 0x1000301, 0x1000301 ] }; // combining acute + key { [ 5, percent, 0x1000306, 0x1000306 ] }; // combining breve above + key { [ 6,asciicircum, 0x100030A, 0x100030A ] }; // combining ring above + key { [ 7, ampersand, 0x1000302, 0x1000302 ] }; // combining circumflex above + key { [ 8, asterisk, 0x100030C, 0x100030C ] }; // combining caron above + key { [ 9, parenleft, 0x1000307, 0x1000307 ] }; // combining dot above + key { [ 0, parenright, 0x1000308, 0x1000308 ] }; // combining diaeresis above + key { [ minus, underscore, 0x1000304, 0x1000304 ] }; // combining macron above + key { [ equal, plus, 0x1000303, 0x1000303 ] }; // combining tilde above + + key { [ q, Q, Greek_omega, Greek_OMEGA ] }; + key { [ w, W, oslash, Oslash ] }; + key { [ e, E, oe, OE ] }; + key { [ r, R, 0x1000327, 0x1000327 ] }; // combining cedilla + key { [ t, T, 0x100032E, 0x100032E ] }; // combining breve below + key { [ y, Y, 0x1000325, 0x1000325 ] }; // combining ring below + key { [ u, U, 0x100032D, 0x100032D ] }; // combining circumflex below + key { [ i, I, 0x100032C, 0x100032C ] }; // combining caron below + key { [ o, O, 0x1000323, 0x1000323 ] }; // combining dot below + key { [ p, P, 0x1000324, 0x1000324 ] }; // combining diaeresis below + key { [ bracketleft, braceleft, 0x1000331, 0x1000331 ] }; // combining macron below + key { [bracketright, braceright, 0x1000330, 0x1000330 ] }; // combining tilde below + + key { [ a, A, ae, AE ] }; + key { [ s, S, ssharp, 0x1001E9C ] }; // uppercase S sharp + key { [ d, D, eth, ETH ] }; + key { [ f, F, thorn, THORN ] }; + key { [ h, H, sterling, sterling ] }; + key { [ j, J, EuroSign, EuroSign ] }; + key { [ semicolon, colon, masculine, ordfeminine ] }; + key { [ apostrophe, quotedbl, currency, currency ] }; + key { [ backslash, bar, section, section ] }; + + key { [ c, C, ccedilla, Ccedilla ] }; + key { [ n, N, ntilde, Ntilde ] }; + key { [ m, M, mu, mu ] }; + key { [ comma, less, guillemotleft, guillemotleft ] }; + key { [ period, greater, guillemotright, guillemotright ] }; + key { [ slash, question, questiondown, questiondown ] }; + + key { [ multiply, division, ISO_Next_Group, ISO_Prev_Group ] }; + + include "level3(ralt_switch)" +}; + +partial alphanumeric_keys +xkb_symbols "olpc2" { + include "us(olpc)" + name[Group1]= "English (layout toggle on multiply/divide key)"; + include "group(olpc)" +}; + +// Based on Cherokee Nation Official Layout +// http://www.cherokee.org/extras/downloads/font/Keyboard.htm + +partial alphanumeric_keys modifier_keys +xkb_symbols "chr" { + + name[Group1]= "Cherokee"; + key.type[group1]="ALPHABETIC"; + + // Alphanumeric section + key { [ grave, U13CA ] }; + key { [ 1, U13B1 ] }; + key { [ 2, U13C7 ] }; + key { [ 3, U13E7 ] }; + key { [ U13D9, U13B0 ] }; + key { [ U13E6, U13B9 ] }; + key { [ U13DC, U13DD ] }; + key { [ U13CB, U13E1 ] }; + key { [ U13D6, U13BA ] }; + key { [ U13D2, parenleft ] }; + key { [ U13C4, parenright ] }; + key { [ U13BF, U13BC ] }; + key { [ U13F3, U13BD ] }; + + key { [ U13AA, U13C6 ] }; + key { [ U13B3, U13EB ] }; + key { [ U13A1, U13E3 ] }; + key { [ U13DB, U13CF ] }; + key { [ U13D4, U13D8 ] }; + key { [ U13EF, U13F2 ] }; + key { [ U13A4, U13AD ] }; + key { [ U13A2, U13F1 ] }; + key { [ U13A3, U13EC ] }; + key { [ U13C1, U13EA ] }; + key { [ U13D5, U13D1 ] }; + key { [ U13B6, U13E4 ] }; + key { [ U13E9, U13EE ] }; + + key { [ U13A0, U13CC ] }; + key { [ U13CD, U13CE ] }; + key { [ U13D7, U13D0 ] }; + key { [ U13A9, U13C8 ] }; + key { [ U13A6, U13E5 ] }; + key { [ U13AF, U13B2 ] }; + key { [ U13DA, U13AB ] }; + key { [ U13B8, U13A7 ] }; + key { [ U13B5, U13AE ] }; + key { [ U13E8, U13E0 ] }; + key { [ apostrophe, quotedbl ] }; + + key { [ U13AC, U13C3 ] }; + key { [ U13F4, U13ED ] }; + key { [ U13D3, U13DF ] }; + key { [ U13A5, U13DE ] }; + key { [ U13A8, U13F0 ] }; + key { [ U13BE, U13BB ] }; + key { [ U13C5, U13B7 ] }; + key { [ comma, U13E2 ] }; + key { [ period, U13B4 ] }; + key { [ U13C2, U13C9 ] }; + + // End alphanumeric section +}; + +// Serbian charecters added as third level symbols to US keyboard layout. + +partial alphanumeric_keys +xkb_symbols "hbs" { + + name[Group1]= "Serbo-Croatian (US)"; + + include "us" + + key { [ grave, asciitilde ] }; + key { [ 6, dead_caron, asciicircum, asciicircum ] }; + key { [ l, L, U1C9, U1C8 ] }; + key { [ n, N, U1CC, U1CB ] }; + key { [ z, Z, U1C6, U1C5 ] }; + key { [ e, E, EuroSign, cent ] }; + key { [ d, D, dstroke, Dstroke ] }; + key { [ dead_acute, quotedbl, apostrophe, apostrophe ] }; + key { [ space, space, nobreakspace, nobreakspace ] }; + key { [ comma, less, NoSymbol, guillemotright ] }; + key { [ period, greater, NoSymbol, guillemotleft ] }; + + include "level3(ralt_switch)" +}; + +//based on http://upload.wikimedia.org/wikipedia/commons/1/18/T-Mobile_G1_launch_event_2.jpg +partial alphanumeric_keys +xkb_symbols "htcdream" { + include "inet(htcdream)" + name[Group1]= "English (US)"; + + //second row + key { [ q, Q, Tab, Tab ] }; + key { [ w, W, grave, grave ] }; + key { [ e, E, underscore, underscore ] }; + key { [ r, R, sterling, sterling ] }; + key { [ t, T, EuroSign, EuroSign ] }; + key { [ y, Y, division, division ] }; + key { [ u, U, multiply, multiply ] }; + key { [ i, I, minus, minus ] }; + key { [ o, O, plus, plus ] }; + key { [ p, P, equal, equal ] }; + + //third row + key { [ a, A, NoSymbol, NoSymbol ] }; + key { [ s, S, bar, bar ] }; + key { [ d ,D, backslash, backslash ] }; + key { [ f, F, braceleft, braceleft ] }; + key { [ g, G, braceright, braceright ] }; + key { [ h, H, colon, colon ] }; + key { [ j, J, semicolon, semicolon ] }; + key { [ k, K, quotedbl, quotedbl ] }; + key { [ l, L, apostrophe, apostrophe ] }; + + //forth row + key { [ z, Z, NoSymbol, NoSymbol ] }; + key { [ x, X, NoSymbol, NoSymbol ] }; + key { [ c, C, NoSymbol, NoSymbol ] }; + key { [ v, V, bracketleft, bracketleft ] }; + key { [ b, B, bracketright, bracketright ] }; + key { [ n, N, less, less ] }; + key { [ m, M, greater, greater ] }; + key { [ comma, comma, question, question ] }; + + //fifth row + key { [ at, at, asciitilde, asciitilde ] }; + + include "level3(alt_switch)" +}; + +// EXTRAS: + +// XCompose is out! Unicode combining is in! For those of us who live +// on the edge: A keymap using Unicode combining characters instead of +// deadkeys. This variation does not deviate from the lame MS-style +// US-intl layout; but it uses AltGr for combining, like altgr-intl. +// +// This might break your font layout layout systems (because they +// suck), caveat emptor. Also, most of today's software will count +// individual combining marks for selection, deletion, character +// counting &c., and won't be smart enough to do canonical equivalence +// when searching, &c. +// +// With Unicode combining you use "handwriting order", not +// "typewriting order" as with deadkeys. That is, you first type the +// base character, then the diacritics/accents/modifiers. This has +// the advantage of avoiding hidden states --- each keypress changes +// something on screen. +// +// TODO: as of now, this duplicates all us(intl) functionality with +// combining. With care, perhaps we could add more combining marks +// not present in intl, and support all major languages. +partial alphanumeric_keys +xkb_symbols "intl-unicode" { + + name[Group1]= "English (US, international AltGr Unicode combining)"; + + include "us(intl)" + include "level3(ralt_switch)" + + // grave, tilde + key { [grave, asciitilde, U0300, U0303 ] }; + // double acute + key { [ 2, at, twosuperior, U030B ] }; + // macron + key { [ 3, numbersign, threesuperior, U0304 ] }; + // circumflex + key { [ 6, asciicircum, onequarter, U0302 ] }; + // horn + key { [ 7, ampersand, onehalf, U031B ] }; + // ogonek + key { [ 8, asterisk, threequarters, U0328 ] }; + // breve + key { [ 9, parenleft, leftsinglequotemark, U0306 ] }; + // abovering + key { [ 0, parenright, rightsinglequotemark, U030A ] }; + + // belowdot + key { [ minus, underscore, yen, U0323 ] }; + // acute, diaeresis + key { [apostrophe, quotedbl, U0301, U0308 ] }; + // abovedot, caron + key { [ period, greater, U0307, U030C ] }; + // hook + key { [ slash, question, questiondown, 0309 ] }; + + // alt-intl compatibility + // cedilla, caron + key { [ comma, less, U0327, U030C ] }; + // ogonek, diaeresis + key { [ semicolon, colon, U0328, U0308 ] }; + // doubleacute, horn + key { [ equal, plus, U030B, U031B ] }; + + // we don't do combining latin letters and combining enclosures + // because support for those is very rare. +}; + +// XCompose is out! Unicode combining is in! For those of us who live +// on the edge: A keymap using Unicode combining characters instead of +// deadkeys. This variation does break compatibility with us-intl, +// whenever I thought it would be more mnemonic or Unicodeish. +partial alphanumeric_keys +xkb_symbols "alt-intl-unicode" { + + name[Group1]= "English (US, international AltGr Unicode combining, alternative)"; + + include "extras/us(intl-unicode)" + include "level3(ralt_switch)" + + // easier macron; em-dash. + // em-dash is available via compose, but I added here since it's such + // an important typographic character. + key { [ minus, underscore, U0304, U2014 ] }; + + // belowdot, abovedot (caron at coma/less key, per above) + key { [ period, greater, U0323, U0307 ] }; + +}; + +partial alphanumeric_keys +xkb_symbols "ats" { + + include "us" + + name[Group1]= "Atsina"; + + //Using Dead key to get COMBINING COMMA ABOVE for ejectives on + //q, l, t, s, m, g, k, p, w, y, r + //XCompose key is used for the other accute and grave. + + key { [ e, E, eacute, Eacute ] }; + key { [ u, U, uacute, Uacute ] }; + key { [ i, I, iacute, Iacute ] }; + key { [ o, O, oacute, Oacute ] }; + key { [ bracketleft, braceleft, U03B8 ] }; + key { [ bracketright, braceright, U010D, U010C ] }; + //U+010C (uppercase Č) and U+010D (lowercase č). + + key { [ a, A, aacute, Aacute ] }; + + + //Small letter Open use compose to key get acute accent + key { [ c, C, U0254, U0186 ] }; + key { [ comma, less, U0313 ] }; + key { [ slash, question, U0294 ] }; + + include "level3(ralt_switch)" + include "compose(rctrl)" +}; + +partial alphanumeric_keys +xkb_symbols "crd" { + + include "us" + + name[Group1]= "Couer D'alene Salish"; + + // Alphanumeric section + key { [ w, W, U02B7, U02B7 ] }; + key { [ 7, ampersand, U0294 ] }; + key { [ q, Q, U221A ] }; + key { [ v, V, U0259 ] }; + key { [ backslash, bar, U026B ] }; + key { [ e, E, U025B ] }; + key { [ i, I, U026A ] }; + key { [ j, J, U01F0 ] }; + key { [ 6, asciicircum, U0295 ] }; + key { [ s, S, U0161 ] }; + key { [ c, C, U010D ] }; + key { [ o, O, U0254 ] }; + key { [ period, greater, U0323 ] }; + + include "level3(ralt_switch)" + include "compose(rctrl)" + + // End alphanumeric section +}; diff --git a/test/data/types/basic b/test/data/types/basic new file mode 100644 index 0000000..552b834 --- /dev/null +++ b/test/data/types/basic @@ -0,0 +1,29 @@ +default xkb_types "basic" { + + // Fairly standard definitions for + // the four required key types + + virtual_modifiers NumLock; + + type "ONE_LEVEL" { + modifiers = None; + map[None] = Level1; + level_name[Level1]= "Any"; + }; + + type "TWO_LEVEL" { + modifiers = Shift; + map[Shift] = Level2; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + }; + + type "ALPHABETIC" { + modifiers = Shift+Lock; + map[Shift] = Level2; + map[Lock] = Level2; + level_name[Level1] = "Base"; + level_name[Level2] = "Caps"; + }; + +}; diff --git a/test/data/types/complete b/test/data/types/complete new file mode 100644 index 0000000..3b59ca2 --- /dev/null +++ b/test/data/types/complete @@ -0,0 +1,9 @@ +default xkb_types "complete" { + include "basic" + include "mousekeys" + include "pc" + include "iso9995" + include "level5" + include "extra" + include "numpad" +}; diff --git a/test/data/types/extra b/test/data/types/extra new file mode 100644 index 0000000..465796b --- /dev/null +++ b/test/data/types/extra @@ -0,0 +1,161 @@ +partial default xkb_types "default" { + // Definition for a key type used for the czech keymap, for instance. + // Defines style a with four level shift. It is similar to three_level + // type used for iso9995 but it lets the shift key behave "normally". + + virtual_modifiers LevelThree; + + type "FOUR_LEVEL" { + modifiers = Shift+LevelThree; + map[None] = Level1; + map[Shift] = Level2; + map[LevelThree] = Level3; + map[Shift+LevelThree] = Level4; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "Alt Base"; + level_name[Level4] = "Shift Alt"; + }; + + type "FOUR_LEVEL_ALPHABETIC" { + modifiers = Shift+Lock+LevelThree; + map[None] = Level1; + map[Shift] = Level2; + map[Lock] = Level2; + map[LevelThree] = Level3; + map[Shift+LevelThree] = Level4; + map[Lock+LevelThree] = Level4; + map[Lock+Shift+LevelThree] = Level3; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "Alt Base"; + level_name[Level4] = "Shift Alt"; + }; + + type "FOUR_LEVEL_SEMIALPHABETIC" { + modifiers = Shift+Lock+LevelThree; + map[None] = Level1; + map[Shift] = Level2; + map[Lock] = Level2; + map[LevelThree] = Level3; + map[Shift+LevelThree] = Level4; + map[Lock+LevelThree] = Level3; + map[Lock+Shift+LevelThree] = Level4; + preserve[Lock+LevelThree] = Lock; + preserve[Lock+Shift+LevelThree] = Lock; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "Alt Base"; + level_name[Level4] = "Shift Alt"; + }; + + // Another four level keypad variant + // First two levels are controled by NumLock (with active Shift-ing like + // in KEYPAD). LevelThree overrides this mode, with two additional + // Shift-ed levels + // NumLock state is intentionnaly ignored when LevelThree is active + type "FOUR_LEVEL_MIXED_KEYPAD" { + modifiers = Shift+NumLock+LevelThree; + map[None] = Level1; + map[Shift+NumLock] = Level1; + map[NumLock] = Level2; + map[Shift] = Level2; + map[LevelThree] = Level3; + map[NumLock+LevelThree] = Level3; + map[Shift+LevelThree] = Level4; + map[Shift+NumLock+LevelThree] = Level4; + level_name[Level1] = "Base"; + level_name[Level2] = "Number"; + level_name[Level3] = "Alt Base"; + level_name[Level4] = "Shift Alt"; + }; + + // Base level, two Shift-ed LevelThree levels, one Ctrl+Alt command level + type "FOUR_LEVEL_X" { + modifiers = Shift+LevelThree+Control+Alt; + map[None] = Level1; + map[LevelThree] = Level2; + map[Shift+LevelThree] = Level3; + map[Control+Alt] = Level4; + level_name[Level1] = "Base"; + level_name[Level2] = "Alt Base"; + level_name[Level3] = "Shift Alt"; + level_name[Level4] = "Ctrl+Alt"; + }; + +// Special type for keys used in Serbian Latin Unicode map +// It makes it possible to use all three forms of latin letters +// present in Unicode that are made up of two separate letters +// (forms like LJ, Lj, and lj; NJ, Nj, and nj; etc) + + type "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC" { + modifiers = Shift+Lock+LevelThree; + map[None] = Level1; + map[Shift] = Level2; + map[Lock] = Level4; + map[LevelThree] = Level3; + map[Shift+LevelThree] = Level4; + map[Lock+LevelThree] = Level3; + map[Lock+Shift+LevelThree] = Level3; + preserve[Lock]= Lock; + preserve[Lock+LevelThree]= Lock; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "AltGr Base"; + level_name[Level4] = "Shift AltGr"; + }; + +// type for e.g. german ssharp which is capitalized SS. +// CHARACTERISTICS: +// It is FOUR_LEVEL with the exception that the fifth level +// is mapped to the Lock modifier. +// If other modifiers are used, the Lock state is ignored. +// DETAILS ABOUT GERMAN: +// The capital form of ssharp (called sharp s) only exists for +// completely capitalized Text, not at the beginning of sentences +// or nouns (nouns have a captial letter at the beginning in german). +// The ssharp key, to the right of the zero key, takes this into +// account and has a questionmark mapped on shift-ssharp since +// normally no capital version is needed. +// When typing with active capsLock, this key type is needed to +// output two capital letters S because this is the only german key +// whose capital letter is not the same as the one typed with shift. + + type "FOUR_LEVEL_PLUS_LOCK" { + modifiers = Shift+Lock+LevelThree; + map[None] = Level1; + map[Shift] = Level2; + map[LevelThree] = Level3; + map[Shift+LevelThree] = Level4; + map[Lock] = Level5; + map[Lock+Shift] = Level2; + map[Lock+LevelThree] = Level3; + map[Lock+Shift+LevelThree] = Level4; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "Alt Base"; + level_name[Level4] = "Shift Alt"; + level_name[Level5] = "Lock"; + }; +}; + +// This enables the four level shifting also for the keypad. +partial xkb_types "keypad" { + virtual_modifiers LevelThree; + + type "FOUR_LEVEL_KEYPAD" { + modifiers = Shift+NumLock+LevelThree; + map[None] = Level1; + map[Shift] = Level2; + map[NumLock] = Level2; + map[Shift+NumLock] = Level1; + map[LevelThree] = Level3; + map[Shift+LevelThree] = Level4; + map[NumLock+LevelThree] = Level4; + map[Shift+NumLock+LevelThree] = Level3; + level_name[Level1] = "Base"; + level_name[Level2] = "Number"; + level_name[Level3] = "Alt Base"; + level_name[Level4] = "Alt Number"; + }; +}; diff --git a/test/data/types/iso9995 b/test/data/types/iso9995 new file mode 100644 index 0000000..0cf3420 --- /dev/null +++ b/test/data/types/iso9995 @@ -0,0 +1,18 @@ +partial default xkb_types "default" { + + // Definition for a key type which + // can be used to implement ISO9995 + // style level three shift + virtual_modifiers LevelThree; + + type "THREE_LEVEL" { + modifiers = Shift+LevelThree; + map[None] = Level1; + map[Shift] = Level2; + map[LevelThree] = Level3; + map[Shift+LevelThree] = Level3; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "Level3"; + }; +}; diff --git a/test/data/types/level5 b/test/data/types/level5 new file mode 100644 index 0000000..f9ba5b2 --- /dev/null +++ b/test/data/types/level5 @@ -0,0 +1,213 @@ +partial default xkb_types "default" { + // Definition for a key type used for the czech keymap, for instance. + // Defines style a with four level shift. It is similar to three_level + // type used for iso9995 but it lets the shift key behave "normally". + + virtual_modifiers LevelThree,ScrollLock,LevelFive; + + type "EIGHT_LEVEL" { + modifiers = Shift+LevelThree+LevelFive; + map[None] = Level1; + map[Shift] = Level2; + map[LevelThree] = Level3; + map[Shift+LevelThree] = Level4; + map[LevelFive] = Level5; + map[Shift+LevelFive] = Level6; + map[LevelThree+LevelFive] = Level7; + map[Shift+LevelThree+LevelFive] = Level8; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "Alt Base"; + level_name[Level4] = "Shift Alt"; + level_name[Level5] = "X"; + level_name[Level6] = "X Shift"; + level_name[Level7] = "X Alt Base"; + level_name[Level8] = "X Shift Alt"; + }; + + type "EIGHT_LEVEL_ALPHABETIC" { + modifiers = Shift+Lock+LevelThree+LevelFive; + map[None] = Level1; + map[Shift] = Level2; + map[Lock] = Level2; + map[LevelThree] = Level3; + map[Shift+LevelThree] = Level4; + map[Lock+LevelThree] = Level4; + map[Lock+Shift+LevelThree] = Level3; + + map[LevelFive] = Level5; + map[Shift+LevelFive] = Level6; + map[Lock+LevelFive] = Level6; + map[LevelThree+LevelFive] = Level7; + map[Shift+LevelThree+LevelFive] = Level8; + map[Lock+LevelThree+LevelFive] = Level8; + map[Lock+Shift+LevelThree+LevelFive] = Level7; + + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "Alt Base"; + level_name[Level4] = "Shift Alt"; + level_name[Level5] = "X"; + level_name[Level6] = "X Shift"; + level_name[Level7] = "X Alt Base"; + level_name[Level8] = "X Shift Alt"; + }; + +// type "EIGHT_LEVEL_LEVEL_FIVE_LOCK" { +// // Level5-Lock is implemented by using NumLock, because a real modifier +// // is required. +// +// modifiers = Shift + Lock + LevelThree + NumLock + LevelFive; +// +// map[None] = Level1; +// map[Shift] = Level2; +// map[LevelThree] = Level3; +// map[LevelThree+Shift] = Level4; +// +// map[LevelFive] = Level5; +// map[LevelFive+Shift] = Level6; +// map[LevelFive+LevelThree] = Level7; +// map[LevelFive+LevelThree+Shift] = Level8; +// +// map[NumLock] = Level5; +// map[NumLock+Shift] = Level6; +// map[NumLock+LevelThree] = Level7; +// map[NumLock+LevelThree+Shift] = Level8; +// +// map[NumLock+LevelFive] = Level1; +// map[NumLock+LevelFive+Shift] = Level2; +// map[NumLock+LevelFive+LevelThree] = Level3; +// map[NumLock+LevelFive+LevelThree+Shift] = Level4; +// +// // Lock has no effect +// map[Lock] = Level1; +// map[Lock+Shift] = Level2; +// map[Lock+LevelThree] = Level3; +// map[Lock+LevelThree+Shift] = Level4; +// +// map[Lock+LevelFive] = Level5; +// map[Lock+LevelFive+Shift] = Level6; +// map[Lock+LevelFive+LevelThree] = Level7; +// map[Lock+LevelFive+LevelThree+Shift] = Level8; +// +// map[Lock+NumLock] = Level5; +// map[Lock+NumLock+Shift] = Level6; +// map[Lock+NumLock+LevelThree] = Level7; +// map[Lock+NumLock+LevelThree+Shift] = Level8; +// +// map[Lock+NumLock+LevelFive] = Level1; +// map[Lock+NumLock+LevelFive+Shift] = Level2; +// map[Lock+NumLock+LevelFive+LevelThree] = Level3; +// map[Lock+NumLock+LevelFive+LevelThree+Shift] = Level4; +// +// preserve[LevelFive+Shift] = Shift; +// preserve[NumLock+Shift] = Shift; +// preserve[Lock+LevelFive+Shift] = Shift; +// preserve[Lock+NumLock+Shift] = Shift; +// +// level_name[Level1] = "Base"; +// level_name[Level2] = "Shift"; +// level_name[Level3] = "Alt Base"; +// level_name[Level4] = "Shift Alt"; +// level_name[Level5] = "X"; +// level_name[Level6] = "X Shift"; +// level_name[Level7] = "X Alt Base"; +// level_name[Level8] = "X Shift Alt"; +// }; +// +// type "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK" { +// // Level5-Lock is implemented by using NumLock, because a real modifier +// // is required. +// +// modifiers = Shift + Lock + LevelThree + NumLock + LevelFive; +// +// map[None] = Level1; +// map[Shift] = Level2; +// map[LevelThree] = Level3; +// map[LevelThree+Shift] = Level4; +// +// map[LevelFive] = Level5; +// map[LevelFive+Shift] = Level6; +// map[LevelFive+LevelThree] = Level7; +// map[LevelFive+LevelThree+Shift] = Level8; +// +// map[NumLock] = Level5; +// map[NumLock+Shift] = Level6; +// map[NumLock+LevelThree] = Level7; +// map[NumLock+LevelThree+Shift] = Level8; +// +// map[NumLock+LevelFive] = Level1; +// map[NumLock+LevelFive+Shift] = Level2; +// map[NumLock+LevelFive+LevelThree] = Level3; +// map[NumLock+LevelFive+LevelThree+Shift] = Level4; +// +// // Lock interchanges Level1 and Level2 +// map[Lock] = Level2; +// map[Lock+Shift] = Level1; +// map[Lock+LevelThree] = Level3; +// map[Lock+LevelThree+Shift] = Level4; +// +// map[Lock+LevelFive] = Level5; +// map[Lock+LevelFive+Shift] = Level6; +// map[Lock+LevelFive+LevelThree] = Level7; +// map[Lock+LevelFive+LevelThree+Shift] = Level8; +// +// map[Lock+NumLock] = Level5; +// map[Lock+NumLock+Shift] = Level6; +// map[Lock+NumLock+LevelThree] = Level7; +// map[Lock+NumLock+LevelThree+Shift] = Level8; +// +// map[Lock+NumLock+LevelFive] = Level2; +// map[Lock+NumLock+LevelFive+Shift] = Level1; +// map[Lock+NumLock+LevelFive+LevelThree] = Level4; +// map[Lock+NumLock+LevelFive+LevelThree+Shift] = Level3; +// +// preserve[LevelFive+Shift] = Shift; +// preserve[NumLock+Shift] = Shift; +// +// level_name[Level1] = "Base"; +// level_name[Level2] = "Shift"; +// level_name[Level3] = "Alt Base"; +// level_name[Level4] = "Shift Alt"; +// level_name[Level5] = "X"; +// level_name[Level6] = "X Shift"; +// level_name[Level7] = "X Alt Base"; +// level_name[Level8] = "X Shift Alt"; +// }; + + type "EIGHT_LEVEL_SEMIALPHABETIC" { + modifiers = Shift+Lock+LevelThree+LevelFive; + map[None] = Level1; + map[Shift] = Level2; + map[Lock] = Level2; + map[LevelThree] = Level3; + map[Shift+LevelThree] = Level4; + map[Lock+LevelThree] = Level3; + map[Lock+Shift+LevelThree] = Level4; + + map[LevelFive] = Level5; + map[Shift+LevelFive] = Level6; + map[Lock+LevelFive] = Level6; + map[LevelThree+LevelFive] = Level7; + map[Shift+LevelThree+LevelFive] = Level8; + map[Lock+LevelThree+LevelFive] = Level7; + map[Lock+Shift+LevelThree+LevelFive] = Level8; + + preserve[Lock+LevelThree] = Lock; + preserve[Lock+Shift+LevelThree] = Lock; + preserve[Lock+LevelFive] = Lock; + preserve[Lock+Shift+LevelFive] = Lock; + preserve[Lock+LevelThree+LevelFive] = Lock; + preserve[Lock+Shift+LevelThree+LevelFive] = Lock; + + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "Alt Base"; + level_name[Level4] = "Shift Alt"; + level_name[Level5] = "X"; + level_name[Level6] = "X Shift"; + level_name[Level7] = "X Alt Base"; + level_name[Level8] = "X Shift Alt"; + }; + +}; diff --git a/test/data/types/mousekeys b/test/data/types/mousekeys new file mode 100644 index 0000000..88d88a2 --- /dev/null +++ b/test/data/types/mousekeys @@ -0,0 +1,10 @@ +partial default xkb_types "default" { + virtual_modifiers Alt; + + type "SHIFT+ALT" { + modifiers = Shift+Alt; + map[Shift+Alt] = Level2; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift+Alt"; + }; +}; diff --git a/test/data/types/numpad b/test/data/types/numpad new file mode 100644 index 0000000..7888d7d --- /dev/null +++ b/test/data/types/numpad @@ -0,0 +1,67 @@ +partial default xkb_types "pc" { + type "KEYPAD" { + modifiers = Shift+NumLock; + map[None] = Level1; + map[Shift] = Level2; + map[NumLock] = Level2; + map[Shift+NumLock] = Level1; + level_name[Level1] = "Base"; + level_name[Level2] = "Number"; + }; + include "extra(keypad)" +}; + +// On Mac keypads, level 1 and 2 are swapped +partial xkb_types "mac" { + type "KEYPAD" { + modifiers = None; + map[None] = Level2; + level_name[Level2] = "Number"; + }; + include "extra(keypad)" +}; + +partial xkb_types "microsoft" { + type "KEYPAD" { + modifiers = Shift+NumLock; + map[None] = Level1; + preserve[Shift] = Shift; + map[NumLock] = Level2; + level_name[Level1] = "Base"; + level_name[Level2] = "Number"; + }; + include "extra(keypad)" +}; + +// Swiss-German style numeric keypad: Shift and NumLock operates as +// two independent modifiers; however, since we want shift state for +// the cursor keys, only three levels are used from the key mappings. +// Closest type is actually FOUR_LEVEL_X, but most numpad layouts uses +// FOUR_LEVEL_MIXED_KEYPAD so that's the one we are going to override. +partial xkb_types "shift3" { + type "FOUR_LEVEL_MIXED_KEYPAD" { + modifiers = Shift+NumLock+Control+Alt; + + // NumLock Off => navigate using cursor keys + map[None] = Level1; + + // NumLock Off + Shift pressed => select using cursor keys + preserve[Shift] = Shift; + + // NumLock On => decimal digits + map[NumLock] = Level2; + + // NumLock On + Shift pressed => auxiliary symbols, + // e.g. hexadecimal digits + map[Shift+NumLock] = Level3; + + // Ctrl + Alt, regardless of NumLock and Shift => command keys + map[Control+Alt] = Level4; + + // reverse map from levels to modifiers + level_name[Level1] = "Base"; + level_name[Level2] = "NumLock"; + level_name[Level3] = "Shift+NumLock"; + level_name[Level4] = "Ctrl+Alt"; + }; +}; diff --git a/test/data/types/pc b/test/data/types/pc new file mode 100644 index 0000000..01a5634 --- /dev/null +++ b/test/data/types/pc @@ -0,0 +1,115 @@ +partial default xkb_types "default" { + + // Some types that are necessary + // for a full implementation of + // a PC compatible keyboard. + virtual_modifiers Alt; + virtual_modifiers LevelThree; + virtual_modifiers LAlt; + virtual_modifiers RAlt; + virtual_modifiers RControl; + virtual_modifiers LControl; + + type "PC_CONTROL_LEVEL2" { + modifiers = Control; + map[None] = Level1; + map[Control] = Level2; + level_name[Level1] = "Base"; + level_name[Level2] = "Control"; + }; + + type "PC_LCONTROL_LEVEL2" { + modifiers = LControl; + map[None] = Level1; + map[LControl] = Level2; + level_name[Level1] = "Base"; + level_name[Level2] = "LControl"; + }; + + type "PC_RCONTROL_LEVEL2" { + modifiers = RControl; + map[None] = Level1; + map[RControl] = Level2; + level_name[Level1] = "Base"; + level_name[Level2] = "RControl"; + }; + + type "PC_ALT_LEVEL2" { + modifiers = Alt; + map[None] = Level1; + map[Alt] = Level2; + level_name[Level1] = "Base"; + level_name[Level2] = "Alt"; + }; + + type "PC_LALT_LEVEL2" { + modifiers = LAlt; + map[None] = Level1; + map[LAlt] = Level2; + level_name[Level1] = "Base"; + level_name[Level2] = "LAlt"; + }; + + type "PC_RALT_LEVEL2" { + modifiers = RAlt; + map[None] = Level1; + map[RAlt] = Level2; + level_name[Level1] = "Base"; + level_name[Level2] = "RAlt"; + }; + + type "CTRL+ALT" { + modifiers = Control+Alt+Shift+LevelThree; + map[None] = Level1; + map[Shift] = Level2; + map[LevelThree] = Level3; + map[Shift+LevelThree] = Level4; + map[Control+Alt] = Level5; + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "Alt Base"; + level_name[Level4] = "Shift Alt"; + level_name[Level5] = "Ctrl+Alt"; + }; + + // Local eight level + // Needed when you want part of your layout eight-level but can not use + // LevelFive as modifier, as this will take over right ctrl by default + // for all the layout and is too invasive for your average four-level user + // Needed to fix bug #9529 + // FIXME Should really use RControl but it's seems not to be enabled by + // default and touching this requires a lot of testing + type "LOCAL_EIGHT_LEVEL" { + modifiers = Shift+Lock+LevelThree+Control; + + map[None] = Level1; + map[Lock+Shift] = Level1; + map[Shift] = Level2; + map[Lock] = Level2; + + map[LevelThree] = Level3; + map[Lock+Shift+LevelThree] = Level3; + map[Shift+LevelThree] = Level4; + map[Lock+LevelThree] = Level4; + + map[Control] = Level5; + map[Lock+Shift+Control] = Level5; + map[Shift+Control] = Level6; + map[Lock+Control] = Level6; + + map[LevelThree+Control] = Level7; + map[Lock+Shift+LevelThree+Control] = Level7; + map[Shift+LevelThree+Control] = Level8; + map[Lock+LevelThree+Control] = Level8; + + level_name[Level1] = "Base"; + level_name[Level2] = "Shift"; + level_name[Level3] = "Level3"; + level_name[Level4] = "Shift Level3"; + level_name[Level5] = "Ctrl"; + level_name[Level6] = "Shift Ctrl"; + level_name[Level7] = "Level3 Ctrl"; + level_name[Level8] = "Shift Level3 Ctrl"; + }; + +}; diff --git a/test/rulescomp.c b/test/rulescomp.c index c726ff2..1c084e2 100644 --- a/test/rulescomp.c +++ b/test/rulescomp.c @@ -95,8 +95,8 @@ int main(int argc, char *argv[]) assert(ctx); - assert(test_rmlvo(ctx, "base", "pc105", "us,il,ru,ca", ",,,multix", "grp:alts_toggle,ctrl:nocaps,compose:rwin")); - assert(test_rmlvo(ctx, "base", "", "us", "", "")); + assert(test_rmlvo(ctx, "evdev", "pc105", "us,il,ru,ca", ",,,multix", "grp:alts_toggle,ctrl:nocaps,compose:rwin")); + assert(test_rmlvo(ctx, "evdev", "", "us", "", "")); assert(test_rmlvo(ctx, "evdev", "pc105", "us", "intl", "")); assert(test_rmlvo(ctx, "evdev", "pc105", "us", "intl", "grp:alts_toggle")); -- 2.7.4