Ứng dụng kết hợp khóa cụ thể?


18

Tôi biết một số cách ánh xạ lại các tổ hợp phím trong Ubuntu trên cơ sở toàn cầu (ví dụ: ánh xạ lại toàn cầu Ctrl + S để gửi Ctrl + D hoặc một cái gì đó), chẳng hạn như ứng dụng xbindkeys . Tuy nhiên, điều tôi cần là một cách để làm điều này chỉ cho một ứng dụng cụ thể . Ví dụ: một cái gì đó như "Remap Ctrl + S để gửi Ctrl + D, nhưng chỉ trong Chrome ". Có cách nào để thực hiện điều này?


Bạn đã đọc chủ đề này ? Tôi đã không thử nó, nhưng dường như với tôi là những gì bạn đang tìm kiếm. Tôi không biết engouh về nó để viết một câu trả lời thích hợp, mặc dù.
thắt lưng

Câu trả lời:


12

Ý tưởng của bạn về việc sử dụng xbindkeys nghe có vẻ tốt:

trong .xbindkeysrcthêm một liên kết phím mới:

"app_specific_keys.sh"
   Control+s

Điều này sẽ thực thi "app_specific_keys.sh"khi bạn nhấn ctrl+s.

Bây giờ bạn cần xác định kịch bản. Nó sẽ nhận được cửa sổ hoạt động và từ đó tên của ứng dụng hiện đang tập trung:

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

Điều này sẽ thực hiện một mẹo nhỏ: nó yêu cầu xdotool cho cửa sổ hoạt động, sau đó hỏi xprop cho tất cả các thuộc tính của cửa sổ với id đã cho, và sau đó giảm đầu ra rất dài cho tên của ứng dụng (thực ra là lớp của nó). Nếu bạn chạy cái này trong một thiết bị đầu cuối gnome, bạn sẽ nhận được

"Gnome-terminal"

Bây giờ bạn cần xác định hành động cho các ứng dụng của mình:

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

Vì vậy, cùng nhau, kịch bản "app_specific_keys.sh"có thể trông như thế này:

#!/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  

Điều này sẽ làm việc, nhưng như trong câu hỏi này , tôi phải thừa nhận rằng nó không. Có lẽ vì một trong Compiz, Unity, Global Menu không hoạt động tốt với --clearmodifierstùy chọn xdotool. Một cách giải quyết khác là thêm một giấc ngủ phía trước tập lệnh của bạn vào oder để có thể tự giải phóng các phím: Trong .xbindkeysrcthay đổi của bạn đối với thao tác bấm phím này:

"sleep 0.5; app_specific_keys.sh"
   Control+s

Là một sidenote: điều này sẽ không hoạt động, nếu bạn muốn thay đổi các khóa cho các chương trình chạy trong một thiết bị đầu cuối (ví dụ vi hoặc emacs trong chế độ bảng điều khiển). Lớp ứng dụng được trả về vẫn sẽ là "Gnome-terminal".

Mong rằng sẽ giúp.


1
Điều này đã kết thúc làm việc tốt. Tôi đã không sử dụng xdotool để gửi tổ hợp phím, tôi chỉ sử dụng xvkbd -xsendevent -text "\Cs". Điều này dường như không gặp phải vấn đề bạn gặp phải với xdotool.
Derek Thurn

không thể tự thực hiện một cuộc gọi quan trọng, như fgọi điện xdotool key f. Vẫn đang tìm kiếm một cách để làm điều này.
phil294

ha, cuối cùng đã tìm thấy một! xdotool type --window $(xdotool getwindowfocus) [keys] sử dụng tùy chọn --window và gửi đến cửa sổ hiện đang hoạt động sẽ KHÔNG dẫn đến hành vi đệ quy.
phil294

2

autokey giống như AutoHotkey cho Ubuntu. Bạn có thể viết các tập lệnh bằng python và để chúng thực thi thông qua phím tắt và bộ lọc windows (làm cho nó trở thành ứng dụng giả cụ thể). Kịch bản của bạn có thể kiểm soát các sự kiện bàn phím và chuột và thậm chí di chuyển các cửa sổ xung quanh như một liên lạc được thêm vào.


autokeylà CÁCH nhanh hơn xbindkeys, ngay cả khi bật chế độ phát hiện cửa sổ - thực hiện ngay hành động. Nhược điểm: Việc gán nút chuột dường như không hoạt động (tôi nghĩ đó là một lỗi)
phil294 13/03/2016
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.