ncurses:检测带有键盘的可打印字符

Posted

技术标签:

【中文标题】ncurses:检测带有键盘的可打印字符【英文标题】:ncurses: detect a printable charcter with keypad on 【发布时间】:2013-08-12 01:42:53 【问题描述】:

我将 keypad 设置为 1,因为我想对输入的字符进行更多控制(例如,在下面的示例中,我想检测 KEY_DOWN。如果我关闭了 keypad,这将不起作用)。但是,我需要检测一个字符是否可打印。我以为我可以使用[[:print:]],但我误解了一些东西。例如,如果我运行以下 MWE 并输入退格键,我会得到 263 的输出,而我想要输出 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();

请注意,我是一个有诅咒和输入字符处理的新手(你不需要在批评中感到遗憾,但我这样说只是为了让你知道我真的不知道我在做什么并且会是感谢任何详细的解释)。

【问题讨论】:

getch() 不返回整数吗?然后它总是可以打印的。 【参考方案1】:

getch 不会返回[[:print:]] 包含的普通字符代码,用于特殊键(它用于字母、数字等)。

要测试退格,您需要测试 KEY_BACKSPACE,这是您得到的 263。

我认为任何特殊键码都不可打印,因此任何大于或等于KEY_MIN(最小特殊键码)的返回码都将不可打印。其他值可以用[[:print:]]查看

【讨论】:

以上是关于ncurses:检测带有键盘的可打印字符的主要内容,如果未能解决你的问题,请参考以下文章

C语言之贪吃蛇(ncurses)

如何从文件中加载二维字符数组并使用 ncurses.h 在 C 中使用 mvprintw() 打印它?

linux编译内核make menuconfig报错Unable to find the ncurses libraries解决办法

Ncurses入门- 使用键盘

字母键盘问题,但带有字符串函数(Java)

在 ncurses 中使用数字键盘键