gpt4 book ai didi

Perl/Curses 事件处理和 I/O

转载 作者:行者123 更新时间:2023-12-04 02:46:22 24 4
gpt4 key购买 nike

所以,我刚开始尝试将 perl curses 模块用于我正在处理的项目。文档似乎非常缺乏,我在 cpan 上能找到的东西似乎已经完成了一半,并且假设我以前没有 curses 库经验。我有两个要解决的问题,到目前为止我的代码:

#!/usr/bin/perl

use strict;
use Curses::UI;
use Term::ReadKey;

my ($cols, $rows, $wp, $hp) = GetTerminalSize();

my $cui = new Curses::UI( -color_support => 1);

sub eDialog {
my $return = $cui->dialog(
-message => "Are you sure?",
-title => "Really quit?",
-buttons => ['yes', 'no']
);
exit(0) if $return;
}

sub entryUpdate {
my $mainentry = shift;
if($mainEntry->get() =~ m/.*\n$/)
{
print STDERR $mainEntry->get();
}
}

$cui->set_binding( \&eDialog , "\cQ");

my $mainWin = $cui->add(
'viewWin', 'Window',
-border => 1,
-height => ($rows - 3),
-bfg => 'green'
);

my $mainView = $mainWin->add(
"viewWid", "TextViewer",
-wrapping => 1
);


my $entryWin = $cui->add(
'entryWin', 'Window',
-border => 1,
-y => ($rows - 3),
-height => 1,
-bfg => 1
);

my $mainEntry = $entryWin->add(
"entryWid", "TextEntry",
-onchange => \&entryUpdate()
);

$mainEntry->focus();
$cui->mainloop();

我设法让 UI 设置成我想要的样子,但实际上让它工作起来是有问题的。

1)。当文本输入到 $mainEntry 小部件时,我希望能够检测何时按下输入/返回,并执行一个子例程来处理输入到小部件中的文本,然后将其清除。 (我尝试使用 entryUpdate 子例程来完成此操作,但这根本不起作用,无论我如何尝试。)

2)。我希望能够定期(例如,每 1 秒或 500 毫秒)执行另一个子例程,并将它返回的字符串添加到 $mainView 小部件中。

到目前为止,让其中一个或两个起作用已被证明是一个巨大的问题,我只是对 curses 的工作原理知之甚少,而且我无法在任何地方找到我需要的信息。任何帮助将非常感激。

最佳答案

1) 您可以使用 set_binding 简单地将返回键绑定(bind)到子路由:

use Curses qw(KEY_ENTER);
$mainEntry->set_binding(sub {
$mainView->text($mainView->text . $mainEntry->get . "\n");
$mainView->draw;
$mainEntry->text("");
}, KEY_ENTER);

2)似乎有定时器方法(通过grepping Curses-UI源代码找到它们),但它们没有记录,可能是 issue .以下是它的使用方法:
$cui->set_timer('timer_name', sub {
$mainView->text($mainView->text . scalar(localtime)."\n");
$mainView->draw;
}, 1);

关于Perl/Curses 事件处理和 I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18752082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com