适用于Linux的新Punto切换器:xswitcher

在过去的六个月中,xneur支持的终止使我遭受了一些痛苦(随着台式机上的OpenSUSE 15.1的出现:打开xneur时,Windows失去了焦点,并因键盘输入节拍而闪烁)

“啊,该死,我又开始以错误的布局输入文字”-这在我的工作中经常是淫秽的。并且不增加正面。


同时,我(作为设计工程师)可以很清楚地表达我想要的内容。我想(首先是从Punto Switcher获得,然后要感谢Windows Vista,最后是从xneur重新移植到Linux上)正好一个。意识到屏幕上的垃圾布局错误(通常发生在新单词集的末尾),踩在“暂停/中断”上。并得到我打印的内容。

目前,该产品具有最佳的功能(从我的角度来看)功能/复杂度比率。是时候分享了。

TL文件


各种各样的技术细节将会继续,所以首先-一个急躁“触摸”链接

当前,以下行为是硬编码的:

  • “暂停/中断”:退格最后一个单词,在活动窗口中切换布局(在0和1之间),然后再次键入。
  • 左Ctrl键不显示任何内容:在活动窗口中切换布局(0到1之间)。
  • “左移不带任何内容”:在活动窗口中打开布局0。
  • “无右移”:在活动窗口中打开1号布局。

从现在开始,我计划自定义行为。没有反馈,就没意思了(无论如何,我很高兴)。我相信,在哈布雷(Habré),将有足够比例的观众遇到类似问题。

NB由于 在当前版本中,键盘记录器被固定为“ / dev / input /”,xswitcher应该以root权限运行:

chown root:root xswitcher
chmod +xs xswitcher

请注意:带有suid的文件所有者必须是root,因为 所有者所在的人是suid,将打开启动。

偏执狂(我也不例外)可以从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秒CPU,RSS中约12 MB)。

细节


现在了解详细信息。

整个存储库最初是专门用于我的宠物项目的,而开始另一个存储库太懒了。因此,所有内容都堆积(仅在文件夹中)并用AGPL覆盖(“反之亦然”)。

xswitcher代码使用golang编写,C的飞溅最少。假定这种方法将花费最少的精力(到目前为止)。同时保持通过cgo连接缺少的功能。

注释的文本是从何处借来的,为什么?因为 xlour代码“没有激励我”,loloswitcher以此为起点

使用“ / dev / input /”有其优点(可以看到的一切,包括带有自动重复的按键)和缺点。缺点是:

  • 自动重复(代码为“ 2”的事件)与重复X不相关。
  • 您无法通过X11界面看到输入(例如,VNC有效)。
  • 需要一个根。

另外,您可以通过“ XSelectExtensionEvent()”订阅X事件。您可以查看xinput代码首先,我没有找到类似的东西,实施草案在一次尝试中提供了一百行C代码。至今为止。

到目前为止,已经通过拧紧虚拟键盘得出了“返回”的结论。多亏了作者keybd_event,但是抽象层次太高了,必须进一步重做。例如,我有正确的Win-key,则选择第三行。并且只有左Win广播回去。

已知错误


  • 我们对“复合”输入一无所知(例如:½)。现在不需要。
  • 我们错误地复制了正确的胜利。就我而言,这破坏了口音的排列。
  • 没有明确的输入解析。相反,有几个函数:Compare(),CtrlSequence(),RepeatSequence(),SpaceSequence()。谢谢恩斯坎为了专注:已在此处的代码中修复。很有可能在替换时会发现错误。
    在这个地方,我不知道“怎么做”,对于任何建议我都会很高兴。
  • (哦,恐怖)竞争使用渠道(keyboardEvents,mouseEvents)。

结论


该代码是最简单的过程。和我一样愚蠢。因此,我为自己感到安慰,希望几乎所有技术人员都能完成他想要的。而且由于这种产品,没有大多数趣味游戏的支持,它不会消失。

祝好运

All Articles