Каждый, кто создавал кастомную не-QWERTY раскладку клавиатуры через Microsoft Keyboard Layout Creator (MSKLC), обнаружил, что в процессе работы во множестве программ (включая все программы в .NET) горячие клавиши находятся на тех же местах, что и раньше у QWERTY-раскладки (Ctrl+C, Ctrl+V всё там же; для пользователя Dvorak это теперь Ctrl+J и Ctrl+K, соответственно).

В этой ситуации разработчики приложений ни в чём ни виноваты, дело в особенности работы MSKLC, которая не меняет расположение виртуальных клавиш. Сейчас разберёмся, как устроен .klc-файл и как его отредактировать, чтобы всё встало на свои места.

Оглавление

  • Немного абсурда

  • Структура .klc-файла

  • Лечение раскладки

  • Немного послесловия

Немного абсурда

В Linux: жмёшь R - воспринимается, как R какая бы это раскладка ни была. По идее, в Windows всё так же, но работает только с раскладками, что идут "в коробке" с системой (классический Dvorak там тоже есть).

Проблемы появляются при разработке собственных раскладок, либо при скачивании сторонних раскладок, в которых автор не учёл мелочи при работе в MSKLC, речь о которой пойдёт далее.

Вдобавок, наблюдается некорректная работа Caps Lock - регистр меняется там же, где стояли алфавитные символы в QWERTY (спецсимволы тоже меняются)

Некорректная работа Caps Lock в кастомной раскладке Дворака на 8 клавишах
Некорректная работа Caps Lock в кастомной раскладке Дворака на 8 клавишах

MSKLC в работе не меняет данные о виртуальных клавишах в раскладке!

Эта "мелочь" является корнем всех проблем с горячими клавишами и ответом на вопрос "Почему они не переехали?!"

MSKLC работает с файлами, которые имеют расширение .klc. По сути - это обыкновенный текстовый файл, который можно легко отредактировать и излечить раскладку!

Структура .klc-файла

Как было сказано ранее, .klc-файл представляет собой текстовый документ, в котором описывается вся информация о раскладке клавиатуры, с которой работает автор.

Содержимое .klc-файла
Содержимое .klc-файла
.klc-файл QWERTY-раскладки
KBD	Layout01	"US"

COPYRIGHT	"(c) 2022 Company"

COMPANY	"Company"

LOCALENAME	"en-US"

LOCALEID	"00000409"

VERSION	1.0

SHIFTSTATE

0	//Column 4
1	//Column 5 : Shft
2	//Column 6 :       Ctrl

LAYOUT		;an extra '@' at the end is a dead key

//SC	VK_		Cap	0	1	2
//--	----		----	----	----	----

02	1		0	1	0021	-1		// DIGIT ONE, EXCLAMATION MARK, <none>
03	2		0	2	0040	-1		// DIGIT TWO, COMMERCIAL AT, <none>
04	3		0	3	0023	-1		// DIGIT THREE, NUMBER SIGN, <none>
05	4		0	4	0024	-1		// DIGIT FOUR, DOLLAR SIGN, <none>
06	5		0	5	0025	-1		// DIGIT FIVE, PERCENT SIGN, <none>
07	6		0	6	005e	-1		// DIGIT SIX, CIRCUMFLEX ACCENT, <none>
08	7		0	7	0026	-1		// DIGIT SEVEN, AMPERSAND, <none>
09	8		0	8	002a	-1		// DIGIT EIGHT, ASTERISK, <none>
0a	9		0	9	0028	-1		// DIGIT NINE, LEFT PARENTHESIS, <none>
0b	0		0	0	0029	-1		// DIGIT ZERO, RIGHT PARENTHESIS, <none>
0c	OEM_MINUS	0	002d	005f	-1		// HYPHEN-MINUS, LOW LINE, <none>
0d	OEM_PLUS	0	003d	002b	-1		// EQUALS SIGN, PLUS SIGN, <none>
10	Q		1	q	Q	-1		// LATIN SMALL LETTER Q, LATIN CAPITAL LETTER Q, <none>
11	W		1	w	W	-1		// LATIN SMALL LETTER W, LATIN CAPITAL LETTER W, <none>
12	E		1	e	E	-1		// LATIN SMALL LETTER E, LATIN CAPITAL LETTER E, <none>
13	R		1	r	R	-1		// LATIN SMALL LETTER R, LATIN CAPITAL LETTER R, <none>
14	T		1	t	T	-1		// LATIN SMALL LETTER T, LATIN CAPITAL LETTER T, <none>
15	Y		1	y	Y	-1		// LATIN SMALL LETTER Y, LATIN CAPITAL LETTER Y, <none>
16	U		1	u	U	-1		// LATIN SMALL LETTER U, LATIN CAPITAL LETTER U, <none>
17	I		1	i	I	-1		// LATIN SMALL LETTER I, LATIN CAPITAL LETTER I, <none>
18	O		1	o	O	-1		// LATIN SMALL LETTER O, LATIN CAPITAL LETTER O, <none>
19	P		1	p	P	-1		// LATIN SMALL LETTER P, LATIN CAPITAL LETTER P, <none>
1a	OEM_4		0	005b	007b	001b		// LEFT SQUARE BRACKET, LEFT CURLY BRACKET, ESCAPE
1b	OEM_6		0	005d	007d	001d		// RIGHT SQUARE BRACKET, RIGHT CURLY BRACKET, INFORMATION SEPARATOR THREE
1e	A		1	a	A	-1		// LATIN SMALL LETTER A, LATIN CAPITAL LETTER A, <none>
1f	S		1	s	S	-1		// LATIN SMALL LETTER S, LATIN CAPITAL LETTER S, <none>
20	D		1	d	D	-1		// LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, <none>
21	F		1	f	F	-1		// LATIN SMALL LETTER F, LATIN CAPITAL LETTER F, <none>
22	G		1	g	G	-1		// LATIN SMALL LETTER G, LATIN CAPITAL LETTER G, <none>
23	H		1	h	H	-1		// LATIN SMALL LETTER H, LATIN CAPITAL LETTER H, <none>
24	J		1	j	J	-1		// LATIN SMALL LETTER J, LATIN CAPITAL LETTER J, <none>
25	K		1	k	K	-1		// LATIN SMALL LETTER K, LATIN CAPITAL LETTER K, <none>
26	L		1	l	L	-1		// LATIN SMALL LETTER L, LATIN CAPITAL LETTER L, <none>
27	OEM_1		0	003b	003a	-1		// SEMICOLON, COLON, <none>
28	OEM_7		0	0027	0022	-1		// APOSTROPHE, QUOTATION MARK, <none>
29	OEM_3		0	0060	007e	-1		// GRAVE ACCENT, TILDE, <none>
2b	OEM_5		0	005c	007c	001c		// REVERSE SOLIDUS, VERTICAL LINE, INFORMATION SEPARATOR FOUR
2c	Z		1	z	Z	-1		// LATIN SMALL LETTER Z, LATIN CAPITAL LETTER Z, <none>
2d	X		1	x	X	-1		// LATIN SMALL LETTER X, LATIN CAPITAL LETTER X, <none>
2e	C		1	c	C	-1		// LATIN SMALL LETTER C, LATIN CAPITAL LETTER C, <none>
2f	V		1	v	V	-1		// LATIN SMALL LETTER V, LATIN CAPITAL LETTER V, <none>
30	B		1	b	B	-1		// LATIN SMALL LETTER B, LATIN CAPITAL LETTER B, <none>
31	N		1	n	N	-1		// LATIN SMALL LETTER N, LATIN CAPITAL LETTER N, <none>
32	M		1	m	M	-1		// LATIN SMALL LETTER M, LATIN CAPITAL LETTER M, <none>
33	OEM_COMMA	0	002c	003c	-1		// COMMA, LESS-THAN SIGN, <none>
34	OEM_PERIOD	0	002e	003e	-1		// FULL STOP, GREATER-THAN SIGN, <none>
35	OEM_2		0	002f	003f	-1		// SOLIDUS, QUESTION MARK, <none>
39	SPACE		0	0020	0020	0020		// SPACE, SPACE, SPACE
56	OEM_102	0	005c	007c	001c		// REVERSE SOLIDUS, VERTICAL LINE, INFORMATION SEPARATOR FOUR
53	DECIMAL	0	002e	002e	-1		// FULL STOP, FULL STOP, 


KEYNAME

01	Esc
0e	Backspace
0f	Tab
1c	Enter
1d	Ctrl
2a	Shift
36	"Right Shift"
37	"Num *"
38	Alt
39	Space
3a	"Caps Lock"
3b	F1
3c	F2
3d	F3
3e	F4
3f	F5
40	F6
41	F7
42	F8
43	F9
44	F10
45	Pause
46	"Scroll Lock"
47	"Num 7"
48	"Num 8"
49	"Num 9"
4a	"Num -"
4b	"Num 4"
4c	"Num 5"
4d	"Num 6"
4e	"Num +"
4f	"Num 1"
50	"Num 2"
51	"Num 3"
52	"Num 0"
53	"Num Del"
54	"Sys Req"
57	F11
58	F12
7c	F13
7d	F14
7e	F15
7f	F16
80	F17
81	F18
82	F19
83	F20
84	F21
85	F22
86	F23
87	F24

KEYNAME_EXT

1c	"Num Enter"
1d	"Right Ctrl"
35	"Num /"
37	"Prnt Scrn"
38	"Right Alt"
45	"Num Lock"
46	Break
47	Home
48	Up
49	"Page Up"
4b	Left
4d	Right
4f	End
50	Down
51	"Page Down"
52	Insert
53	Delete
54	<00>
56	Help
5b	"Left Windows"
5c	"Right Windows"
5d	Application

DESCRIPTIONS

0409	US
LANGUAGENAMES

0409	English (United States)
ENDKBD

Следует отметить тот факт, что данные служебных клавиш в KEYNAME, KEYNAME_EXT (tab, enter и т.п.) изменить никак нельзя; даже манипуляции в .klc-файле не приведут к результату.

Работа будет просходить в секции LAYOUT, где можно обнаружить и отсутствие Caps Lock в нужных клавишах, и несовпадающие символы с виртуальными клавишами.

