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

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

> Все претензии к ментейнеру пакета для вашего дистрибутива. У меня есть /etc/xneur/xneurrc.

Я же написал, что ставил из исходников с официального сайта.

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

> Откуда пользователь должен узнать про man xneurrc?

RTFM. man apropos

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

> /etc/xneur/xneurrc

Очевидно, что ТС не выставил ни --prefix, ни --sysconfdir при конфигурировании сорцов. А когда --prefix не указан, используется дефолтный, который равен... ну в общем, все помнят, чему он равен. Кроме ТСа.

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

Человек назвавший этот мультик аниме, болен, и ему стоит пройти обследование у психиатра.

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

Начнем, пожалуй.

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

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

AddBind EnableLayout1 Shift_L AddBind EnableLayout2 Shift_R AddBind RotateLayout Control Shift_L

Результат:

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

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

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

Итак, я таки поставил xneur, и даже нашел где у него конфиг. Это, конечно, оказалось сделать нетривиально, потому что документация либо стара (на официальном сайте) либо не ссылается на связанные статьи (man). Об этом выше уже написано. Наверно, кому-то помогает опыт майнтейнинга, но только не мне, потому что я никогда майнтейнингом не занимался. И обычный пользователь, для которого предназначена программа, кстати, тоже.

Но все-таки программа xneur наконец установлена, и начала слушаться опции настроечного файла. Я рад.

Теперь, что предлагает geekless. Он предлагает добавить следующие настройки:

AddBind EnableLayout1 Shift_L
AddBind EnableLayout2 Shift_R
AddBind RotateLayout Control Shift_L

Перед добавлением посмотрим, что они значат. Смотрим официальный сайт:

AddBind action [modifier1] [modifier2] [modifier3] [modifier4] key Определяет «горячие» клавиши управления xneur.

action принимает значения: EnableLayout1 - принудительное включение первой раскладки. EnableLayout2 - принудительное включение второй раскладки.

Так, а где RotateLayout? Ищем по всей странице http://xneur.ru/settings. Нет. Ну ладно, может в мане напишут?

man xneurrc
/RotateLayout

Находим только RotateLayoutAfterChangeSelectedMode <param>. Опции RotateLayout в мане нет. Что она делает остается только догадываться, видимо должна переключать раскладку по кругу (хотя на деле не работает). Ну да ладно.

Находим нужные опции в конфиге, прописываем как советовал geekless. Запускаем xneur, пытаемся работать, смотрим лог.

Вначале кажется что все нормально, ну, как минимум, переключение по левому и правому SHIFT вроде как работает.

Теперь проверим кольцевое переключение, ведь: «RotateLayout Control Shift_L ...Control + левый Shift переключает раскладку». Нажмем Ctrl + левый SHIFT. Ничего. Может с правым Ctrl надо? Нет, тоже ничего.

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

Потестируем программы, которыми пользуемся постоянно.

- Браузер Opera. Работает.
- Браузер FireFox. Работает.
- Задачник Korganizer. Работает.
- Редактор Kate. Не работает! Вот просто не работает, раскладка не переключается.
- Мессенжер Kopete. Не работает! Просто не работает, раскладка не переключается.

Как же так, не может быть такого! В одних KDE-программах работает, в других нет. Перезагрузимся, мало ли. Смотрим после перезагрузки. Та же самая ситуация. В Kate и Kopete xneur не работает.

Самое интересное, что в Kate и Kopete в логе xneur видно, что клавиши отлавливаются. Но не все. Alt, Ctrl и Shift не ловятся, как будто их и не нажимаешь. Соответсвенно, раскладка не переключается.

На этом можно впринципе и остановиться. geekless может рассматривать это сообщение как багрепорт. Логи работы в Opera и неработы в Kate прилагаю: http://paste.org.ru/?adfwen.

webhamster ()
Ответ на: комментарий от webhamster
AddBind RotateLayout Control Shift_L

Работает. Лог:

