LINUX.ORG.RU

Переключатель клавиатуры LoLo Switcher v.0.15


0

1

Выпущен первый публичный релиз низкоуровневого переключателя клавиатуры LoLo Switcher v.0.15 для оконной системы X11.

Основные достоинства переключателя:

  • cпособен работать в любых окружениях рабочего стола (KDE3, KDE4, GNOME2, LXDE);
  • работает напрямую с устройством ввода, очень компактен и быстр;
  • поддерживает любые модели клавиатур и джойстиков;
  • способен прозрачно работать параллельно с другими переключателями клавиатуры;
  • содержит встроенные средства диагностики устройств ввода.

Данный переключатель решает застаревшие проблемы, которые вынуждают пользователей Linux безальтернативно использовать клавишу CapsLock как самую беспроблемную. Программа спроектирована так, что её можно настроить на любое устройство ввода (сейчас поддерживается клавиатура и джойстик), на любую комбинацию действий с любой логикой срабатывания.

Конфигурирование программы происходит с использованием регулярных выражений, которые служат для фильтрации событий и для вычленения нужных последовательностей из потока кодов, генерируемых устройством.

В плане развития указывается на добавление обработки клавиатурных событий среды X11, благодаря чему LoLo Switcher будет полноценным X11-приложением, способным предоставить свой функционал при удалённом подключении к X-серверу. Для этого автору нужна помощь сообщества, так как ему неизвестен работающий способ получения клавиатурных событий от всех окон на рабочем столе.

Автор использует LoLo Switcher для переключения между RUS/LAT с помощью правого и левого SHIFT. Обсуждение такого способа переключения можно найти на ЛОРе.

Официальная страница программы LoLo Switcher

Руководство по конфигурированию LoLo Switcher

Видео с демонстрацией работы LoLo Switcher на YouTube

Новость на сайте автора

Перемещено svu из OpenSource



Последнее исправление: adriano32 (всего исправлений: 3)
Ответ на: комментарий от daemonpnz

webhamster, может следует переписать используя иксы без прямого доступа к устройствам, учитывая это.

Я это и хочу сделать. Об этом написано на официальной странице программы.

Сейчас есть две проблемы:

Первая: конфигурабельность снизится, потому что в X11 нет, например, события удерживания клавиши. Посмотри видео, переключения не происходит при длительном нажатии SHIFT. А при X11-input будет происходить, и чтобы этого избежать, надо принимать специальные меры. Но это небольшая проблема, хорошо что хоть есть KeyRelease, раньше и его небыло.

Вторая: я умею детектить KeyPress/KeyRelease в X11, но умею это делать только в одном активном окне. Товарищ geekless утверждает что собирать клавиатурные события со всего X11 просто. Но на просьбу предоставить готовый пример с рабочим циклом событий, он все время съежжает в сторону, видимо даже для него это не так просто сделать.

webhamster
() автор топика
Ответ на: комментарий от daemonpnz

Судя по выводу RegExp берётся почему-то только один от Sequence1.

Нет, срабатывают оба регвыра:

RegExp: '1,54,0;$'
Queue: '1,54,0;'
Count=1           - сработал
RegExp: '1,42,0;$'
Queue: '1,42,1;'
Count=-1
RegExp: '1,54,0;$'
Queue: '1,42,1;'
Count=-1
RegExp: '1,42,0;$'
Queue: '1,42,0;'
Count=1           - сработал

Но тут проблема в другом. У тебя по каким-то причинам размер очереди единица. Правильный лог должен выглядеть так:

Queue: '0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;1,28,0;1,54,1;1,54,0;1,42,1;1,42,0;1,54,1;1,54,0;'
Count=1
RegExp: '1,42,0;$'
Queue: '0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;1,28,0;1,54,1;1,54,0;1,42,1;1,42,0;1,54,1;1,54,0;1,42,1;'
Count=-1
RegExp: '1,54,0;$'
Queue: '0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;1,28,0;1,54,1;1,54,0;1,42,1;1,42,0;1,54,1;1,54,0;1,42,1;'
Count=-1
RegExp: '1,42,0;$'
Queue: '0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;0,0,0;1,28,0;1,54,1;1,54,0;1,42,1;1,42,0;1,54,1;1,54,0;1,42,1;1,42,0;'
Count=1

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

 // Данные очереди
 EVENTELEMENT evQueue[CODES_EVENT_LENGTH];

а CODES_EVENT_LENGTH описана дефайном:

#define CODES_EVENT_LENGTH   16

