Переназначение комбинации клавиш приложения?

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

17
задан 21 January 2012 в 03: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, вы получите

"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 или emacs в режиме консоли). Возвращаемый класс приложения все равно будет «Gnome-terminal».

Надеюсь, что это поможет.

10
ответ дан 25 May 2018 в 15:00
  • 1
    Это закончило работать отлично. Я не использовал xdotool для отправки нажатий клавиш, я просто использовал xvkbd -xsendevent -text "\Cs". Это, похоже, не страдает от проблем, которые вы видели с помощью xdotool. – Derek Thurn 31 January 2012 в 00:37
  • 2
    невозможно сделать сам вызов ключа, например f, вызывающий xdotool key f. Все еще ищут способ сделать это. – Blauhirn 7 March 2016 в 03:07
  • 3
    га, наконец-то нашел! xdotool type --window $(xdotool getwindowfocus) [keys] с использованием опции --window и отправки в текущее активное окно НЕ приведет к рекурсивному поведению. – Blauhirn 7 March 2016 в 03:32

autokey похож на AutoHotkey для Ubuntu. Вы можете писать сценарии на python и выполнять их с помощью сочетания клавиш и фильтра Windows (что делает его псевдо-специфичным для приложения). Ваш скрипт может управлять событиями клавиатуры и мыши и даже перемещать окна в виде добавленного касания.

2
ответ дан 25 May 2018 в 15:00
  • 1
    autokey - ПУТЬ быстрее, чем xbindkeys, даже при включенном режиме обнаружения окна - немедленное действие. Недостаток: назначение кнопок мыши, похоже, не работает (я думаю, что это ошибка) – Blauhirn 13 March 2016 в 20:24

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

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