[TRA] 09:24:39 Received KeyRelease 'Control_L' (event type 3)
[TRA] 09:24:39 Received KeyPress 'Control_L' (event type 2)
[TRA] 09:24:40 Received KeyRelease 'Shift_L' (event type 3)
[TRA] 09:24:40 Received KeyPress 'Shift_L' (event type 2)
[TRA] 09:24:40 Received KeyRelease 'Control_L' (event type 3)
[LOG] 09:24:40 Execute manual action "Rotate layouts"
Часть конфига:
AddBind EnableLayout1 Super_L
AddBind EnableLayout2 Super_R
AddBind EnableLayout3
AddBind EnableLayout4
AddBind RotateLayout Control Shift_L

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

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

Обычный пользователь поставит gxneur.

> Что она делает остается только догадываться

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

> Так, по-моему-кто-то из нас врет

Да, ты тролль, лжец и девственник. Наконец-то признался.

> Как же так, не может быть такого!

Учитывая радиус кривизны твоих рук, еще как может.

> Нажмем Ctrl + левый SHIFT. Ничего.

Не воспроизводится.

> Самое интересное, что в Kate и Kopete в логе xneur видно, что клавиши отлавливаются. Но не все. Alt, Ctrl и Shift не ловятся, как будто их и не нажимаешь.

Подтверждаю. Будем разбираться.

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

У меня чать конфига такая же, байт в байт. Какая версия у тебя? У меня последняя 0.13.0.

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

Ну фиг его знает, почему не работает. Мне впринципе круговая переключалка по Ctrl+Shift нафиг не нужна. Гораздо большая проблема что переключалка в некоторых программах не работает.

Я полазил по инету, оказывается у xneur проблемы вылазили не только у меня. Запрос в Google «xneur не работает» показательный. Сообщают о неработоспособности работе в KWrite (тот же Kate), много упоминаний о кривой работе в разных браузерах, а кривая работа в XTerm это вообще адский ужос, чему там глючить?

Я уже собирался потратить время на то чтоб заставить себя взять код сбора событий из xneur, чтобы переключалка стала православной и выправить архитектурную кривизну подхода, как грит svu, но вовремя от этого отказался. Проблема в том, что в xneur, с его прямизной, за шесть лет (а xneur разрабатывается с 2004 года) не смогли допилить правильный захват событий в X11. О чем тут можно вообще говорить?

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

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

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

> много упоминаний о кривой работе в разных браузерах

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

> а кривая работа в XTerm это вообще адский ужос, чему там глючить?

Ты туп как пробка. Открой исходники XTerm и задай этот вопрос его разработчикам. «Здесь же всё просто и очевидно, чему тут глючить?!»

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

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

Кроме прочего, xneur слишком «смарт». это может не нравиться некоторым приложениям. Чтобы говорить о проблемах, надо рассматривать простейшие переключалки типа xxkb - или загонять xneur в самый тупой режим

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

Пока я вижу, что в xneur детектит не все события клавиатуры. Насколько я понимаю, вначале событие надо получить, а потом уже делать с ним что-то очень «смарт». На xxkb надо будет посмотреть, может в нем сделано более железобетонно.

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

Ты лучше под valgind'ом прогони и проверь что инициализируешь все перменные, включая массивы. 100% ошибка не в gcc.

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

Да нет, в моем коде чисто: http://paste.org.ru/?pw1omw

Valgrind указывает только на метод:

char *Config::getCommand(int n)
{
 if(n<0 || n>=CODES_LAYOUT_NUMBER) return NULL;

 return commands[n].cmdText;
}

Уж не знаю, видимо ему не нравится что строки commands[n].cmdText инициализированы в конструкторе Config не нулями по всей длине, а через sprintf():

 for(int i=0; i<CODES_LAYOUT_NUMBER; i++)
  {
   // Очищаются данные регулярных выражений
   sprintf(sequences[i].regexp, "");
   memset(sequences[i].regexpCompile, 0, REGEXP_COMPILE_SIZE);

   // Очищаются строки команд
   sprintf(commands[i].cmdText, "");
  }

Вот и все, остальное - глубины переключение потоков в системных либах.

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

Так, минуту. У пользователя глюк вылазил не только при реальной работе где есть потоки, а и при тесте клавиш (-t1).

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

==10982== HEAP SUMMARY:
==10982==     in use at exit: 46,146 bytes in 28 blocks
==10982==   total heap usage: 83 allocs, 55 frees, 47,749 bytes allocated
==10982== 
==10982== LEAK SUMMARY:
==10982==    definitely lost: 611 bytes in 3 blocks
==10982==    indirectly lost: 0 bytes in 0 blocks
==10982==      possibly lost: 0 bytes in 0 blocks
==10982==    still reachable: 45,535 bytes in 25 blocks
==10982==         suppressed: 0 bytes in 0 blocks
==10982== Rerun with --leak-check=full to see details of leaked memory
==10982== 
==10982== For counts of detected and suppressed errors, rerun with: -v
==10982== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 32 from 7)
webhamster ()
Ответ на: комментарий от Reset

> Ты лучше под valgind'ом прогони и проверь что инициализируешь все перменные, включая массивы. 100% ошибка не в gcc.

Так что тут остается только именно с включенной опитимизацией на AMD системе смотреть. Если и там будет 0 ошибок, значит 100% ошибка в gcc.

Но у меня к сожалению нет доступа к AMD машинам с линухом.

webhamster ()
Ответ на: комментарий от webhamster
   // Очищаются данные регулярных выражений
   sprintf(sequences[i].regexp, "");
   memset(sequences[i].regexpCompile, 0, REGEXP_COMPILE_SIZE);

   // Очищаются строки команд
   sprintf(commands[i].cmdText, "");

На code-wtf.livejournal.com.

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

вот это «Conditional jump or move depends on uninitialised value(s)» обычно приводит к тем самым симптомам, что с -O0 работает, а с -O3 не работает

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

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

Так что симптомов то нет.

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

конкретно в этом месте не нравится ему n, а не cmdText

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

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

 int keyboardLayerNum=n;

 int result = pthread_create(&thread, NULL, threadFunc, &keyboardLayerNum);

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

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

Я с потоками делов никогда не имел, это первая программа.

Имеешь в виду, что отдельный поток с функцией threadFunc() может запуститься после выхода из функции executeCommand()?

А как же тогда правильно передавать переменные в потоковую функцию?? Через глобальный указатель чтоли? Кстати, в официальной документации никаких таких ограничений не написано. Сказано только, что тредовая функция не должна возвращать указатель на свои внутренние данные. Но это же совсем другое, к тому же у меня тредовая функция всегда возвращает NULL.

-----

И еще вопрос, более сложный. Я проблему заметил не сразу, потому что выключаю компьютер каждый день. Проблема в том, что после 1024-х переключений RUS/LAT, перестает выделяться идентификатор потока, ибо он ограничен числом PTHREAD_THREADS_MAX.

Для того, чтобы программа не тормозила при выполнении bash-команд, я вынужден запускать выполнение bash-команды в отдельном потоке. Раньше я полагал, что идентификатор потока выделяется интеллектуально, то есть если освободился идентификатор с более меньшим номером, он и будет использован. На деле оказывается, что выделение идентификатора - это просто инкремент, и одна программа за все свое время работы не может породить более PTHREAD_THREADS_MAX потоков. Так ли это? Или у меня потоки не закрываются?

Никаких рекомендаций по закрытию потока не нашел. Вороде как предполагается, что завершение работы потоковой функции = завершению потока. Но я на всякий случай добавил в конец потоковой функции pthread_exit(NULL). Результат тот же, то есть, мы можем запустить максимум 1024 порожденных потоков (даже своевременно закрытых) а дальше - нет.

Как обойти эту проблему?

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

> А как же тогда правильно передавать переменные в потоковую функцию??

В данном случае ты передаешь int и sizeof(int) <= sizeof(void*), поэтому можно передать так

int result = pthread_create(&thread, NULL, threadFunc, (void*)keyboardLayerNum);

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

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

> Проблема в том, что после 1024-х переключений RUS/LAT, перестает выделяться идентификатор потока, ибо он ограничен числом PTHREAD_THREADS_MAX.

Точно? А по коду я вижу, что у тебя стоит popen без pclose, соответственно файловые дескрипторы текут. А по умолчанию они как раз ограничены числом 1024.

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

Вообще popen и так порождает новый процесс, поэтому потоки тут излишни. А чтобы не ждать IO надо использовать select/poll/epoll или высокоуровневые обертки над ними, например libevent/boost::asio.

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

> Вообще popen и так порождает новый процесс, поэтому потоки тут излишни. А чтобы не ждать IO надо использовать select/poll/epoll или высокоуровневые обертки над ними, например libevent/boost::asio.

Не, что-то почитал про select/poll/epoll и не догоняю, как их можно использовать для того чтоб не ждать IO порожденного потока. Select вообще deprecated, про poll/epoll пишут, что это ожидание событий на файловом дескрипторе (ну пусть на дескрипторе потока). Ожидание делать в основном цикле программы - это значит опять же затормозить программу чтоб дождаться завершения потока, открытого через popen().

Так что тут походу прощще всетаки потоками воспользоваться, просто в threadFunc() добавить закрытие pclose() того, что открыто через popen(), и пусть себе ожидание IO происходит в отдельном потоке.

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

Тогда два потока можно сделать — event loop для IO и основной поток программы. А с каких это пор select стал deprecated ?

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

> Тогда два потока можно сделать — event loop для IO и основной поток программы.

Не, походу смысла нет. Такая схема имеет смысл если нужно следить за IO данными. А мне за ними следить не нужно, запустил и забыл.


> А с каких это пор select стал deprecated ?


Да вот тут же на лоре это ляпнули: www.linux.org.ru/jump-message.jsp?msgid=6575964&cid=6576258

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

Тебе надо как минимум дождаться завершения работы программы и сделать pclose. А узнать это можно только дочитав поток то до конца.

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

> Тебе надо как минимум дождаться завершения работы программы и сделать pclose. А узнать это можно только дочитав поток то до конца.

В доке написано:

Функция pclose ожидает завершения ассоциированного процесса и возвращает код выхода так же, как и функция wait4.

Учитывая, что IO процесса мне не нужно, я могу просто вызвать pclose() в той же потоковой функции, где и запущен popen(), и никаких проблем быть не должно.

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

По-моему, ты усложняешь себе задачу.

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

Потоки — зло. Если можно их минимизировать или сделать без них, то так и надо делать.

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

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

Я не боюсь, я в этом уверен. Сам долго пытался настроить xkb на такое, но не смог.

Те, кто ничего не понял и грит «мне и так удобно» могут продолжать делать так, как им удобно и не засорять эфир фразами «закопать» и «не нужно». Мне — нужно!

К сожалению, автор сам начал не совсем правильно: «Переключатель клавиатуры», «Автор использует LoLo Switcher для переключения между RUS/LAT с помощью правого и левого SHIFT.» Правильнее было бы: «Включатель клавиатуры», «Автор использует LoLo Switcher для включения русской клавиатуры правым шифтом и включения латинской клавиатуры левым шифтом.»

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

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

> Надо бы найти авторитетного специалиста по антропоморфному взаимодействию человек-машина, который бы популярно объяснил, почему переключатель раскладки на нижних клавишах - неэргономично. А то я все один да один, это толкую.

Про нижние клавиши и эргономику не скажу, но по теме «включатель vs. переключатель» дам ссылку:

Джеф Раскин. Интерфейс: новые направления в проектировании компьютерных систем. Глава 3.2. Режимы.

