1

入力された文字をより細かく制御したいので、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と入力文字処理の初心者であることに注意してください(批判に同情する必要はありませんが、私が何をしているのか本当にわからないことを知ってもらうためにこれを言います。詳細な説明)。

4

1 に答える 1

0

getch[[:print:]]特殊キー (文字、数字など) を含む 通常の文字コードを返しません。

バックスペースをテストするKEY_BACKSPACEには、取得した 263 をテストする必要があります。

特別なキーコードは印刷可能ではないと思うので、KEY_MIN(最小特別キーコード) 以上の返されたコードは印刷できません。他の値は次で確認できます[[:print:]]

于 2013-08-12T07:51:04.293 に答える