Обнаружение Caps Lock в проклятиях Python
По такому основному вопросу, я удивлен, что ничего не смог найти, выполнив поиск
В любом случае, я создал приложение на языке Python, которое помогает решать головоломки определенной игры DSiWare. С его помощью вы можете взять головоломку и осмотреть ее компоненты по отдельности. Ключи qweasdzx
используются для рисования плиток (ключи расположены в некоторой палитре). Нажатие одной из этих клавиш, удерживая Shift, выделяет плитки тем цветом. Я не мог попросить более естественную схему контроля.
Жаль, что снова Shift вызывает у меня проблемы (в прошлый раз у меня были проблемы с Shift, я получил значок Tumbleweed). Хотя на этот раз проблема более или менее в Caps Lock, которая полностью портит мою программу, изменяя функции.
Как я могу определить состояние Caps Lock в Python с помощью проклятий?
РЕДАКТИРОВАТЬ: Если вы собираетесь предложить использовать отдельный модуль, я, вероятно, должен напомнить вам, что проклятия - и, следовательно, моя программа - находится на территории UNIX.
2 ответа
Я нашел решение самостоятельно:
Поскольку curses совершенно не знает о настройке Caps Lock в соответствии с ΤΖΩΤΖΙΟΥ, я попробовал альтернативное решение. В частности, я посмотрел, как проверить Caps Lock в BASH-скрипте. То, что я нашел, было это:
Только для Linux Требуется X Window System.
$ xset q | grep LED
> auto repeat: on key click percent: 0 LED mask: 00000000
Последний 0 в этом выводе (66-й символ в строке) является флагом Caps Lock. 1, если он включен, 0, если он выключен.
Python может запускать системные команды UNIX с помощью командного модуля только для Linux. команды не мешают проклятиям.
>>> import commands
>>> # Caps Lock is off.
>>> commands.getoutput("xset q | grep LED")[65]
'0'
>>> # Setting Caps Lock on now.
>>> commands.getoutput("xset q | grep LED")[65]
'1'
Это прекрасно работает для меня; это скрипт для личного пользования, и моя программа не была уже эксклюзивной для Linux. Но я надеюсь, что у кого-то есть другое, более совместимое с Windows решение.
Сейчас я собираюсь принять этот ответ, но если кто-то еще сможет найти лучшее рабочее решение, я бы хотел его увидеть.
Краткий ответ: вы не можете.
Более длинный ответ:
curses был создан как библиотека на основе terminfo, чтобы упростить создание символьных интерфейсов независимо от используемого терминала (for terminal in 'vt220', 'wyse100', …
).
Эти терминалы, соединенные через последовательную линию, и связь с хостом проходили либо через обычный текст (ввод пользователя или вывод хостом), либо через специальные последовательности (escape-последовательности), вводимые пользователем, если специальные клавиши были нажатие, как ↑ или Prev, или вывод хостом, если запрошены специальные операции, такие как позиционирование курсора или очистка экрана).
Я не знаю ни одного тупого терминала, отправляющего специальную последовательность при каждом нажатии клавиши Caps Lock, или о том, что хост запрашивает статус Caps Lock; блокировка столиц была частью работы терминала, и хозяину не нужно было никаких знаний. Это похоже на причину, по которой вы не можете запустить программу curses, когда клавиша Control нажата сама по себе.
Все о curses относится к возможностям terminfo; нет никаких связанных возможностей для того, что вы просите.