linux–Gnome Shell扩展密钥绑定

linux–Gnome Shell扩展密钥绑定,第1张

概述(全局)将键组合(例如< Super> A)绑定到gnome shell扩展中的函数的最简单方法是什么?检查了几个扩展,我遇到了以下代码:global.display.add_keybinding('random-name', new Gio.Settings({schema: 'org.gnome

(全局)将键组合(例如< 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扩展密钥绑定所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1048649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)