Статьи с меткой «X11»al@galanin.nnov.ruAlexander Galaninhttp://galanin.nnov.ru/~al/tags/X11/Статьи с меткой «X11»ikiwiki2017-07-13T20:14:05ZKeypad всегда в цифровом режимеhttp://galanin.nnov.ru/~al/article/single_state_keypad/2017-07-13T20:14:05Z2016-02-21T12:21:42Z
<p>Дополнительная цифровая клавиатура (numpad) пришла к нам из 1981 года с
клавиатуры
<a href="https://upload.wikimedia.org/wikipedia/commons/5/56/IBM_Model_F_XT.png">IBM Model F</a>.
Отдельных клавиш со стрелками тогда не было, потому вместе с ней пришла и
клавиша Num Lock, переключавшая клавиатуру из режима ввода цифр в режим
управления курсором курсором. Отдельные клавиши для управления появились в 1986
году в
<a href="https://upload.wikimedia.org/wikipedia/commons/4/48/IBM_Model_M.png">IBM Model M</a>,s
но два режима работы (курсор/цифры) за последовавших 30 лет так и не убрали.</p>
<p>Я использую дополнительную клавиатуру исключительно для ввода цифр и потому я решил отключить переключение режимов вовсе, чтобы не следить за состоянием Num Lock-а. X11 позволяет это сделать, а заодно и переназначить клавишу (./Del) на то, чтобы она всегда вводила точку (а не десятичный разделитель из локали).</p>
<p>Один из возможных способов (не самый оптимальный, зато с наименьшим количеством телодвижений) таков:</p>
<ol>
<li><p>Делаем свою раскладку на основе стандартной в файле .Xkeymap. Переопределим только поведение дополнительных клавиш:</p>
<pre><code>xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete+ledscroll(group_lock)" };
xkb_symbols {
include "pc+us+typo+ru:2+typo:2+inet(evdev)+group(ctrl_shift_toggle)+level3(ralt_switch)+ctrl(nocaps)+terminate(ctrl_alt_bksp)"
key <KP1> { [ KP_1 ] };
key <KP2> { [ KP_2 ] };
key <KP3> { [ KP_3 ] };
key <KP4> { [ KP_4 ] };
key <KP5> { [ KP_5 ] };
key <KP6> { [ KP_6 ] };
key <KP7> { [ KP_7 ] };
key <KP8> { [ KP_8 ] };
key <KP9> { [ KP_9 ] };
key <KP0> { [ KP_0 ] };
key <KPDL> { [ KP_Decimal, KP_Decimal, KP_Decimal, KP_Decimal ], [ KP_Decimal, KP_Decimal, KP_Decimal, KP_Decimal ] };
};
xkb_geometry { include "pc(pc105)" };
};
</code></pre>
<p>Как можно видеть, я добавляю типографскую раскладку (+typo+level3(ralt_switch)), делаю переключение групп по Ctrl-Shift(+group(ctrl_shift_toggle)) и заменяю Caps Lock на Ctrl (+ctrl(nocaps)).
Для всех клавиш дополнительной клавиатуры перечисляю, что у них есть только цифровой код клавиши, а для KPDL (та самая с точкой) — указываю, что при любом состоянии модификаторов и выбранной группе она должна выдавать точку.</p></li>
<li><p>Загрузим эту раскладку при старте сессии (я добавляю строку в файл .xsession):</p>
<pre><code>xkbcomp .Xkeymap $DISPLAY
</code></pre></li>
</ol>