Обнаружение Caps Lock в проклятиях Python - PullRequest
4 голосов
/ 08 июля 2010

Для такого основного вопроса, я удивлен, что ничего не смог найти, выполнив поиск ...

В любом случае, я создал приложение на языке ругательств на Python, которое помогает решать головоломки определенной игры DSiWare. С его помощью вы можете взять головоломку и осмотреть ее компоненты по отдельности. Клавиши qweasdzx используются для рисования плиток (клавиши расположены в некоторой палитре). Нажатие одной из этих клавиш, удерживая Shift, выделяет плитки тем цветом. Я не мог попросить более естественную схему контроля.

Так жаль, что снова Shift вызывает у меня проблемы (в прошлый раз, когда у меня были проблемы с Shift, я заработал значок Tumbleweed). Хотя на этот раз проблема более или менее в Caps Lock, которая полностью испортила мою программу, изменив функции.

Как я могу определить состояние Caps Lock в Python с помощью curses?

РЕДАКТИРОВАТЬ: Если вы собираетесь предложить использовать отдельный модуль, я, вероятно, должен напомнить вам, что проклятия - и, следовательно, моя программа - находится на территории UNIX.

Ответы [ 2 ]

7 голосов
/ 09 июля 2010

Я нашел решение самостоятельно:

Поскольку 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 с модулем commands только для 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 решение.

Я собираюсь сейчас принять этот ответ на себя, но если кто-то другой сможет найти лучшее рабочее решение, я бы хотел его увидеть.

3 голосов
/ 09 июля 2010

Короткий ответ: вы не можете.

Более длинный ответ:

curses был создан как библиотека на основе terminfo, чтобы упростить создание символьных пользовательских интерфейсов независимо от терминалаused (for terminal in 'vt220', 'wyse100', …).

Эти терминалы, соединенные через последовательную линию и связь с хостом, осуществлялись либо через простой текст (вводимый пользователем или выводимый хостом), либо через специальные последовательности («escape» последовательности; ввод пользователя при нажатии специальных клавиш, например или Prev , или вывод хостом, если запрошены специальные операции, такие как позиционирование курсора или очистка экрана).

Я не знаю, любой тупой терминал, отправляющий специальную последовательность при каждом нажатии клавиши Caps Lock, или хост, запрашивающий состояние Caps Lock;блокировка заглавных букв была частью работы терминала, и хозяин не нуждался в каких-либо знаниях.Это похоже на причину, по которой вы не можете запустить программу curses, когда клавиша Control нажата сама по себе.

Все, что касается curses, относится к terminfo возможностям;нет никаких связанных возможностей для того, что вы просите.

...