(全局)将键组合(例如< Super> A)绑定到gnome shell扩展中的函数的最简单方法是什么?
检查了几个扩展,我遇到了以下代码:
global.display.add_keybinding('random-name',new Gio.Settings({schema: 'org.gnome.shell.keybindings'}),Meta.KeyBindingFlags.NONE,function() { /* ... some code */ });
我知道组合键是由schema参数指定的,并且可以创建描述组合的XML文件.有更简单的方法吗?最佳答案以下是我的答案here的副本
我只在Gnome 3.22中测试了这个
TL; DR
这是一堂课:
KeyManager: new Lang.Class({ name: 'MyKeyManager',_init: function() { this.grabbers = new Map() global.display.connect( 'accelerator-activated',Lang.bind(this,function(display,action,deviceid,timestamp){ log('Accelerator Activated: [display={},action={},deviceid={},timestamp={}]',display,timestamp) this._onAccelerator(action) })) },ListenFor: function(accelerator,callback){ log('Trying to Listen for hot key [accelerator={}]',accelerator) let action = global.display.grab_accelerator(accelerator) if(action == Meta.KeyBindingAction.NONE) { log('Unable to grab accelerator [binding={}]',accelerator) } else { log('Grabbed accelerator [action={}]',action) let name = Meta.external_binding_name_for_action(action) log('Received binding name for action [name={},action={}]',name,action) log('Requesting WM to allow binding [name={}]',name) Main.wm.allowKeybinding(name,Shell.ActionMode.ALL) this.grabbers.set(action,{ name: name,accelerator: accelerator,callback: callback }) } },_onAccelerator: function(action) { let grabber = this.grabbers.get(action) if(grabber) { this.grabbers.get(action).callback() } else { log('No Listeners [action={}]',action) } }})
这就是你如何使用它:
let keyManager = new KeyManager()keyManager.ListenFor("
你需要进口:
const Lang = imports.langconst Meta = imports.gi.Metaconst Shell = imports.gi.Shellconst Main = imports.ui.main
说明
我可能非常错误,但这是我在过去几天所想到的.
首先是Mutter负责监听热键. Mutter是一个用于创建窗口管理器的框架,它本身不是窗口管理器.
Gnome Shell有一个用Js编写的类,叫做“Window Manager” – 这是真正的Window Manager,它在内部使用Mutter来完成所有低级的东西.
Mutter有一个对象Metadisplay.这是您用于请求侦听热键的对象.
但!
但是Mutter将要求Window Manager批准使用这个热键.那么当按下热键时会发生什么?
– Metadisplay生成事件’filter-keybinding’.
– Gnome Shell中的窗口管理器检查是否允许处理此热键.
– Window Manager将适当的值返回给Metadisplay
– 如果允许处理此热键,Metadisplay会生成事件’accelerator-actived’
– 您的分机必须侦听该事件并通过动作ID确定哪个热键已激活. 总结
以上是内存溢出为你收集整理的linux – Gnome Shell扩展密钥绑定全部内容,希望文章能够帮你解决linux – Gnome Shell扩展密钥绑定所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)