Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Не отжимается Shift #3

Open
zamazan4ik opened this issue Mar 17, 2022 · 6 comments
Open

Не отжимается Shift #3

zamazan4ik opened this issue Mar 17, 2022 · 6 comments

Comments

@zamazan4ik
Copy link

Здравствуйте.

Заметил странное поведение при использовании клавиши Shift. При её нажатии и отпускании не отправляется ивент отпускания клавиши (проверял через xev). Из-за этого пока я не нажму другую клавишу, то Shift остаётся нажатым, а то порождает особенности при работе курсором мышки.

Мой вариант прошивки расположен вот здесь - https://github.com/zamazan4ik/moonlander

Заранее спасибо.

@optozorax
Copy link
Collaborator

Попробуй поставить SFT_N на кнопку без аккорда и выяснить, проявляется ли этот баг тогда. Затем попробуй поставить эту кнопку на аккорд, но без immediate. Вероятно баг в коде аккордов, а не в коде lang_shift.

Если хочешь, можешь сам раздебажить ошибку, где бы она ни была. Я доберусь очень нескоро, если вообще доберусь. Как видишь, в последнее время я вообще не коммичу код в пет-проекты.

Если захочешь сам раздебажить, то в QMK есть возможность делать printf, и получать это printf в консольке на линуксе через hid_listen, или QMK toolbox, как угодно. Я именно так все баги и раздебажил.

Если ошибка в коде аккордов - то можешь смело писать мне в телегу вопросы по поводу кода или конечного автомата, если ничего не будет получаться.

Конечно, в идеале бы всё это тестами покрыть, но уже поздно. Я скорее на раст всё перепишу, чем сделаю здесь тесты.

@zamazan4ik
Copy link
Author

Попробовал отдебажить. К моему большому сожалению, баг имеет какой-то слишком плавающий характер: он может долго не проявляться, а потом шифт начинает залипать. Справиться с залипанием помогает отключить-включить клавиатуру.

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

Пробовал поменять с immediate chord на просто chord - не помогло, баг со временем всё равно проявляется. Надо будет потестировать некоторое время с обычным шифтом.

@zamazan4ik
Copy link
Author

@optozorax кстати, вопрос немного оффтопный к этому иссусу, но я не могу не задать его) А какие есть варианты с текущей прошивкой реализовать возможность запоминания текущего слоя per application? потому что сейчас возможно использовать только глобальное переключение языка, и это напрягает при одновременной работе в IDE и чаттинге, например - приходится постоянно переключать язык.

Я пока что вижу только писать какую-то интеграцию на стороне DE (может быть сервис какой-то), который бы отслеживал смену фокуса и посылал команду на клавиатуру для смены текущего языкового слоя.

@optozorax
Copy link
Collaborator

Мне кажется проблемы с шифтом могут возникать когда происходит нажатие на клавиши по типу RU_EXCL, которые сами нажимают шифт и отпускают его. В комбинации с другими клавишами из lang_shift это может приводить к проблемам. У меня вроде тоже такое возникает, но тут помогает просто нажать и отпустить шифт.

Жаль конечно что баг есть, а как воспроизвести - не знаем. Будем ждать nomk. Мечтаю начать делать его осенью, когда кончится то-что-нельзя-называть и вообще дела наладятся.


По поводу вопроса, ты прав, тут единственный вариант - сервис/демон, который посылает данные клавиатуре. Кажется самым сложным будет - разобраться с тем как узнать какое сейчас окно. Общаться с клавиатурой можно через https://docs.qmk.fm/#/feature_rawhid. В этой статье показывается пример на питоне. Я ни разу не пробовал эту штуку.

@zamazan4ik
Copy link
Author

nomk конечно звучит круто, но боюсь, что он будет ещё ооочень нескоро (хоть набор фичей запланированных в нём мне очень нравится).

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

Что касается переключения языка для каждого приложения отдельно - я буквально только что закончил это писать и оно работает отлично. Код для сервиса на стороне хоста находится вот тут - https://github.com/zamazan4ik/moonlander_server. Работает через Dbus и только для KDE. Надо бы оформить в чуть более красивый сервис, подкрутить логов и тому прочее, чтобы было не стыдно запускать такое со стартом системы. Со стороны изменений в прошивке самого мунляндера - сущие мелочи: zamazan4ik/moonlander@633a4aa

Также для такого дела нашёл вот этот сниппет крайне полезным: https://gist.github.com/Nuigurumi777/47788978b556d1ce258d83f60578a26c

@optozorax
Copy link
Collaborator

Спасибо за примеры кода! Действительно очень просто реализуется.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants