LinuxForum.Fans
Тема

Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20

Автор: Lupo_Alberto 22 сообщений 3935 просмотров
#192657

Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20

Выпущен стабильный релиз низкоуровневого локального переключателя клавиатуры LoLo Switcher v.0.20 для X11. LoLo Switcher работает как процесс на низком системном уровне, и получает данные от клавиатуры напрямую из устройства ввода. Обнаружив нужную последовательность кодов, LLS вызывает функции X11, отвечающие за переключение раскладки.

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

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

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

Источник — http://www.opennet.ru/opennews/art.shtml?num=31755
Главная ссылка к новости — http://webhamster.ru/site/page/index/articles/projectcode/180

#192660

на amd64 из коробки не взлетает...

text
/tmp/loloswitcher_0_20/Main.cpp:628: ошибка: cast from ‘void*’ to ‘int’ loses precision

ИМХО уместно заменить (int) в приведении на (size_t).

есть ещё парочка замечаний по cmake'у...

#192684

OLOLO Swither :lol:

#192688

Dimaty, для некоторых весьма нужная вещь. Например, для тех, кто общается/работает не только в пределах России smile

#192710

Wolfenberg, вы говорите, будто это что-то необычное... это же обычный переключатель раскладок...

#192810

LoLo Switcher_типа_альтернатива_IIунто_свитчеpу_и_xNeur?

#192894
newzenon написал:
Упс это тот же кто mytetra написал?
Предвижу тучу холиваров, на ЛОРе точно бойня будет.

Она уже была: http://www.linux.org.ru/forum/desktop/6719991

Кратко, новость про версию 0.15 не подтверждая слили в толксы. Мне даже сообщили что я специально написал переключатель, чтобы эффективно на лоре троллить. Про версию 0.20 я на лоре уже не заикался, ограничился опеннетом.

#192898
Fat-Zer написал:
на amd64 из коробки не взлетает...
text
/tmp/loloswitcher_0_20/Main.cpp:628: ошибка: cast from ‘void*’ to ‘int’ loses precision

ИМХО уместно заменить (int) в приведении на (size_t)

Да, есть такое. Мне на лоре посоветовали:


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

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

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

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

То есть, нужно писать:

text
size_t keyboardLayerNum=(size_t) n;
int result = pthread_create(&thread, &threadAttr, threadFunc, (void*)keyboardLayerNum);
...
static void *threadFunc(void *arg)
{ 
 int keyboardLayerNum = (size_t) arg;
...

Я правильно понял? Тогда на x64 станет собираться?

#193025
xintrea написал:
Я правильно понял? Тогда на x64 станет собираться?

да, именно так...
ещё мелочи:

text
625 static void *threadFunc(void *arg)
626 {
...
632  sprintf(cmd, config.getCommand(keyboardLayerNum));

это ну очень крутой strcpy... :lol: ну и так несколько раз...

по поводу cmake'а: не решайте за других, что им нужно и куда это положить...
как вариант:

text
cmake_minimum_required(VERSION 2.6)

# set(CMAKE_BUILD_TYPE Debug) if(NOT DEFINED CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif

set(PROJECT loloswitcher)

# set(CMAKE_CXX_FLAGS "-O0") set_source_files_properties(EventQueue.cpp PROPERTIES COMPILE_FLAGS "-O0")

project(${PROJECT})

set(HEADERS Main.h KeyLayout.h Config.h ParseHelper.h EventQueue.h) set(SOURCES Main.cpp KeyLayout.cpp Config.cpp ParseHelper.cpp EventQueue.cpp)

link_libraries( X11 pcre pthread)

add_executable (${PROJECT} ${HEADERS} ${SOURCES})

install(TARGETS loloswitcher DESTINATION ${CMAKE_INSTALL_PREFIX}/sbin)

# install(SCRIPT postinstall.cmake) install(CODE "EXEC_PROGRAM(chown ARGS root:root ${CMAKE_INSTALL_PREFIX}/sbin/loloswitcher)") install(CODE "EXEC_PROGRAM(chmod ARGS u+s ${CMAKE_INSTALL_PREFIX}/sbin/loloswitcher)")

ещё не уверен в предпоследней строчке... но не знаю, как это правильно сделать...

#193124

Я не понял, как он настраивается.
При наборе команд в терминале что будет? При вводе пароля?
(вживую не смотрел, пока просто интересно)

#193153

> Я не понял, как он настраивается.

Настраивается через файл конфигурации, ~/.config/loloswitcher/config.ini


> При наборе команд в терминале что будет? При вводе пароля?

Это переключатель для X11, в чистой консоли он не работает. Касаемо терминалов, работает в эмуляторах терминалов, запущенных в X11: Konsole, GnomeTerm, XTerm и т.д.

#193158
xintrea написал:
Касаемо терминалов, работает в эмуляторах терминалов, запущенных в X11: Konsole, GnomeTerm, XTerm и т.д.

Тут интереснее, как он будет определять язык при вводе пароля?

#193486
Lupo Alberto написал:
Тут интереснее, как он будет определять язык при вводе пароля?

Определять язык _где_? Он работает в X11. При вводе пароля в любой программе в X11 будет тот язык, который выбрал в данный момент пользователь. Я наверно не понял вопроса.

#193490
Lupo Alberto написал:
Обнаружив нужную последовательность кодов, LLS вызывает функции X11, отвечающие за переключение раскладки.

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

#193491

Скорее вы не в курсе предыстории, xintrea smile
xNeur очень любил переключать язык во время ввода пароля (или какой-нибудь заковыристой команды, к примеру). поэтому задавались приложения-исключения, в которых он не действовал.

#193517
dsmith написал:
Как я понял, это не просто переключатель раскладки, но определитель языка ввода.

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

#193521
Fat-Zer написал:
где вы тут увидели хоть намёк на определение языка ввода?
Lupo Alberto написал:
и получает данные от клавиатуры напрямую из устройства ввода. Обнаружив нужную последовательность кодов, LLS вызывает функции X11, отвечающие за переключение раскладки.
#193527
Lupo Alberto написал:
Обнаружив нужную последовательность кодов

это шифтальт/шифткотрол итп....

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

#193542

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

Войдите или зарегистрируйтесь, чтобы ответить.