अनुप्रयोग-विशिष्ट कुंजी संयोजन रीमैपिंग?


18

मुझे वैश्विक आधार पर उबंटू में प्रमुख संयोजनों को फिर से भरने के कई तरीकों के बारे में पता है (उदाहरण के लिए, वैश्विक रूप से Ctrl + S को Ctrl + D या कुछ भेजने के लिए), जैसे xbindkeys एप्लिकेशन। हालाँकि, मुझे एक विशिष्ट एप्लिकेशन के लिए यह करने का एक तरीका है । उदाहरण के लिए, Ctrl + D भेजने के लिए "रीमैप Ctrl + S जैसा कुछ, लेकिन केवल क्रोम में "। क्या इसे पूरा करने का कोई रास्ता है?


क्या आपने यह धागा पढ़ा ? मैंने इसकी कोशिश नहीं की है, लेकिन मुझे लगता है कि आप जो खोज रहे हैं, वह मुझे बहुत अच्छा लगता है। मुझे नहीं पता कि इसके बारे में उचित उत्तर लिखना है।
लुंब्रिक

जवाबों:


12

Xbindkeys का उपयोग करने का आपका विचार अच्छा लगता है:

अपने .xbindkeysrcनए कीबाइंडिंग में जोड़ें:

"app_specific_keys.sh"
   Control+s

"app_specific_keys.sh"प्रेस करने पर यह निष्पादित होगा ctrl+s

अब आपको स्क्रिप्ट को परिभाषित करने की आवश्यकता है। इसे सक्रिय विंडो मिलनी चाहिए और इसमें से उस ऐप का नाम है जिस पर वर्तमान में फोकस है:

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

यह चाल करेगा: यह सक्रिय विंडो के लिए xdotool पूछता है, फिर xprop को दिए गए आईडी के साथ विंडो के सभी गुणों के लिए पूछता है, और फिर एप्लिकेशन के नाम (वास्तव में इसकी कक्षा) के लिए बहुत वर्बोज़ आउटपुट को कम करता है। यदि आप इसे एक गनोम-टर्मिनल में चलाते हैं तो आपको मिलेगा

"Gnome-terminal"

अब आपको अपने अनुप्रयोगों के लिए कार्यों को परिभाषित करने की आवश्यकता है:

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

इसलिए एक साथ, स्क्रिप्ट "app_specific_keys.sh"इस तरह दिख सकती है:

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

यह काम करना चाहिए , लेकिन इस प्रश्न के रूप में , मुझे यह स्वीकार करना होगा कि ऐसा नहीं है। शायद इसलिए कि Compiz, Unity, Global Menu में --clearmodifiersसे एक xdotool के विकल्प के साथ अच्छी तरह से काम नहीं करता है । एक वैकल्पिक हल के लिए अपने में: ओडर में अपनी स्क्रिप्ट के सामने एक नींद जोड़ने के लिए कुंजी अपने आप को रिलीज करने के लिए सक्षम होने के लिए होगा .xbindkeysrcइस की बाइंडिंग के लिए परिवर्तन:

"sleep 0.5; app_specific_keys.sh"
   Control+s

एक विचार के रूप में: यह काम नहीं करेगा, यदि आप एक टर्मिनल में चलने वाले प्रोग्राम (जैसे vi या कंसोल में कंसोल) में कुंजी बदलना चाहते हैं। लौटा हुआ आवेदन वर्ग अभी भी "गनोम-टर्मिनल" होगा।

उम्मीद है की वो मदद करदे।


1
यह ठीक काम करना समाप्त कर दिया। मैंने कीस्ट्रोक्स भेजने के लिए xdotool का उपयोग नहीं किया, मैंने अभी उपयोग किया है xvkbd -xsendevent -text "\Cs"। यह उन मुद्दों से ग्रस्त नहीं है जिन्हें आप xdotool के साथ देख रहे थे।
डेरेक थर्न

ऐसा लगता है जैसे एक महत्वपूर्ण कॉल ही बनाने के लिए, संभव नहीं है fबुला xdotool key f। फिर भी ऐसा करने का तरीका खोज रहे हैं।
दर्शन

हा, आखिरकार एक मिल गया! xdotool type --window $(xdotool getwindowfocus) [keys] -विंडो विकल्प का उपयोग करना और वर्तमान में सक्रिय विंडो में भेजने से पुनरावर्ती व्यवहार नहीं होगा।
दर्शन

2

ऑटोकै उबंटू के लिए ऑटोहॉटकी की तरह है। आप पाइथन में स्क्रिप्ट लिख सकते हैं और उन्हें कीबोर्ड शॉर्टकट और एक विंडोज़ फ़िल्टर के माध्यम से निष्पादित कर सकते हैं (इसे छद्म-एप्लिकेशन विशिष्ट बना सकते हैं)। आपकी स्क्रिप्ट कीबोर्ड और माउस की घटनाओं को नियंत्रित कर सकती है और यहां तक ​​कि खिड़कियों को एक जोड़ा स्पर्श के रूप में चारों ओर ले जा सकती है।


autokeyसे xbindkeysभी तेज है , यहां तक ​​कि विंडो डिटेक्शन मोड पर भी - तत्काल कार्रवाई की गई। नकारात्मक पक्ष: माउस बटन असाइनमेंट काम नहीं करते हैं (मुझे लगता है कि यह एक बग है)
phil294
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.