¿Cuál es la forma más simple de vincular (globalmente) una combinación de teclas (por ejemplo <Super>+A
) a una función en una extensión de shell gnome?
Al inspeccionar un par de extensiones, me encontré con el siguiente código:
global.display.add_keybinding('random-name',
new Gio.Settings({schema: 'org.gnome.shell.keybindings'}),
Meta.KeyBindingFlags.NONE,
function() { /* ... some code */ });
Entiendo que la combinación de teclas se especifica mediante el parámetro de esquema, y que es posible crear un archivo XML que describa la combinación. ¿Hay una manera más simple de hacer esto?
linux
keyboard-shortcuts
hotkeys
shell-extensions
gnome-shell
Mark Jones
fuente
fuente
Respuestas:
TL; DR
Aquí hay una clase:
Y así es como lo usas:
Necesitarás importaciones:
Para dejar de escuchar:
Explicación
Podría estar terriblemente equivocado, pero eso es lo que he descubierto en los últimos días.
En primer lugar, Mutter es el responsable de escuchar las teclas de acceso rápido. Mutter es un marco para crear administradores de ventanas, no es un administrador de ventanas en sí mismo. Gnome Shell tiene una clase escrita en JS y llamada "Administrador de ventanas": este es el Administrador de ventanas real que usa Mutter internamente para hacer todas las cosas de bajo nivel. Mutter tiene un objeto MetaDisplay. Este es un objeto que utiliza para solicitar escuchar una tecla de acceso rápido. ¡Pero! Pero Mutter requerirá que Window Manager apruebe el uso de esta tecla de acceso rápido. Entonces, ¿qué sucede cuando se presiona la tecla de acceso rápido? - MetaDisplay genera el evento 'filter-keybinding'. - El Administrador de ventanas en Gnome Shell verifica si esta tecla de acceso rápido permitió ser procesada. - Window Manager devuelve el valor apropiado a MetaDisplay - Si se le permite procesar esta tecla de acceso rápido, MetaDisplay genera el evento 'acelerador-activado'
fuente
gconf-editor
puede hacer lo que quieras: enlacefuente