URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 80302
[ Назад ]

Исходное сообщение
"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"

Отправлено opennews , 14-Сен-11 22:45 
Выпущен (http://webhamster.ru/site/page/index/articles/projectcode/180) стабильный релиз низкоуровневого локального переключателя клавиатуры LoLo Switcher v.0.20 для X11. LoLo Switcher работает как процесс на низком системном уровне, и получает данные от клавиатуры напрямую из устройства ввода. Обнаружив нужную последовательность кодов, LLS вызывает функции X11, отвечающие за переключение раскладки.


Особенности программы:

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


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

URL: http://webhamster.ru/site/page/index/articles/projectcode/180
Новость: http://www.opennet.me/opennews/art.shtml?num=31755


Содержание

Сообщения в этом обсуждении
"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Zenitur , 14-Сен-11 22:47 
Спасибо вам. А вы умеете так, что набирается слово не в той раскладке, сочетание клавиш - и уже набранное слово переводится! И ещё, вам донейты нужны?

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено umbr , 14-Сен-11 22:54 
Донейты никому не помешают, особенно тем, кто выкладвает свои проекты под GPL/BSD лицензиями.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 14-Сен-11 23:31 
xneur/gxneur

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено rshadow , 15-Сен-11 11:32 
> xneur/gxneur

С половиной софта не работает. Плюс глюки с переводом текста. Но это не вина автора, просто зоопарк большой GNOME, KDE, Mozilla, Java... каждый со своими окнами по своему работают, на Х забили все давно...


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Frank , 20-Сен-11 08:28 
punto switcher работает с одним DM, но тоже глючит.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено СуперАноним , 15-Сен-11 07:58 
>набирается слово не в той раскладке, сочетание клавиш - и уже набранное слово переводится!

А теперь представьте, мы в гуевом терминале, например, запустили SSH сессию... И тут такая подлянка с этим переводом.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено redwolf , 15-Сен-11 13:22 
"При работе в автоматическом режиме, xneur автоматически определяет раскладку вводимого текста и изменяет язык за вас. В этом режиме предусмотрена возможность задания приложений исключений, в которых автоматический режим будет заменён на ручной.

При работе в ручном режиме xneur не отслеживает набор, но позволяет автоматически изменять раскладку последнего набранного слова (кнопка Pause/Break), последней набранной строки (сочетание клавиш Ctrl + Break), выделенного текста (сочетание клавиш Shift + Break) и другие полезные функции."


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 14-Сен-11 22:54 
Этот демон от рута запущен?

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено umbr , 14-Сен-11 23:00 
нет, от юзера

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 14-Сен-11 23:48 
Ага, с суидным битом.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено umbr , 14-Сен-11 23:56 
Зачем ему суидный бит?

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено AHAHAC , 15-Сен-11 01:30 
> напрямую из устройства ввода.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 15-Сен-11 00:12 
Я правильно понял - это такой костыль, чтобы можно было переключать раскладку, допустим, через Alt+Shift и при этом юзать хоткеи Alt+Shif+some_key (штатными возможностями иксов так не сделать)?

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Etch , 15-Сен-11 03:17 
присоединяюсь к вопросу

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Etch , 15-Сен-11 07:24 
Наконец-то под линухом появилась нормальная переключалка раскладки.

Кому надо переключать по Ctrl+Shift - вот нужная строка конфига:
Sequence0=(?<!1;|2;)(((1,29,1;1,42,1;|1,42,1;1,29,1;)(1,29,0;1,42,0;|1,42,0;1,29,0;))|((1,54,1;1,97,1;|1,97,1;1,54,1;)(1,54,0;1,97,0;|1,97,0;1,54,0;)))$
и не забудьте поставить SwitchMethod=0


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 15-Сен-11 07:51 
Судя по формату конфигов, сабж написан на перле

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonimous , 15-Сен-11 15:41 
судя по сорцам C++ :)

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 15-Сен-11 15:51 
> судя по сорцам C++ :)

от цпп там только расширение и пара ключевых слов, остальное написано фиг знает на чём. %-)


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено AHAHAC , 20-Сен-11 05:28 
libpcre - переводицца как lib - понятно, pcre - Perl Compatible Regular Expressions

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Alatar , 15-Сен-11 21:48 
>>> Sequence0=(?<!1;|2;)(((1,29,1;1,42,1;|1,42,1;1,29,1;)(1,29,0;1,42,0;|1,42,0;1,29,0;))|((1,54,1;1,97,1;|1,97,1;1,54,1;)(1,54,0;1,97,0;|1,97,0;1,54,0;)))$

Эээ.. а, это... Ммм... А можно ЭТО перевести на русский, а?


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 15-Сен-11 23:09 
Статья "Конфигурирование LoLo Switcher. Полное руководство."

http://webhamster.ru/site/page/index/articles/projectcode/181

Там про это написано. Тот кто минимально знаком с регулярками, поймет.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 16-Сен-11 12:59 
> Эээ.. а, это... Ммм... А можно ЭТО перевести на русский, а?

это Интуитивно Понятно и Очень Просто.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено анони , 17-Сен-11 21:34 
Всё проще. Это Опенсорс. Здесь мужики суровые, и не такое видали.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 15-Сен-11 04:54 
> Я правильно понял - это такой костыль, чтобы можно было переключать раскладку,
> допустим, через Alt+Shift и при этом юзать хоткеи Alt+Shif+some_key (штатными возможностями
> иксов так не сделать)?

да.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено sabitov , 15-Сен-11 07:18 
Ммм, на всех клавах, которые я видел, всегда есть одна абсолютно ненужная кнопка, расположенная между левым шифтом и табом. Соответственно, grp:caps_toggle и никаких коллизий не будет никогда.

Т.е. я не против проекта, но, честное слово, его ценность от меня ускользает.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено gegMOPO4 , 15-Сен-11 12:43 
Кнопка одна, а раскладок больше одной.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено sashkan , 15-Сен-11 15:19 
> Кнопка одна, а раскладок больше одной.

есть ещё модификиторы·
как минимум: shift, ctrl, alt (включая их комбинации, а при желании — ещё и различая правые и левые клавиши)·
учитывая, что по умолчанию в x-сервере лишь четыре группы, этих клавиш более чем достаточно·


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Викрам , 16-Сен-11 10:41 
kkbswitch - по капсу переключаемся между двумя последними, и для каждой раскладки своя горячая клавиша, например, альт+1, альт+2, альт+3 etc. очень удобно

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Sas , 15-Сен-11 13:11 
ага, мега удобно!
а капс если уж так нужен врубать по капс_шифт и отключать по шифту
единственный минус такого решения - очень трудно потом за другими компами:)

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Ainari , 16-Сен-11 10:45 
Есть такое. Кто-нибудь знает как настроить переключение раскладок по Caps Lock в Windows?

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Викрам , 16-Сен-11 10:57 
> Есть такое. Кто-нибудь знает как настроить переключение раскладок по Caps Lock в
> Windows?

гугл знает, я когда-то настраивал под виндой, но уже не помню название программки


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Sas , 16-Сен-11 12:53 
как всегда через Ж
http://haali.su/winutils/
с икспей работала, а с новыми версиями я не проверял

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 16-Сен-11 12:59 
> в Windows?

уходи.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Kirill.Zabarniuk , 18-Сен-11 15:46 
с Autohotkey можно так сделать
http://www.autohotkey.com/

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Михаил , 15-Сен-11 11:43 
В natty например включен патч на xorg от Ильи Муравьева и там можно alt+shift+somekey хоткеи и alt+shift перключалку клавиатуры.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 15-Сен-11 13:34 
Что такое natty?

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Михаил , 15-Сен-11 14:15 
Ubuntu 11.04 Natty Narwhal.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 15-Сен-11 14:30 
>В natty например включен патч на xorg от Ильи Муравьева