и конструирование строки очереди идет жестким циклом:

 // Перебор очереди с последнего элемента к первому
 for(int i=CODES_EVENT_LENGTH-1; i>=0; i--)
  {
   // Строка с событием из очереди
   char event[250];
   sprintf(event, "%d,%d,%d;", evQueue[i].type, evQueue[i].code, evQueue[i].value);
   
   // Добавление строки с событием
   sprintf(queueSequence, "%s%s", queueSequence, event);
  }

Ты точно ничего другого не менял в коде?

webhamster
() автор топика
Ответ на: комментарий от daemonpnz

> Ну может действительно проще будет посмотреть сорцы xneur?!

Ему их даже смотреть не обязательно. К xneur можно подключать плагины. В плагины идут коллбеки каждый раз, когда xneur обрабатывает KeyPress и KeyRelease. Дальше элементарно пишется плагин в виде сопоставлялки последовательности нажатий заданному шаблону, и всё готово.

Я уже предлагал этот вариант ТСу. Его не устроил, потому что ему «не нравится xneur». Охренительный аргумент. Ну раз не нравится, то хозяин — барин, пусть пишет свой велосипед с нуля. Но и тут нашла коса на камень: документацию на xlib он не осилил, погрепать исходники xneur тоже не осилил, и плачется теперь «дайте мне готовый кусок кода».

Он просто невменяем.

geekless ★★
()
Ответ на: комментарий от daemonpnz

> Ну может действительно проще будет посмотреть сорцы xneur?!

Конечно, я их смотрел. У меня там непонимание в каждой строчке. Количество комментариев 0,001% от общего кода. Не понимаю, как так вообще можно вести разработку. Там наверно такие монстры, которые всю структуру input-подсистемы X11 держат в голове.

webhamster
() автор топика
Ответ на: комментарий от webhamster

>Количество комментариев 0,001% от общего кода.

Это лучше, чем переводить каждую строку кода на русский (пример: Переключатель клавиатуры LoLo Switcher v.0.15 (комментарий) ← 0 полезных комментариев).

x3al ★★★★★
()
Ответ на: комментарий от geekless

> элементарно пишется плагин в виде сопоставлялки последовательности нажатий заданному шаблону, и всё готово.

Вот и напиши, это же элементарно. Потрать свое время не на троллинг в форуме, а на благое дело.

webhamster
() автор топика
Ответ на: комментарий от x3al

>> Количество комментариев 0,001% от общего кода.

Это лучше, чем переводить каждую строку кода на русский (пример: Переключатель клавиатуры LoLo Switcher v.0.15 (комментарий) ← 0 полезных комментариев).


Для меня они полезны. Я так расслабляю мозг при разработке, потому что тогда способен читать код почти как художественный текст, и сразу вижу его логику и структуру. Это часть процесса разработки.

Кроме того, комментарии помогают мне следить за тем, что я хочу выразить в коде, и тем, что реально в коде написано. Если бы был только код, я не смог бы этого сделать.

webhamster
() автор топика
Ответ на: комментарий от webhamster

> Вот и напиши, это же элементарно.

Так ты ж уже написал сопоставлялку. Вот и прикрути. Чего языком-то молотить?

Потрать свое время не на троллинг в форуме, а на благое дело.

Не говори мне, что мне делать, и я не скажу тебе, куда теде следует пойти. Тонко-толстым троллингом тут только ты занимаешь. Если бы ты хотел на самом деле написать нормальную программу, а не потроллить ЛОР, то давно именно это бы и сделал. Ты же прилагаешь титанические усилия, лишь бы, не дай бог, не решить задачу правильно.

geekless ★★
()
Ответ на: комментарий от webhamster

> У меня там непонимание в каждой строчке.

Так учись понимать. Учись читать код. Почему у меня никаких проблем нет с пониманием этих исходников? Я что, гений? Такой же быдлокодер, как и тотальное большинство.

Исходники xneur на самом деле очень просты и хорошо структурированы. Не видел ты сложных исходников, ох не видел.

Там наверно такие монстры, которые всю структуру input-подсистемы X11 держат в голове.

Лол. Программу разрабатывает 1 (прописью: один) человек. Изредка ему помогаю я, а также еще 2-3 добровольца, судя по логам.

geekless ★★
()
Ответ на: комментарий от webhamster

Для меня они полезны. Я так расслабляю мозг при разработке, потому что тогда способен читать код почти как художественный текст, и сразу вижу его логику и структуру. Это часть процесса разработки.

Кроме того, комментарии помогают мне следить за тем, что я хочу выразить в коде, и тем, что реально в коде написано. Если бы был только код, я не смог бы этого сделать.

Ты должен всё это уметь видеть в коде, а не в комментариях. Иначе цена тебе как программисту — ноль.

geekless ★★
()
Ответ на: комментарий от webhamster

> Я написал, что надо будет исправить.
Т.е. убрать русские комментарии вообще? Спасибо!

Предложите другой способ доступа к файлу устройства.

Предлагаю использовать нормальные иксовые интерефейсы. Не ломая сетевую прозрачность иксов, независимость от драйверов, ОС и пр.

Если бы иксы предоставляли нужную информацию об устройстве, самой проблемы переключалок просто небылоб

Держание клавиши можно детектировать путем несложной стейт-машины. Это намного прямее, чем лезть мимо иксов в ядро. Если чего-то не хватает - можете поговорить с Peter Hutterer, он разумный человек, осмысленные запросы он сможет реализовать в XI2, который он сейчас пилит.

которые не могут решить и поныне.

Проблемы есть, но для их решения необязательно ломиться через иксовую абстракцию.

Касаемо секьюрности предлагаю продемонстрировать дыру, тогда разговор станет предметным.

Я уже сказал - секурити это следствие. Намного страшнее - причина. Архитектурная кривизна подхода.

svu ★★★★★
()
Ответ на: комментарий от daemonpnz

> Ничего в коде не менял.

Ну тогда мы столкнулись с каким-то адским глюком компилятора, ничего другого на ум не приходит. Скачай готовую бинарную сборку, и скажи, как работает на ней.

ЗЫЖ Так, хостер стал что-то крутить на серваке. Можешь скачать отсюда: http://rghost.ru/20966931

webhamster
() автор топика
Ответ на: комментарий от geekless

> Если бы ты хотел на самом деле написать нормальную программу, а не потроллить ЛОР

Да, я пишу программы чтобы потроллить лор. В игнор, от тебя всеравно никакого толку.

webhamster
() автор топика
Ответ на: комментарий от daemonpnz

> Это может быть из-за оптимизаций кода при компилировании? С какими опциями (CFLAGS/CXXFLAGS) собирал?

Хм, я их напрямую нигде не задаю, там cmake, уж что она напишет то и будет.

Вывод make с вербозом, если тебе это поможет: http://paste.org.ru/?hptvb7

1. У тебя проц не AMD случайно?
2. Прекомпилированный бинарник работает?

webhamster
() автор топика
Ответ на: комментарий от svu

>> хорошо что хоть есть KeyRelease, раньше и его небыло.

Это когда??

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

webhamster
() автор топика
Ответ на: комментарий от webhamster

Знаете, я иксами занимаюсь довольно давно, с конца 90х. Я не помню, чтобы xev когда-нибудь не показывал KeyRelease

svu ★★★★★
()
Ответ на: комментарий от daemonpnz

Попробую попользоваться. Задумка интересная. Но реализация хромает. Плагин к тому же xneur был бы куда лучше.

daemonpnz ★★★★★
()
Ответ на: комментарий от svu

>> Я написал, что надо будет исправить.

Т.е. убрать русские комментарии вообще? Спасибо!


Нет, надо будет исправить кодировку на UTF-8 у некоторых файлов. Я это имел в виду.

Предложите другой способ доступа к файлу устройства.

Предлагаю использовать нормальные иксовые интерефейсы. Не ломая сетевую прозрачность иксов, независимость от драйверов, ОС и пр.

Если бы иксы предоставляли нужную информацию об устройстве, самой проблемы переключалок просто небылоб

Держание клавиши можно детектировать путем несложной стейт-машины. Это намного прямее, чем лезть мимо иксов в ядро. Если чего-то не хватает - можете поговорить с Peter Hutterer, он разумный человек, осмысленные запросы он сможет реализовать в XI2, который он сейчас пилит.


То есть предлагаете еще подождать? Нет уж спасибо, я и так ждал тринадцать лет. Мое решение работает здесь и сейчас, меня это устраивает.


которые не могут решить и поныне.

Проблемы есть, но для их решения необязательно ломиться через иксовую абстракцию.

Касаемо секьюрности предлагаю продемонстрировать дыру, тогда разговор станет предметным.

Я уже сказал - секурити это следствие. Намного страшнее - причина. Архитектурная кривизна подхода.


Понимаете ли в чем дело. С архитектурной прямотой проблема не решена до сих пор. О причинах этого можете поразмышлять на досуге.

webhamster
() автор топика
Ответ на: комментарий от daemonpnz

> Скомпилил с -O0 всё заработало.

Мда, gcc жжот. Как можно было обратный цикл с явным проходом всех элементов свернуть в одну итерацию, ума не приложу. Надо будет в следующих релизах дописать эту опцию.

webhamster
() автор топика
Ответ на: комментарий от svu

> Знаете, я иксами занимаюсь довольно давно, с конца 90х. Я не помню, чтобы xev когда-нибудь не показывал KeyRelease

Я тоже пользуюсь иксами с конца 90х. Когда пытался настроить переключение по отжатию клавиш, тогда и наткнулся на такое ограничение. После чего решил, что уж если отладчик событий не показывает событие, значит его в системе на уровне интерфейса нет. В ФИДО тоже ничем не помогли, так что я считаю, что KeyRelease торчать в интерфейс иксов стало пожже, чем KeyPress.

webhamster
() автор топика
Ответ на: комментарий от webhamster

> Нет, надо будет исправить кодировку на UTF-8 у некоторых файлов. Я это имел в виду.
Русские комментарии - это тоже отдельный диагноз, независимо от кодировки.

То есть предлагаете еще подождать?

Пока что я не увидел, чего именно Вам нужно ждать. Все, что нужно - есть в иксах уже. Мое предложение о новых фичах абстрактно, можете его игнорировать.

С архитектурной прямотой проблема не решена до сих пор

Пока что я не увидел нигде в иксах смертельных ограничений для любой разумной переключалки. И в Ваших аргументах тоже.

svu ★★★★★
()
Ответ на: комментарий от svu

>> С архитектурной прямотой проблема не решена до сих пор

Пока что я не увидел нигде в иксах смертельных ограничений для любой разумной переключалки.


Конечно, таких ограничений нет. Просто тот же автоповтор клавиш (и, соответсвенно, детект автоповтора) при X11-input придется дописывать отдельно. В то время как при низком доступе на это выделено отдельное событие, и всё решается двумя регвырами вида фильтр+очередь.


Файл закоммичен в 1994 году. Поищите KeyRelease. Еще вопросы будут?


Да. Наличие дефайна KeyRelease и мне и вам говорит только о том, что в коде х-сервера есть такая константа. Во внутренностях х-сервера она была практически с момента начала разработки. Вопрос то в другом, а именно, торчало ли событие KeyRelease а API х-сервера.

webhamster
() автор топика
Ответ на: комментарий от webhamster

> Конечно, таких ограничений нет.
Халва аллаху!

придется дописывать отдельно.

Во-первых, неочевидно - нафига оно переключалке. Во-вторых, даже если оно нужно - это ПРИНЦИПИАЛЬНО менее костыльно, чем предлагаемое решение через файлы.

Вопрос то в другом, а именно, торчало ли событие KeyRelease а API х-сервера.

Скажите, а что такое API - в Ваших терминах? Есть заголовочный файл - это и есть формальное определение API. Есть, как я понимаю, обещание сервера генерировать соответствующие события. Это API или хрен собачий? Или Вы будете утверждать, что события не генерились? Хотите пари?;)

svu ★★★★★
()
Ответ на: комментарий от svu

> Или Вы будете утверждать, что события не генерились?

Я знал, что он это скажет.

Хотите пари?;)

Если покажете ему сорцы старых иксов или клиентских программ, которые успешно обрабатывали KeyRelease, он скажет что-то типа «на значит работало не во всех релизах, были баги».

geekless ★★
()
Ответ на: комментарий от svu

>> придется дописывать отдельно.

Во-первых, неочевидно - нафига оно переключалке. Во-вторых, даже если оно нужно - это ПРИНЦИПИАЛЬНО менее костыльно, чем предлагаемое решение через файлы.


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


Вопрос то в другом, а именно, торчало ли событие KeyRelease а API х-сервера.

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


В опенсорче это хрен собачий. Вчера я лишний раз в этом убедился: [Захват видео][DV][Не готов к десктопу] Всё разломали. Что делать? . Пример из ядрёных модулей, но показательный.


Или Вы будете утверждать, что события не генерились? Хотите пари?;)


Я буду утверждать, что когда я проверял генерацию событий программой, идущей в комплекте с иксами, событий отпускания клавиш эта программа не показывала. Нажатия показывала, движения мыши показывала, отжатий не показывала. Как называлась проргамма, я к сожалению, не помню. Но она была стандартная из репозитария. О чем вы собрались заключать пари, не понимаю.

webhamster
() автор топика

Господа! Лол 4 раза!

В gxneur сейчас поставил такие настройки:

AddBind EnableLayout1 Shift_L
AddBind EnableLayout2 Shift_R
AddBind RotateLayout Control Shift_L

Результат:

