Memetakan ulang kombinasi tombol khusus aplikasi?


18

Saya mengetahui sejumlah cara memetakan ulang kombinasi tombol di Ubuntu secara global (mis., Memetakan ulang secara global Ctrl + S untuk mengirim Ctrl + D atau sesuatu), seperti aplikasi xbindkeys . Apa yang saya butuhkan adalah cara untuk melakukan ini hanya untuk aplikasi tertentu . Misalnya, sesuatu seperti "Remap Ctrl + S untuk mengirim Ctrl + D, tetapi hanya di Chrome ". Apakah ada cara untuk mencapai ini?


Apakah Anda membaca utas ini ? Saya belum mencobanya, tetapi tampaknya bagi saya apa yang sedang Anda cari. Aku tidak tahu apa-apa tentang itu untuk menulis jawaban yang tepat.
lumbric

Jawaban:


12

Gagasan Anda menggunakan xbindkeys terdengar bagus:

di .xbindkeysrcadd Anda, pengikat kunci baru:

"app_specific_keys.sh"
   Control+s

Ini akan dieksekusi "app_specific_keys.sh"ketika Anda menekan ctrl+s.

Sekarang Anda perlu mendefinisikan skrip. Seharusnya mendapatkan jendela aktif dan dari situ nama aplikasi yang saat ini memiliki fokus:

xprop -id `xdotool getactivewindow` |awk '/WM_CLASS/{print $4}'

Ini akan melakukan trik: ia meminta xdotool untuk jendela yang aktif, kemudian meminta xprop untuk semua properti jendela dengan id yang diberikan, dan kemudian mengurangi output yang sangat verbose ke nama aplikasi (sebenarnya kelasnya). Jika Anda menjalankan ini di terminal gnome, Anda akan mendapatkannya

"Gnome-terminal"

Sekarang Anda perlu mendefinisikan tindakan untuk aplikasi Anda:

if [ $N = '"Gnome-terminal"' ]; then                                                    
    xdotool key --clearmodifiers ctrl+s                                                          
else                                                                            
    xdotool key --clearmodifiers ctrl+d                                                          
fi  

Jadi bersama-sama, skripnya "app_specific_keys.sh"bisa seperti ini:

#!/bin/bash                                                                     
W=`xdotool getactivewindow`                                                     
S1=`xprop -id ${W} |awk '/WM_CLASS/{print $4}'`                                 
S2='"Gnome-terminal"'                                                           
if [ $S1 = $S2 ]; then                                                          
   xdotool key --clearmodifiers ctrl+d                                             
else                                                                            
   xdotool key --clearmodifiers ctrl+s                                          
fi  

Ini seharusnya bekerja, tetapi seperti dalam pertanyaan ini , saya harus mengakui bahwa itu tidak. Mungkin karena salah satu dari Compiz, Unity, Global Menu tidak berfungsi dengan baik dengan --clearmodifiersopsi xdotool. Sebuah solusi akan menambahkan tidur di depan naskah Anda di oder untuk dapat melepaskan kunci sendiri: Dalam Anda .xbindkeysrcperubahan ke Kombinasi tombol ini:

"sleep 0.5; app_specific_keys.sh"
   Control+s

Sebagai sidenote: ini tidak akan berfungsi, jika Anda ingin mengubah kunci untuk program yang berjalan di terminal (misalnya vi atau emacs dalam mode konsol). Kelas aplikasi yang dikembalikan masih akan "Gnome-terminal".

Semoga itu bisa membantu.


1
Ini akhirnya bekerja dengan baik. Saya tidak menggunakan xdotool untuk mengirim penekanan tombol, saya hanya menggunakan xvkbd -xsendevent -text "\Cs". Ini sepertinya tidak menderita masalah yang Anda lihat dengan xdotool.
Derek Thurn

tidak mungkin membuat panggilan kunci sendiri, seperti fmenelepon xdotool key f. Masih mencari cara untuk melakukan ini.
phil294

ha, akhirnya menemukan satu! xdotool type --window $(xdotool getwindowfocus) [keys] menggunakan opsi --window dan mengirim ke jendela yang sedang aktif TIDAK akan mengarah pada perilaku rekursif.
phil294

2

autokey seperti Autohotkey untuk Ubuntu. Anda dapat menulis skrip dengan python dan menjalankannya melalui pintasan keyboard dan filter windows (menjadikannya pseudo-aplikasi spesifik). Skrip Anda dapat mengontrol acara keyboard dan mouse dan bahkan memindahkan jendela sebagai sentuhan tambahan.


autokeyWAY lebih cepat daripada xbindkeys, bahkan dengan mode deteksi jendela aktif - tindakan segera diambil. Kelemahan: Penugasan tombol mouse tampaknya tidak berfungsi (saya pikir ini bug)
phil294
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.