Comments 13
На достаточно свежих версиях Linux, кстати, файл evdev.xml менять не обязательно (изменения в нем могут потеряться при обновлении) - начиная с версии xkeyboard-config 2.33 свою раскладку можно сохранять в файле /usr/share/X11/xkb/symbols/custom
Про то что evdev.xml может слететь при обновлении я читал, но пока не сталкивался. Файл custom удобен, т.к. он уже прописан в evdev.xml по умолчанию. Но он позволяет сделать только одну раскладку, которая к тому же в переключалке будет отобаржаться странным значением - "custom". Мне нужно на данный момент две раскладки, так что этот вариант не подходит.
Может есть какая-то способ модифицировать файл evdev.xml автоматически?
Так до сих пор не дошли руки сделать так, чтобы при нажатии, допустим, Q набиралась Q (при отпускании, разумеется, иначе никак), при нажатии, допустим, A набиралась A, а если нажать Q и A вместе — то, скажем, Ꜵ. Если кто-то знает, как это сделать без написания своего обработчика клавиатуры или вклинивания между клавой и компом отдельного микроконтроллера — этим он(а) сильно ускорит очередную статью, давно мной обещанную.
Я смотрю в сторону dead keys, но они вроде требуют двойного нажатия, а не отпускания…
Меня тоже очень интересует этот вопрос (аккордовая печать в Linux). Подпишусь здесь
Реализовать такое поведение - дело нехитрое, тк XKB имеет возможность задавать разнообразные действия на нажатие клавиши, включая выставление и очистку модификаторов:
key <AD01> { [ q, Q ], actions[Group1] = [SetMods(modifiers=LevelThree),NoAction() ] };
key <AC01> { [ a, A, ae, AE ], type[Group1] = "FOUR_LEVEL" };
(Не нашёл вашей буквы в хедерах X11, видимо не реализовано, взял похожую)
Но главный вопрос здесь как вы отличите набор буквы с модификатором от быстрого набора "qa" когда палец не успевает сойти с q. Это собственно главная проблема техник раскладки, которые смешивают модификатор и обычную букву на одной и той же клавише (Mod-tap и ему подобные)
Спасибо, а это покатит, если, допустим, у «D» должно быть 6 дополнительных значений в зависимости от того, какая из «ромашки» ERSFXC вместе с ней нажата? Ну, и плюс её родное седьмое значение, то есть сама D.
Или там только один-два уровня захардкодено?
В xkb не уверен что такое возможно, тк если делать это через модификаторы как в примере выше, то нужно 6 различных модификаторов, по одному на каждую префиксную клавишу ERSFXC. В X11 штатных модификаторов ровно 8 (Shift, Lock, Control, Mod1, Mod2, Mod3, Mod4, Mod5) и как минимум 4 из них заняты под реально нужные функции которые переназначать не следует. Можно пойти другим путём: Функциональность, которой вы хотите добиться, в терминологии XKB называется Compose Keys - замена одного предопределённого ввода на другой, ввод и вывод могут быть из нескольких символов. Именно через Compose в XKB делается ввод диакритики, æ, и т.д., можно вывести хоть "Hello world". Но если во вводе количество символов (не модификаторов) более одного, то все символы кроме последнего введённого должны являться т.н. "Dead keys" - клавишами, не вводящими никакого реального символа, тк в XKB нет такой вещи как дерево решений и стирание/изменение предыдущего ввода. Соответственно невозможно на чистом XKB сделать так, что просто в процессе ввода какого-то текста на латинице на 1м слое вводится секретная последовательность символов и она транслируется в æ.
Можно сделать клавиши ERSFXC "Dead keys" на другом слое и тогда описанное мной сработает - можно будет создать 6 Compose-последовательностей. Но на этот другой слой надо будет вначале переключиться для набора начального Dead key.
Вам судя по всему в высокоуровневые клавиатурные скриптеры наподобие Autohotkey (есть под Linux)
пишут еще нужно поправить файл evdev.lst, но зачем это нужно я не знаю
Для совместимости с устаревшим кодом в ксорге, читающим .lst. Современным форматом конфига является evdev.xml
AltGt
AltGr
нужно отредактировать файл /usr/share/X11/xkb/rules/evdev.xml
Это не получится проделать на машине где вы не админ. Свои конфиги xkb можно хранить в домашней директории и загружать примерно как:
# конфиг в ~/.config/xkb/symbols/rs_latin_custom
setxkbmap -geometry "pc(pc104)" -layout "rs_latin_custom(rs_latin_custom)" -print | xkbcomp -I/home/user/.config/xkb - "${DISPLAY%%.*}"
(Не представляю правда как это будет взаимодействовать с виджетом выбора языка в GUI)
Просто почитать(X system or Wayland ):
https://wiki.debian.org/Keyboard
How to dynamically manage input source settings from the command line (modern strategy)
gsettings, dconf, or dconf-editor
Очень полезно! Спасибо большое! Иногда хочется написать что-то на сербском латиницей правильно, но опыт с подключением обычной сербской раскладки оказался неудачным. Попробую ваш вариант.
Как сделать кастомную раскладку клавиатуры в Linux