在过去的六个月里,xneur 支持的终止给我带来了一些痛苦。 (随着 OpenSUSE 15.1 在我的桌面上的出现:启用 xneur 后,Windows 失去焦点并随着键盘输入及时闪烁).
“哦,该死,我又开始输入错误的布局”——在我的工作中,这种不雅的情况经常发生。 而且它没有增加任何积极的东西。
同时,我(作为一名设计工程师)可以非常清楚地表达我想要的东西。 但我想要(首先从 Punto Switcher,然后,感谢 Windows Vista,最后从 xneur 切换到 Linux)一件事。 意识到屏幕上的垃圾布局错误(这通常发生在输入新单词结束时),请踩“暂停/中断”。 并获取您打印的内容。
目前,该产品具有最佳的(从我的角度来看)功能/复杂性比。 是时候分享了。
TL.DR
稍后会有各种技术细节,所以首先 -
目前以下行为是硬编码的:
- “暂停/中断”:退格最后一个单词,切换活动窗口中的布局(0 和 1 之间)并再次拨号。
- “左Ctrl键不做任何事情”:切换活动窗口中的布局(0和1之间)。
- “左移无任何内容”:打开活动窗口中的 0 号布局。
- “Right Shift without everything”:打开活动窗口中的 1 号布局。
从现在开始,我计划自定义该行为。 没有反馈,就没意思了(反正我对此很满意)。 我相信在《哈布雷》上会有足够比例的观众遇到类似的问题。
注: 因为在当前版本中,键盘记录器附加到“/dev/input/”,xswitcher 必须以 root 权限启动:
chown root:root xswitcher
chmod +xs xswitcher
请注意: 具有suid的文件的所有者必须是root,因为无论谁是所有者,启动时都会变成suid。
偏执狂(我也不例外)可以克隆
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,约 12 MB RSS)。
商品详细信息
现在-细节。
整个存储库最初专用于我的宠物项目,我懒得启动另一个项目。 因此,所有内容都堆积起来(仅在文件夹中)并由 AGPL(“反向专利”)覆盖。
xswitcher 代码是用 golang 编写的,包含最少的 C。我们假设这种方法将导致最少的工作量(到目前为止)。 同时保持使用 cgo 连接缺失内容的能力。
文本包含对其借用地点和原因的评论。 因为xneur 代码“没有激励我”,我把它作为起点
使用“/dev/input/”既有优点(一切都可见,包括按下的自动重复键)也有缺点。 缺点是:
- 自动重复(代码为“2”的事件)与 x 的重复无关。
- 通过 X11 接口的输入是不可见的(例如,这就是 VNC 的工作原理)。
- 需要root。
另一方面,可以通过“XSelectExtensionEvent()”订阅X事件。 你可以看一下
到目前为止,“反向”输出是通过拧入虚拟键盘来实现的。 感谢keybd_event的作者,但是那里的抽象太高级了,需要进一步重做。 例如,我使用右 Win 键选择第三行。 并且只有左边的Win被传回来。
已知错误
- 我们对“复合”输入一无所知(例如:XNUMX/XNUMX)。 现在不需要。
- 我们错误地玩了正确的Win。 就我而言,它破坏了重点。
- 没有明确的输入解析。 相反,有几个函数:Compare()、CtrlSequence()、RepeatSequence()、SpaceSequence()。 谢谢
NSMCAN 为了您的关心:在代码和此处更正它。 有一定的概率,你可以在替换的时候发现bug。
目前我不知道“如何”,欢迎任何建议。 - (天啊) 竞争性地使用通道(keyboardEvents、miceEvents)。
结论
代码是最简单的程序。 还有像我这样的傻子。 因此,我自以为是,希望几乎所有技术人员都能够完成他想要的事情。 正因为如此,该产品不会像大多数只是为了好玩的产品一样,在没有支持的情况下消失。
祝你好运!
来源: habr.com