> Фонарик, управляемый с помощью кнопочного выключателя, может быть либо включен, либо выключен при условии, что он находится в хорошем рабочем состоянии. При нажатии кнопки свет зажигается, если фонарик находился перед этим в выключенном состоянии, и наоборот, если текущее состояние «включено», то после нажатия кнопки фонарик выключается. Два состояния фонарика соответствуют двум режимам интерфейса. В одном режиме нажатие кнопки включает свет. В другом режиме нажатие кнопки выключает свет. Если вы не знаете текущее состояние фонарика, вы не можете предсказать, к чему приведет нажатие кнопки. Если ваш фонарик лежит глубоко в сумке, и вы его не видите, то не можете узнать, включен свет или нет, при условии, что это нельзя почувствовать по температуре. Чтобы убедиться, что фонарик выключен, вам требуется вынуть его из сумки. Невозможность определить текущее состояние фонарика — это пример классической проблемы, возникающей в интерфейсе, в котором есть режимы. По состоянию управляющего механизма невозможно сказать, какое действие следует выполнить, чтобы достичь поставленной цели. Оперируя с управляющим механизмом без одновременной проверки состояния системы, вы не сможете предсказать, какой результат будет иметь данная операция.

> К переключателям трудно подобрать надписи. Например, однажды мне показали интерфейс, в котором кнопка на экране была подписана Lock (Блокировать). Когда пользователи в первый раз видели эту кнопку, они считали, что должны нажать на нее для блокировки данных в этом окне. Когда они делали так, подпись кнопки изменялась на Unlock (Разблокировать), показывая, что при нажатии на эту кнопку данные разблокировались бы. После этого многие пользователи удивлялись, что данные оказывались разблокированными, поскольку кнопка показывала Unlock, что они считали индикатором текущего состояния, как это часто бывает при использовании переключателей на кнопках и в меню. Естественно, это приводило к путанице: на самом деле кнопка показывала Lock, когда данные были разблокированы, и Unlock — когда они были заблокированы. Очевидно, что проблему нельзя решить, просто поменяв надписи таким образом, чтобы разблокированные данные обозначались как Unlock, а заблокированные как Lock.

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

> К сожалению, автор сам начал не совсем правильно: «Переключатель клавиатуры», «Автор использует LoLo Switcher для переключения между RUS/LAT с помощью правого и левого SHIFT.» Правильнее было бы: «Включатель клавиатуры», «Автор использует LoLo Switcher для включения русской клавиатуры правым шифтом и включения латинской клавиатуры левым шифтом.»

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


В общем, я уже привык к L и R Shift, и не представляю, как я раньше жил с круговым переключением по CapsLock.

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

Про иксы не знаю, но xneur — не торт ни разу.

> Господа! Лол 4 раза! В gxneur сейчас поставил такие настройки:

Поставил я этот xneur... В GNOME3 крешится при старте. В GNOME2 вроде-бы работает. Однако, наблюдаются странные эффекты при быстром наборе в баше с использованием таба для автодополнения имён каталогов: вместо одной буквы иногда выскакивают две одинаковых. Потом тоже крешится. Конфиги нашёл без проблем. Выключил весь ненужный «искусственный интеллект», все эти автодополнения, запуски приложений, звуки, автокорректировку, оставил только ручной режим и две «включалки» — шифты. Всё равно крешится время от времени.

Брал xneur из каропки: yum install xneur. Кстати, gxneur крешится даже во втором гноме. Кто-то его моментально перезапускает, а он опять крешится — такая светомузыка наступает, зашибись.

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

