2013-08-12 4 views
1

keypad은 1로 설정되어 있습니다. 예를 들어, 아래의 예에서 나는 KEY_DOWN을 감지하려고합니다. keypad이 꺼져 있으면 작동하지 않습니다.). 그러나 문자가 인쇄 가능한지 여부를 감지해야합니다. 내가 [[:print:]]를 사용할 수 있다고 생각했지만 뭔가 오해했습니다. 예를 들어, 다음 MWE를 실행하고 백 스페이스를 입력하면 263의 결과를 얻지 만 출력은 not printable입니다. 나는 length(character) == 1에 컨디셔닝하여이 문제를 해결하려고 노력할 수 있지만 이것은 피해야하는 해킹처럼 보입니다. 올바른 방법을 배우고 싶습니다. 내가 저주와 당신이 비판에 연민을 취할 필요가 없습니다 (입력 문자가 처리와 초보자,하지만 난 당신이 정말 난 모르는 것을 알고 바로 그래서이 말을ncurses : 키패드로 인쇄 가능한 문자 감지

#!/usr/bin/perl -w 

use strict; 
use Curses; 

initscr(); 
my $good_win = newwin(1, 2, 3, 1); 
keypad($good_win, 1); 

my $character = $good_win->getch(); 

if ($character eq KEY_DOWN) { 
    print "you did a down arrow"; 
} 

if ($character =~ "[[:print:]]") { 
    print "you entered: $character\n"; 
} 

else { 
    print "not printable\n"; 
} 

exit(); 

주 자세한 설명은 감사하겠습니다).

+0

'getch()'가 정수를 반환하지 않습니까? 그렇다면 항상 인쇄 가능합니다. – mob

답변

0

getch[[:print:]]에 포함 된 일반 문자를 반환하지 않으며 특수 키 (문자, 숫자 등의 경우 해당)를 나타냅니다.

백 스페이스를 테스트하려면 KEY_BACKSPACE 인 263을 테스트해야합니다.

특수 키 코드가 인쇄 가능하다고 생각하지 않으므로 KEY_MIN (리턴 코드가 최소 특수 키 코드)보다 크거나 같으면 인쇄 할 수 없습니다. [[:print:]]