Pull to refresh

Comments 13

На достаточно свежих версиях Linux, кстати, файл evdev.xml менять не обязательно (изменения в нем могут потеряться при обновлении) - начиная с версии xkeyboard-config 2.33 свою раскладку можно сохранять в файле /usr/share/X11/xkb/symbols/custom

Про то что evdev.xml может слететь при обновлении я читал, но пока не сталкивался. Файл custom удобен, т.к. он уже прописан в evdev.xml по умолчанию. Но он позволяет сделать только одну раскладку, которая к тому же в переключалке будет отобаржаться странным значением - "custom". Мне нужно на данный момент две раскладки, так что этот вариант не подходит.

Может есть какая-то способ модифицировать файл evdev.xml автоматически?

UFO just landed and posted this here

Вот и дождался. При обновлении слетели изменения в 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)

Спасибо, значит, 4 из 8… тогда действительно лучше сразу «по-плохому» :)

пишут еще нужно поправить файл 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)

Очень полезно! Спасибо большое! Иногда хочется написать что-то на сербском латиницей правильно, но опыт с подключением обычной сербской раскладки оказался неудачным. Попробую ваш вариант.

Sign up to leave a comment.

Articles