入力された文字をより細かく制御したいので、1にkeypad
設定しました (たとえば、以下の例では、 を検出したいのですが、オフKEY_DOWN
にすると機能しませんkeypad
)。ただし、文字が印刷可能かどうかを検出する必要があります。使えると思って[[:print:]]
いたのですが、何か勘違いしていました。たとえば、次の MWE を実行してバックスペースを入力すると、出力が得られますが263
、 outputが必要not printable
です。条件付けを行うことでこれに対処することはできますlength(character) == 1
が、これは回避すべきハックのように思われ、正しい方法を学びたいと考えています。
#!/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();
私はcursesと入力文字処理の初心者であることに注意してください(批判に同情する必要はありませんが、私が何をしているのか本当にわからないことを知ってもらうためにこれを言います。詳細な説明)。