Кстати, а почему этот патч не принят в мейнстрим Xorg?


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Михаил , 16-Сен-11 08:49 
Потомучто они там угорели по своим стандартам и хрен чего поменяют до наступления xkb2 (т.е. никогда)

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Smb. , 15-Сен-11 14:34 
Ага, зато нажатие Win key жестко перехватывает Unity

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 15-Сен-11 15:20 
> Ага, зато нажатие Win key жестко перехватывает Unity

ССЗБ.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 16-Сен-11 15:23 
Иэх, налетай, подешевело! с этой х@$новиной в блендере заработали Ctrl+Shift+<key>. Чо раньше не придумали >_< !

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 21-Сен-11 06:56 
> Иэх, налетай, подешевело! с этой х@$новиной в блендере заработали Ctrl+Shift+<key>. Чо
> раньше не придумали >_< !

В убунтах оно и так работало, лол :)))


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено registered , 15-Сен-11 00:22 
Желаю искренне проекту удачи и успехов в развитии.
Сам переключаю раскладку правым Win, но заметил что не всегда так получается пользоваться, например на нетбуках, где этой клавиши нет, или на КПК(планшетнике).
setxkbmap -layout 'us,ru(winkeys)',ua -option grp:rwin_toggle

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Ано онА , 15-Сен-11 21:25 
+100500
Самая ненужная клавиша на клавиатуре пригодилась и мне. Жаль, что производители ноутов тоже её сочли ненужной.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 18-Сен-11 03:30 
> тоже её сочли ненужной.

А как же капслок? Это и ненужная клавиша и ненужная лампочка. Отлично подходит для раскладки!


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 15-Сен-11 04:53 
мда. программа хорошая, но код… автор, ну хотя бы man strcpy, а? и если уж c++ — чем не понравились std::string и прочие приятные ништяки?

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 15-Сен-11 12:45 
> программа хорошая, но код… автор, ну хотя бы man strcpy

Это психологическая проблема. Я часто путаю strcpy() и strcmp(), могу подумать об одном а написать другое. Поэтому, чтоб не допускать ошибок, пишу sprintf().

> и если уж c++ — чем не понравились std::string и прочие приятные ништяки?

Когда в c++ исчезнет std::wstring и останется один std::string, поддерживающий любые символы в любой кодировке, вот тогда std::string понравится. Мне, например, нравится QString и я его использую в Qt. После него std::string - это какой-то огрызок, а не класс строки.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено gegMOPO4 , 15-Сен-11 13:14 
Когда в char будет влезать «символ в любой кодировке».

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 15-Сен-11 15:57 
> одном а написать другое. Поэтому, чтоб не допускать ошибок, пишу sprintf().

ага. sprintf(dest, src). подсказать, какой кайф будет, если в src встретятся символы форматирования?

> Когда в c++ исчезнет std::wstring и останется один std::string, поддерживающий любые символы
> в любой кодировке, вот тогда std::string понравится.

вообще-то, std::string ничем не хуже сишного char, который используется сейчас. кроме того, что нет проблемы с размером буфера и есть куча ништяковых методов. если ты уже решил на c++ писать -- то пользуйся тем, что там дают, зачем городить свои велосипеды, у которых, к тому же, колёса восьмёрками?


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено abzu , 15-Сен-11 06:33 
Чем отличается от XNeur?

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 15-Сен-11 06:44 
> Чем отличается от XNeur?

по ссылкам ходить немодно, да?


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Anonymous789 , 15-Сен-11 07:07 
Вот бы разработчики xNeur и LoLo скооперировались и сделали нормальный аналог Punto. А то xNeur работает адекватно далеко не во всех приложениях.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено pavlinux , 15-Сен-11 07:25 
Main.cpp: В функции «bool checkEventFilter(char*)»:
Main.cpp:437:110: предупреждение: passing NULL to non-pointer argument 6 of «int pcre_exec(const pcre*, const pcre_extra*, const char*, int, int, int, int*, int)» [-Wconversion-null]

Main.cpp: В функции «void executeCommand(int)»:
Main.cpp:585:75: предупреждение: приведение к типу указателя от целого другого размера [-Wint-to-pointer-cast]

Main.cpp: В функции «void* threadFunc(void*)»:
Main.cpp:597:34: ошибка: cast from «void*» to «int» loses precision [-fpermissive]
gmake[2]: *** [CMakeFiles/loloswitcher.dir/Main.cpp.o] Ошибка 1

---

Мне вот интересно, нах...я народ скупает новое железо, что б туда впиндюрить 32-битную ОСь

---

Ах да, у меня клава и мышь PS/2, как жить?  Драйвер input не вапаян в ядро.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено pavlinux , 15-Сен-11 08:32 
> Ах да, у меня клава и мышь PS/2, как жить?  Драйвер
> input не вапаян в ядро.

И ещё, в последних дистрибах xorg.conf нет, и CoreKeyboard не используется.
И при зпгрузке X_ов у меня 5 штук /dev/input/inputX.
Более того вынимая клаву, и втыкая другую она может стать как /dev/input/input6,
а может и 7.
Ах да, а ещё я использую по две или три клавы, на одной китайская и японская раскладки,
на второй хидни и монголская, на третьей русcкая и англайская. Как жить-то? :)    
Владельцы Тыкпадов ваще в панике...  



"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено all_glory_to_the_hypnotoad , 15-Сен-11 10:18 
> Ах да, а ещё я использую по две или три клавы, на одной китайская и японская раскладки,

на второй хидни и монголская, на третьей русcкая и англайская. Как жить-то? :)    

Это ты так эффективно троллишь или на самом деле так?


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено zazik , 15-Сен-11 12:42 
>> Ах да, а ещё я использую по две или три клавы, на одной китайская и японская раскладки,
> на второй хидни и монголская, на третьей русcкая и англайская. Как жить-то?
> :)
> Это ты так эффективно троллишь или на самом деле так?

А почему нет, если надо общаться с этой братией? Отдельная клава с раскладкой удобнее запоминания на какой клавише какой символ.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 16-Сен-11 15:21 
надо добавлять поддержку udev

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 15-Сен-11 15:23 
> Мне вот интересно, нах…я народ скупает новое железо, что б туда впиндюрить
> 32-битную ОСь

может, потому, что ваши хвалёные 64 бита всё равно надо обвешивать костылями, чтобы пускать 32-битные софтины? так нафига мне вот такой вот геморой с 64-мя битами, которые нафиг не нужны дома ни для чего, кроме кидания понтов?


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 21-Сен-11 06:59 
> может, потому, что ваши хвалёные 64 бита всё равно надо обвешивать костылями,
> чтобы пускать 32-битные софтины?

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


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 21-Сен-11 14:03 
> Выбросить нахрен такие софтины, которые требуют костылей.

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

ты, видимо, не знаешь, что такое «большая контора» и «legacy code». где-то я тебе даже завидую.

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

зыж а я лично вообще don't give a shit to x64. некоторый мой софт, правда, под x64 собирается, но это я нечаянно, я работаю над устранением таких недостатков.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 21-Сен-11 14:06 
кстати, интересно: сколько из этого софта так же безпроблемно соберётся на 128-битной архитектуре?

хинт, хинт: не так много, как ты себе фантазируешь. потому что в куче софта стоят ифдефные костыли вида «32? приседай! 64? прыгай!» а на 128 костыля нет. это — не «переносимый софт», это «обкостыленый софт».

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


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 21-Сен-11 14:06 
вот блин. спросонок в грамотности глюканул…

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Dejavu_Dmitry , 08-Окт-11 01:08 
> Main.cpp: В функции «void* threadFunc(void*)»:
> Main.cpp:597:34: ошибка: cast from «void*» to «int» loses precision
> [-fpermissive]
> gmake[2]: *** [CMakeFiles/loloswitcher.dir/Main.cpp.o] Ошибка 1
> ---
> Мне вот интересно, нах...я народ скупает новое железо, что б туда впиндюрить
> 32-битную ОСь
> ---
> Ах да, у меня клава и мышь PS/2, как жить?  Драйвер
> input не вапаян в ядро.

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

>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp: In function ‘bool >checkEventFilter(char*)’:
>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp:453:105: warning: passing NULL to >non-pointer argument 6 of ‘int pcre_exec(const pcre*, const pcre_extra*, const char*, >int, int, int, int*, int)’ [-Wconversion-null]
>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp: In function ‘void >executeCommand(int)’:
>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp:614:71: warning: cast to pointer from >integer of different size [-Wint-to-pointer-cast]
>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp: In function ‘void* threadFunc(void*)’:
>
>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp:628:31: error: cast from ‘void*’ to >‘int’ loses precision [-fpermissive]
>make[2]: *** [CMakeFiles/loloswitcher.dir/Main.cpp.o] Ошибка 1
>make[1]: *** [CMakeFiles/loloswitcher.dir/all] Ошибка 2
>make: *** [all] Ошибка 2

Я использую 64-битную систему и соответственной битности компилятор.
Открыл исходники, посмотрел. Заметил, что автор оставил кое-какие строки закомментированными. Имея невообразимо малый опыт программирования и такой же величины знание английского (сообщения компилятора выдавались на английском) попытался исправить код так, чтобы наконец использовать во благо это воплощение хорошей авторской идеи.
Понемногу убивал предупреждения. Убил ошибку. Запустил бинарник. Работает, но после переключения на нужную раскладку вылетало с ошибкой сегментирования.
В итоге, чтобы избавиться от всех предупреждениях и ошибок, и чтобы работало без вылетов мне пришлось сделать следующие манипуляции с сырком.

1. Строку 453 файла Main.cpp ИЗМЕНИТЬ следующим образом:
Было:
/*453*/        count=pcre_exec( (pcre *)config.getEventFilterCompile(), NULL, text, strlen(text), 0, NULL, ovector, 30);

Стало:
/*453*/        count=pcre_exec( (pcre *)config.getEventFilterCompile(), NULL, text, strlen(text), 0, 0, ovector, 30);

2. Строку 614 файла Main.cpp ЗАкомментировать, а в свою очередь РАСкомментировать предыдущую строку - 613. В итоге стало так:
/*613*/        int result = pthread_create(&thread, NULL, threadFunc, &keyboardLayerNum);
/*614*/        //int result = pthread_create(&thread, &threadAttr, threadFunc, (void*)keyboardLayerNum);

3. Строку 628 файла Main.cpp ЗАкомментировать, а в свою очередь РАСкомментировать предыдущую строку - 627. В итоге стало так:
/*627*/        int keyboardLayerNum = * (int *) arg;
/*628*/        //int keyboardLayerNum = (int) arg;

4. Строку 82 файла EventQueue.cpp ИЗМЕНИТЬ следующим образом:
Было:
/*82*/        count=pcre_exec( (pcre *)regexpCompile, NULL, queueSequence, strlen(queueSequence), 0, NULL, ovector, 30);

Стало:
/*82*/        count=pcre_exec( (pcre *)regexpCompile, NULL, queueSequence, strlen(queueSequence), 0, 0, ovector, 30);


Сохранил изменения в файлах исходников. Выполняю команду 'make' и наблюдаю вывод:
[ 20%] Building CXX object CMakeFiles/loloswitcher.dir/Main.cpp.o
[ 40%] Building CXX object CMakeFiles/loloswitcher.dir/KeyLayout.cpp.o
[ 60%] Building CXX object CMakeFiles/loloswitcher.dir/Config.cpp.o
[ 80%] Building CXX object CMakeFiles/loloswitcher.dir/ParseHelper.cpp.o
[100%] Building CXX object CMakeFiles/loloswitcher.dir/EventQueue.cpp.o
Linking CXX executable loloswitcher
[100%] Built target loloswitcher

