Как сделать переключатель с помощью Autokey?

Вопрос или проблема

Я хочу использовать 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

  1. Откройте Autokey.
  2. Создайте новый скрипт, нажав на кнопку "Создать".
  3. В открывшемся окне введите имя вашего скрипта (например, "Toggle E").
  4. В поле для скрипта вставьте следующий код:
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)
  1. Сохраните скрипт.

3. Привязка к горячей клавише

  1. В той же панели Autokey, создайте новую комбинацию клавиш.
  2. Свяжите вашу комбинацию с только что созданным скриптом, назначив, к примеру, 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 в ваших приложениях!

Оцените материал
Добавить комментарий

Капча загружается...