Что-то я забросил свой профиль на GitHub, и сейчас решил немного его подобновить. Для этого я переношу все свои проекты, которые раньше просто хостил на домашнем сайте WebHamster.ru. Недавно я перенес Python-проект monitoring-sp, теперь настала очередь низкоуровневого переключателя клавиатуры LoLo Switcher.
Как мне сказали добрые люди, "ты написал этот переключатель для того, чтобы троллить на ЛОРе". Но на деле LoLo Switcher - это мой рабочий инструмент, которым я пользуюсь много лет, начиная с момента его появления в 2011 году. Тогда я одним махом решил для себя все проблемы, существующие в Linux с переключением раскладок: я перестал тратить время на разломанные то в Gnome то в KDE стандартные переключатели раскладок - мой переключатель работал везде. Я наконец-то смог настроить переключение по чистому отжатию клавиш, что позволило использовать самые широкие клавиши клавиатуры - левый и правый Shift. Само переключение раскладок стало турбореактивным, потому что LoLo Switcher работает напрямую с устройством ввода, и такое решение заставило взвыть любителей крутить зубодробительные конфиги X11. Как вишенка на торте, настройка переключения производится через регулярные выражения, что заставило взвыть уже любителей GUI. Обо всем этом написано на странице русскоязычной документации LoLo Switcher.
С переключателем LoLo Switcher связана одна интересная история. Когда я его писал, я не пользовался IDE, и просто работал со своим C++ кодом в консоли. В тот момент я находился в поисках хорошего консольного редактора, и за неимением лучшего, настроил себе редактирование текста в Midnigth Commander через опенсорчный FAR Editor в эмуляции WINE (да, я очень маргинален, и Micro на тот момент еще не появилось). А потом стал пользовать редактор KWrite. Особенность этих двух редакторов в том, что у них есть автоопределение кодировки. Они молча открывают файл в нужной кодировке, и ты работаешь, не задумываясь о том, что появились какие-то кракозябры: ты просто видишь нормальный текст на национальном языке. Даже если эти файлы пришли с другой платформы. Это очень круто.
Однако в тот момент, когда в файле кода первый раз появляются строки с национальными символами, эти редакторы сохраняют код по-разному. FAR Editor сохраняет в CP1251, а KWrite - в кодировку локали, обычно UTF-8. Ну а так как в обоих редакторах есть автоопределение кодировки, все файлы всегда отображаются нормально. И я, как пользователь, не замечал этой проблемы: ведь мой инструментарий просто давал возможность комфортно работать.
Каково же было удивление линуксоидов, когда в однозначно Linux/X11 коде в некоторых файлах оказалась Windows-кодировка. Никто не мог понять, как такое вообще возможно. Олдфаги решили, что я издеваюсь над ними. Никто не мог поверить, что автор об этой проблеме не знает (я действительно не знал). Поднялся жуткий срач, а я ухахатывался над тем фактом, что общество может любую ерунду обратить в кошмарную трагедию.
Сейчас на GitHub залита последняя версия LoLo Switcher v.0.28. В ней, по сути, изменились только некоторые сообщения и содержимое дефолтного конфига. Релизные сборки кода теперь берутся с GitHub, а прекомпиленные бинарнки все так же можно брать с официальной страницы.
* * *
Хотел сказать несколько слов про дальнешее развитие LoLo Switcher. Низкоуровневый доступ к файлу устройства ввода - это одновременно и благо и проклятие. Благо - это четкая и безглючная работа со всеми известными DE и независимость от настроек X11-подсистемы, а проклятие - это то, что такой переключатель может быть только локальным. Особых проблем это не вызывает - вопрос только в работе с удаленным графическим X11-сервером. Но дух перфекционизма говорит, что переключатель должен работать даже в такой экзотической конфигурации. И я на протяжении этих лет не оставлял попыток сделать LoLo Switcher действительно X11-полным переключателем.
Вначале мне показалось, что я нащупал правильное решение. По этому поводу я написал новость про то, что разобрался как делать глобальный перехват клавиш в X11 (XWindow). Однако, это достижение жестоко обломились о реальность: стандартная утилита xinput, на основе кода которой я собирался делать глобальный перехват, тоже не может работать в удаленной сессии. Об этом я написал в третьем пункте своего годового отчета. Ну а если даже сами авторы X11 не в состоянии сделать получение всех событий удаленной сессии, то мне и подавно не осилить такую вещь. Поэтому пока что действует стратегия выжидания: если xinput вдруг заработает в удаленной X11 сессии, тогда можно будет двигаться дальше.