Hi,

This diff is based off a diff Geert Hendrickx sent to bugs@ back in 2009. I
have updated it to add the 'swapctrlcaps' bit and removed the xenocara diff.

https://marc.info/?l=openbsd-bugs&m=124284599329729

Not sure if this didn't land because it was sent to bugs@ or if there are other
reasons. Please cluestick me if you know!

OK?

diff --git a/sys/dev/pckbc/wskbdmap_mfii.c b/sys/dev/pckbc/wskbdmap_mfii.c
index d10a909eece..bb513824042 100644
--- a/sys/dev/pckbc/wskbdmap_mfii.c
+++ b/sys/dev/pckbc/wskbdmap_mfii.c
@@ -597,6 +597,61 @@ static const keysym_t pckbd_keydesc_us_dvorak[] = {
     KC(53),                    KS_z,
 };
 
+static const keysym_t pckbd_keydesc_us_colemak[] = {
+/*  pos      command           normal          shifted */
+    KC(41),                    KS_grave,       KS_asciitilde,  KS_dead_tilde,  
KS_asciitilde,
+    KC(2),                     KS_1,           KS_exclam,      KS_exclamdown,  
KS_onesuperior,
+    KC(3),                     KS_2,           KS_at,          KS_masculine,   
KS_twosuperior,
+    KC(4),                     KS_3,           KS_numbersign,  KS_ordfeminine, 
KS_threesuperior,
+    KC(5),                     KS_4,           KS_dollar,      KS_cent,        
KS_sterling,
+    KC(6),                     KS_5,           KS_percent,     KS_asciitilde,  
KS_yen,
+    KC(7),                     KS_6,           KS_asciicircum, KS_asciitilde,  
KS_asciitilde,
+    KC(8),                     KS_7,           KS_ampersand,   KS_eth,         
KS_ETH,
+    KC(9),                     KS_8,           KS_asterisk,    KS_thorn,       
KS_THORN,
+    KC(10),                    KS_9,           KS_parenleft,   KS_asciitilde,  
KS_asciitilde,
+    KC(11),                    KS_0,           KS_parenright,  KS_asciitilde,  
KS_asciitilde,
+    KC(12),                    KS_minus,       KS_underscore,  KS_asciitilde,  
KS_asciitilde,
+    KC(13),                    KS_equal,       KS_plus,        KS_multiply,    
KS_division,
+    KC(16),                    KS_q,           KS_Q,           KS_adiaeresis,  
KS_Adiaeresis,
+    KC(17),                    KS_w,           KS_W,           KS_aring,       
KS_Aring,
+    KC(18),                    KS_f,           KS_F,           KS_atilde,      
KS_Atilde,
+    KC(19),                    KS_p,           KS_P,           KS_oslash,      
KS_Ooblique,
+    KC(20),                    KS_g,           KS_G,           KS_asciitilde,  
KS_asciitilde,
+    KC(21),                    KS_j,           KS_J,           KS_asciitilde,  
KS_asciitilde,
+    KC(22),                    KS_l,           KS_L,           KS_asciitilde,  
KS_asciitilde,
+    KC(23),                    KS_u,           KS_U,           KS_uacute,      
KS_Uacute,
+    KC(24),                    KS_y,           KS_Y,           KS_udiaeresis,  
KS_Udiaeresis,
+    KC(25),                    KS_semicolon,   KS_colon,       KS_odiaeresis,  
KS_Odiaeresis,
+    KC(26),                    KS_bracketleft, KS_braceleft,   
KS_guillemotleft, KS_asciitilde,
+    KC(27),                    KS_bracketright, KS_braceright, 
KS_guillemotright, KS_asciitilde,
+    KC(43),                    KS_backslash,   KS_bar,         KS_asciitilde,  
KS_asciitilde,
+    KC(30),                    KS_a,           KS_A,           KS_aacute,      
KS_Aacute,
+    KC(31),                    KS_r,           KS_R,           KS_dead_grave,  
KS_asciitilde,
+    KC(32),                    KS_s,           KS_S,           KS_ssharp,      
KS_asciitilde,
+    KC(33),                    KS_t,           KS_T,           KS_dead_acute,  
KS_asciitilde,
+    KC(34),                    KS_d,           KS_D,           
KS_dead_diaeresis, KS_asciitilde,
+    KC(35),                    KS_h,           KS_H,           KS_asciitilde,  
KS_asciitilde,
+    KC(36),                    KS_n,           KS_N,           KS_ntilde,      
KS_Ntilde,
+    KC(37),                    KS_e,           KS_E,           KS_eacute,      
KS_Eacute,
+    KC(38),                    KS_i,           KS_I,           KS_iacute,      
KS_Iacute,
+    KC(39),                    KS_o,           KS_O,           KS_oacute,      
KS_Oacute,
+    KC(40),                    KS_apostrophe,  KS_quotedbl,    KS_otilde,      
KS_Otilde,
+    KC(44),                    KS_z,           KS_Z,           KS_ae,          
KS_AE,
+    KC(45),                    KS_x,           KS_X,           
KS_dead_circumflex, KS_asciitilde,
+    KC(46),                    KS_c,           KS_C,           KS_ccedilla,    
KS_Ccedilla,
+    KC(47),                    KS_v,           KS_V,           KS_asciitilde,  
KS_asciitilde,
+    KC(48),                    KS_b,           KS_B,           KS_asciitilde,  
KS_asciitilde,
+    KC(49),                    KS_k,           KS_K,           KS_asciitilde,  
KS_asciitilde,
+    KC(50),                    KS_m,           KS_M,           KS_asciitilde,  
KS_asciitilde,
+    KC(51),                    KS_comma,       KS_less,        
KS_dead_cedilla, KS_asciitilde,
+    KC(52),                    KS_period,      KS_greater,     KS_asciitilde,  
KS_asciitilde,
+    KC(53),                    KS_slash,       KS_question,    
KS_questiondown, KS_asciitilde,
+    KC(58),                    KS_BackSpace,
+    KC(86),                    KS_minus,       KS_underscore,  KS_asciitilde,  
KS_asciitilde,
+    KC(57),                    KS_space,       KS_space,       KS_space,       
KS_nobreakspace,
+    KC(184), KS_Mode_switch,   KS_Multi_key,
+};
+
 static const keysym_t pckbd_keydesc_swapctrlcaps[] = {
 /*  pos      command           normal          shifted */
     KC(29),                    KS_Caps_Lock,
@@ -1129,6 +1184,7 @@ const struct wscons_keydesc pckbd_keydesctab[] = {
        KBD_MAP(KB_NO | KB_NODEAD,      KB_NO,  pckbd_keydesc_no_nodead),
        KBD_MAP(KB_US | KB_DECLK,       KB_US,  pckbd_keydesc_us_declk),
        KBD_MAP(KB_US | KB_DVORAK,      KB_US,  pckbd_keydesc_us_dvorak),
+       KBD_MAP(KB_US | KB_COLEMAK,     KB_US,  pckbd_keydesc_us_colemak),
        KBD_MAP(KB_US | KB_SWAPCTRLCAPS, KB_US, pckbd_keydesc_swapctrlcaps),
        KBD_MAP(KB_US | KB_IOPENER,     KB_US,  pckbd_keydesc_iopener),
        KBD_MAP(KB_UK | KB_SWAPCTRLCAPS, KB_UK, pckbd_keydesc_swapctrlcaps),
@@ -1139,6 +1195,8 @@ const struct wscons_keydesc pckbd_keydesctab[] = {
        KBD_MAP(KB_BE | KB_SWAPCTRLCAPS, KB_BE, pckbd_keydesc_swapctrlcaps),
        KBD_MAP(KB_US | KB_DVORAK | KB_SWAPCTRLCAPS,    KB_US | KB_DVORAK,
                pckbd_keydesc_swapctrlcaps),
+       KBD_MAP(KB_US | KB_COLEMAK | KB_SWAPCTRLCAPS,   KB_US | KB_COLEMAK,
+               pckbd_keydesc_swapctrlcaps),
        KBD_MAP(KB_US | KB_IOPENER | KB_SWAPCTRLCAPS,   KB_US | KB_IOPENER,
                pckbd_keydesc_swapctrlcaps),
        KBD_MAP(KB_ES,                  KB_US,  pckbd_keydesc_es),
diff --git a/sys/dev/usb/ukbdmap.c b/sys/dev/usb/ukbdmap.c
index 3cf1dfe18ed..27a3659f4a2 100644
--- a/sys/dev/usb/ukbdmap.c
+++ b/sys/dev/usb/ukbdmap.c
@@ -626,6 +626,63 @@ static const keysym_t ukbd_keydesc_us_dvorak[] = {
     KC(56),    KS_z,
 };
 
+static const keysym_t ukbd_keydesc_us_colemak[] = {
+/*  pos      command           normal          shifted */
+    KC(4),     KS_a,           KS_A,           KS_aacute,      KS_Aacute,
+    KC(5),     KS_b,           KS_B,           KS_asciitilde,  KS_asciitilde,
+    KC(6),     KS_c,           KS_C,           KS_ccedilla,    KS_Ccedilla,
+    KC(7),     KS_s,           KS_S,           KS_ssharp,      KS_asciitilde,
+    KC(8),     KS_f,           KS_F,           KS_atilde,      KS_Atilde,
+    KC(9),     KS_t,           KS_T,           KS_dead_acute,  KS_asciitilde,
+    KC(10),    KS_d,           KS_D,           KS_dead_diaeresis,KS_asciitilde,
+    KC(11),    KS_h,           KS_H,           KS_asciitilde,  KS_asciitilde,
+    KC(12),    KS_u,           KS_U,           KS_uacute,      KS_Uacute,
+    KC(13),    KS_n,           KS_N,           KS_ntilde,      KS_Ntilde,
+    KC(14),    KS_e,           KS_E,           KS_eacute,      KS_Eacute,
+    KC(15),    KS_i,           KS_I,           KS_iacute,      KS_Iacute,
+    KC(16),    KS_m,           KS_M,           KS_asciitilde,  KS_asciitilde,
+    KC(17),    KS_k,           KS_K,           KS_asciitilde,  KS_asciitilde,
+    KC(18),    KS_y,           KS_Y,           KS_udiaeresis,  KS_Udiaeresis,
+    KC(19),    KS_semicolon,   KS_colon,       KS_odiaeresis,  KS_Odiaeresis,
+    KC(20),    KS_q,           KS_Q,           KS_adiaeresis,  KS_Adiaeresis,
+    KC(21),    KS_p,           KS_P,           KS_oslash,      KS_Ooblique,
+    KC(22),    KS_r,           KS_R,           KS_dead_grave,  KS_asciitilde,
+    KC(23),    KS_g,           KS_G,           KS_asciitilde,  KS_asciitilde,
+    KC(24),    KS_l,           KS_L,           KS_asciitilde,  KS_asciitilde,
+    KC(25),    KS_v,           KS_V,           KS_asciitilde,  KS_asciitilde,
+    KC(26),    KS_w,           KS_W,           KS_aring,       KS_Aring,
+    KC(27),    KS_x,           KS_X,           
KS_dead_circumflex,KS_asciitilde,
+    KC(28),    KS_j,           KS_J,           KS_asciitilde,  KS_asciitilde,
+    KC(29),    KS_z,           KS_Z,           KS_ae,          KS_AE,
+    KC(30),    KS_1,           KS_exclam,      KS_exclamdown,  KS_onesuperior,
+    KC(31),    KS_2,           KS_at,          KS_masculine,   KS_twosuperior,
+    KC(32),    KS_3,           KS_numbersign,  KS_ordfeminine, 
KS_threesuperior,
+    KC(33),    KS_4,           KS_dollar,      KS_cent,        KS_sterling,
+    KC(34),    KS_5,           KS_percent,     KS_asciitilde,  KS_yen,
+    KC(35),    KS_6,           KS_asciicircum, KS_asciitilde,  KS_asciitilde,
+    KC(36),    KS_7,           KS_ampersand,   KS_eth,         KS_ETH,
+    KC(37),    KS_8,           KS_asterisk,    KS_thorn,       KS_THORN,
+    KC(38),    KS_9,           KS_parenleft,   KS_asciitilde,  KS_asciitilde,
+    KC(39),    KS_0,           KS_parenright,  KS_asciitilde,  KS_asciitilde,
+    KC(44),    KS_space,       KS_space,       KS_space,       KS_nobreakspace,
+    KC(45),    KS_minus,       KS_underscore,  KS_asciitilde,  KS_asciitilde,
+    KC(46),    KS_equal,       KS_plus,        KS_multiply,    KS_division,
+    KC(47),    KS_bracketleft, KS_braceleft,   KS_guillemotleft,KS_asciitilde,
+    KC(48),    KS_bracketright,KS_braceright,  KS_guillemotright,KS_asciitilde,
+    KC(49),    KS_backslash,   KS_bar,         KS_asciitilde,  KS_asciitilde,
+    KC(50),    KS_backslash,   KS_bar,         KS_asciitilde,  KS_asciitilde,
+    KC(51),    KS_o,           KS_O,           KS_oacute,      KS_Oacute,
+    KC(52),    KS_apostrophe,  KS_quotedbl,    KS_otilde,      KS_Otilde,
+    KC(53),    KS_grave,       KS_asciitilde,  KS_dead_tilde,  KS_asciitilde,
+    KC(54),    KS_comma,       KS_less,        KS_dead_cedilla,KS_asciitilde,
+    KC(55),    KS_period,      KS_greater,     KS_asciitilde,  KS_asciitilde,
+    KC(56),    KS_slash,       KS_question,    KS_questiondown,KS_asciitilde,
+    KC(57),    KS_BackSpace,
+    KC(100),   KS_minus,       KS_underscore,  KS_asciitilde,  KS_asciitilde,
+    KC(224),   KS_Cmd1,        KS_Control_L,
+    KC(230),   KS_Mode_switch, KS_Multi_key,
+};
+
 static const keysym_t ukbd_keydesc_swapctrlcaps[] = {
 /*  pos      command           normal          shifted */
     KC(57),    KS_Cmd1,        KS_Control_L,
@@ -1179,6 +1236,7 @@ const struct wscons_keydesc ukbd_keydesctab[] = {
        KBD_MAP(KB_NO,                  KB_DK,  ukbd_keydesc_no),
        KBD_MAP(KB_NO | KB_NODEAD,      KB_NO,  ukbd_keydesc_no_nodead),
        KBD_MAP(KB_US | KB_DVORAK,      KB_US,  ukbd_keydesc_us_dvorak),
+       KBD_MAP(KB_US | KB_COLEMAK,     KB_US,  ukbd_keydesc_us_colemak),
        KBD_MAP(KB_US | KB_SWAPCTRLCAPS, KB_US, ukbd_keydesc_swapctrlcaps),
        KBD_MAP(KB_US | KB_IOPENER,     KB_US,  ukbd_keydesc_iopener),
        KBD_MAP(KB_UK | KB_SWAPCTRLCAPS, KB_UK, ukbd_keydesc_swapctrlcaps),
@@ -1191,6 +1249,8 @@ const struct wscons_keydesc ukbd_keydesctab[] = {
        KBD_MAP(KB_BE | KB_SWAPCTRLCAPS, KB_BE, ukbd_keydesc_swapctrlcaps),
        KBD_MAP(KB_US | KB_DVORAK | KB_SWAPCTRLCAPS,    KB_US | KB_DVORAK,
                ukbd_keydesc_swapctrlcaps),
+       KBD_MAP(KB_US | KB_COLEMAK | KB_SWAPCTRLCAPS,   KB_US | KB_COLEMAK,
+               ukbd_keydesc_swapctrlcaps),
        KBD_MAP(KB_US | KB_IOPENER | KB_SWAPCTRLCAPS,   KB_US | KB_IOPENER,
                ukbd_keydesc_swapctrlcaps),
        KBD_MAP(KB_ES,                  KB_US,  ukbd_keydesc_es),
diff --git a/sys/dev/wscons/wsksymdef.h b/sys/dev/wscons/wsksymdef.h
index 486b8840c4f..4a2e7b70d5f 100644
--- a/sys/dev/wscons/wsksymdef.h
+++ b/sys/dev/wscons/wsksymdef.h
@@ -746,6 +746,7 @@
 #define KB_IOPENER             0x00000040 /* f1-f12 -> ESC,f1-f11 */
 #define KB_MACHDEP             0x00000080 /* machine dependent */
 #define KB_APPLE               0x00010000 /* Apple specific layout */
+#define KB_COLEMAK             0x02000000 /* Colemak layout */
 #define KB_DEFAULT             0x80000000 /* (attach-only) default layout */
 
 #define KB_ENCTAB \
@@ -788,6 +789,7 @@
        { KB_METAESC,   "metaesc" }, \
        { KB_IOPENER,   "iopener" }, \
        { KB_MACHDEP,   "machdep" }, \
-       { KB_APPLE,     "apple" }
+       { KB_APPLE,     "apple" }, \
+       { KB_COLEMAK,   "colemak" }
 
 #endif /* !_DEV_WSCONS_WSKSYMDEF_H_ */

-- 
PGP: 0x1F81112D62A9ADCE / 3586 3350 BFEA C101 DB1A  4AF0 1F81 112D 62A9 ADCE

Reply via email to