Обнаружение 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; нет никаких связанных возможностей для того, что вы просите.

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