Apa cara paling sederhana untuk (secara global) mengikat kombinasi kunci (mis. <Super>+A
) ke suatu fungsi dalam ekstensi shell gnome?
Memeriksa beberapa ekstensi, saya menemukan kode berikut:
global.display.add_keybinding('random-name',
new Gio.Settings({schema: 'org.gnome.shell.keybindings'}),
Meta.KeyBindingFlags.NONE,
function() { /* ... some code */ });
Saya mengerti bahwa kombinasi tombol ditentukan oleh parameter skema, dan dimungkinkan untuk membuat file XML yang menggambarkan kombinasi tersebut. Apakah ada cara yang lebih sederhana untuk melakukan ini?
linux
keyboard-shortcuts
hotkeys
shell-extensions
gnome-shell
Mark Jones
sumber
sumber
Jawaban:
TL; DR
Ini kelasnya:
Dan itulah cara Anda menggunakannya:
Anda akan membutuhkan impor:
Untuk berhenti mendengarkan:
Penjelasan
Saya mungkin sangat salah, tetapi itulah yang saya temukan dalam beberapa hari terakhir.
Pertama-tama adalah Mutter yang bertanggung jawab untuk mendengarkan hotkey. Mutter adalah kerangka kerja untuk membuat Window Managers, itu bukan window manager itu sendiri. Gnome Shell memiliki kelas yang ditulis dalam JS dan disebut "Window Manager" - ini adalah Window Manager nyata yang menggunakan Mutter secara internal untuk melakukan semua hal tingkat rendah. Mutter memiliki objek MetaDisplay. Ini adalah objek yang Anda gunakan untuk meminta mendengarkan hotkey. Tapi! Tetapi Mutter akan meminta Window Manager untuk menyetujui penggunaan hotkey ini. Jadi apa yang terjadi ketika hotkey ditekan? - MetaDisplay menghasilkan 'filter-keybinding' acara. - Window Manager di Gnome Shell memeriksa apakah hotkey ini diizinkan untuk diproses. - Window Manager mengembalikan nilai yang sesuai ke MetaDisplay - Jika diizinkan untuk memproses hotkey ini, MetaDisplay menghasilkan acara 'akselerator-diaktifkan' - Ekstensi Anda harus mendengarkan acara itu dan mencari tahu dengan action id hotkey mana yang diaktifkan.
sumber
gconf-editor
mungkin melakukan apa yang Anda inginkan: linksumber