Бинарник готов. Запускается, пока не вылетает. После установки продвинутой пищалки для встроенного в компьютер динамика 'beep' я даже услышал (при переключении раскладки) невообразимо точной частоты и длительности писки встроенных динамиков моего скромного ThinkPad`a...
Автору большое спасибо. Желаю удачи и улучшения/исправления кода.
А всем страждущим посмотреть этот ролик и не ныть по каждому поводу.
Try this --> http://www.youtube.com/watch?v=TzWc7VBmTPI


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено pavlinux , 08-Окт-11 03:50 
> В итоге, чтобы избавиться от всех предупреждениях и ошибок, и чтобы работало
> без вылетов мне пришлось сделать следующие манипуляции с сырком.

Баян, велосипед,... и всё такое ... :)

http://www.opennet.me/openforum/vsluhforumID3/80302.html#105


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 08-Окт-11 20:22 
>[оверквотинг удален]
>>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp:453:105: warning: passing NULL to >non-pointer argument 6 of ‘int pcre_exec(const pcre*, const pcre_extra*, const char*, >int, int, int, int*, int)’ [-Wconversion-null]
>>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp: In function ‘void >executeCommand(int)’:
>>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp:614:71: warning: cast to pointer from >integer of different size [-Wint-to-pointer-cast]
>>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp: In function ‘void* threadFunc(void*)’:
>>
>>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp:628:31: error: cast from ‘void*’ to >‘int’ loses precision [-fpermissive]
>>make[2]: *** [CMakeFiles/loloswitcher.dir/Main.cpp.o] Ошибка 1
>>make[1]: *** [CMakeFiles/loloswitcher.dir/all] Ошибка 2
>>make: *** [all] Ошибка 2
> Я использую 64-битную систему и соответственной битности компилятор.

Вот тут написали как исправить:

http://www.opennet.me/openforum/vsluhforumID3/80302.html#105

Кратко - строку с минусиком заменяем на строку с плюсиком.

Скоро исправлю и выложу на официальный сайт.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 09-Окт-11 21:17 
Сделано.

Забирай релиз для x86_64 с официальной странички: http://webhamster.ru/site/page/index/articles/projectcode/180

Новость: http://webhamster.ru/site/page/index/main/news/191


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Dmitriy.trt , 15-Сен-11 07:34 
Как же давно мечтал об этой штуке! Автору СПАСИБО!

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 15-Сен-11 08:28 
А в консоли работает или иксы нужны?

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено pavlinux , 15-Сен-11 08:32 
> А в консоли работает или иксы нужны?

pcre - X_ы


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 15-Сен-11 09:10 
Вот Вы же всё знаете... Подскажите, пжлст, существует ли такой индикатор раскладки для Гнома, который бы мог показывать текущую раскладку поверх окна приложения, развёрнутого на весь экран? Допустим, набираю я текст в geany. Экранчик у моего бука маленький. Я нажимаю F11 и перестаю видеть гномовский индикатор раскладки. Теперь я вижу больше текста, что хорошо, но не вижу раскладки, что очень неудобно. Решаемо?

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено all_glory_to_the_hypnotoad , 15-Сен-11 10:17 
можно на ЛЕДы клавиатуры вывести индикатор, вместо ScrLk, NumLock и т.д.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 15-Сен-11 10:26 
> можно на ЛЕДы клавиатуры вывести индикатор, вместо ScrLk, NumLock и т.д.

Когда у меня была клавиатура со всеми тремя LED'ами, так и делал: назначал индикатором ScrLock. Сейчас у меня его нет. А с двумя другими не получилось, глюки какие-то наблюдались. Хотело бы всё-таки что-то типа плавающего окошка поверх всех остальных окон.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 15-Сен-11 11:01 
> Когда у меня была клавиатура со всеми тремя LED'ами, так и делал:
> назначал индикатором ScrLock. Сейчас у меня его нет. А с двумя
> другими не получилось, глюки какие-то наблюдались. Хотело бы всё-таки что-то типа
> плавающего окошка поверх всех остальных окон.

Вспомнил, какие глюки были. Когда назначал NumLock в качестве индикатора раскладки, то когда переходил в русскую раскладку и при этом загорался NumLock, то и функция NumLock включалась. Т.е. клавиши mjkl;uiop7890 становились цифровыми (0123-456*789/ соответственно). CapsLock назначать не пробовал, поскольку оно бывает нужно по прямому назначению.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 15-Сен-11 11:59 
> CapsLock назначать не пробовал, поскольку оно бывает нужно по прямому
> назначению.

давно так не смеялся :)



"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено sabitov , 15-Сен-11 20:08 
Нет, ну тут Вы не правы, если надо много на SQL набрать, то часто выгодней переключиться на заглавные, а маленькие через шифт получать.

Другое дело, что можно раскладку на капс повесить, а на шифт-капс, так сказать,- капс_ориджинал.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено whip , 15-Сен-11 10:26 
capslock, scrolllock индикаторы на нетбуке есть?

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 18-Сен-11 03:32 
> capslock, scrolllock индикаторы на нетбуке есть?

На моем ноуте есть и капс и индикатор для него. Очень удобно раскладку переключать :)


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 15-Сен-11 11:57 
вот нахера тебе всё время видеть этот индикатор раскладки?
плохо с памятью и сложно запомнить набирал ты до этого русский текст или английский?
или после набора пары символов ты не можешь въехать какой это язык?

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 15-Сен-11 12:07 
> вот нахера тебе всё время видеть этот индикатор раскладки?
> плохо с памятью и сложно запомнить набирал ты до этого русский текст
> или английский?

Когда набираешь/правишь в ТеХ'е текст с формулами и при этом думаешь, что будешь дальше писать, сложно.

> или после набора пары символов ты не можешь въехать какой это язык?

Беда в том, что в русской раскладке Ctrl+C ИНОГДА не копирует выделенное. Не знаю, это глюк geany или где. В любом случае, перед копированием приходится переключаться в английскую раскладку. И для этого ОЧЕНЬ хочется видеть индикатор.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 15-Сен-11 15:24 
выкинь гном, поставь нормальный WM, к нему прицепи xxkb — будет тебе счастья ведёрко.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 15-Сен-11 15:33 
Не знал. Спасибо. Вот это флажок -- он поверх всех окон будет? А с Гномом оно работать не может?

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 15-Сен-11 15:52 
> Не знал. Спасибо. Вот это флажок — он поверх всех окон будет?
> А с Гномом оно работать не может?

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


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 15-Сен-11 15:54 
> Не знал. Спасибо. Вот это флажок -- он поверх всех окон будет?
> А с Гномом оно работать не может?

ах, да. на фулскрине, если декораций нет -- всё равно запиливает с указаными отступами. в общем, у меня даже на полноэкранных SDL-приложениях умудрялся выводить. %-)


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 15-Сен-11 15:57 
> ах, да. на фулскрине, если декораций нет -- всё равно запиливает с
> указаными отступами. в общем, у меня даже на полноэкранных SDL-приложениях умудрялся
> выводить. %-)

Как раз собирался спросить про фуллскрин :) Спасибо, буду пробовать.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено sabitov , 15-Сен-11 20:10 
> вот нахера тебе всё время видеть этот индикатор раскладки?
> плохо с памятью и сложно запомнить набирал ты до этого русский текст
> или английский?
> или после набора пары символов ты не можешь въехать какой это язык?

Ммм, это если у вас переключение раскладок "глобально" работает, а ежели для каждого окна отдельно, то таки да, сложно.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 15-Сен-11 09:12 
С винды всё больше и больше бесполезного bloatware тянут...

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 21-Сен-11 07:01 
> С винды всё больше и больше бесполезного bloatware тянут...

1) При чем тут винда?
2) Почему это - bloatware?
3) Почему оно бесполезное?


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено all_glory_to_the_hypnotoad , 15-Сен-11 10:15 
> Прозрачная работа параллельно с другими переключателями клавиатуры;

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


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено ызусефещк , 15-Сен-11 12:19 
А с многопользовательской системой как работает? Правила разные для каждого можно делать?

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 15-Сен-11 13:05 
> А с многопользовательской системой как работает? Правила разные для каждого можно делать?

Для каждого пользователя можно делать разные правила. Конфиг конкретного пользователя лежит в рабочем каталоге пользователя: ~/.config/loloswitcher/config.ini

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

Единственное, чего не может LoLo Switcher, так это работать при сетевом подключении. Поэтому он и называется локальным (см. текст новости). При работе по сети пользуйтесь нативными переключателями или xneur. При работе по сети скорость реакции системы ниже, так что выгоды от LoLo Switcher в таком режиме нет. Я писал программу под себя, а за многие годы работы под Linux мне не разу не понадобилось организовывать постоянную работу по сети с X-сервером.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено gegMOPO4 , 15-Сен-11 13:15 
Начинание хорошее, но автору ещё предстоит многому научиться.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonimous , 15-Сен-11 13:52 
Отличная софтина. Хороший образец для изготовления клавиатурных шпионов!

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 15-Сен-11 15:01 
Запусти xev или xneur с дебагом и тоже любуйся на кейлоггинг.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 15-Сен-11 15:30 
сказать хочется только одно: люди, если хотите этим пользоваться — возьмите идею и перепишите поделку с нуля. а то…

фиксированые буфера размером по 250 байт на строки… копирование сишных строк при помощи sprintf(dest, source) (все уже умилились детской наивности автора?), копирование тех же строк циклом for с завершающей ручной допиской нуляя абсолютное забивание на const char * и прочие радости первокурсника. чтобы получить представление о коде, посмотрите на функции из модуля parsehelper. и поверьте: там *весь* код такой же.

а чего стоят циклы типа:
for (i = 0; i < strlen(str); ++i) { … }

или проверка на пустую сишную строку — при помощи того же strlen()?

эх…


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 15-Сен-11 16:41 
А что тебя, дорогой неизвестный анон, так код напрягает? Ты боишься, что программа работать не будет? Так она работает. Боишься, что память течет? Так она не течет.

[оскорбление вырезано модератором]

Когда программист программирует, и ему нужно пробежать символы в строке, он напишет for(i = 0; i < strlen(str); ++i) и поедет дальше. Если ему нужно узнать размер строки, он напишет strlen() а не что-то другое. Если программист мыслит категорией "вписать в строку текст", он напишет sprintf() а не strcmp(), тьфу ты, strcpy(), и будет абсолютно прав. Тупые кодеры этого обычно не понимают.

Кстати, ты правильно угадал, что модуль parsehelper - это поделие студента. Так и есть, раньше это была c-шная наколенная библиотека для char-строк. Тут она засунута без изменений, просто в c++ нутой обёртке. Она выполняет свою функцию, а большего от нее и не требуется.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Викрам , 16-Сен-11 11:09 
ну хоть бы так )
int size = strlen(str);
for(i = 0; i < size; ++i)


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Andrey Mitrofanov , 16-Сен-11 11:41 
> int size = strlen(str);
> for(i = 0; i < size; ++i)

Реквестую в тред павлинукса с показательным дизассемблером оптимизации этой ерунды "обычным" gcc! Маэстро??


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 16-Сен-11 13:01 
> Реквестую в тред павлинукса

и изена с жабой — чтобы всю труппу уже собрать.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 16-Сен-11 15:28 
gcc соптимизирует если аргумент strlen - const char *. Если нет, то будет вызывать strlen() на каждую итерацию.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 16-Сен-11 15:42 
> gcc соптимизирует если аргумент strlen - const char *. Если нет, то
> будет вызывать strlen() на каждую итерацию.

аффтырь обсуждаемого софта const'ам не обучен вообще.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 18-Сен-11 03:36 
> аффтырь обсуждаемого софта const'ам не обучен вообще.

Ну ты, такой умный, почему-то лучше не написал, так? У тебя есть выбор:
1) Переписать лучше и гордиться собой. Можно даже потом об этом сообщить и отослать автору патч.
2) Если лень, тогда STFU. Потому что вашего переключатора раскладки я не вижу что-то. Ни плохого, ни хорошего. Плохой - лучше чем никакой, не так ли? :)


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 18-Сен-11 03:48 
> Ну ты, такой умный, почему-то лучше не написал, так?

потому что мне такой софт не.нужен. сюрпрайз?

> 1) Переписать лучше и гордиться собой. Можно даже потом об этом сообщить
> и отослать автору патч.

там надо не софтину, а всего автора переписывать. с нуля, желательно.

> 2) Если лень, тогда STFU.

с чего бы?

> Потому что вашего переключатора раскладки я не вижу что-то.

меня устраивает xxkb, немного мной подпиленый под мои нужды.

> Плохой — лучше чем никакой, не так ли?

ты что, до сих пор без переключателя сидишь? O_O иначе я «никакой» понять не могу.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 21-Сен-11 07:08 
>> Ну ты, такой умный, почему-то лучше не написал, так?
> потому что мне такой софт не.нужен. сюрпрайз?

Это не значит что он не нужен всем.

>> 1) Переписать лучше и гордиться собой. Можно даже потом об этом сообщить
>> и отослать автору патч.
> там надо не софтину, а всего автора переписывать. с нуля, желательно.

Себя перепишите для начала. А то только вонять по форумам умеете да всякое кривое барахло типа lua восхвалять. Мне так например такая программа в два раза полезнее чем эти ваши lua и что там у вас еще :P.

>> 2) Если лень, тогда STFU.
> с чего бы?

С того что дежурное "вы все пи...сы а я Д`Артаньян" - уныло и уже приелось.

