keypad 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628
  1. default hidden partial keypad_keys
  2. xkb_symbols "x11" {
  3. include "keypad(operators)"
  4. key <KP7> { [ KP_Home, KP_7 ] };
  5. key <KP8> { [ KP_Up, KP_8 ] };
  6. key <KP9> { [ KP_Prior, KP_9 ] };
  7. key <KP4> { [ KP_Left, KP_4 ] };
  8. key <KP5> { [ KP_Begin, KP_5 ] };
  9. key <KP6> { [ KP_Right, KP_6 ] };
  10. key <KP1> { [ KP_End, KP_1 ] };
  11. key <KP2> { [ KP_Down, KP_2 ] };
  12. key <KP3> { [ KP_Next, KP_3 ] };
  13. key <KPEN> { [ KP_Enter ] };
  14. key <KPEQ> { [ KP_Equal ] };
  15. key <KP0> { [ KP_Insert, KP_0 ] };
  16. key <KPDL> { [ KP_Delete, KP_Decimal ] };
  17. key <KPPT> { [ KP_Decimal, KP_Decimal ] };
  18. };
  19. hidden partial keypad_keys
  20. xkb_symbols "overlay" {
  21. include "keypad(overlay1)"
  22. };
  23. hidden partial keypad_keys
  24. xkb_symbols "overlay1" {
  25. key <KP7> { [ KP_Home ], overlay1=<KO7> };
  26. key <KP8> { [ KP_Up ], overlay1=<KO8> };
  27. key <KP9> { [ KP_Prior ], overlay1=<KO9> };
  28. key <KP4> { [ KP_Left ], overlay1=<KO4> };
  29. key <KP5> { [ KP_Begin ], overlay1=<KO5> };
  30. key <KP6> { [ KP_Right ], overlay1=<KO6> };
  31. key <KP1> { [ KP_End ], overlay1=<KO1> };
  32. key <KP2> { [ KP_Down ], overlay1=<KO2> };
  33. key <KP3> { [ KP_Next ], overlay1=<KO3> };
  34. key <KP0> { [ KP_Insert ], overlay1=<KO0> };
  35. key <KPDL> { [ KP_Delete ], overlay1=<KODL> };
  36. key <KO7> { [ KP_7 ] };
  37. key <KO8> { [ KP_8 ] };
  38. key <KO9> { [ KP_9 ] };
  39. key <KO4> { [ KP_4 ] };
  40. key <KO5> { [ KP_5 ] };
  41. key <KO6> { [ KP_6 ] };
  42. key <KO1> { [ KP_1 ] };
  43. key <KO2> { [ KP_2 ] };
  44. key <KO3> { [ KP_3 ] };
  45. key <KO0> { [ KP_0 ] };
  46. key <KODL> { [ KP_Decimal ] };
  47. };
  48. hidden partial keypad_keys
  49. xkb_symbols "overlay2" {
  50. key <KP7> { [ KP_Home ], overlay2=<KO7> };
  51. key <KP8> { [ KP_Up ], overlay2=<KO8> };
  52. key <KP9> { [ KP_Prior ], overlay2=<KO9> };
  53. key <KP4> { [ KP_Left ], overlay2=<KO4> };
  54. key <KP5> { [ KP_Begin ], overlay2=<KO5> };
  55. key <KP6> { [ KP_Right ], overlay2=<KO6> };
  56. key <KP1> { [ KP_End ], overlay2=<KO1> };
  57. key <KP2> { [ KP_Down ], overlay2=<KO2> };
  58. key <KP3> { [ KP_Next ], overlay2=<KO3> };
  59. key <KP0> { [ KP_Insert ], overlay2=<KO0> };
  60. key <KPDL> { [ KP_Delete ], overlay2=<KODL> };
  61. key <KO7> { [ KP_7 ] };
  62. key <KO8> { [ KP_8 ] };
  63. key <KO9> { [ KP_9 ] };
  64. key <KO4> { [ KP_4 ] };
  65. key <KO5> { [ KP_5 ] };
  66. key <KO6> { [ KP_6 ] };
  67. key <KO1> { [ KP_1 ] };
  68. key <KO2> { [ KP_2 ] };
  69. key <KO3> { [ KP_3 ] };
  70. key <KO0> { [ KP_0 ] };
  71. key <KODL> { [ KP_Decimal ] };
  72. };
  73. hidden partial keypad_keys
  74. xkb_symbols "operators" {
  75. // Puts some commands to control the X server on
  76. // the fifth level of the keypad's operator keys.
  77. key <KPDV> {
  78. type="CTRL+ALT", // Ungrab cancels server/keyboard/pointer grabs
  79. symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86_Ungrab ]
  80. };
  81. key <KPMU> {
  82. type="CTRL+ALT", // ClsGrb kills whichever client has a grab in effect
  83. symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86_ClearGrab ]
  84. };
  85. key <KPSU> {
  86. type="CTRL+ALT", // -VMode switches to the previous video mode
  87. symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86_Prev_VMode ]
  88. };
  89. key <KPAD> {
  90. type="CTRL+ALT", // +VMode switches to the next video mode
  91. symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86_Next_VMode ]
  92. };
  93. };
  94. // Legacy PC keypad definition
  95. // Copyright © 2006-2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
  96. keypad_keys
  97. xkb_symbols "legacy" {
  98. include "keypad(core)"
  99. include "keypad(legacymath)"
  100. include "keypad(legacynumber)"
  101. include "kpdl(dot)"
  102. };
  103. // Legacy Wang 725-3771-ae and 725-3771-uk keypad definition
  104. // Copyright © 2006-2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
  105. keypad_keys
  106. xkb_symbols "legacy_wang" {
  107. include "keypad(core)"
  108. include "keypad(legacymath)"
  109. include "keypad(legacynumber_wang)"
  110. include "kpdl(dot)"
  111. };
  112. // Complete new keypad definition
  113. // Copyright © 2006-2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
  114. keypad_keys
  115. xkb_symbols "oss" {
  116. include "keypad(core)"
  117. include "keypad(ossmath)"
  118. include "keypad(ossnumber)"
  119. include "kpdl(dotoss)"
  120. };
  121. // Latin9 restriction of new keypad definition
  122. // Copyright © 2006-2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
  123. keypad_keys
  124. xkb_symbols "oss_latin9" {
  125. include "keypad(core)"
  126. include "keypad(ossmath_latin9)"
  127. include "keypad(legacynumber)"
  128. include "kpdl(dotoss_latin9)"
  129. };
  130. // Wang 725-3771-ae and 725-3771-uk keypad variant of oss keypad
  131. // Copyright © 2006-2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
  132. keypad_keys
  133. xkb_symbols "oss_wang" {
  134. include "keypad(core)"
  135. include "keypad(ossmath)"
  136. include "keypad(ossnumber_wang)"
  137. include "kpdl(dotoss)"
  138. };
  139. // Forward-looking keypad definition
  140. // Won't work with applications that make ASCII assumptions
  141. // Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
  142. keypad_keys
  143. xkb_symbols "future" {
  144. include "keypad(core)"
  145. include "keypad(futuremath)"
  146. include "keypad(ossnumber)"
  147. include "kpdl(commaoss)"
  148. };
  149. // Forward-looking keypad definition
  150. // Won't work with applications that make ASCII assumptions
  151. // Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
  152. keypad_keys
  153. xkb_symbols "future_wang" {
  154. include "keypad(core)"
  155. include "keypad(futuremath)"
  156. include "keypad(ossnumber_wang)"
  157. include "kpdl(commaoss)"
  158. };
  159. // Keypad keys nobody changes
  160. // Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
  161. partial keypad_keys
  162. xkb_symbols "core" {
  163. modifier_map Mod2 { Num_Lock };
  164. key <NMLK> { [ Num_Lock ] };
  165. key <KPEN> { [ KP_Enter ] };
  166. key <KPEQ> { [ KP_Equal ] };
  167. };
  168. partial keypad_keys
  169. xkb_symbols "numlock_repeats" {
  170. key <NMLK> { [ Num_Lock ], repeat = true };
  171. };
  172. // Legacy keypad math area
  173. // Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
  174. //
  175. // ┏━━━━━┱─────┬─────┬─────┐
  176. // ┃Num ┃ ₁ │ ₂ │ ₃ │ ₁ <XF86_Ungrab>
  177. // ┃Lock⇭┃ / │ * │ - │ ₂ <XF86_ClearGrab>
  178. // ┡━━━━━╃─────┼─────┼─────┤ ₃ <XF86_Prev_VMode>
  179. // │ ₄ │ ₄ <XF86_Next_VMode>
  180. // │ │
  181. // ┤ │ 1 None
  182. // │ │ 2 Ctrl+Alt
  183. // │ + │
  184. // ╆━━━━━┪
  185. partial keypad_keys
  186. xkb_symbols "legacymath" {
  187. key.type[Group1]="CTRL+ALT" ;
  188. key <KPDV> { [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86_Ungrab ] }; // / <XF86_Ungrab>
  189. key <KPMU> { [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86_ClearGrab ] }; // * <XF86_ClearGrab>
  190. key <KPSU> { [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86_Prev_VMode ] }; // - <XF86_Prev_VMode>
  191. key <KPAD> { [ KP_Add, KP_Add, KP_Add, KP_Add, XF86_Next_VMode ] }; // + <XF86_Next_VMode>
  192. };
  193. // Keypad math area with non-CS operators
  194. // Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
  195. //
  196. // ┏━━━━━┱─────┬─────┬─────┐
  197. // ┃Num ┃ ∕ ₁ │ . ₂ │ − ₃ │ ₁ <XF86_Ungrab>
  198. // ┃Lock⇭┃ / ÷ │ * × │ - − │ ₂ <XF86_ClearGrab>
  199. // ┡━━━━━╃─────┼─────┼─────┤ ₃ <XF86_Prev_VMode>
  200. // │ + ₄ │ ₄ <XF86_Next_VMode>
  201. // │ │
  202. // ┤ │ 1 None
  203. // │ │ 2 Level3 ⇮
  204. // │ + + │ 3 Shift+Level3 ⇧⇮
  205. // ╆━━━━━┪ 4 Ctrl+Alt
  206. partial keypad_keys
  207. xkb_symbols "ossmath" {
  208. key.type[Group1]="CTRL+ALT" ;
  209. key <KPDV> { [ KP_Divide, 0x1002215, 0x10000F7, VoidSymbol, XF86_Ungrab ] }; // / ∕ ÷ <XF86_Ungrab>
  210. key <KPMU> { [ KP_Multiply, 0x10022C5, 0x10000D7, VoidSymbol, XF86_ClearGrab ] }; // * ⋅ × <XF86_ClearGrab>
  211. key <KPSU> { [ KP_Subtract, 0x1002212, 0x1002212, VoidSymbol, XF86_Prev_VMode ] }; // - − − <XF86_Prev_VMode>
  212. key <KPAD> { [ KP_Add, 0x100002B, 0x100002B, VoidSymbol, XF86_Next_VMode ] }; // + + + <XF86_Next_VMode>
  213. };
  214. // Keypad math area with non-CS operators in first levels
  215. // As demanded by users not interested in legacy pre-unicode junk
  216. // Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
  217. //
  218. // ┏━━━━━┱─────┬─────┬─────┐
  219. // ┃Num ┃ / ₁ │ * ₂ │ - ₃ │ ₁ <XF86_Ungrab>
  220. // ┃Lock⇭┃ ∕ ÷ │ . × │ − − │ ₂ <XF86_ClearGrab>
  221. // ┡━━━━━╃─────┼─────┼─────┤ ₃ <XF86_Prev_VMode>
  222. // │ + ₄ │ ₄ <XF86_Next_VMode>
  223. // │ │
  224. // ┤ │ 1 None
  225. // │ │ 2 Level3 ⇮
  226. // │ + + │ 3 Shift+Level3 ⇧⇮
  227. // ╆━━━━━┪ 4 Ctrl+Alt
  228. partial keypad_keys
  229. xkb_symbols "futuremath" {
  230. key.type[Group1]="FOUR_LEVEL_X" ;
  231. key <KPDV> { [ 0x1002215, KP_Divide, 0x10000F7, XF86_Ungrab ] }; // ∕ / ÷ <XF86_Ungrab>
  232. key <KPMU> { [ 0x10022C5, KP_Multiply, 0x10000D7, XF86_ClearGrab ] }; // ⋅ * × <XF86_ClearGrab>
  233. key <KPSU> { [ 0x1002212, KP_Subtract, 0x1002212, XF86_Prev_VMode ] }; // − - − <XF86_Prev_VMode>
  234. key <KPAD> { [ 0x100002B, KP_Add, 0x100002B, XF86_Next_VMode ] }; // + + + <XF86_Next_VMode>
  235. };
  236. // Keypad math area with non-CS operators, restricted to latin9
  237. // Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
  238. //
  239. // ┏━━━━━┱─────┬─────┬─────┐
  240. // ┃Num ┃ / ₁ │ · ₂ │ - ₃ │ ₁ <XF86_Ungrab>
  241. // ┃Lock⇭┃ / ÷ │ * × │ - - │ ₂ <XF86_ClearGrab>
  242. // ┡━━━━━╃─────┼─────┼─────┤ ₃ <XF86_Prev_VMode>
  243. // │ + ₄ │ ₄ <XF86_Next_VMode>
  244. // │ │
  245. // ┤ │ 1 None
  246. // │ │ 2 Level3 ⇮
  247. // │ + + │ 3 Shift+Level3 ⇧⇮
  248. // ╆━━━━━┪ 4 Ctrl+Alt
  249. partial keypad_keys
  250. xkb_symbols "ossmath_latin9" {
  251. key.type[Group1]="FOUR_LEVEL_X";
  252. key <KPDV> { [ KP_Divide, slash, division, XF86_Ungrab ] }; // / / ÷ <XF86_Ungrab>
  253. key <KPMU> { [ KP_Multiply, periodcentered, multiply, XF86_ClearGrab ] }; // * · × <XF86_ClearGrab>
  254. key <KPSU> { [ KP_Subtract, minus, minus, XF86_Prev_VMode ] }; // - - - <XF86_Prev_VMode>
  255. key <KPAD> { [ KP_Add, plus, plus, XF86_Next_VMode ] }; // + + + <XF86_Next_VMode>
  256. };
  257. // Legacy keypad number area
  258. // Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
  259. //
  260. // ┏━━━━━┱
  261. // ┃Num ┃ ⇱ Home
  262. // ┃Lock⇭┃ ⇲ End
  263. // ┡━━━━━╃─────┼─────┼ ⇞ Page up
  264. // │ 7 │ 8 │ 9 │ ⇟ Page down
  265. // │ ⇱ │ ⇧ │ ⇞ │ ⎀ Insert
  266. // ├─────┼─────┼─────┤ ␥ Delete
  267. // │ 4 │ 5 │ 6 │ ⇦⇧⇨⇩ Directions
  268. // │ ⇦ │ │ ⇨ │
  269. // ├─────┼─────┼─────╆
  270. // │ 1 │ 2 │ 3 ┃
  271. // │ ⇲ │ ⇩ │ ⇟ ┃ 1 None
  272. // ├─────┴─────┼─────┨ 2 Num Lock ⇭
  273. // │ 0 │
  274. // │ ⎀ │
  275. // └───────────┴
  276. partial keypad_keys
  277. xkb_symbols "legacynumber" {
  278. key.type[Group1]="KEYPAD" ;
  279. key <KP7> { [ KP_Home, KP_7 ] }; // <home> 7
  280. key <KP8> { [ KP_Up, KP_8 ] }; // <up> 8
  281. key <KP9> { [ KP_Prior, KP_9 ] }; // <prior> 9
  282. key <KP4> { [ KP_Left, KP_4 ] }; // <left> 4
  283. key <KP5> { [ KP_Begin, KP_5 ] }; // <begin> 5
  284. key <KP6> { [ KP_Right, KP_6 ] }; // <right> 6
  285. key <KP1> { [ KP_End, KP_1 ] }; // <end> 1
  286. key <KP2> { [ KP_Down, KP_2 ] }; // <down> 2
  287. key <KP3> { [ KP_Next, KP_3 ] }; // <next> 3
  288. key <KP0> { [ KP_Insert, KP_0 ] }; // <insert> 0
  289. };
  290. // Legacy Wang 725-3771-ae and 725-3771-uk keypad number area
  291. // Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
  292. // This is actually a three-level keypad, declared as four-level
  293. // to avoid defining a new type
  294. //
  295. // ┏━━━━━┱
  296. // ┃Num ┃ ⇱ Home
  297. // ┃Lock⇭┃ ⇲ End
  298. // ┡━━━━━╃─────┼─────┼ ⇞ Page up
  299. // │ 7 │ 8 │ 9 │ ⇟ Page down
  300. // │ ⇱ < │ ⇧ > │ ⇞ ^ │ ⎀ Insert
  301. // ├─────┼─────┼─────┤ ␥ Delete
  302. // │ 4 │ 5 │ 6 │ ⇦⇧⇨⇩ Directions
  303. // │ ⇦ [ │ ] │ ⇨ $ │
  304. // ├─────┼─────┼─────╆
  305. // │ 1 │ 2 │ 3 ┃
  306. // │ ⇲ & │ ⇩ @ │ ⇟ # ┃ 1 None
  307. // ├─────┴─────┼─────┨ 2 Num Lock ⇭
  308. // │ 0 │ 3 Level3 ⇮
  309. // │ ⎀ │
  310. // └───────────┴
  311. partial keypad_keys
  312. xkb_symbols "legacynumber_wang" {
  313. key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
  314. key <KP7> { [ KP_Home, KP_7, less ] }; // <home> 7 <
  315. key <KP8> { [ KP_Up, KP_8, greater ] }; // <up> 8 >
  316. key <KP9> { [ KP_Prior, KP_9, asciicircum ] }; // <prior> 9 ^
  317. key <KP4> { [ KP_Left, KP_4, bracketleft ] }; // <left> 4 [
  318. key <KP5> { [ KP_Begin, KP_5, bracketright ] }; // <begin> 5 ]
  319. key <KP6> { [ KP_Right, KP_6, dollar ] }; // <right> 6 $
  320. key <KP1> { [ KP_End, KP_1, ampersand ] }; // <end> 1 &
  321. key <KP2> { [ KP_Down, KP_2, at ] }; // <down> 2 @
  322. key <KP3> { [ KP_Next, KP_3, numbersign ] }; // <next> 3 #
  323. key <KP0> { [ KP_Insert, KP_0, apostrophe ] }; // <insert> 0 '
  324. };
  325. // Keypad number area with arrow symbols
  326. // Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
  327. //
  328. // ┏━━━━━┱
  329. // ┃Num ┃ ⇱ Home
  330. // ┃Lock⇭┃ ⇲ End
  331. // ┡━━━━━╃─────┼─────┼ ⇞ Page up
  332. // │ 7 ⇖ │ 8 ⇑ │ 9 ⇗ │ ⇟ Page down
  333. // │ ⇱ ↖ │ ⇧ ↑ │ ⇞ ↗ │ ⎀ Insert
  334. // ├─────┼─────┼─────┤ ␥ Delete
  335. // │ 4 ⇐ │ 5 ⇔ │ 6 ⇒ │ ⇦⇧⇨⇩ Directions
  336. // │ ⇦ ← │ ↔ │ ⇨ → │ ⍽ narrow no-break space
  337. // ├─────┼─────┼─────╆
  338. // │ 1 ⇙ │ 2 ⇓ │ 3 ⇘ ┃
  339. // │ ⇲ ↙ │ ⇩ ↓ │ ⇟ ↘ ┃ 1 None
  340. // ├─────┴─────┼─────┨ 2 Num Lock ⇭
  341. // │ 0 ⇕ │ 3 Level3 ⇮
  342. // │ ⎀ ↕ │ 4 Shift+Level3 ⇧⇮
  343. // └───────────┴
  344. partial keypad_keys
  345. xkb_symbols "ossnumber" {
  346. key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
  347. key <KP7> { [ KP_Home, KP_7, 0x1002196, 0x10021D6 ] }; // <home> 7 ↖ ⇖
  348. key <KP8> { [ KP_Up, KP_8, 0x1002191, 0x10021D1 ] }; // <up> 8 ↑ ⇑
  349. key <KP9> { [ KP_Prior, KP_9, 0x1002197, 0x10021D7 ] }; // <prior> 9 ↗ ⇗
  350. key <KP4> { [ KP_Left, KP_4, 0x1002190, 0x10021D0 ] }; // <left> 4 ← ⇐
  351. key <KP5> { [ KP_Begin, KP_5, 0x1002194, 0x10021D4 ] }; // <begin> 5 ↔ ⇔
  352. key <KP6> { [ KP_Right, KP_6, 0x1002192, 0x10021D2 ] }; // <right> 6 → ⇒
  353. key <KP1> { [ KP_End, KP_1, 0x1002199, 0x10021D9 ] }; // <end> 1 ↙ ⇙
  354. key <KP2> { [ KP_Down, KP_2, 0x1002193, 0x10021D3 ] }; // <down> 2 ↓ ⇓
  355. key <KP3> { [ KP_Next, KP_3, 0x1002198, 0x10021D8 ] }; // <next> 3 ↘ ⇘
  356. key <KP0> { [ KP_Insert, KP_0, 0x1002195, 0x10021D5 ] }; // <insert> 0 ↕ ⇕
  357. };
  358. // Wang 725-3771-ae and 725-3771-uk keypad number area with additional arrow symbols
  359. // Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
  360. //
  361. // ┏━━━━━┱
  362. // ┃Num ┃ ⇱ Home
  363. // ┃Lock⇭┃ ⇲ End
  364. // ┡━━━━━╃─────┼─────┼ ⇞ Page up
  365. // │ 7 ↖ │ 8 ↑ │ 9 ↗ │ ⇟ Page down
  366. // │ ⇱ < │ ⇧ > │ ⇞ ^ │ ⎀ Insert
  367. // ├─────┼─────┼─────┤ ␥ Delete
  368. // │ 4 ← │ 5 ↔ │ 6 → │ ⇦⇧⇨⇩ Directions
  369. // │ ⇦ [ │ ] │ ⇨ $ │ ⍽ narrow no-break space
  370. // ├─────┼─────┼─────╆
  371. // │ 1 ↙ │ 2 ↓ │ 3 ↘ ┃
  372. // │ ⇲ & │ ⇩ @ │ ⇟ # ┃ 1 None
  373. // ├─────┴─────┼─────┨ 2 Num Lock ⇭
  374. // │ 0 ↕ │ 3 Level3 ⇮
  375. // │ ⎀ ' │ 4 Shift+Level3 ⇧⇮
  376. // └───────────┴
  377. partial keypad_keys
  378. xkb_symbols "ossnumber_wang" {
  379. key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
  380. key <KP7> { [ KP_Home, KP_7, less, 0x1002196 ] }; // <home> 7 < ↖
  381. key <KP8> { [ KP_Up, KP_8, greater, 0x1002191 ] }; // <up> 8 > ↑
  382. key <KP9> { [ KP_Prior, KP_9, asciicircum, 0x1002197 ] }; // <prior> 9 ^ ↗
  383. key <KP4> { [ KP_Left, KP_4, bracketleft, 0x1002190 ] }; // <left> 4 [ ←
  384. key <KP5> { [ KP_Begin, KP_5, bracketright, 0x1002194 ] }; // <begin> 5 ] ↔
  385. key <KP6> { [ KP_Right, KP_6, dollar, 0x1002192 ] }; // <right> 6 $ →
  386. key <KP1> { [ KP_End, KP_1, ampersand, 0x1002199 ] }; // <end> 1 & ↙
  387. key <KP2> { [ KP_Down, KP_2, at, 0x1002193 ] }; // <down> 2 @ ↓
  388. key <KP3> { [ KP_Next, KP_3, numbersign, 0x1002198 ] }; // <next> 3 # ↘
  389. key <KP0> { [ KP_Insert, KP_0, apostrophe, 0x1002195 ] }; // <insert> 0 ' ↕
  390. };
  391. // Standard base "pc" layout only contains cursor keys, and then gets
  392. // augmented with the digits later. If you define your own layout for
  393. // the numpad you can inherit the cursors, but you'll have to define
  394. // the digits yourself. This module can be included in the rules to
  395. // define math operators; these are the variants used in computer
  396. // languages that are based on ASCII. NoSymbol does not mean that
  397. // nothing is bound to the key but that no assignment is done here.
  398. // srvr_ctrl(stdkeypad) and keypad(x11) declare the operator keys to
  399. // be of type CTRL+ALT in order to assign server control events to
  400. // them, but it uses the second level which is overwritten if we have
  401. // more than one definition (shift state) for the key. Instead, here
  402. // the commands are put at the 4th lever.
  403. partial keypad_keys
  404. xkb_symbols "ops" {
  405. key <KPDV> { [ NoSymbol, slash, NoSymbol, XF86_Ungrab ] };
  406. key <KPMU> { [ NoSymbol, asterisk, NoSymbol, XF86_ClearGrab ] };
  407. key <KPSU> { [ NoSymbol, minus, NoSymbol, XF86_Prev_VMode ] };
  408. key <KPAD> { [ NoSymbol, plus, NoSymbol, XF86_Next_VMode ] };
  409. key <KPEQ> { [ NoSymbol, equal ] };
  410. };
  411. // Hexadecimal Numpad, by Roland Kaufmann <rlndkfmn at gmail dot com>
  412. // License: BSD (also covers variant with ATM digit order)
  413. // Third-level gives the letters used in hexadecimal numbers, or
  414. // columns in small spreadsheets. As a bonus, having 'e' available at
  415. // the center of the keyboard makes it easy to enter floating point
  416. // numbers in scientific notation.
  417. // Equal is added to start formulas (most numpads on PCs don't have
  418. // their own equal key), comma as a list separator (as most
  419. // programming languages wants period as a decimal separator) and
  420. // colon to enter times and ranges. Someone also may want to represent
  421. // multiplication and division in prose using x and colon.
  422. // Two first levels are specified as NoSymbol to not override any
  423. // previous specification. Combine this with another keypad specifier,
  424. // e.g. "legacy".
  425. partial keypad_keys
  426. xkb_symbols "hex" {
  427. key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
  428. // None NumLock AltGr
  429. // symbol row
  430. key <KPDV> { [ NoSymbol, NoSymbol, parenleft ] };
  431. key <KPMU> { [ NoSymbol, NoSymbol, parenright ] };
  432. key <KPSU> { [ NoSymbol, NoSymbol, dollar ] };
  433. // upper row
  434. key <KP7> { [ NoSymbol, NoSymbol, a ] };
  435. key <KP8> { [ NoSymbol, NoSymbol, b ] };
  436. key <KP9> { [ NoSymbol, NoSymbol, c ] };
  437. // home row
  438. key <KP4> { [ NoSymbol, NoSymbol, d ] };
  439. key <KP5> { [ NoSymbol, NoSymbol, e ] };
  440. key <KP6> { [ NoSymbol, NoSymbol, f ] };
  441. key <KPAD> { [ NoSymbol, NoSymbol, comma ] };
  442. // lower row
  443. key <KP1> { [ NoSymbol, NoSymbol, equal ] };
  444. key <KP2> { [ NoSymbol, NoSymbol, x ] };
  445. key <KP3> { [ NoSymbol, NoSymbol, colon ] };
  446. // decimal row
  447. key <KP0> { [ NoSymbol, NoSymbol, backslash ] };
  448. };
  449. // Main numbers follows the traditions from ATMs and phones with
  450. // numbers increasing downwards to the right. (It is easier to
  451. // change the keyboard layout than to reprogram your local ATM;
  452. // also cell-phones are becoming more common while calculators are
  453. // becoming more rare).
  454. // First level is left unspecified, so it may be combined with another
  455. // layout, e.g. "legacy".
  456. partial keypad_keys
  457. xkb_symbols "atm" {
  458. // upper row
  459. key <KP7> { [ NoSymbol, KP_1 ] };
  460. key <KP8> { [ NoSymbol, KP_2 ] };
  461. key <KP9> { [ NoSymbol, KP_3 ] };
  462. // lower row
  463. key <KP1> { [ NoSymbol, KP_7 ] };
  464. key <KP2> { [ NoSymbol, KP_8 ] };
  465. key <KP3> { [ NoSymbol, KP_9 ] };
  466. };
  467. partial modifier_keys
  468. xkb_symbols "pointerkeys" {
  469. key <NMLK> { [ Num_Lock, Pointer_EnableKeys ] };
  470. };
  471. // Only numbers, operators and decimal separator,
  472. // as seen on keypad overlay on Japanese keyboard.
  473. // ┌─┬─┬─┬─┐
  474. // │7│8│9│*│
  475. // ├─┼─┼─┼─┤
  476. // │4│5│6│-│
  477. // ├─┼─┼─┼─┤
  478. // │1│2│3│+│
  479. // ├─┼─┼─┼─┤
  480. // │0│ │·│/│
  481. // └─┴─┴─┴─┘
  482. partial keypad_keys
  483. xkb_symbols "numoperdecsep" {
  484. key <KO7> { [ KP_7 ] };
  485. key <KO8> { [ KP_8 ] };
  486. key <KO9> { [ KP_9 ] };
  487. // ClsGrb kills whichever client has a grab in effect
  488. key <KOMU> {
  489. type="CTRL+ALT",
  490. symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86_ClearGrab ]
  491. };
  492. key <KO4> { [ KP_4 ] };
  493. key <KO5> { [ KP_5 ] };
  494. key <KO6> { [ KP_6 ] };
  495. // -VMode switches to the previous video mode
  496. key <KOSU> {
  497. type="CTRL+ALT",
  498. symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86_Prev_VMode ]
  499. };
  500. key <KO1> { [ KP_1 ] };
  501. key <KO2> { [ KP_2 ] };
  502. key <KO3> { [ KP_3 ] };
  503. // +VMode switches to the next video mode
  504. key <KOAD> {
  505. type="CTRL+ALT",
  506. symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86_Next_VMode ]
  507. };
  508. key <KO0> { [ KP_0 ] };
  509. key <KODL> { [ KP_Decimal ] };
  510. // Ungrab cancels server/keyboard/pointer grabs
  511. key <KODV> {
  512. type="CTRL+ALT",
  513. symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86_Ungrab ]
  514. };
  515. };