2016-06-14 2 views
0

단일 문자 또는 화살표와 같은 단일 키 누르기 또는 shift와 같은 수정 키를 기록하는 방법을 찾을 수 없습니다.하나의 키 누르기를 Scheme에 어떻게 기록합니까?

가장 가까운 것은 read-char이지만 입력을 보내기 전에 Enter 키를 누를 때까지 기다립니다. keypress를 등록하고 immediatly 그것을 통과시키고 싶다.

구현에 따라 다르면 Chez-Scheme을 사용하고 있습니다.

답변

1

언급 한 바와 같이 키 누름 시스템 특정 있지만, 거의 확실 stty를 설치 한 것 리눅스 나 BSD 시스템에, 이것은 당신이 체즈 방식으로 원하는 것을 할 것입니다 :

(system "stty --file=/dev/tty cbreak -echo") 
(let ([keyboard (open-input-file "/dev/tty")]) 
    (format #t "The key press was ~A~%" (read-char keyboard))) 
(system "stty --file=/dev/tty -cbreak echo") 
+0

고마워요, 내가 찾고 있었던 것이 었습니다! – Wysaard

1

키 누르기와 관련된 작업은 구현에 따라 달라지며 이는 Scheme 표준에서 다루지 않기 때문입니다. Chez Scheme에서, 내가 아는 한, 키 누르기에 대한 직접적인 지원은 없습니다. 그러나 Chez Scheme과 함께 제공되는 SWL (Scheme Widget Library)을 설치하면 키 누르기 명령을 읽을 수 있습니다. 나는 그것을 사용한 적이 없으며 그것에 대해 아무것도 모른다.

+0

흠 너무 나쁘다. 나는 SWL을 한번 살펴보아야 할 것 같다. 감사합니다 – Wysaard

+0

R6RS는 버퍼링되지 않은 포트가있는 파일을 읽고 쓸 수 있지만 이미 열린 포트에서 버퍼링을 켜고 끌 수는 없습니다. 아마 R7RS- 대형이 그것을 가질 것입니다. – Sylwester

+0

@Silvester : 포트 버퍼링은 문제가되지 않으며, 버퍼링을 해제하면 도움이되지 않습니다. 터미널의 자체 회선 버퍼링이 문제입니다. –

관련 문제