Вопрос или проблема
Я хочу использовать Autokey для переключения клавиши e в программе под названием “xyz”. Когда я нажимаю e, программа думает, что я удерживаю e. Если я снова нажимаю e, она думает, что я отпустил её. Как это сделать, пожалуйста?
Или есть ли какая-то другая программа, которая может это сделать?
Бонусный вопрос: как это сделать с любым приложением Ubuntu, таким как fvwm2, xorg, xmodmap, xkb, xrdb, любым способом вообще?
Я не знаком с autokey, но это выглядит выполнимо. Используйте Keyboard.press_key
, чтобы отправить событие нажатия клавиши, и Keyboard.release_key
, чтобы отправить событие отпускания клавиши. Чтобы запомнить, какое из событий отправлять, вы можете использовать Store.set_value
и Store.get_value
.
В качестве альтернативы вы можете использовать xdotool для инъекции событий ввода в окно и xprop
, чтобы прикрепить данные к окну. Запустите следующую команду shell (не протестировано), чтобы отправить альтернативные события нажатия/отпускания активному окну.
#!/bin/sh
window_id=$(xdotool getactivewindow)
case $(xprop -id "$window_id" -f key_e_is_down 32c -notype key_e_is_down) in
*1) key_command=keydown; new_state=0;;
*) key_command=keyup; new_state=1;;
esac
xdotool "$key_command" "e"
xprop -id "$window_id" -f key_e_is_down 32c -set key_e_is_down "$new_state"
Если вы хотите привязать это действие к клавише, но чтобы клавиша была активна только в одном окне, я не уверен, что Autokey сможет вам помочь. Самый простой способ сделать это – через менеджер окон, но большинство менеджеров окон не могут это сделать. Я использую sawfish в качестве менеджера окон, который может сделать это без внешних инструментов.
(define (toggle-e w)
(interactive "%W")
(let ((down (window-get w 'key-e-is-down)))
(synthesize-event (if down "Release+e" "e") w)
(window-put w 'key-e-is-down (not down))))
(define xyz-window-map (make-keymap))
(bind-keys xyz-window-map "e" toggle-e)
(add-window-matcher 'WM_CLASS "^Xyz/" `((keymap . ,xyz-window-map)))
Ответ или решение
Чтобы создать переключатель (toggle key) для клавиши e
с помощью Autokey, выполните следующие шаги.
1. Установка Autokey
Если у вас ещё не установлен Autokey, установите его с помощью следующей команды в терминале:
sudo apt-get install autokey
2. Создание скрипта в Autokey
- Откройте Autokey.
- Создайте новый скрипт, нажав на кнопку "Создать".
- В открывшемся окне введите имя вашего скрипта (например, "Toggle E").
- В поле для скрипта вставьте следующий код:
import time
from autokey import *
# Получаем текущее состояние, используя Store для хранения
state = Store.get_value('e_key_state')
if state is None:
state = False
else:
state = state == 'True'
# Переключаем состояние
if state:
Keyboard.release_key('e') # Если клавиша 'e' была нажата, отпускаем её
Store.set_value('e_key_state', 'False') # Обновляем состояние
else:
Keyboard.press_key('e') # Если клавиша 'e' не была нажата, нажимаем её
Store.set_value('e_key_state', 'True') # Обновляем состояние
# Задержка для предотвращения мгновенного переключения
time.sleep(0.1)
- Сохраните скрипт.
3. Привязка к горячей клавише
- В той же панели Autokey, создайте новую комбинацию клавиш.
- Свяжите вашу комбинацию с только что созданным скриптом, назначив, к примеру,
e
как горячую клавишу.
Теперь при нажатии e
в программе "xyz" ваш скрипт будет активировать или деактивировать нажатую клавишу e
.
Альтернативный способ с использованием xdotool
Если вы хотите использовать xdotool
, вы можете создать shell-скрипт. Вот пример реализации:
#!/bin/bash
window_id=$(xdotool getactivewindow)
current_state=$(xprop -id "$window_id" -f key_e_is_down 32c -notype key_e_is_down)
if [[ "$current_state" == *"1"* ]]; then
key_command=keyup
new_state=0
else
key_command=keydown
new_state=1
fi
xdotool "$key_command" "e"
xprop -id "$window_id" -f key_e_is_down 32c -set key_e_is_down "$new_state"
Сохраните этот файл и сделайте его исполняемым:
chmod +x ваш_скрипт.sh
Теперь вы можете привязать этот скрипт к горячей клавише в ваших системных настройках.
Ответ на дополнительный вопрос
Для более сложных манипуляций с ключами в Ubuntu, таких как использование fvwm2
, xorg
, xmodmap
, xkb
или xrdb
, решение может варьироваться. Например, в xkb
можно создать модификации конфигурации клавиатуры и настроить различные сценарии обработки событий клавиатуры.
Если вам нужно создание конкретных конфигураций для управления клавишами через xkb
, это может потребовать редактирования файлов конфигурации в /usr/share/X11/xkb/symbols/
.
Для определения всех доступных решений и инструментов лучше всего прочитать соответствующую документацию или форумы, такие как Arch Linux Wiki, где сообщество делится своим опытом и решениями.
Надеюсь, это поможет вам создать необходимый переключатель клавиши e
в ваших приложениях!