Control + левый Shift переключает раскладку. Просто левый Shift включает английскуй. Правый — русскую.

Срабатывает на отжатие. Ни с какими другими сочетаниями при этом не конфликтует, всё остальные хоткеи прекрасно работают.

Вывод. Иксы торт. Поделие ТСа закопать.

geekless ★★
()
Ответ на: комментарий от geekless

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

А то так и будет генерировать подобные кирпичи:

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

и помрёт в неведении.

geekless ★★
()
Ответ на: комментарий от webhamster

> Люди мучаются, мечтают о том когда же наконец переключение нормально заработает.
Я - не мучаюсь. Я когда мучался с дурацкой переключалкой в гноме1 (заметьте, дурацкость ее никак не зависела от иксов!) - начал делать свою переключалку. Сделал. Средствами иксов. Теперь она в гноме. И многие другие - не мучаются. Может, мучаются обычно те, кто не способен написать, но хотят чего-то странного? Такое вот совпадение...

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

В опенсорче это хрен собачий.

«Хрен собачий» - это, конечно, аргумент. Если учесть, что мы говорим про референсную реализацию иксов, которой много лет (больше, чем линуху) и которая использовалась как основа для кучи коммерческих продуктов.

svu ★★★★★
()
Ответ на: комментарий от geekless

Спасиб тебе, добрый человек. *Счастливый пошёл компилить xneur*

daemonpnz ★★★★★
()
Ответ на: комментарий от webhamster

Привет от geekless

geekless

Господа! Лол 4 раза!

В gxneur сейчас поставил такие настройки:

AddBind EnableLayout1 Shift_L
AddBind EnableLayout2 Shift_R
AddBind RotateLayout Control Shift_L

Результат:

Control + левый Shift переключает раскладку. Просто левый Shift включает английскуй. Правый — русскую.

Срабатывает на отжатие. Ни с какими другими сочетаниями при этом не конфликтует, всё остальные хоткеи прекрасно работают.

Вывод. Иксы торт. Поделие ТСа закопать./quote]

daemonpnz ★★★★★
()
Ответ на: комментарий от daemonpnz

Привет от geekless

Пусть он засунет xneur себе в чорную... да, ноздрю.

Проходить такой квест, чтобы найти где у xneur конфиг, выше моих сил:

Где у XNeur конфиг?
http://www.linux.org.ru/forum/desktop/6723751?lastmod=1315589387575#comment-6723763 (комментарий)

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

webhamster
() автор топика
Ответ на: комментарий от daemonpnz

> «Почему этого по умолчанию нет во всех дистрибутивах?»

На это могу только ответить другим риторическим вопросом: «Почему в гномах переключение раскладки по умолчанию настроено на Alt+Shift, и этим блокирует все хоткеи с Alt+Shift, включая и необходимый для нормальной навигации по окнам Alt+Shift+Tab?»

Ответ на оба вопроса лежит по ту сторону грани, отделяющей нормального человека от типичного разработчика DE. Так что не знаю.

geekless ★★
()
Ответ на: комментарий от daemonpnz

До этого момента вы были более менее адекватны, но не набрать man xneurrc, для разраба это позор.

Да это позор для разработчиков xneur, что поленились хоть где-нибудь, хоть одним словом обмолвиться как получить помощь по конфигфайлу к их программе.

Откуда пользователь должен узнать про man xneurrc? Из астрала чтоли? Мысли разработчиков прочитать?

Я изначально набрал man xneur. Нигде, включая секцию SEE ALSO нет упоминания про xneurrc.


Но посмотрим на этот ман:

Location for manual settings: ~/.xneur/xneurrc.

Как я и говорил, этого файла нет.


Location of base settings: {prefix}/etc/xneur/xneurrc

Хм, еще бы объяснили что такое {prefix}. Может, пока форматировали man они какую-то автоподстановку забыли?

Файла /etc/xneur/xneurrc тоже нет.


Чертвозьми, да где же конфиг у этой проги лежит? Пользователь должен полезть в исходники, чтобы понять откуда конфиг берется???

webhamster
() автор топика
Ответ на: комментарий от geekless

Ты просто эпичнейший неосилятор. Ты даже ман на офф.сайте прочитать не можешь. http://xneur.ru/settings/

Все смешнее и смешнее читать ваш диалог.

Описание опций настройки

Текущая инструкция написана для xneur версии 0.9.0. Расположение: HOME/.xneur/xneurrc

ТС написал что файла нет

anonymous
()
Ответ на: комментарий от anonymous

А в чём проблема создать и забить его этими настройками?!

daemonpnz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.