簡體   English   中英

檢測Python curses中的Caps Lock

[英]Detect Caps Lock in Python curses

對於這樣一個基本問題,我很驚訝我找不到任何搜索...

無論如何,我用Python制作了一個curses應用程序,它有助於解決某個DSiWare游戲的難題。 有了它,你可以拼圖並單獨檢查它的組成部分。 qweasdzx用於繪制圖塊(按鍵排列在某種調色板中)。 在按住Shift的同時按下其中一個按鈕會突出顯示該顏色的圖塊。 我無法要求更自然的控制方案。

所以很遺憾,Shift再一次給了我一些問題(上次我遇到Shift問題時,我獲得了Tumbleweed徽章)。 雖然這次,問題或多或少是Caps Lock,它通過反轉功能完全搞砸了我的程序。

如何使用curses檢測Python中Caps Lock的狀態?

編輯:如果你打算建議使用一個單獨的模塊,我可能應該提醒你,curses - 因此我的程序 - 在UNIX領域。

我自己找到了一個解決方案:

由於curses根據ΤΖΩΤΖΙΟΥ完全不知道Caps Lock設置,我嘗試了另一種解決方案。 具體來說,我查找了如何在BASH腳本中檢查Caps Lock。 我發現的是:

僅限Linux。 需要X Window系統。

$ xset q | grep LED
>  auto repeat:  on    key click percent:  0    LED mask:  00000000

該輸出中的最后一個0(字符串中的第66個字符)是Caps Lock標志。 如果它打開則為1,如果打開則為0。

Python可以使用僅Linux 命令模塊運行UNIX系統命令。 命令似乎不會干擾curses。

>>> 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的庫,以便於創建獨立於所使用的終端的基於字符的UI( for terminal in 'vt220', 'wyse100', … )。

這些通過串行線連接的終端和來回往返主機的通信是通過純文本(由用戶輸入或由主機輸出)或特殊序列(“轉義”序列;如果特殊鍵是用戶輸入的話按下,如Prev ,或者如果請求了光標定位或屏幕清除等特殊操作,則由主機輸出)。

我不知道任何啞終端在按下Caps Lock鍵時發送特殊序列,或者主機查詢Caps Lock狀態; 鎖定首都是終端工作的一部分,主持人不需要任何知識。 這類似於當您自己按下Control鍵時無法使用curses程序的原因。

關於curses的一切都與terminfo功能有關; 你問的問題沒有任何相關的能力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM