Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Вот, прямо готовая плейбука для ансибла: https://github.com/amarao/home/blob/master/locale_and_keyboard.yaml
sudo apt-get install autokey). Слой активируется модификатором Win (aka Super), благо, в Linux он практически нигде не задействован.Зачем так сложно?
AutoKey достаточно муторен в настройке
пришлось даже написать скрипт, который генерирует AutoKey-скрипты и конфиги
не надо редактировать никакие конфиги, не надо ничего запускать в консоли
По-моему то, что я описал, досаточно прямолинейно. Создали один файл, в котором ничего лишнего, и две строки в .xinitrc.
А вот как сделать, чтобы Ctrl + M превращался в Enter? AutoKey делает без особых проблем.
И XKB делает это без особых проблем. Почитайте доки, и примеров в интернете хватает.
Правильно всё это делать с помощью xkbcomp.
~/.XCompose вполне достаточно. Вот фрагменты моего:include "/usr/share/X11/locale/en_US.UTF-8/Compose"
<Multi_key> <minus> <greater> : "→" U2192 # RIGHT
<Multi_key> <less> <minus> : "←" U2190 # LEFT
<Multi_key> <period> <period> <period> : "…" U2026 # HORIZONTAL ELLIPSIS, многоточие
<Multi_key> <Cyrillic_zhe> <Cyrillic_ze> : ":P" # желаю такой смайл
<Multi_key> <Cyrillic_hardsign> <Cyrillic_hardsign> : ":}" # и такой
<Multi_key> <equal> <4> : "€" # хочу набирать евро, не переключаясь из русской раскладки
<Multi_key> <Cyrillic_es> <equal> : "€" EuroSign # EURO SIGN
# нерусская кириллица
<Multi_key> <Cyrillic_SOFTSIGN> <minus> : "Ѣ" U0462 #CYRILLIC CAPITAL LETTER YAT
<Multi_key> <Cyrillic_softsign> <minus> : "ѣ" U0463 #CYRILLIC SMALL LETTER YAT
<Multi_key> <Cyrillic_i> : "і" U0456
<Multi_key> <Cyrillic_I> : "І" U0406
<Multi_key> <Cyrillic_ie> : "є" U454
<Multi_key> <Cyrillic_IE> : "Є" U404
<Multi_key> <Cyrillic_shorti> : "ї" U0457
<Multi_key> <Cyrillic_SHORTI> : "Ї" U0407
<Multi_key> <Cyrillic_ve> : "ў" U045E
<Multi_key> <Cyrillic_VE> : "Ў" U040E
<Multi_key> <Cyrillic_be> : "«"
<Multi_key> <Cyrillic_yu> : "»"
<Multi_key> <Cyrillic_en> : "ң"
<Multi_key> <Cyrillic_EN> : "Ң" U04A2
<Multi_key> <Cyrillic_u> : "ү"
<Multi_key> <Cyrillic_U> : "Ү" U04AE
<Multi_key> <Cyrillic_o> : "ө"
<Multi_key> <Cyrillic_O> : "Ө"
раскладки для печати (Dvorak, Colemak и т.п.) сильно улучшают расположение клавиш, ставя их ближе к тем местам, куда нужно меньше тянуться. Но при этом совершенно забывают о модификаторах, спец. символах и командных клавишах (Enter, Backspace, Tab, Esc, Delete).
раскладки для печати (Dvorak, Colemak и т.п.) сильно улучшают расположение клавиш, ставя их ближе к тем местам, куда нужно меньше тянуться.
Но при этом совершенно забывают о модификаторах, спец. символах и командных клавишах (Enter, Backspace, Tab, Esc, Delete).
Действительно, эту проблему все «оптимизаторы» раскладок игнорируют…
Энтер достаточно удобно расположен, на основном ряду, частота его использования не превышает 0,5-1% при наборе обычного текста. На шифты при наборе текста приходится 2-3% всех нажатий,
Менять местами шифт и контрол тоже нет особого смысла — клавиши рядом расположены. От таких косметических изменений эффект не сильно большой.
Ага, я как поставил Ctrl и Shift на левый большой палец, понял,
что стандартное их расположение крайне не эргономично, поставили абы куда, на задворки клавиатуры.
Правда ещё и с пробелом нужно разобраться, не нужен такой большой, занимающий оба больших пальца, хватит и небольшой кнопки для правого большого пальца. И никакой путаницы, какой рукой когда жать пробел, шифт, и становится не нужен Caps Lock, ведь шифт большим пальцем можно зажать, и спокойно печатать текст.
Ага, только не надо забывать, что на этой же клаве не только набивать тексты будутЬ, но и управлять компом, а вот тут-то и засада…
Если бы сейчас была дискуссия, то он доказал бы, что «двигать» Ctrl — вовсе не такое уж пустое занятие…
пусть себе TypingStatistics поставят, погоняют недельку. Я бы с удовольствием посмотрел
особенно это полезно тем, кто программирует на современном языке, который уже не требует обязательной точки с запятой в конце строки.
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_geometry { include "pc(pc105)" };
xkb_symbols "my" {
include "pc+us+ru:2+inet(evdev)"
include "capslock(grouplock)"
include "compose(ralt)"
key <AC10> { [ colon, semicolon ] };
key <TLDE> { [ asciitilde, grave ] };
};
};
Warning: Multiple default components in keypad
Using x11, ignoring pointerkeys
Warning: Key <OUTP> not found in evdev+aliases(qwerty) keycodes
Symbols ignored
Warning: Key <KITG> not found in evdev+aliases(qwerty) keycodes
Symbols ignored
Warning: Key <KIDN> not found in evdev+aliases(qwerty) keycodes
Symbols ignored
Warning: Key <KIUP> not found in evdev+aliases(qwerty) keycodes
Symbols ignored
Warning: Key <RO> not found in evdev+aliases(qwerty) keycodes
Symbols ignored
Warning: Key <I192> not found in evdev+aliases(qwerty) keycodes
Symbols ignored
Warning: Key <I193> not found in evdev+aliases(qwerty) keycodes
Symbols ignored
Warning: Key <I194> not found in evdev+aliases(qwerty) keycodes
Symbols ignored
Warning: Key <I195> not found in evdev+aliases(qwerty) keycodes
Symbols ignored
Warning: Key <I196> not found in evdev+aliases(qwerty) keycodes
Symbols ignored
Warning: Key <I255> not found in evdev+aliases(qwerty) keycodes
Symbols ignored
Warning: No symbols defined for <AB11> (keycode 97)
Warning: No symbols defined for <JPCM> (keycode 103)
Warning: No symbols defined for <I120> (keycode 120)
Warning: No symbols defined for <AE13> (keycode 132)
Warning: No symbols defined for <I149> (keycode 149)
Warning: No symbols defined for <I154> (keycode 154)
Warning: No symbols defined for <I161> (keycode 161)
Warning: No symbols defined for <I168> (keycode 168)
Warning: No symbols defined for <I178> (keycode 178)
Warning: No symbols defined for <I183> (keycode 183)
Warning: No symbols defined for <I184> (keycode 184)
Warning: No symbols defined for <FK19> (keycode 197)
Warning: No symbols defined for <FK24> (keycode 202)
Warning: No symbols defined for <I217> (keycode 217)
Warning: No symbols defined for <I219> (keycode 219)
Warning: No symbols defined for <I221> (keycode 221)
Warning: No symbols defined for <I222> (keycode 222)
Warning: No symbols defined for <I230> (keycode 230)
Warning: No symbols defined for <I247> (keycode 247)
Warning: No symbols defined for <I248> (keycode 248)
Warning: No symbols defined for <I249> (keycode 249)
Warning: No symbols defined for <I250> (keycode 250)
Warning: No symbols defined for <I251> (keycode 251)
Warning: No symbols defined for <I252> (keycode 252)
Warning: No symbols defined for <I253> (keycode 253)
полезно тем, кто программирует на современном языке, который уже не требует обязательной точки с запятой в конце строки. Даже в JavaScript этого уже делать не нужно.

$ xkbcomp $HOME/.config/xkb/my $DISPLAYclear Mod4"<SUPR> и <HYPR>modifier_map Mod4 { Super_L, Super_R } не помогает.
replace key <SUPR> { [ NoSymbol, NoSymbol ] };
replace key <HYPR> { [ NoSymbol, NoSymbol ] };
mod3 Hyper_R (0x87) mod4 Super_L (0x85), Super_R (0x86), BadKey (0xce), BadKey (0xcf)
modifier_map none { <HYPR> };
modifier_map none { <SUPR> };
Error: Key <HYPR> added to map for multiple modifiers
Using none, ignoring Mod4.
Error: Key <SUPR> added to map for multiple modifiers
Using none, ignoring Mod4.
xev, но лучше смотреть на содержание файлов pc, ru и us из /usr/share/X11/xkb/symbols.<LSGT>) key <RTSH> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift ]
};
replace key <LVL3> {
type[Group1] = "ONE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift ]
};
modifier_map Mod5 { <LVL3> };
// Unmodified LShift RShift Both Shifts
key <AB03> { [ c, VoidSymbol, C, VoidSymbol ] };
key <AB07> { [ m, M, VoidSymbol, VoidSymbol ] };
setxkbmap -layout "us,ru(winkeys)" -option "grp:caps_toggle,grp_led:scroll"
never_modify_config=true
xkbcomp $HOME/.config/xkb/my $DISPLAY
xkb_symbols "my" {
include "pc+us+ru:2+inet(evdev)"
key <AC10> { [ colon, semicolon ] };
key <TLDE> { [ asciitilde, grave ] };
};
$HOME/.config/xkb/symbols/mysetxkbmap -symbols my -print | xkbcomp -I"$HOME/.config/xkb" - "${DISPLAY%%.*}"
| xkbcomp -I"$HOME/.config/xkb" - "${DISPLAY%%.*}" и посмотреть что она выводит. Будет видно, что там вместо всех локалей подставляется один ваш my, внутри которого вы уже и наследуете нужные вам раскладки."$HOME/.config/xkb", а не полный путь.include "pc+us+ru:2+inet(evdev)", ведь эта секция может поменяться в будущем.xkb_symbols "default" {
key <AC10> { [ colon, semicolon ] };
key <TLDE> { [ asciitilde, grave ] };
};
xkb_symbols "swap_esc" {
key <CAPS> { [ Escape ] };
key <ESC> { [ Caps_Lock ] };
};
xkb_symbols "beast" {
// (keycode 166) XF86Back -> PageUp
key <I166> { [ Prior] };
// (keycode 167) XF86Forward -> PageDown
key <I167> { [ Next ] };
};
setxkbmap -layout "us+kodx_xkb(default),ru(winkeys)" -option "" -option "grp:caps_toggle,grp_led:scroll" -print | xkbcomp -I"$HOME/.config/xkb" - "${DISPLAY%%.*}"
setxkbmap -layout "us+kodx_xkb(default)+kodx_xkb(swap_esc),ru(winkeys)" -option "" -option "grp:caps_toggle,grp_led:scroll" -print | xkbcomp -I"$HOME/.config/xkb" - "${DISPLAY%%.*}"
#!/usr/bin/env bash
XKB_DIR="$HOME/.config/xkb"
XKB_SYMBOL_FILE="kodx_xkb"
# hostname binary with path
HOSTN=$(which hostname)
# grep binary with path
GREPPR=$(which grep)
HOST=""
XKB_ADDON=""
if [ -n "$HOSTN" ]; then
HOST=$($HOSTN -f)
if [[ -n $HOST && -n "$($GREPPR $HOST $XKB_DIR/symbols/$XKB_SYMBOL_FILE)" ]]; then
XKB_ADDON="+$XKB_SYMBOL_FILE($HOST)"
fi
fi
if [[ -n $(which setxkbmap) && -n $(which xkbcomp) ]]; then
setxkbmap -layout "us+$XKB_SYMBOL_FILE(default)$XKB_ADDON,ru(winkeys)" \
-option "" -option "grp:caps_toggle,grp_led:scroll" -print \
| xkbcomp -I"$XKB_DIR" - "${DISPLAY%%.*}" >/dev/null 2>&1
fi
-option "" означает сброс предыдущих дополнений:If you want to replace all previously specified options, use the -option flag with an empty argument first.Ещё интересно, почему не взаимозаменяемы -options и то, что идёт с плюсом в -layout. В
/usr/share/X11/xkb/rules/base есть все соответствия, например:grp:caps_toggle = +capslock(grouplock)
$ setxkbmap -layout "us+custom(default),ru(winkeys)" -option "" -option "grp:toggle,compose:rctrl" -print
...
xkb_symbols { include "pc+us+custom(default)+ru(winkeys):2+inet(evdev)+group(toggle)+compose(rctrl)" };
$ setxkbmap -layout "us+custom(default),ru(winkeys)+group(toggle)" -option "" -option "compose:rctrl" -print
...
xkb_symbols { include "pc+us+custom(default)+ru(winkeys)+group(toggle):2+inet(evdev)+compose(rctrl)" };
PS Если вдруг кто скажет, что потом вот сядешь к кому-нибудь другому за клавиатуру, и сразу всё не так, то скажу так: пересаживаясь из Бентли помочь другу довезти до дома жигули, тоже ругаешься. Тем приятнее садиться обратно в Бентли.
{"t"=>2163, "a"=>620, "i"=>633, "l"=>1013, " "=>4636, "-"=>232, "f"=>1678, "o"=>691, "k"=>1308, "s"=>1026, "u"=>479, "d"=>1165, "!"=>49, ";"=>321, "<"=>547, "#"=>529, "+"=>515, "">"=>551, ":"=>15, "e"=>1104, "q"=>919, "L"=>61, "8"=>66, "`"=>91, "2"=>199, "0"=>203, "1"=>267, "c"=>1387, "v"=>785, "m"=>563, "j"=>2957, ...
Советую ещё поставить Backspace на J (практически самая редко используемая буква латинского алфавита).
это первый шаг к полностью перемешанным буквам и сервисным клавишам/модификаторам

А куда J? На место Backspace, видимо?
Не мешает работать при наборе текстов?
Вот моя статистика за день использования (Emacs + чат (на английском) + прочие мелочи)
Кроме того, моей основной целью была не оптимизация скорости набора, а снижение нагрузки на мизинец + минимизация движения кистей и особенно лишних сгибов
Я так понял, что красный — самый редкий, тогда синий — наиболее частый.
` почему-то не учлись). В последний месяц я не менял свою раскладку (но зато поменял сегодня, и, скорее всего, ещё буду менять в ближайшие дни).Еще какие-нибудь мешающие сочетания остались?
Ой. Наоборот, разумеется.
XKB: перенастроим клавиши под себя любимого