如何抢在按键侏儒壳牌

问题描述:

我试着写我的第一个浏览器扩展, - 因为每个博客文章在那里 - 我也与缺乏挣扎了最新的文档...如何抢在按键侏儒壳牌

也就是说我想抓住从键盘的所有按键以及 - 阅读代码在线老邮件列表信息 - 它似乎直到最近做的正确的方法是:

const Shell = imports.gi.Shell; 
global.set_stage_input_mode(Shell.StageInputMode.FULLSCREEN); 
global.stage.connect('key-press-event', myCallbackHere); 

然而,这似乎并没有上班。功能set_stage_input_mode和属性StageInputMode似乎已经消失了,至少在运行GTK 3.20.6的Fedora 24上。

什么是正确的,最新的方式让我的扩展抓住用户执行的所有击键?

我不认为目前有这样做的正确方法。你可以一起攻击一些X特定或Wayland特定的东西,或者你可以修补Gnome Shell来提供这些信息。

对于Wayland,您可以从https://github.com/MaartenBaert/wayland-keylogger开始,对于X您可以从重新使用自动密钥检测(https://github.com/autokey/autokey/blob/master/src/lib/interface.py)开始。

我可以猜测这不是你所希望的答案,因为在IRC上你写了你想写一个autokey的替代品。为了从外部程序获得输入,您可以使用GLib.spawn_async_with_pipes(​​)。

我前段时间写了一些Shell扩展代码来轮询xinput test并大致记录发生了什么(想想任何字母数字键vs左ctrl vs返回键)。你可以看看这里的代码:https://gist.github.com/daniellandau/7679741bf8bbc5c345591593ca05e9f6。它不够强大,无法进行任何类型的宏扩展,所以我建议重新使用autokey中的检测代码。

一般来说,https://people.gnome.org/~gcampagna/docs的文档可以找到可用于Gnome Shell扩展的库的API参考。我希望你能够完成你的项目。开始编写扩展是令人沮丧的,但最终很有趣,一旦你掌握了它。

+0

嘿!这次真是万分感谢。我会尽快检查链接,以便个人项目有空闲时间,现在感谢您写下了这些内容。我会回到这个问题上,并批准/跟进问题。 :) – mac