Нови аналог Пунто Свитцхер-а за линук: ксвитцхер

Престанак подршке за кнеур изазвао ми је одређену патњу у протеклих шест месеци. (са појавом ОпенСУСЕ 15.1 на мојим десктопима: са омогућеним кнеур, прозори губе фокус и трепере смешно у времену са уносом са тастатуре).

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

Нови аналог Пунто Свитцхер-а за линук: ксвитцхер
Истовремено, ја (као инжењер дизајна) могу сасвим јасно да формулишем шта желим. Али желео сам (прво са Пунто Свитцхер-а, а затим, захваљујући Виндовс Висти, коначно преласка на Линук, са кнеур-а) тачно једну ствар. Пошто сте схватили да је смеће на екрану у погрешном распореду (то се обично дешава на крају куцања нове речи), згазите на „Пауза/Прекид“. И узмите оно што сте одштампали.

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

ТЛ.ДР

Касније ће бити разних техничких детаља, па прво - линк "додирнути" за нестрпљиве.

Тренутно је следеће понашање чврсто кодирано:

  • „Пауза/прекид“: враћа последњу реч уназад, мења распоред у активном прозору (између 0 и 1) и поново бира.
  • „Лефт Цтрл без ичега“: мења изглед у активном прозору (између 0 и 1).
  • „Лефт Схифт без ичега“: укључује изглед бр. 0 у активном прозору.
  • „Десни Схифт без ичега“: укључује изглед бр. 1 у активном прозору.

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

НБ Јер у тренутној верзији, кеилоггер је везан за "/дев/инпут/", ксвитцхер мора бити покренут са роот правима:

chown root:root xswitcher
chmod +xs xswitcher

Имајте на уму: Власник датотеке са суидом мора бити роот, јер ко год да је власник биће претворен у суид по покретању.

Параноиди (нисам изузетак) могу да клонирају из ГИТ и саставити на лицу места. тако:

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

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

Ради, „не тражи кашу“ (≈30 секунди ЦПУ дневно, ≈12 МБ у РСС-у).

Детаљи

Сада - детаљи.

Читаво спремиште је првобитно било посвећено мом пројекту кућног љубимца, а ја сам превише лењ да започнем још један. Дакле, све је нагомилано (само у фасциклама) и покривено АГПЛ-ом („обрнути патент“).

Код ксвитцхер-а је написан у голангу, са минималним укључивањем Ц. Претпоставља се да ће овај приступ резултирати са најмањим напором (до сада). Уз задржавање могућности повезивања онога што недостаје помоћу цго.

Текст садржи коментаре одакле је и зашто позајмљен. Јер кнеур код „није ме инспирисао“, узео сам га као полазну тачку лолосвитцхер.

Коришћење „/дев/инпут/“ има своје предности (све је видљиво, укључујући притиснут тастер за аутоматско понављање) и недостатке. Недостаци су:

  • Аутоматско понављање (догађаји са кодом „2“) не корелира са понављањем са к.
  • Улаз преко Кс11 интерфејса није видљив (овако ВНЦ функционише, на пример).
  • Треба роот.

С друге стране, могуће је претплатити се на Кс догађаје преко „КССелецтЕктенсионЕвент()“. Можеш да завириш кинпут цоде. Нисам нашао ништа слично овоме за почетак, а груба имплементација је одмах заузела стотину редова Ц кода. Остави то на страну за сада.

„Обрнути“ излаз се тренутно врши увртањем виртуелне тастатуре. Хвала аутору кеибд_евент-а, али апстракција је на сувише високом нивоу и мораће да се преправи даље. На пример, користим десни тастер Вин да бих изабрао 3. ред. И само леви Вин се преноси назад.

Познате грешке

  • Не знамо ништа о „композитном“ уносу (пример: ½). Тренутно није потребно.
  • Погрешно играмо праву победу. У мом случају, то разбија нагласак.
  • Нема јасне анализе улаза. Уместо тога, постоји неколико функција: Цомпаре(), ЦтрлСекуенце(), РепеатСекуенце(), СпацеСекуенце(). захвалити нсмцан за вашу бригу: исправио у коду и овде. Са одређеном вероватноћом, можете ухватити грешке приликом замене.
    У овом тренутку не знам „како да“ и добродошао бих сваки предлог.
  • (О Боже) конкурентско коришћење канала (кеибоардЕвентс, мицеЕвентс).

Закључак

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

Срећно!

Извор: ввв.хабр.цом

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