Итого: На бумаге — шоколадка, так как рутовых прав для запуска не требует, работает кошерно через иксы, все дела... А на деле — как всегда. :-(

anonymous ()
Ответ на: Про иксы не знаю, но xneur — не торт ни разу. от anonymous

> В GNOME3

С приложениями на gtk3 он не работает, так что можно было и не ставить. Пишите письма разработчикам gtk3.

> крешится при старте.

> Потом тоже крешится.

> Кстати, gxneur крешится даже во втором гноме. Кто-то его моментально перезапускает, а он опять крешится — такая светомузыка наступает, зашибись.

Поскольку никакой информации ни о программе, ни о системе не приведено, ничем помочь не могу. Багрепорты не так пишутся.

> раскладку включает даже по долгому нажатию шифта, что не есть хорошо, но терпимо

Так быть не должно. В xev проверьте, генерирует ли долгое удержание шифта серию повторных нажатий.

> Так же змечено включение раскладки по шифт+контрол, что не критично

Это иксовый баг. Вот патч для xneur для частичного обхода проблемы: http://forum.ubuntu.ru/index.php?topic=165332.msg1234337#msg1234337

Кроме него, есть еще мелкие проблемы в самой программе. Вот прямо сейчас как раз занимаюсь их починкой.

> А на деле — как всегда. :-(

Чтобы на деле было не как всегда, нужны толковые багрепорты. Или телепат в команду разработчиков. Как выдумаете, что из этого вероятнее?

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

> > раскладку включает даже по долгому нажатию шифта, что не есть хорошо, но терпимо

> Так быть не должно. В xev проверьте, генерирует ли долгое удержание шифта серию повторных нажатий.

Впрочем. Если имелось ввиду, что нажал-подержал-отпустил переключает раскладку, то это как раз ожидаемое поведение. Тогда будем рассматривать это как FR.

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

> Поскольку никакой информации ни о программе, ни о системе не приведено, ничем помочь не могу. Багрепорты не так пишутся.

Я знаю, как пишутся баг репорты. Но это не баг репорт, а наезд. Вы предлагаете закопать поделие другого автора, в то время как ваше (?) поделие не лучше. По крайней мере, не пригодно к использованию.

> Так быть не должно. В xev проверьте, генерирует ли долгое удержание шифта серию повторных нажатий.

Нет, не генерирует.

> Чтобы на деле было не как всегда, нужны толковые багрепорты.

Чтобы были толковые бвг репорты, нужен толковый домашний сайт программы. На сайте xneur я нашёл явно устаревшее описание настроек и *не* нашёл ссылку «сообщить об ошибке».

> С приложениями на gtk3 он не работает, так что можно было и не ставить. Пишите письма разработчикам gtk3.

Мне, как юзеру, по барабану версия гтк. Не работает в третьем гноме => закопать. (Подколка.) Пилите, Шура, пилите. Когда xneur будет работать всегда и везде...

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

> Я знаю, как пишутся баг репорты. Но это не баг репорт, а наезд. Вы предлагаете закопать поделие другого автора, в то время как ваше (?) поделие не лучше. По крайней мере, не пригодно к использованию.

Вполне очевидно, что в качестве ответа на наезды вы услышите:
— УМВР. ЧЯДНТ? Выпрямляй руки.

Еще вопросы есть?

> Чтобы были толковые бвг репорты, нужен толковый домашний сайт программы. На сайте xneur я нашёл явно устаревшее описание настроек и *не* нашёл ссылку «сообщить об ошибке».


Пиши Crew на почту по этому поводу. Я давно уже ему говорил, что нужен нормальный трекер.

> Мне, как юзеру, по барабану версия гтк. Не работает в третьем гноме => закопать. (Подколка.) Пилите, Шура, пилите. Когда xneur будет работать всегда и везде...


Мне как человеку, не имеющему к gtk3 никакого отношения, по барабану проблемы разработчиков gtk3 и их не в том месте зачесавшейся левой пятки. Пишите им багрепорты, пока не починят. У xneur тут проблемы нет.

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

> Пиши Crew на почту по этому поводу. > Пишите им багрепорты, пока не починят. > У xneur тут проблемы нет.

Три раза «ха». У всех проблемы, только не у вас. Все вокруг пи..расы, один вы Д'Артаньян. Жил я до сих пор без xneur и дальше проживу. Мне ваш падающий xneur нафиг не нужен. Если вам нужны пользователи, то пишите сами Crew, гткашникам, и всем остальным.

Впрочем, мы уклонились от темы этой нитки. Счастливо оставаться.

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

> Если вам нужны пользователи

Мне не нужны пользователи. Вы меня перепутали с каким-нибудь проприетарщиком.

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