Назначение комбинации клавиш для конкретного приложения?

Мне известен ряд способов переназначения сочетаний клавиш в Ubuntu на глобальном уровне (например, глобальное переназначение Ctrl + S для отправки Ctrl + D или что-то в этом роде), например, приложение xbindkeys . , Однако мне нужен способ сделать это только для определенного приложения . Например, что-то вроде «Переопределить Ctrl + S для отправки Ctrl + D, но только в Chrome ». Есть ли способ сделать это?

18
задан 21 January 2012 в 01:28

2 ответа

Ваша идея использовать хорошие звуки 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, Единицы, Глобальное меню не работает хорошо с --clearmodifiers опция xdotool. Обходное решение должно было бы добавить сон перед Вашим сценарием, чтобы смочь отпустить клавиши самостоятельно: В Вашем .xbindkeysrc изменение в этой привязке клавиш:

"sleep 0.5; app_specific_keys.sh"
   Control+s

Как заметка на полях: это не будет работать, если Вы захотите изменить ключи для программ, которые работают в терминале (например, vi или emacs в консольном режиме). Возвращенный класс приложений все еще был бы "терминальным Gnome".

Надежда, которая помогает.

12
ответ дан 21 January 2012 в 01:28

автоключ похож на AutoHotkey для Ubuntu. Можно записать сценарии в Python и сделать, чтобы они выполнились через сочетание клавиш и фильтр окон (делающий его псевдоспециализированный). Ваш сценарий может управлять событиями клавиатуры и событиями от нажатия мыши и даже переместить окна как добавленное касание.

2
ответ дан 21 January 2012 в 01:28

Другие вопросы по тегам:

Похожие вопросы: