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 या कंसोल में कंसोल) में कुंजी बदलना चाहते हैं। लौटा हुआ आवेदन वर्ग अभी भी "गनोम-टर्मिनल" होगा।
उम्मीद है की वो मदद करदे।