Пример из .klc-файла моей раскладки (клавиши: 'QJK, при этом виртуальные клавиши помечены, как ZXCV). Тут же и ненужное срабатывание Caps Lock (на месте апострофа (2c) значение должно быть = 0)

//SC	VK_		Cap		0		1		2		6
//--	---		---		---		---		---		---
2c		Z		1		0027	0022	-1		-1			// APOSTROPHE, QUOTATION MARK, <none>, <none>
2d		X		1		q		Q		-1		005b		// LATIN SMALL LETTER Q, LATIN CAPITAL LETTER Q, <none>, LEFT SQUARE BRACKET
2e		C		1		j		J		-1		005d		// LATIN SMALL LETTER J, LATIN CAPITAL LETTER J, <none>, RIGHT SQUARE BRACKET
2f		V		1		k		K		-1		005f		// LATIN SMALL LETTER K, LATIN CAPITAL LETTER K, <none>, LOW LINE

Лечение раскладки

Шаг 1. Отредактировать .klc-файл так, чтобы коды клавиш и символы совпадали (ну или так, как хочется).

Клавиши букв и цифр обозначаются соответствующим образом (A-Z, 0-9). Клавиши знаков препинания обозначаются иначе, через OEM_

Код виртуальной клавиши

Символ на клавиатуре

OEM_1

;:

OEM_2

/?

OEM_3

`~

OEM_4

[{

OEM_5

\|

OEM_6

]}

OEM_7

'"

OEM_102 (у клавиатур с коротким левым Shift)

\|

OEM_COMMA

,<

OEM_PERIOD

.>

OEM_PLUS

+=

OEM_MINUS

-_

.klc-файл ДО
KBD	schtaoeu	"US SchtinguêrDvorak"

COPYRIGHT	"Meh"

COMPANY	"Schtinguêrch"

LOCALENAME	"en-US"

LOCALEID	"00000409"

VERSION	1.0

SHIFTSTATE

0	//Column 4
1	//Column 5 : Shft
2	//Column 6 :       Ctrl
6	//Column 7 :       Ctrl Alt

LAYOUT		;an extra '@' at the end is a dead key

//SC	VK_		Cap	0	1	2	6
//--	----		----	----	----	----	----

02	1		0	1	003f	-1	-1		// DIGIT ONE, QUESTION MARK, <none>, <none>
03	2		0	2	0040	-1	-1		// DIGIT TWO, COMMERCIAL AT, <none>, <none>
04	3		0	3	0023	-1	-1		// DIGIT THREE, NUMBER SIGN, <none>, <none>
05	4		0	4	0024	-1	-1		// DIGIT FOUR, DOLLAR SIGN, <none>, <none>
06	5		0	5	0025	-1	-1		// DIGIT FIVE, PERCENT SIGN, <none>, <none>
07	6		0	6	005e	-1	-1		// DIGIT SIX, CIRCUMFLEX ACCENT, <none>, <none>
08	7		0	7	0026	-1	-1		// DIGIT SEVEN, AMPERSAND, <none>, <none>
09	8		0	8	002a	-1	-1		// DIGIT EIGHT, ASTERISK, <none>, <none>
0a	9		0	9	0028	-1	-1		// DIGIT NINE, LEFT PARENTHESIS, <none>, <none>
0b	0		0	0	0029	-1	-1		// DIGIT ZERO, RIGHT PARENTHESIS, <none>, <none>
0c	OEM_MINUS	0	002d	005f	-1	-1		// HYPHEN-MINUS, LOW LINE, <none>, <none>
0d	OEM_PLUS	0	003d	002b	-1	-1		// EQUALS SIGN, PLUS SIGN, <none>, <none>
10	Q		1	003b	003a	-1	-1		// SEMICOLON, COLON, <none>, <none>
11	W		1	002c	0021	-1	003c		// COMMA, EXCLAMATION MARK, <none>, LESS-THAN SIGN
12	E		1	002e	003d	-1	003e		// FULL STOP, EQUALS SIGN, <none>, GREATER-THAN SIGN
13	R		1	p	P	-1	007e		// LATIN SMALL LETTER P, LATIN CAPITAL LETTER P, <none>, TILDE
14	T		1	y	Y	-1	-1		// LATIN SMALL LETTER Y, LATIN CAPITAL LETTER Y, <none>, <none>
15	Y		1	f	F	-1	-1		// LATIN SMALL LETTER F, LATIN CAPITAL LETTER F, <none>, <none>
16	U		1	g	G	-1	00e6		// LATIN SMALL LETTER G, LATIN CAPITAL LETTER G, <none>, LATIN SMALL LETTER AE (ash) *
17	I		1	l	L	-1	005e		// LATIN SMALL LETTER L, LATIN CAPITAL LETTER L, <none>, CIRCUMFLEX ACCENT
18	O		1	r	R	-1	0023		// LATIN SMALL LETTER R, LATIN CAPITAL LETTER R, <none>, NUMBER SIGN
19	P		1	c	C	-1	007c		// LATIN SMALL LETTER C, LATIN CAPITAL LETTER C, <none>, VERTICAL LINE
1a	OEM_4		0	0301@	0302@	001b	00c6		// COMBINING ACUTE ACCENT (Oxia, Tonos), COMBINING CIRCUMFLEX ACCENT, ESCAPE, LATIN CAPITAL LETTER AE (ash) *
1b	OEM_6		0	0300@	0308@	001d	-1		// COMBINING GRAVE ACCENT (Varia), COMBINING DIAERESIS (Dialytika), INFORMATION SEPARATOR THREE, <none>
1e	A		1	a	A	-1	007b		// LATIN SMALL LETTER A, LATIN CAPITAL LETTER A, <none>, LEFT CURLY BRACKET
1f	S		1	o	O	-1	0028		// LATIN SMALL LETTER O, LATIN CAPITAL LETTER O, <none>, LEFT PARENTHESIS
20	D		1	e	E	-1	0029		// LATIN SMALL LETTER E, LATIN CAPITAL LETTER E, <none>, RIGHT PARENTHESIS
21	F		1	u	U	-1	007d		// LATIN SMALL LETTER U, LATIN CAPITAL LETTER U, <none>, RIGHT CURLY BRACKET
22	G		1	i	I	-1	0024		// LATIN SMALL LETTER I, LATIN CAPITAL LETTER I, <none>, DOLLAR SIGN
23	H		1	d	D	-1	0025		// LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, <none>, PERCENT SIGN
24	J		1	h	H	-1	002b		// LATIN SMALL LETTER H, LATIN CAPITAL LETTER H, <none>, PLUS SIGN
25	K		1	t	T	-1	002d		// LATIN SMALL LETTER T, LATIN CAPITAL LETTER T, <none>, HYPHEN-MINUS
26	L		1	n	N	-1	002a		// LATIN SMALL LETTER N, LATIN CAPITAL LETTER N, <none>, ASTERISK
27	OEM_1		0	s	S	-1	002f		// LATIN SMALL LETTER S, LATIN CAPITAL LETTER S, <none>, SOLIDUS
28	OEM_7		0	z	Z	-1	0026		// LATIN SMALL LETTER Z, LATIN CAPITAL LETTER Z, <none>, AMPERSAND
29	OEM_3		0	0060	007e	-1	-1		// GRAVE ACCENT, TILDE, <none>, <none>
2b	OEM_5		0	-1	-1	001c	-1		// <none>, <none>, INFORMATION SEPARATOR FOUR, <none>
2c	Z		1	0027	0022	-1	-1		// APOSTROPHE, QUOTATION MARK, <none>, <none>
2d	X		1	q	Q	-1	005b		// LATIN SMALL LETTER Q, LATIN CAPITAL LETTER Q, <none>, LEFT SQUARE BRACKET
2e	C		1	j	J	-1	005d		// LATIN SMALL LETTER J, LATIN CAPITAL LETTER J, <none>, RIGHT SQUARE BRACKET
2f	V		1	k	K	-1	005f		// LATIN SMALL LETTER K, LATIN CAPITAL LETTER K, <none>, LOW LINE
30	B		1	x	X	-1	-1		// LATIN SMALL LETTER X, LATIN CAPITAL LETTER X, <none>, <none>
31	N		1	b	B	-1	-1		// LATIN SMALL LETTER B, LATIN CAPITAL LETTER B, <none>, <none>
32	M		1	m	M	-1	0153		// LATIN SMALL LETTER M, LATIN CAPITAL LETTER M, <none>, LATIN SMALL LIGATURE OE
33	OEM_COMMA	0	w	W	-1	005f		// LATIN SMALL LETTER W, LATIN CAPITAL LETTER W, <none>, LOW LINE
34	OEM_PERIOD	0	v	V	-1	007e		// LATIN SMALL LETTER V, LATIN CAPITAL LETTER V, <none>, TILDE
35	OEM_2		0	002f	005c	-1	0152		// SOLIDUS, REVERSE SOLIDUS, <none>, LATIN CAPITAL LIGATURE OE
39	SPACE		0	0020	0020	0020	-1		// SPACE, SPACE, SPACE, <none>
56	OEM_102	0	005c	007c	001c	-1		// REVERSE SOLIDUS, VERTICAL LINE, INFORMATION SEPARATOR FOUR, <none>
53	DECIMAL	0	002e	002e	-1	-1		// FULL STOP, FULL STOP, , 


DEADKEY	0301

0062	00df	// b -> ß
0061	00e1	// a -> á
0064	00f0	// d -> ð
0069	00ed	// i -> í
0075	00fa	// u -> ú
0065	00e9	// e -> é
006f	00f3	// o -> ó
006e	00f1	// n -> ñ
0063	00e7	// c -> ç
0079	00fd	// y -> ý
0041	00c1	// A -> Á
0044	00d0	// D -> Ð
0049	00cd	// I -> Í
0055	00da	// U -> Ú
0045	00c9	// E -> É
004f	00d3	// O -> Ó
004e	00d1	// N -> Ñ
0021	00a1	// ! -> ¡
0043	00c7	// C -> Ç
0059	00dd	// Y -> Ý
003f	00bf	// ? -> ¿

DEADKEY	0302

0061	00e2	// a -> â
0069	00ee	// i -> î
0075	00fb	// u -> û
0065	00ea	// e -> ê
006f	00f4	// o -> ô
0041	00c2	// A -> Â
0049	00ce	// I -> Î
0055	00db	// U -> Û
0045	00ca	// E -> Ê
004f	00d4	// O -> Ô

DEADKEY	0300

0061	00e0	// a -> à
0069	00ec	// i -> ì
0075	00f9	// u -> ù
0065	00e8	// e -> è
006f	00f2	// o -> ò
0079	00fe	// y -> þ
0041	00c0	// A -> À
0049	00cc	// I -> Ì
0055	00d9	// U -> Ù
0045	00c8	// E -> È
004f	00d2	// O -> Ò
0059	00ff	// Y -> ÿ

DEADKEY	0308

0061	00e4	// a -> ä
0069	00ef	// i -> ï
0075	00fc	// u -> ü
0065	00eb	// e -> ë
006f	00f6	// o -> ö
0079	00ff	// y -> ÿ
0041	00c4	// A -> Ä
0049	00cf	// I -> Ï
0055	00dc	// U -> Ü
0045	00cb	// E -> Ë
004f	00d6	// O -> Ö


KEYNAME

01	Esc
0e	Backspace
0f	Tab
1c	Enter
1d	Ctrl
2a	Shift
36	"Right Shift"
37	"Num *"
38	Alt
39	Space
3a	"Caps Lock"
3b	F1
3c	F2
3d	F3
3e	F4
3f	F5
40	F6
41	F7
42	F8
43	F9
44	F10
45	Pause
46	"Scroll Lock"
47	"Num 7"
48	"Num 8"
49	"Num 9"
4a	"Num -"
4b	"Num 4"
4c	"Num 5"
4d	"Num 6"
4e	"Num +"
4f	"Num 1"
50	"Num 2"
51	"Num 3"
52	"Num 0"
53	"Num Del"
54	"Sys Req"
57	F11
58	F12
7c	F13
7d	F14
7e	F15
7f	F16
80	F17
81	F18
82	F19
83	F20
84	F21
85	F22
86	F23
87	F24

KEYNAME_EXT

1c	"Num Enter"
1d	"Right Ctrl"
35	"Num /"
37	"Prnt Scrn"
38	"Right Alt"
45	"Num Lock"
46	Break
47	Home
48	Up
49	"Page Up"
4b	Left
4d	Right
4f	End
50	Down
51	"Page Down"
52	Insert
53	Delete
54	<00>
56	Help
5b	"Left Windows"
5c	"Right Windows"
5d	Application

KEYNAME_DEAD

0301	"COMBINING ACUTE ACCENT (Oxia, Tonos)"
0302	"COMBINING CIRCUMFLEX ACCENT"
0300	"COMBINING GRAVE ACCENT (Varia)"
0308	"COMBINING DIAERESIS (Dialytika)"


DESCRIPTIONS

0409	US SchtinguêrDvorak
LANGUAGENAMES

0409	English (United States)
ENDKBD

.klc-файл ПОСЛЕ
KBD	schtaoeu	"US SchtinguêrDvorak"

COPYRIGHT	"Meh"

COMPANY	"Schtinguêrch"

LOCALENAME	"en-US"

LOCALEID	"00000409"

VERSION	1.0

SHIFTSTATE

0	//Column 4
1	//Column 5 : Shft
2	//Column 6 :       Ctrl
6	//Column 7 :       Ctrl Alt

LAYOUT		;an extra '@' at the end is a dead key

//SC	VK_		Cap	0	1	2	6
//--	----		----	----	----	----	----

02	1		0	1	003f	-1	-1		// DIGIT ONE, QUESTION MARK, <none>, <none>
03	2		0	2	0040	-1	-1		// DIGIT TWO, COMMERCIAL AT, <none>, <none>
04	3		0	3	0023	-1	-1		// DIGIT THREE, NUMBER SIGN, <none>, <none>
05	4		0	4	0024	-1	-1		// DIGIT FOUR, DOLLAR SIGN, <none>, <none>
06	5		0	5	0025	-1	-1		// DIGIT FIVE, PERCENT SIGN, <none>, <none>
07	6		0	6	005e	-1	-1		// DIGIT SIX, CIRCUMFLEX ACCENT, <none>, <none>
08	7		0	7	0026	-1	-1		// DIGIT SEVEN, AMPERSAND, <none>, <none>
09	8		0	8	002a	-1	-1		// DIGIT EIGHT, ASTERISK, <none>, <none>
0a	9		0	9	0028	-1	-1		// DIGIT NINE, LEFT PARENTHESIS, <none>, <none>
0b	0		0	0	0029	-1	-1		// DIGIT ZERO, RIGHT PARENTHESIS, <none>, <none>
0c	OEM_MINUS	0	002d	005f	-1	-1		// HYPHEN-MINUS, LOW LINE, <none>, <none>
0d	OEM_PLUS	0	003d	002b	-1	-1		// EQUALS SIGN, PLUS SIGN, <none>, <none>
10	OEM_1		0	003b	003a	-1	-1		// SEMICOLON, COLON, <none>, <none>
11	OEM_COMMA		0	002c	0021	-1	003c		// COMMA, EXCLAMATION MARK, <none>, LESS-THAN SIGN
12	OEM_PERIOD		0	002e	003d	-1	003e		// FULL STOP, EQUALS SIGN, <none>, GREATER-THAN SIGN
13	P		1	p	P	-1	007e		// LATIN SMALL LETTER P, LATIN CAPITAL LETTER P, <none>, TILDE
14	Y		1	y	Y	-1	-1		// LATIN SMALL LETTER Y, LATIN CAPITAL LETTER Y, <none>, <none>
15	F		1	f	F	-1	-1		// LATIN SMALL LETTER F, LATIN CAPITAL LETTER F, <none>, <none>
16	G		1	g	G	-1	00e6		// LATIN SMALL LETTER G, LATIN CAPITAL LETTER G, <none>, LATIN SMALL LETTER AE (ash) *
17	L		1	l	L	-1	005e		// LATIN SMALL LETTER L, LATIN CAPITAL LETTER L, <none>, CIRCUMFLEX ACCENT
18	R		1	r	R	-1	0023		// LATIN SMALL LETTER R, LATIN CAPITAL LETTER R, <none>, NUMBER SIGN
19	C		1	c	C	-1	007c		// LATIN SMALL LETTER C, LATIN CAPITAL LETTER C, <none>, VERTICAL LINE
1a	OEM_4		0	0301@	0302@	001b	00c6		// COMBINING ACUTE ACCENT (Oxia, Tonos), COMBINING CIRCUMFLEX ACCENT, ESCAPE, LATIN CAPITAL LETTER AE (ash) *
1b	OEM_6		0	0300@	0308@	001d	-1		// COMBINING GRAVE ACCENT (Varia), COMBINING DIAERESIS (Dialytika), INFORMATION SEPARATOR THREE, <none>
1e	A		1	a	A	-1	007b		// LATIN SMALL LETTER A, LATIN CAPITAL LETTER A, <none>, LEFT CURLY BRACKET
1f	O		1	o	O	-1	0028		// LATIN SMALL LETTER O, LATIN CAPITAL LETTER O, <none>, LEFT PARENTHESIS
20	E		1	e	E	-1	0029		// LATIN SMALL LETTER E, LATIN CAPITAL LETTER E, <none>, RIGHT PARENTHESIS
21	U		1	u	U	-1	007d		// LATIN SMALL LETTER U, LATIN CAPITAL LETTER U, <none>, RIGHT CURLY BRACKET
22	I		1	i	I	-1	0024		// LATIN SMALL LETTER I, LATIN CAPITAL LETTER I, <none>, DOLLAR SIGN
23	D		1	d	D	-1	0025		// LATIN SMALL LETTER D, LATIN CAPITAL LETTER D, <none>, PERCENT SIGN
24	H		1	h	H	-1	002b		// LATIN SMALL LETTER H, LATIN CAPITAL LETTER H, <none>, PLUS SIGN
25	T		1	t	T	-1	002d		// LATIN SMALL LETTER T, LATIN CAPITAL LETTER T, <none>, HYPHEN-MINUS
26	N		1	n	N	-1	002a		// LATIN SMALL LETTER N, LATIN CAPITAL LETTER N, <none>, ASTERISK
27	S		1	s	S	-1	002f		// LATIN SMALL LETTER S, LATIN CAPITAL LETTER S, <none>, SOLIDUS
28	Z		1	z	Z	-1	0026		// LATIN SMALL LETTER Z, LATIN CAPITAL LETTER Z, <none>, AMPERSAND
29	OEM_3		0	0060	007e	-1	-1		// GRAVE ACCENT, TILDE, <none>, <none>
2b	OEM_5		0	-1	-1	001c	-1		// <none>, <none>, INFORMATION SEPARATOR FOUR, <none>
2c	OEM_7		0	0027	0022	-1	-1		// APOSTROPHE, QUOTATION MARK, <none>, <none>
2d	Q		1	q	Q	-1	005b		// LATIN SMALL LETTER Q, LATIN CAPITAL LETTER Q, <none>, LEFT SQUARE BRACKET
2e	J		1	j	J	-1	005d		// LATIN SMALL LETTER J, LATIN CAPITAL LETTER J, <none>, RIGHT SQUARE BRACKET
2f	K		1	k	K	-1	005f		// LATIN SMALL LETTER K, LATIN CAPITAL LETTER K, <none>, LOW LINE
30	X		1	x	X	-1	-1		// LATIN SMALL LETTER X, LATIN CAPITAL LETTER X, <none>, <none>
31	B		1	b	B	-1	-1		// LATIN SMALL LETTER B, LATIN CAPITAL LETTER B, <none>, <none>
32	M		1	m	M	-1	0153		// LATIN SMALL LETTER M, LATIN CAPITAL LETTER M, <none>, LATIN SMALL LIGATURE OE
33	W		1	w	W	-1	005f		// LATIN SMALL LETTER W, LATIN CAPITAL LETTER W, <none>, LOW LINE
34	V		1	v	V	-1	007e		// LATIN SMALL LETTER V, LATIN CAPITAL LETTER V, <none>, TILDE
35	OEM_2		0	002f	005c	-1	0152		// SOLIDUS, REVERSE SOLIDUS, <none>, LATIN CAPITAL LIGATURE OE
39	SPACE		0	0020	0020	0020	-1		// SPACE, SPACE, SPACE, <none>
56	OEM_102	0	005c	007c	001c	-1		// REVERSE SOLIDUS, VERTICAL LINE, INFORMATION SEPARATOR FOUR, <none>
53	DECIMAL	0	002e	002e	-1	-1		// FULL STOP, FULL STOP, , 


DEADKEY	0301

0062	00df	// b -> ß
0061	00e1	// a -> á
0064	00f0	// d -> ð
0069	00ed	// i -> í
0075	00fa	// u -> ú
0065	00e9	// e -> é
006f	00f3	// o -> ó
006e	00f1	// n -> ñ
0063	00e7	// c -> ç
0079	00fd	// y -> ý
0041	00c1	// A -> Á
0044	00d0	// D -> Ð
0049	00cd	// I -> Í
0055	00da	// U -> Ú
0045	00c9	// E -> É
004f	00d3	// O -> Ó
004e	00d1	// N -> Ñ
0021	00a1	// ! -> ¡
0043	00c7	// C -> Ç
0059	00dd	// Y -> Ý
003f	00bf	// ? -> ¿

DEADKEY	0302

0061	00e2	// a -> â
0069	00ee	// i -> î
0075	00fb	// u -> û
0065	00ea	// e -> ê
006f	00f4	// o -> ô
0041	00c2	// A -> Â
0049	00ce	// I -> Î
0055	00db	// U -> Û
0045	00ca	// E -> Ê
004f	00d4	// O -> Ô

DEADKEY	0300

0061	00e0	// a -> à
0069	00ec	// i -> ì
0075	00f9	// u -> ù
0065	00e8	// e -> è
006f	00f2	// o -> ò
0079	00fe	// y -> þ
0041	00c0	// A -> À
0049	00cc	// I -> Ì
0055	00d9	// U -> Ù
0045	00c8	// E -> È
004f	00d2	// O -> Ò
0059	00ff	// Y -> ÿ

DEADKEY	0308

0061	00e4	// a -> ä
0069	00ef	// i -> ï
0075	00fc	// u -> ü
0065	00eb	// e -> ë
006f	00f6	// o -> ö
0079	00ff	// y -> ÿ
0041	00c4	// A -> Ä
0049	00cf	// I -> Ï
0055	00dc	// U -> Ü
0045	00cb	// E -> Ë
004f	00d6	// O -> Ö


KEYNAME

01	Esc
0e	Backspace
0f	Tab
1c	Enter
1d	Ctrl
2a	Shift
36	"Right Shift"
37	"Num *"
38	Alt
39	Space
3a	"Caps Lock"
3b	F1
3c	F2
3d	F3
3e	F4
3f	F5
40	F6
41	F7
42	F8
43	F9
44	F10
45	Pause
46	"Scroll Lock"
47	"Num 7"
48	"Num 8"
49	"Num 9"
4a	"Num -"
4b	"Num 4"
4c	"Num 5"
4d	"Num 6"
4e	"Num +"
4f	"Num 1"
50	"Num 2"
51	"Num 3"
52	"Num 0"
53	"Num Del"
54	"Sys Req"
57	F11
58	F12
7c	F13
7d	F14
7e	F15
7f	F16
80	F17
81	F18
82	F19
83	F20
84	F21
85	F22
86	F23
87	F24

KEYNAME_EXT

1c	"Num Enter"
1d	"Right Ctrl"
35	"Num /"
37	"Prnt Scrn"
38	"Right Alt"
45	"Num Lock"
46	Break
47	Home
48	Up
49	"Page Up"
4b	Left
4d	Right
4f	End
50	Down
51	"Page Down"
52	Insert
53	Delete
54	<00>
56	Help
5b	"Left Windows"
5c	"Right Windows"
5d	Application

KEYNAME_DEAD

0301	"COMBINING ACUTE ACCENT (Oxia, Tonos)"
0302	"COMBINING CIRCUMFLEX ACCENT"
0300	"COMBINING GRAVE ACCENT (Varia)"
0308	"COMBINING DIAERESIS (Dialytika)"


DESCRIPTIONS

0409	US SchtinguêrDvorak
LANGUAGENAMES

0409	English (United States)
ENDKBD

Шаг 2. Открыть отредактированный файл в MSKLC, собрать раскладку и установить её

Перед тем, как открывать MSKLC, необходимо удалить проблемную раскладку из системы (то же, что и удалять программы через панель управления). Про бэкапы не забываем..

После того, как был открыт .klc-файл, можно сразу убедиться в правильной настройке переключения Caps Lock

Исправленный Caps Lock
Исправленный Caps Lock

Затем выбираем Project > Build DLL and Setup Package, открываем полученные исходники и запускаем установщик (setup.exe), перезагружаем ПК и радуемся

Немного послесловия

Всё, как всегда, криво, но решаемо. Таким же макаром, можно настроить русскоязычную раскладку, чтобы система воспринимала ЙЦУКЕН или Диктор как Dvorak или Workman или что-то ещё, а не QWERTY.

Комментарии (13)


  1. Medeyko
    27.11.2022 21:13
    +10

    Ctrl-X, Ctrl-C и Ctrl-V находятся в том месте не потому что они соответствуют буквам X, C и V (найдите в слове "paste" букву "v"), а потому что они находятся рядом так, что их удобно запомнить и удобно нажимать одной рукой. Соответственно, при смене раскладки никуда их переносить не надо.


    1. p07a1330
      27.11.2022 21:24
      +6

      найдите в слове "paste" букву "v"

      Vstavit` же)

      .

      "Саня Дрозд дошел до буквы "и" в слове "передовую" " (c) А. Б. С.


    1. Schtunguerch Автор
      28.11.2022 10:45

      Может быть, я такой неправильный, но мне гораздо важнее факт того, чтобы символ, которую я нажимаю при наборе текста, и символ в горячей клавише 100% совпадал (я использую обе руки на клавиатуре и стараюсь использовать мышь по-минимуму).

      В противном случае, мозг включает медленный интерпретатор с QWERTY на Dvorak, а левая рука начинает ругаться.

      IMHO: Одной рукой - это для графических редакторов и CAD'ов


  1. ARad
    27.11.2022 22:40

    Я использую типографскую раскладку Ильи Бирмана.


    1. Schtunguerch Автор
      28.11.2022 11:12
      +1

      Там, конечно, вагон доп.символов. Но "я не редактор - мне не понять" :)


  1. sepuka
    28.11.2022 00:30
    +2

    Шорткаты -- это просто набор топологических пальцевых комбинаций. Самое главное в клавиатуре лично для меня -- не мифическая раскладка повышенной удобности, я на неё не смотрю в принципе. Главное -- чтобы клавиши просто были на своём месте: условный CTR-ALT-D должен браться одной левой рукою, условный WIN-SHIFT-F10 -- одною правою рукою.

    WIN -- не эвфемизм, а суровая необходимость, причём с обеих сторон клавиатуры. Последний раз, когда я вообще интересовался количеством шорткатов (это был фотошоп и год 2003), только в одной этой программе их уже было более трёх сотен. В каждодневном использовании из которых было навскидку не менее полусотни. Т.е. уcловный ALT-F гарантированно давно чем-то занят. Поэтому сейчас, когда моя работа обычно выглядит как: я набираю шорткат > он вызывает скрипт > скрипт затыкивает серией рутинных команд и движений мышкой, сколько-нибудь осмысленный набор своих шорткатов должен содержать так ненавистные вам обе клавиши WIN просто чтобы не пересекаться с шорткатами основной программы.


    1. ris58h
      28.11.2022 10:45

      Последний раз, когда я вообще интересовался количеством шорткатов (это
      был фотошоп и год 2003), только в одной этой программе их уже было более
      трёх сотен

      У этой проблемы есть разные решения, но люди продолжают лепить шорткаты.

      Одно из решений - leader key. Такое есть в spacemacs (смесь vim и emacs, где команды активируется путём ввода последовательности символов после нажатия на пробел). Такое есть и в Windows - там эту роль выполняет alt. Последовательность alt, e, c - копировать, например. Великолепная задумка, которая не пользуется популярностью.

      Ещё одно решение - режимы, как в vim. Неверное, его не так просто реализовать для любой программы и это может запутать пользователя, но я пользуюсь, например, Vimium в браузере.

      P.S.: есть интересный блогпост на эту тему http://xahlee.info/kbd/banish_key_chords.html другие посты про клавиатуры там тоже интересные


      1. sepuka
        28.11.2022 11:19

        С какого перепуга появилось слово «проблема»? Есть несколько удобных способов ввода команд, позволяющих ускорить работу. Это не проблема, а удобство.

        Фотошоп, надо сделать Image Size, шорткат не знаем? Первый раз идём мышкой Image>Image Size. Запоминаем подчёркнутые буквы, они доступны через ALT, т.е. то же самое достигается с клавиатуры ALT-i > ALT-e, на шорткат ещё не смотрим. В пятый раз запоминается написанный рядом шорткат ALT-CTRL-I, далее набирается уже он. В сороковой раз скорее всего будет создан Action, делающий ещё несколько операций и привязан к своему шорткату внутри программы. Не надо запоминать все сотни шорткатов, надо просто быстро находить те, что реально используются.

        В четырёхсотый раз делается скрипт с key sequence и вызывается через сторонний инструмент, например, AutoHotkey. Чтобы не пересекаться с программой, шорткат будет содержать клавиши WIN и т.д.

        В четырёхтысячный раз пишется уже скрипт, который сам делает нужную работу. Фотошоп для таких задач меняется на Krita, там нормальный питоновский скриптер с доступом ко всему.

        Но, что особенно характерно, ни в одном из примеров для реального ускорения работы не пришлось выдумывать никакой альтернативной раскладки клавиатуры, это всё та же раскладка, какой я её увидел в 1986 году. Добавилась, по сути, только кнопка WIN и дублирование с двух сторон. Всё.


        1. ris58h
          28.11.2022 11:54

          С какого перепуга появилось слово «проблема»?

          Более трёх сотен шорткатов это удобство? Ну и далее вы описываете решение в несколько параграфов для того, что не является проблемой. Думаю, что она всё же существует.

          Напомню, что простой пользователь не будет никакие скрипты в AutoHotkey создавать и никакой питоновский скриптер тоже использовать не будет.

          они доступны через ALT, т.е. то же самое достигается с клавиатуры ALT-i > ALT-e

          Там можно просто Alt, i, e нажимать последовательно. В этом и вся фишка. Зажимать alt не нужно (по крайней мере так было лет 10 назад, когда я Windows ещё пользовался). Я об этом способе и упомянул как раз (leader key), как об альтернативе пальцеломающим WIN+CTL+ALT+SHIT+F15.

          Про альтернативные раскладки в моём комментарии ни слова.


          1. sepuka
            28.11.2022 14:30

            > Более трёх сотен шорткатов это удобство?

            Если программа может делать сотни разных операций и их можно не только доставать мышкой из меню, но и быстро вызывать шорткатами, то что это, если не удобство? Их не надо запоминать все, используемые сами запомнятся.

            >Напомню, что простой пользователь не будет никакие скрипты в AutoHotkey создавать и никакой питоновский скриптер тоже использовать не будет.

            Ну я простой пользователь, и что?. Вопрос только в частоте повторения операции. Раз в неделю -- удобно мышкой, всё равно надо искать, где что находится. Раз в день -- удобнее через Alt. Раз в час -- удобнее шорткаты. Но если день за днём повторяются одни и те же цуги команд -- любой нормальный пользователь рано или поздно их запишет и будет уже эти последовательности вызывать шорткатами. Если же одна и та же операция повторяется постоянно год за годом -- тот же пользователь их просто заскриптует, лень -- это главный признак нормальности психики. Умение же написать на питоне двадцать строк -- это обычный уровень продвинутого пользователя. У меня жена врач-гинеколог, даже она может.


    1. Schtunguerch Автор
      28.11.2022 10:56
      +1

      Не совсем понял Ваш поток мыслей. Про клавишу WIN я ничего не говорил......
      И тему удобства ракладок тоже не поднимал. Задача - поправить "кривоватость" MSKLC и всего-то.


      Про набор шорткатов одной рукой: кому как, я всегда нажимаю модификаторы одной рукой, а символы - второй (тоже очень удобно).

      Я полностью согласен с тезисом "чтобы клавиши просто были на своём месте". Ради этого я и написал данный пост (просто не у всех всё так, как у вас)


      1. sepuka
        28.11.2022 14:37

        > Про клавишу WIN я ничего не говорил.

        Все альтернативные раскладки, что обсуждались тут за последнее время, зачем-то убирают дополнительные клавиши. У вас WIN тоже нету. А это просто ещё один модификатор в дополнение к CTRL, ALT и SHIFT, причём, гарантированно не занятый интересующей нас программой.


        1. Schtunguerch Автор
          28.11.2022 20:12

          Смею Вас успокоить, клавиша Win в раскладке и на клавиатуре есть, просто MSKLC её не отображает.

          Да и в посте я обозначил факт того, что MSKLC не позволяет менять расположение модификаторов; к Win это тоже относится.

          Я сам много использую Win: (Win+Shift+S, Win+I, Win+E, Win+X, Win+цифра)