ความคิดของคุณเกี่ยวกับการใช้ 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 สำหรับคุณสมบัติทั้งหมดของหน้าต่างที่มี id ที่กำหนดและจากนั้นจะลดเอาต์พุต verbose ให้เป็นชื่อของแอปพลิเคชัน หากคุณเรียกใช้งานใน gnome-terminal คุณจะได้รับ
"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 วิธีแก้ปัญหาที่จะเพิ่มการนอนหลับอยู่ในด้านหน้าของสคริปต์ของคุณใน oder เพื่อให้สามารถที่จะปล่อยปุ่มด้วยตัวเอง: ในของคุณ.xbindkeysrc
เปลี่ยนเป็นปุ่มลัดนี้:
"sleep 0.5; app_specific_keys.sh"
Control+s
ในฐานะ sidenote: สิ่งนี้จะไม่ทำงานหากคุณต้องการเปลี่ยนคีย์สำหรับโปรแกรมที่รันในเทอร์มินัล (เช่น vi หรือ emacs ในโหมดคอนโซล) คลาสแอปพลิเคชันที่ส่งคืนจะยังคงเป็น "Gnome-terminal"
หวังว่าจะช่วย