ncurses을 사용하면 어떨까요? 또한 연결된 특정 터미널 유형의 텍스트 서식을 지정하는 방법을 이해하는 데 도움이됩니다.
파이썬 바인딩이 제공하는 getkey() 함수를 사용하면 다른 키에 대한 한정자를 찾을 수 있습니다. 또한 Shift + 화살표 키에는 KEY_SR
으로 축약 된 별도의 키 코드가 있으며 위아래로는 KEY_SF
이고 KEY_SLEFT
및 KEY_SRIGHT
이라는 문자가 있음을 알게되었습니다.
import curses
import curses.textpad
import curses.ascii
def decodeSuffix(i):
return {
0b110: (True, True, False),
0b100: (True, False, True),
0b111: (False, True, True),
0b101: (False, True, False),
0b011: (False, False, True),
}[i]
def test(stdscr):
while True:
k = stdscr.getkey()
if k == "\n":
return
elif k[0] == "k" and len(k) > 1:
i = int(k[-1])
shift, ctrl, alt = decodeSuffix(i)
s = ""
if shift:
s += "shift "
if ctrl:
s += "ctrl "
if alt:
s += "alt "
s += k[1:-1]
stdscr.addstr("{0:40s} {1:08b}\n".format(s, i))
else:
stdscr.addstr("{0}\n".format(k))
pass
curses.wrapper(test)
당신은 그걸로 놀 수 있습니다. source of getkey()을 보면, 기본적으로 getch
과 keyname
curses 함수의 조합이라는 것을 알 수 있습니다.
나는 ncurses를 사용하고 있습니다. 어떤 이유로 "Shift + Up"과 "Shift + Down"을 감지 할 수 없으며 일부 키의 경우 Ctrl 키와 Alt 키와 마찬가지로 문제가 발생할 것이라고 예측합니다. 이것은 다른 방식으로 이러한 키 누름을 감지해야 함을 의미합니다. –
@ TheScienceBoy 예제와 내 답변에 대한 몇 가지 참조를 추가했습니다. 이제 문제가 shift + up 및 shift + down을 감지하는 곳을 봅니다. 희망이 도움이! –
내 시스템에서 솔루션을 사용해 보았지만 X11 (편의를 위해 먼저 시도한) Shift + 키 업과 Shift + 키 다운이 감지되지 않았습니다 (슬리 프와 솔직한 작업). X11 외부의 적절한 콘솔에서 no-shift-key가 감지되었습니다. 내가 아는 한 이런 종류의 일은 리눅스에서 정말 저수준의 솔루션이 필요하다. 슬픈 일이다. 키보드 취급이 더 쉬울 것이라고 생각합니다. –