>> Потому что вашего переключатора раскладки я не вижу что-то.
> меня устраивает xxkb, немного мной подпиленый под мои нужды.

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

>> Плохой — лучше чем никакой, не так ли?
> ты что, до сих пор без переключателя сидишь? O_O иначе я «никакой» понять не могу.

Нет, я с переключателем, но вот этот - выглядит как-то перспективнее и (на уровне логики работы) менее горбато, более универсально и перспективно. Качество кода конечно так себе, но остальным почему-то лень даже так. А идея так вообще epic win. В сумме вполне достойно уважения стало быть.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 21-Сен-11 14:25 
> Это не значит что он не нужен всем.

Кэп! не узнал тебя в маске анонимуса!

> Себя перепишите для начала. А то только вонять по форумам умеете да
> всякое кривое барахло типа lua восхвалять. Мне так например такая программа
> в два раза полезнее чем эти ваши lua и что там
> у вас еще :P.

очередной бедняга с поломаным китайским детектором. да ещё и приписывает мне восхваления какого-то непонятного «lua» (что это?)

> С того что дежурное «вы все пи…сы а я Д`Артаньян» — уныло и уже приелось.

бедняга. мне всегда было интересно: слепым людям очень тяжело на свете жить? а на форумах писать — вообще подвиг, наверное. ладно, поскольку ты слепой, я сделаю скидку: ты мог и не заметить цитат и гениального, качественного код автора софтины. где, например, buffer overflow чуть ли не в каждой третьей строке. и софтина не понижает свои привилегии, если запущена с SUID. вы ставьте, ставьте себе сие поделие: больше дырок в системе — веселее жить.

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

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

> Качество кода конечно так себе

и то правда: что нам переполнение буферов? слово «проверки» придумал трус. настояшие экстремалы запускают софтины с известными эксплойтами от рута, потому что хардкор и экстрим.

> А идея так вообще epic win. В сумме вполне достойно уважения стало быть.

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


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 16-Сен-11 13:04 
[оскорбления удалены модератором]

sprintf(dest, src). всё, дальше с тобой даже говорить не о чем.

[оскорбления удалены модератором]


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено pavlinux , 17-Сен-11 03:33 
> и не льсти себе: ты не «программист».

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

Шоб на 64-х не матюгался и 6-ой аргумент у pcre_exec() имеет тип int, а не указатель.
---


--- a/loloswitcher_0_20/EventQueue.cpp      2011-09-10 01:15:44.000000000 +0400
+++ b/loloswitcher_0_20/EventQueue.cpp      2011-09-17 03:31:08.372977501 +0400
@@ -79,7 +79,7 @@
  // Проверка регулярного выражения
  int count = 0;
  int ovector[30];
- count=pcre_exec( (pcre *)regexpCompile, NULL, queueSequence, strlen(queueSequence), 0, NULL, ovector, 30);
+ count=pcre_exec( (pcre *)regexpCompile, NULL, queueSequence, strlen(queueSequence), 0, 0, ovector, 30);

  // printf("Count=%d\n", count);

--- a/loloswitcher_0_20/Main.cpp    2011-09-13 02:01:31.000000000 +0400
+++ b/loloswitcher_0_20/Main.cpp    2011-09-17 03:30:59.239977501 +0400
@@ -450,7 +450,7 @@
  // Проверка регулярного выражения EventFilter
  int count = 0;
  int ovector[30];
- count=pcre_exec( (pcre *)config.getEventFilterCompile(), NULL, text, strlen(text), 0, NULL, ovector, 30);
+ count=pcre_exec( (pcre *)config.getEventFilterCompile(), NULL, text, strlen(text), 0, 0, ovector, 30);

  // printf("Count=%d\n", count);

@@ -600,7 +600,7 @@
  if(strlen(config.getCommand(n))==0)
   return;

- int keyboardLayerNum=n;
+ ssize_t keyboardLayerNum=n;

  // Выполнение команды будет происходит в отдельном потоке
  pthread_t thread;
@@ -625,7 +625,7 @@
static void *threadFunc(void *arg)
{
  // int keyboardLayerNum = * (int *) arg;
- int keyboardLayerNum = (int) arg;
+ ssize_t keyboardLayerNum = (ssize_t) arg;

  char cmd[250];


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено PnD , 15-Сен-11 22:45 
Отличный концепт! Наконец-то в X появился грамотный переключатель, вместо объяснений почему это не нужно.

Но: на SuSe нужен suid или встраивать в стартап иксов, а лучше комитить код прямо в иксы, сопроводив мощным напутственным пинком тамошним девелоперам.

P.S. Если пойти дальше, можно вообще сделать модель "событие ввода - запуск кода" под любые хоткеи.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 16-Сен-11 13:08 
> Отличный концепт! Наконец-то в X появился грамотный переключатель, вместо объяснений почему
> это не нужно.

на клавиатуре есть как минимум две «лишние» кнопки, которые можно заюзать с пользой.

а владельцы недокомпов (типа ноуты) — ССЗБ, конечно.


"СПАСИБО"
Отправлено Аноним , 16-Сен-11 00:43 
Кланяюсь в ноги автору. Как мен давно надо было так и накрутил. Огромное нечеловеческое СПАСИБО!

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено yurkao , 16-Сен-11 16:07 
Низкоуровневый переключатель клавиатуры - тумблер!

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 21-Сен-11 07:11 
> Низкоуровневый переключатель клавиатуры - тумблер!

А что, это идея :) тумблер и микроконтроллер в USB, прикинуться HIDом - и вот у вас аппаратный тумблер для раскладки, лол :))))


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено pavlinux , 17-Сен-11 06:27 
По заявка слушателей:  

* Pavlinux LoLoSwitcher C99 Unixway GNU Remix Edition *<:-)

https://github.com/pavlinux/Pavlinux-LoLoSwitcher-C99-Unixwa...

# git clone git://github.com/pavlinux/Pavlinux-LoLoSwitcher-C99-Unixway-GNU-Remix-Edition.git;
# cd Pavlinux-LoLoSwitcher-C99-Unixway-GNU-Remix-Edition;
# make;
# ./plsw

Запускается, но не проверял,... как уже писал, у меня нет /dev/input/event*

Фсё, задолбался, ушёл спать...
:)


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено pavlinux , 17-Сен-11 20:47 
Пофиксил глюки, вроде даже работает :)

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено PnD , 21-Сен-11 17:51 
> Пофиксил глюки, вроде даже работает :)

  Спасибо, пашет. Остается интегрировать в иксы и забыть баги нативного свитчера как страшный сон.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 21-Сен-11 18:04 
> Остается интегрировать в иксы и забыть

…про ьезопасность как про страшный сон.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено PnD , 21-Сен-11 18:18 
>> Остается интегрировать в иксы и забыть
> …про ьезопасность как про страшный сон.

1. Из под lynx пишете? Или где еще нет проверки орфографии? В ie 6.0? ;/
2. ps -el | wc -l
165
  О какой безопасности речь в такой помойке? Это всего лишь кеды на суси и 4 активных окна. Возможно, на бзде процессов на 10 поменьше будет. GUI и безопасность (в смысле контроля над происходящим) вряд ли совместимы.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 21-Сен-11 18:45 
> 1. Из под lynx пишете? Или где еще нет проверки орфографии?

опечатался, не посмотрел. бывает.

> О какой безопасности речь в такой помойке?

поясню. «помойка» тут не при чём. а вот «интеграция» поделки с кучей явных переполнений буферов в иксы, которые работают, на минуточку, под рутом — это хардкорный экстрим.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено pavlinux , 21-Сен-11 21:17 
> c кучей явных переполнений буферов

Строки можно


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено PnD , 21-Сен-11 18:08 
>> Пофиксил глюки, вроде даже работает :)
>   Спасибо, пашет. Остается интегрировать в иксы и забыть баги нативного
> свитчера как страшный сон.

  Хотя, нет. Набор багов налицо:
* Режим -t1 - не работает
* Параметр конфигурации SwitchMethod - игнорируется, по ходу.

Дальше лень проверять. Оригинал пока лучше пашет.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено PnD , 21-Сен-11 18:34 
Так, пока смотрел InputDevice - осознал, что у тебя конфиг через раз не читается. Перезаписывается и вылетает. Короче, это 2.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено pavlinux , 21-Сен-11 21:19 
>   Хотя, нет. Набор багов налицо:

А я его и не собираюсь доделывать, мне впаяный с xorg нравится :)


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 22-Сен-11 09:32 
> Хотя, нет. Набор багов налицо:
> * Режим -t1 - не работает
> * Параметр конфигурации SwitchMethod - игнорируется, по ходу.
> Дальше лень проверять. Оригинал пока лучше пашет.

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


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 22-Сен-11 13:05 
денег давай, бесплатно оно нафиг не нужно.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено pavlinux , 17-Сен-11 23:41 
> По заявка слушателей:

По просьбе автора переименовался.

Долго не думая стал xks - X Keyboard Switcher

http://github.com/pavlinux/xks


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено pavlinux , 18-Сен-11 03:15 
>> По заявка слушателей:
> По просьбе автора переименовался.
> Долго не думая стал xks - X Keyboard Switcher
> http://github.com/pavlinux/xks

Два дня я его тут трахал, так них...я и не понял, нахрена оно нужно.

1. Для доступа к /dev/input/event* юзер должен быть root или
  создать отдельную группу и туда добавить всех юзеров кому можно,
  а устройству присваивать RW-RW-R

2. Эта шняга работает через расширение XKB, а все знают, что переключалки XKB
настраиваются в xorg.conf

3. Есть утиль xinput
  


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 18-Сен-11 03:40 
на тебе, кстати, более вменяемый parse.c:


#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

#include "parse.h"


// Функция удаляет пробелы в начале и конце принятой строки
void alltrim (char *parseline) {
  char *st = parseline;
  //
  if (st == NULL) return;
  while (*st && isspace(*st)) ++st;
  if (!st[0]) { parseline[0] = 0; return; }
  memmove(parseline, st, strlen(st)+1);
  st = parseline+strlen(parseline)-1;
  while (st >= parseline && isspace(*st)) --st;
  if (st < parseline) { st[0] = 0; return; }
  st[1] = 0;
}


// Функция взятия значения параметра из строки вида
// параметр=значение
// значение возвращается как строка
void getparamvalue (char *parseline) {
  const char *vpos = strchr(parseline, '=');
  if (vpos++) {
    memmove(parseline, vpos, strlen(vpos)+1);
  } else {
    parseline[0] = '\0';
  }
}


// Функция взятия имени параметра из строки вида
// параметр=значение
// значение возвращается как строка
void getparamname (char *parseline) {
  char *vpos = strchr(parseline, '=');
  if (vpos) {
    *vpos = 0;
  } else {
    parseline[0] = '\0';
  }
}



"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено pavlinux , 19-Сен-11 06:49 
> на тебе, кстати, более вменяемый parse.c:

Добавил.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 19-Сен-11 13:45 
> на тебе, кстати, более вменяемый parse.c:

 const char *vpos = strchr(parseline, '='); 
  if (vpos++) {
    memmove(parseline, vpos, strlen(vpos)+1);
  } else {
    parseline[0] = '\0';
  }

Вот скажи мне, горе-программист. Зачем ты так код шифруешь? Ведь можно же написать в явном виде:

 const char *vpos = strchr(parseline, '='); 
  if(vpos==NULL)
   parseline[0] = '\0';
  else
   memmove(parseline, vpos, strlen(vpos)+1);

и сразу видна логика действий.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Andrey Mitrofanov , 19-Сен-11 14:56 
>   if (vpos++) {
>     memmove(parseline, vpos, strlen(vpos)+1);
> Вот скажи мне, горе-программист. Зачем ты так код шифруешь? Ведь можно же
> написать в явном виде:

Вот скажи мне, горе-программист№2, зачем ты инкремент потерял? %)

>   if(vpos==NULL)
>    memmove(parseline, vpos, strlen(vpos)+1);


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 19-Сен-11 15:10 
> Вот скажи мне, горе-программист№2, зачем ты инкремент потерял? %)
>>   if(vpos==NULL)
>>    memmove(parseline, vpos, strlen(vpos)+1);

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


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 19-Сен-11 20:26 
> Затем, что исходный код зашифрован.

плачу. стенаю просто от плача. такие же, как ты, жалуются потом в интернетах:
"obfuscated c programming, где используются трюки навроде «while (*d++ = *s++);»"

конечно, для вас это — «трюки». а для любого *программиста* вполне нормальный код, который пишется на автомате и читается точно так же.

но для тебя операции инкремента — Магия, я понимаю.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 20-Сен-11 13:53 
>> Затем, что исходный код зашифрован.
> плачу. стенаю просто от плача. такие же, как ты, жалуются потом в
> интернетах:
> "obfuscated c programming, где используются трюки навроде «while (*d++ = *s++);»"
> конечно, для вас это — «трюки». а для любого *программиста* вполне нормальный
> код, который пишется на автомате и читается точно так же.
> но для тебя операции инкремента — Магия, я понимаю.

Я тоже понимаю, что использование трюков - это для тебя радость жизни.

Строго говоря, трюк *d++ = *s++ по науке называется "устойчивое выражение". Использование ограниченного числа общепринятных устойчивых выражаний даже приветсвуется. Почему? Потому что устойчивое выражение рассматривается как абстракция, которая делает что-то известное. И даже если программист не понимает как оно работает, или не хочет проверять действительно ли оно работает так как нужно при разных граничных условиях, он может положиться на опыт использования выражения другими и сказать: пусть будет так, оно работает.

Во всем остальном, советую тебе начать читать книги по проектированию. Ты к сожалению этого не умеешь делать. Начать можно с банальных постулатов:


Выражайтесь как можно понятнее
http://piccy.info/view3/2001061/afad5e7a875b71e23ea36189ac95.../

Разбивайте сложные выражения на части
http://piccy.info/view3/2001069/c54d22bd426646ae92e9e37db9de.../

И специально для любителей инкрементов:

Учитывайте возможные побочные эффекты
http://piccy.info/view3/2001072/256ee2c58d3852526a04764bd1e3.../


Распечатай себе, и повесь на стенку. Читать три раза в сутки перед едой.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено AHAHAC , 21-Сен-11 03:39 
> Ты к сожалению этого не умеешь делать. Начать можно с банальных постулатов
>Выражайтесь как можно понятнее
> Разбивайте сложные выражения на части
> Учитывайте возможные побочные эффекты

ты K&R читал? От тамошних примеров у тя моск наверно раком встанет.

вот так выглядит функция простейшая strcpy()


char *strcpy(char *dest, const char *src)
{
        char *tmp = dest;

          while ((*dest++ = *src++) != '\0')

        return tmp;
}

а вот так уже strncpy()


char *strncpy(char *dest, const char *src, size_t count)
{
        char *tmp = dest;

        while (count) {
                if ((*tmp = *src) != 0)
                        src++;
                tmp++;
                count--;
        }
        return dest;
}

и чтоб совсем раком встало - strncat() и memmove()


char *strncat(char *dest, const char *src, size_t count)
{
        char *tmp = dest;

        if (count) {
                while (*dest)
                        dest++;
                while ((*dest++ = *src++) != 0) {
                        if (--count == 0) {
                                *dest = '\0';
                                break;
                        }
                }
        }
        return tmp;
}

void *memmove(void *dest, const void *src, size_t count)
{
        char *tmp;
        const char *s;

        if (dest <= src) {
                tmp = dest;
                s = src;
                while (count--)
                        *tmp++ = *s++;
        } else {
                tmp = dest;
                tmp += count;
                s = src;
                s += count;
                while (count--)
                        *--tmp = *--s;
        }
        return dest;
}

Уже чую запах разлагающегося трупа... :)


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 21-Сен-11 03:49 
во-первых, чукча не читатель.

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


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 21-Сен-11 12:30 
>> Выражайтесь как можно понятнее
>> Разбивайте сложные выражения на части
>> Учитывайте возможные побочные эффекты
> ты K&R читал? От тамошних примеров у тя моск наверно раком встанет.
> вот так выглядит функция простейшая strcpy()

Хароший вопрос.

Идем на StackOverflow сюды: http://stackoverflow.com/questions/810129/how-does-whiles-t-... и видим, что не только читал, но и указал главу и параграф, как выводится это шаманство шаг за шагом. Сделал я это раньше, чем ты задал вопрос, как раз смотрел интернет, и решил человеку помочь.

И да, как меня просят, я еще раз задвину про устойчивые выражения. K&R в своей книге пишут последовательно, как появляется то или иное решение. Оно же не на пустом месте появилось. Но это у K&R. А у тебя - на пустом. Ты вываливаешь куски кода, и наяриваешь на них как мартышка, думая что немногим доступен дзен кода с побочными эффектами.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 21-Сен-11 14:34 
(ржот) ты думаешь, что твои комментарии в коде, по полезности равные «// прибавляем единицу к i» что-то поясняют?

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

слушай, ну ты же доиграешься до того, что я не поленюсь, возьму полный исходник и устрою разбор полётов. с цитатами из тебя же и последующим избиением младенцев. тебе так охота публичного позорища? и да, я возьму именно оригинал на C++. на котором удобно продемонстрировать, что С++ ты тоже не знаешь.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 21-Сен-11 15:11 
> слушай, ну ты же доиграешься до того, что я не поленюсь, возьму
> полный исходник и устрою разбор полётов. с цитатами из тебя же
> и последующим избиением младенцев. тебе так охота публичного позорища?

Ты и так уже неделю только этим и занимаешься. Можешь продолжать, разрешаю.

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

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

Ну а пока ты этого не сделал, все твои потуги - это просто банальная газификация в лужи.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 21-Сен-11 16:03 
ты великолепен, да. до тебя даже не доходит, что разбор твоего гуано и будет такой «демонстрацией» — именно в силу публичности разбора и возможности выпороть меня, в свою очередь, если я в разборе накосячу. помедитируй над этим.

а код я тебе, натурально, показывать не стану: у тебя мозг взорвётся. ну много ты поймёшь в реализациях Scheme и Smalltalk, а? вряд ли. зато всенепременно будешь вопить, что «goto низя!», «реализация VM непонятна среднему идиоту» и прочую ерунду.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 19-Сен-11 20:28 
> Вот скажи мне, горе-программист№2, зачем ты инкремент потерял? %)

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


void getparamvalue(char *parseline)
{
  char returnline[255];
  char tmpline[255];
  int pos,startpos,i;

  sprintf(tmpline,"%s",parseline);

  startpos=0;
  for(i=0;i<=strlen(tmpline);i++)if(tmpline[i]=='=')startpos=i+1;

  if(startpos!=0)
   {
    pos=0;
    for(i=startpos;i<=strlen(tmpline);i++)
     {
      returnline[pos]=tmpline[i];
      pos=pos+1;
     }
    returnline[pos]='\0';

    // Копирование результата в принятый массив
    for(i=0;i<=strlen(returnline);i++)parseline[i]=returnline[i];
    parseline[i]='\0';

    return;
   }

  parseline[0]='\0';
  return;
}


образец стиля, понятности и безошибочности.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 20-Сен-11 11:55 
> а он не понял, что там за загадочные плюсики, и на всякий случай решил их выкинуть. то ли дело его код

Но в нем тоже есть плюсики! Как такое могло случиться???


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Okruzhor , 20-Сен-11 13:24 
>> а он не понял, что там за загадочные плюсики, и на всякий случай решил их выкинуть. то ли дело его код
> Но в нем тоже есть плюсики! Как такое могло случиться???
> pos=pos+1;

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


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 20-Сен-11 14:33 
> Интересно , где так учат Си

глядя на код, хочется спросить более глобально: где так учат?!


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 20-Сен-11 14:48 
> То есть двойной плюсик считается синтаксисом завершения заголовка цикла со счётчиком ;
> и больше ничем . Понимания работы цикла нет , понимания инкремента нет .
> Интересно , где так учат Си

Какие далеко идущие выводы. Вам следует почитать тему с начала, зайти на сайт автора и увидеть там раздел Demo Design. В нем вы с удивлением обнаружите шесть интро, сделанных на Ассемблере. Вы случайно не знаете, в ассемблере есть инкремент и циклы?


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 20-Сен-11 15:06 
> сайт автора и увидеть там раздел Demo Design. В нем вы
> с удивлением обнаружите шесть интро, сделанных на Ассемблере.

что не значит совершенно ничего. «одарённых вьюношей», писавших на асме, я видел далеко не одного. потом они пытались использовать ЯВУ… и у них получались такие же портянки, как и на асме.

вопреки мнению людей, которые почёсывают ЧСВ, считая, что на ассемблере писать очень сложно, язык ассемблера — очень простой язык. особенно уровня 286/386. и писать на этом не сложно, а нудно. единственное, что может показать программа на асме — что у автора было много свободного времени и дурной молодецкой силы. гвозди бы делать из этих людей! я лет в 20 тоже таким баловался. потом прошло.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 20-Сен-11 15:31 
> вопреки мнению людей, которые почёсывают ЧСВ, считая, что на ассемблере писать очень
> сложно, язык ассемблера — очень простой язык

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


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Okruzhor , 20-Сен-11 16:12 
>> Интересно , где так учат Си
> Какие далеко идущие выводы.

Это элементарно , Ватсон . Во-1-х из 'pos=pos+1' следует , что инкремент не усвоен . Во-2-х из п.1 и наличия инкремента в заголовке цикла (что как бы противоречит п.1) следует , что данный приём применения инкремента вызубрен без понимания цикла со счётчиком в Си

Упоминание языка ассемблера -- мимо темы : речь идёт о Си , а не о других языках

Серьёзно , разберитесь с инкрементом и декрементом в префиксной и постфиксной форме . Если сочтёте постфикс "обфусцирующим" , не используйте его даже в заголовках циклов . Если сочтёте обе формы обфусцирующими , применяйте 'pos=pos+1' даже в заголовке цикла или хотя бы разберитесь , которой из 2 форм соответствует паскальский стиль

Ну и конечно избегайте вычисления длины строки заново на каждом шаге сканирования строки

P.S: Я не упоминал про грузчиков и прочее . Просто жаль видеть новичковый стиль в полезной программе . И да , боязно её ставить из-за этого подозрительного стиля


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 20-Сен-11 17:22 
> Ну и конечно избегайте вычисления длины строки заново на каждом шаге сканирования
> строки

Я кстати подизассемблировал варианты с вычислением strlen() на каждом шаге цикла. Действительно, вызов strlen() исчезает (при опитмизации O0) только при описании строки как const char *, на обычных чарах он остается. Честноговоря считал, что уже давно как анализаторы умеют оптимизировать циклы так, что если в них не происходит запись в область памяти строки, то вызов strlen() соптимизируется. Ну хотя бы в случаях, когда нет вызова подпрограмм, в которых возможна модификация. А оказывается оптимизация ориентируется просто на тип данных. Если const -> модифицирование невоможно -> оптимизируем.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 20-Сен-11 17:30 
стандарт не читай @ удивляй!

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Аноним , 21-Сен-11 07:19 
> с удивлением обнаружите шесть интро, сделанных на Ассемблере. Вы случайно не
> знаете, в ассемблере есть инкремент и циклы?

В ассемблере это есть, но в си это сделано немного иначе. У некоторых RISC процессоров кстати такие вещи как предекремент/постинкремент регистра в паре с некоей операцией и/или условием - реализовано аппаратно, как раз специально чтобы компилерам было удобно подобные конструкции в машинный код транслировать :)



"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено pavlinux , 20-Сен-11 06:05 
Выносим моск дальше, но с пользой - теперь в конфиге можно ставить пробелы и табы после '='

#define likely(x) __builtin_expect(!!(x), 1) // Вместо JNZ будет JE (асм.) :)
#define prefetch(x) __builtin_prefetch(x) // Нириальный разгон

void getparamvalue(char *parseline) {

    const char *vpos = rawmemchr(parseline, '=');
    
    if (likely(vpos++)) {
        while (*++vpos == ' ' || *vpos == '\t') {;}
        prefetch(parseline); // Чтоб в кэше валялось
        memmove(parseline, vpos, strlen(vpos) + 1);
    } else
        parseline[0] = '\0';
}

И нипёт :)


403b5d:       3c 09                   cmp    $0x9,%al
403b5f:       74 e5                   je     403b46 <getparamvalue+0x36>
403b61:       48 8b 45 e8             mov    -0x18(%rbp),%rax
403b65:       0f 18 08                prefetcht0 (%rax)
403b68:       48 8b 45 f8             mov    -0x8(%rbp),%rax
403b6c:       48 c7 45 e0 ff ff ff    movq   $0xffffffffffffffff,-0x20(%rbp)

YES!!! je и prefetch - есть!!! :)

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 20-Сен-11 14:34 
будешь выпендриваться — мне придётся тогда выступить с универсальным парзером конфигов, а не тем страшилищем, что там сейчас. поимей совесть!

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 18-Сен-11 03:41 
йопт.
 if (st < parseline) { st[0] = 0; return; }

можно убрать нафиг, конечно.

"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 18-Сен-11 03:44 
нужно таки затем, что xkb не умеет переключать по отжатию, например. или по простому tap-у того же шифта, при этом не теряя «нормальных» функций шифта.

другое дело, что хорошая идея сделана кривовато. но сама идея ничо так.

кстати: есть какой-нибудь простой способ определить, какой из event'ов — клава? вот у меня он вообще третий, нарыл методом перебора.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 18-Сен-11 19:07 
> кстати: есть какой-нибудь простой способ определить, какой из event'ов — клава? вот
> у меня он вообще третий, нарыл методом перебора.

есть. вот такой, тупой, но часто работает:


// don't forget to free() result!
// returns NULL or device file name
static char *findKeyboardDevice (void) {
  int f;
  //
  for (f = 0; f <= 31; ++f) { // the Elder says there canst be no other numbers
    char dev[32];
    int fd;
    //
    sprintf(dev, "/dev/input/event%d", f);
    fd = open(dev, O_RDONLY);
    if (fd >= 0) {
      char name[128];
      int len = ioctl(fd, EVIOCGNAME(sizeof(name)-1), name);
      close(fd);
      if (len > 0) {
        name[len] = 0;
        if (strcasestr(name, "keyboard")) return strdup(dev);
      }
    }
  }
  return NULL;
}

чо, сам спрашиваю, сам отвечаю. самоудовлетворение-с.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено pavlinux , 19-Сен-11 07:02 
>> кстати: есть какой-нибудь простой способ определить, какой из event'ов — клава? вот
>> у меня он вообще третий, нарыл методом перебора.
> есть. вот такой, тупой, но часто работает:

Добавил :)


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 19-Сен-11 07:20 
> Добавил :)

интересно, а автор оригинала добавит? ну, то есть, понятно, что весь мой гениальный код — сплошное PD и его можно смело тащить в оригинал.

кстати, судя по main у меня закралось подозрение, что с системами контроля версий автор оригинала дружит примерно так же, как и с c/c++.

(умильно) эх… напоминает мне меня же лет в 18. я тогда тоже считал, что «придираются к частностям» (ну, типа strlen() в цикле, незнания про strcpy() — хотя в одном месте я её видел, — незнакомством с strchr() и ты пы) только унылые старпёры. которые способны лишь на цитирование зазубреных библиотек и никак не умеют into свободный полёт фантазии. а вместо системы контроля версий у меня была утилита, которая архивирует рабочий каталог и складывает архивы в специальное место.

(задумчиво) рудименты таки остались: до сих пор не доверяю реализации strtok() и пишу свои токенизаторы.


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено pavlinux , 19-Сен-11 07:27 
> (задумчиво) рудименты таки остались: до сих пор не доверяю реализации strtok() и
> пишу свои токенизаторы.

А я вот думаю как от strdup избавиться, нихачу free сувать :/



"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 19-Сен-11 07:44 
> А я вот думаю как от strdup избавиться, нихачу free сувать :/

понаделай статиков да и выкидывай наверх. ну, или привинчивай полноценный сборщик мусора (хихикает).


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено anonymous , 18-Сен-11 19:11 
> Два дня я его тут трахал, так них...я и не понял, нахрена
> оно нужно.

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


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Вадим , 16-Дек-12 23:10 
А светодиод клавиатуры оно может включать?
И кстати, девчёнки тут есть? Кого отодрать?

В.В. Маяковский


"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено xintrea , 16-Дек-12 23:26 
> А светодиод клавиатуры оно может включать?

Посмотри видео http://www.youtube.com/watch?v=z0EA5wllB14