我试图围绕Curses / NCurses(仍然不理解差异)和perl,更确切地说是Curses::UI
模块,更确切地说是Curses :: UI :: Widget包 - 请参阅{ {3}}。
为了理解它,我希望看到一些超级简单的“Hello World”Curses::UI::Widget
从那里开始。
Curses::UI::Widget
文档中有一个简单的例子,但这不起作用,因为它调用$this->generic_focus
并且它未定义,我不知道它应该实际做什么。
是否有一些编写Curses::UI
小部件的实际教程,或者至少有一些工作示例?
编辑 为了使自己清楚:文档中的基本文本编辑器是我的工作,但现在我想编写自己的小部件而我不是确定要实现哪些功能以及如何实现。
主要是,我不确定方法focus
应该做什么以及我是否必须实施方法generic_focus
。
编辑2:
例如,在上面的链接文档中,函数generic_focus
被编写为好像它是在Curses::UI::Widget
中实现的,但它实际上并没有在任何地方实现。到底发生了什么?
答案 0 :(得分:5)
#!/usr/bin/perl -w
use strict;
use Curses::UI;
my $cui = new Curses::UI( -color_support => 1 );
my @menu = (
{ -label => 'File',
-submenu => [
{ -label => 'Exit ^Q', -value => \&exit_dialog }
]
},
);
sub exit_dialog()
{
my $return = $cui->dialog(
-message => "Do you really want to quit?",
-title => "Are you sure???",
-buttons => ['yes', 'no'],
);
exit(0) if $return;
}
my $menu = $cui->add(
'menu','Menubar',
-menu => \@menu,
-fg => "blue",
);
my $win1 = $cui->add(
'win1', 'Window',
-border => 1,
-y => 1,
-bfg => 'red',
);
my $texteditor = $win1->add("text", "TextEditor",
-text => "Here is some text\n"
. "And some more");
$cui->set_binding(sub {$menu->focus()}, "\cX");
$cui->set_binding( \&exit_dialog , "\cQ");
$texteditor->focus();
$cui->mainloop();
curses和ncurses之间的区别在于ncurses是curses的开源克隆。见https://stackoverflow.com/a/1517768/465183
答案 1 :(得分:2)
文档页面中的简单示例适用于我:
use Curses::UI;
my $cui = Curses::UI->new( -clear_on_exit => 1);
$cui->dialog("Hello, world!");