Нов аналог на Punto Switcher за Linux: xswitcher

Крајот на поддршката за xneur ми предизвика одредено страдање во изминатите шест месеци. (со доаѓањето на OpenSUSE 15.1 на моите работни површини: со овозможен xneur, прозорците го губат фокусот и треперат смешно со текот на времето со внесување на тастатурата).

„Ох, по ѓаволите, почнав повторно да пишувам во погрешен распоред“ - во мојата работа ова се случува непристојно често. И тоа не додава ништо позитивно.

Нов аналог на Punto Switcher за Linux: xswitcher
Во исто време, јас (како дизајнерски инженер) можам сосема јасно да го формулирам што сакам. Но, сакав (прво од Punto Switcher, а потоа, благодарение на Windows Vista, конечно да се префрлам на Linux, од xneur) точно една работа. Откако сфативте дека ѓубрето на екранот е во погрешен распоред (ова обично се случува на крајот од пишувањето нов збор), удирајте „Пауза/Пауза“. И добијте го она што сте го испечатиле.

Во моментов, производот има оптимален (од моја гледна точка) сооднос функционалност/комплексност. Време е за споделување.

TL.DR

Подоцна ќе има секакви технички детали, па прво - линк „да се допре“ за нетрпеливите.

Во моментов, следното однесување е хардкодирано:

  • „Пауза/Пауза“: го враќа последниот збор, го менува распоредот во активниот прозорец (помеѓу 0 и 1) и повторно бира.
  • „Left Ctrl без ништо“: го менува распоредот во активниот прозорец (помеѓу 0 и 1).
  • „Left Shift без ништо“: го вклучува распоредот бр. 0 во активниот прозорец.
  • „Right Shift без ништо“: го вклучува распоредот бр. 1 во активниот прозорец.

Отсега планирам да го прилагодам однесувањето. Без повратни информации, не е интересно (во секој случај, добро сум со тоа). Верувам дека на Хабре ќе има доволен процент публика со слични проблеми.

NB Бидејќи во тековната верзија, keylogger-от е прикачен на „/dev/input/“, xswitcher мора да се стартува со права на root:

chown root:root xswitcher
chmod +xs xswitcher

Ве молиме запомнете: Сопственикот на датотеката со suid мора да биде root, затоа што кој и да е сопственик ќе биде претворен во суид при стартување.

Параноиди (јас не сум исклучок) може да се клонираат од GIT и се собираат на лице место. Како тоа:

go get "github.com/micmonay/keybd_event"
go get "github.com/gvalkov/golang-evdev"

### X11 headers for OpenSUSE/deb-based
zypper install libX11-devel libXmu-devel
apt-get install libx11-dev libxmu-dev

cd "x switcher/src/"
go build -o xswitcher -ldflags "-s -w" --tags static_all src/*.go

Додајте автоматски старт по вкус (во зависност од DE).

Работи, „не бара каша“ (≈30 секунди процесор на ден, ≈12 MB во RSS).

Детали за

Сега - деталите.

Целото складиште првично беше посветено на мојот проект за домашно милениче и јас сум премногу мрзлив да започнам уште еден. Значи, сè е натрупано (само во папки) и покриено со AGPL („обратен патент“).

Кодот на xswitcher е напишан во голанг, со минимални вклучувања на C. Се претпоставува дека овој пристап ќе резултира со најмалку напор (досега го има направено). Додека се одржува можноста за поврзување на она што недостасува со користење на cgo.

Текстот содржи коментари за тоа од каде е позајмен и зошто. Бидејќи Xneur кодот „не ме инспирираше“, го земав како почетна точка loloswitcher.

Користењето на „/dev/input/“ има и свои предности (сè е видливо, вклучително и притиснато копче за автоматско повторување) и недостатоци. Недостатоците се:

  • Автоматското повторување (настаните со шифра „2“) не е во корелација со повторувањето со x.
  • Влезот преку интерфејсите X11 не е видлив (вака функционира VNC, на пример).
  • Потребен е корен.

Од друга страна, можно е да се претплатите на X настани преку „XSelectExtensionEvent()“. Можете да ѕирнете xinput код. Не најдов вакво нешто за да одам, а грубата имплементација веднаш зеде сто линии од кодот C. Оставете го настрана засега.

Излезот „обратен“ моментално се прави преку навртување на виртуелната тастатура. Благодарност до авторот на keybd_event, но апстракцијата таму е премногу на високо ниво и ќе мора дополнително да се преработи. На пример, го користам десното копче Win за да го одберам третиот ред. И само левата Win се пренесува назад.

Познати бубачки

  • Не знаеме ништо за „составен“ влез (пример: ½). Не е потребно во моментов.
  • Неправилно ја играме вистинската победа. Во мојот случај, тоа го крши акцентот.
  • Нема јасно парсирање на влезот. Наместо тоа, постојат неколку функции: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Благодарение nsmcan за ваша грижа: поправете го во кодот и овде. Со одредена веројатност, можете да фатите грешки при замена.
    Во овој момент не знам „како“ и би ги поздравил сите предлози.
  • (О Боже) конкурентна употреба на канали (keyboardEvents, miceEvents).

Заклучок

Кодексот е наједноставниот процедурален. И глупав како мене. Така, си ласкам со надеж дека речиси секој техничар ќе може да го заврши тоа што го сака. И благодарение на ова, овој производ нема да загине без поддршка, како повеќето само за забава.

Со среќа!

Извор: www.habr.com

Додадете коментар