Обнаружение Caps Lock в Python curses
Вопрос
Отвечая на такой простой вопрос, я удивлен, что ничего не смог найти с помощью поиска...
В любом случае, я создал приложение curses на Python, которое помогает в решении головоломок определенной игры DSiWare.С его помощью вы можете взять пазл и осмотреть его составляющие по отдельности.Ключи qweasdzx
используются для раскрашивания плиток (клавиши расположены в виде своего рода палитры).Нажатие одной из этих клавиш с удерживанием Shift выделяет плитки этого цвета.Я не мог и мечтать о более естественной схеме управления.
Так что жаль, что в очередной раз Shift доставляет мне проблемы (в прошлый раз, когда у меня были проблемы с Shift, я заработал значок перекати-поля).Хотя на этот раз проблема более или менее в Caps Lock, которая полностью портит мою программу, меняя функции местами.
Как я могу определить состояние Caps Lock в Python с помощью curses?
Редактировать:Если вы собираетесь предложить использовать отдельный модуль, мне, вероятно, следует напомнить вам, что curses - и, следовательно, моя программа - находится на территории UNIX.
Решение
Я нашел решение самостоятельно:
Поскольку проклятия полностью не знают об настройке блокировки Caps в соответствии с τζωτζιου, я попробовал альтернативное решение. В частности, я посмотрел, как проверить замок Caps в скрипте Bash. То, что я нашел, было это:
linux только. Требуется X оконная система.
$ xset q | grep LED
> auto repeat: on key click percent: 0 LED mask: 00000000
.
Последнее 0 в этом выходе (66-й символ в строке) - флаг блокировки Caps. 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 Exclusive. Но я надеюсь, что у кого-то есть другое, больше, совместимое с Windows-совместимым решением.
Я собираюсь принять этот самоуправление на данный момент, но если кто-то другой может придумать лучшее рабочее решение, я бы хотел его увидеть.
Другие советы
Короткий ответ:ты не можешь.
Более длинный ответ:
curses был создан как библиотека на основе terminfo для упрощения создания пользовательских интерфейсов на основе символов, независимых от используемого терминала (for terminal in 'vt220', 'wyse100', …
).
Эти терминалы подключались по последовательной линии, и связь с хостом осуществлялась либо с помощью обычного текста (вводимого пользователем или выводимого хостом), либо специальных последовательностей ("escape" последовательности;ввод пользователем, если были нажаты специальные клавиши, например ↑ или Пред., или вывод хостом, если были запрошены специальные операции, такие как позиционирование курсора или очистка экрана).
Я ничего не знаю о Любой тупой терминал, отправляющий специальную последовательность всякий раз, когда была нажата клавиша Caps Lock, или хост, запрашивающий статус Caps Lock;блокировка заглавных букв была частью работы терминала, и хозяину не требовалось никаких знаний.Это похоже на причину, по которой вы не можете запустить программу curses, когда клавиша управления нажата сама по себе.
Все, что связано с проклятиями, относится к терминфо возможности;для того, о чем вы просите, нет никаких связанных возможностей.