Qual é a maneira mais simples de vincular (globalmente) uma combinação de teclas (por exemplo <Super>+A
) a uma função em uma extensão de shell do gnome?
Inspecionando algumas extensões, encontrei o seguinte código:
global.display.add_keybinding('random-name',
new Gio.Settings({schema: 'org.gnome.shell.keybindings'}),
Meta.KeyBindingFlags.NONE,
function() { /* ... some code */ });
Entendo que a combinação de teclas é especificada pelo parâmetro schema e que é possível criar um arquivo XML descrevendo a combinação. Existe uma maneira mais simples de fazer isso?
linux
keyboard-shortcuts
hotkeys
shell-extensions
gnome-shell
Mark Jones
fonte
fonte
Respostas:
TL; DR
Aqui está uma classe:
E é assim que você o usa:
Você precisará de importações:
Para parar de ouvir:
Explicação
Eu posso estar terrivelmente errado, mas é o que eu descobri nos últimos dias.
Antes de tudo, Mutter é responsável por ouvir as teclas de atalho. O Mutter é uma estrutura para a criação de gerenciadores de janelas, não é um gerenciador de janelas em si. O Gnome Shell possui uma classe escrita em JS e chamada "Gerenciador de Janelas" - este é o Gerenciador de Janelas real que usa o Mutter internamente para fazer todas as coisas de baixo nível. Mutter tem um objeto MetaDisplay. Esse é o objeto que você usa para solicitar a escuta de uma tecla de atalho. Mas! Mas o Mutter exigirá que o Gerenciador de Janelas aprove o uso dessa tecla de atalho. Então, o que acontece quando a tecla de atalho é pressionada? - MetaDisplay gera o evento 'filter-keybinding'. - O Gerenciador de Janelas no Shell do Gnome verifica se esta tecla de acesso rápido pode ser processada. - O Window Manager retorna o valor apropriado para MetaDisplay - Se for permitido processar essa tecla de acesso, o MetaDisplay gera o evento 'ativado por acelerador'
fonte
gconf-editor
pode fazer o que quiser: linkfonte