.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .if !\nF .nr F 0 .if \nF>0 \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} .\} .\" ======================================================================== .\" .IX Title "UI::Dialog::Backend::Whiptail 3pm" .TH UI::Dialog::Backend::Whiptail 3pm "2018-10-27" "perl v5.26.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" .Vb 1 \& UI::Dialog::Backend::Whiptail \- Backend for the Whiptail dialog variant .Ve .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 3 \& use UI::Dialog::Backend::Whiptail; \& my $d = new UI::Dialog::Backend::Whiptail ( backtitle => \*(AqDemo\*(Aq, \& title => \*(AqDefault\*(Aq ); \& \& $d\->msgbox( title => \*(AqWelcome!\*(Aq, text => \*(AqWelcome one and all!\*(Aq ); .Ve .SH "ABSTRACT" .IX Header "ABSTRACT" UI::Dialog::Backend::Whiptail is the UI::Dialog backend for the Whiptail dialog variant. While this module is used through UI::Dialog or any other loader module only the compatible methods are ever accessible. However, when using this module directly in your application (as in the \s-1SYNOPSIS\s0 example) you are given access to all the options and features of the real \fIwhiptail\fR\|(1) application. .SH "DESCRIPTION" .IX Header "DESCRIPTION" This dialog variant is the staple of the Debian console apt/dpkg interface. There isn't very much interesting about this particular backend. This is very much a basic dialog variant in comparison to things like Xdialog and cDialog. .SH "EXPORT" .IX Header "EXPORT" .Vb 1 \& None .Ve .SH "INHERITS" .IX Header "INHERITS" .Vb 1 \& UI::Dialog::Backend .Ve .SH "CONSTRUCTOR" .IX Header "CONSTRUCTOR" .ie n .SS "new( @options )" .el .SS "new( \f(CW@options\fP )" .IX Subsection "new( @options )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 2 \& my $d = new( title => \*(AqDefault Title\*(Aq, backtitle => \*(AqBacktitle\*(Aq, \& width => 65, height => 20, listheight => 5 ); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 This is the Class Constructor method. It accepts a list of key => value pairs and uses them as the defaults when interacting with the various widgets. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .Vb 1 \& A blessed object reference of the UI::Dialog::Backend::Whiptail class. .Ve .RE .RS 4 .RE .IP "\s-1OPTIONS\s0" 4 .IX Item "OPTIONS" The (...)'s after each option indicate the default for the option. An * denotes support by all the widget methods on a per-use policy defaulting to the values decided during object creation. .RS 4 .IP "\fBdebug = 0,1,2\fR (0)" 6 .IX Item "debug = 0,1,2 (0)" .PD 0 .IP "\fBliteral = 0,1\fR (0)" 6 .IX Item "literal = 0,1 (0)" .ie n .IP "\fBbacktitle = ""backtitle""\fR ('') *" 6 .el .IP "\fBbacktitle = ``backtitle''\fR ('') *" 6 .IX Item "backtitle = backtitle ('') *" .ie n .IP "\fBtitle = ""title""\fR ('') *" 6 .el .IP "\fBtitle = ``title''\fR ('') *" 6 .IX Item "title = title ('') *" .IP "\fBheight = \ed+\fR (0) *" 6 .IX Item "height = d+ (0) *" .IP "\fBlistheight = \ed+\fR (5) *" 6 .IX Item "listheight = d+ (5) *" .IP "\fBwidth = \ed+\fR (0) *" 6 .IX Item "width = d+ (0) *" .IP "\fBbeepbefore = 0,1\fR (0) *" 6 .IX Item "beepbefore = 0,1 (0) *" .IP "\fBbeepafter = 0,1\fR (0) *" 6 .IX Item "beepafter = 0,1 (0) *" .RE .RS 4 .RE .PD .SH "WIDGET METHODS" .IX Header "WIDGET METHODS" .SS "yesno( )" .IX Subsection "yesno( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 5 \& if ($d\->yesno( text => \*(AqA binary type question?\*(Aq) ) { \& # user pressed yes \& } else { \& # user pressed no or cancel \& } .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 Present the end user with a message box that has two buttons, yes and no. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .Vb 1 \& TRUE (1) for a response of YES or FALSE (0) for anything else. .Ve .RE .RS 4 .RE .SS "msgbox( )" .IX Subsection "msgbox( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 1 \& $d\->msgbox( text => \*(AqA simple message\*(Aq ); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 Pesent the end user with a message box that has an \s-1OK\s0 button. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .RS 6 \&\s-1TRUE\s0 (1) for a response of \s-1OK\s0 or \s-1FALSE\s0 (0) for anything else. .RE .RE .RS 4 .RE .SS "infobox( )" .IX Subsection "infobox( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 1 \& $d\->infobox( text => \*(AqA simple 6 second message.\*(Aq, timeout => 6000 ); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 Pesent the end user with a message box for a limited duration of time. The timeout is specified in thousandths of a second, ie: 1000 = 1 second. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .RS 6 \&\s-1TRUE\s0 (1) for a response of \s-1OK\s0 or \s-1FALSE\s0 (0) for anything else. .RE .RE .RS 4 .RE .SS "password( )" .IX Subsection "password( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 1 \& my $string = $d\->password( text => \*(AqEnter some (hidden) text.\*(Aq ); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 Present the end user with a text input field that doesn't reveal the input (except to the script) and a message. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .RS 6 a \s-1SCALAR\s0 if the response is \s-1OK\s0 and \s-1FALSE\s0 (0) for anything else. .RE .RE .RS 4 .RE .SS "inputbox( )" .IX Subsection "inputbox( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 2 \& my $string = $d\->inputbox( text => \*(AqEnter some text.\*(Aq, \& entry => \*(Aqthis is the input field\*(Aq ); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 Present the end user with a text input field and a message. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .RS 6 a \s-1SCALAR\s0 if the response is \s-1OK\s0 and \s-1FALSE\s0 (0) for anything else. .RE .RE .RS 4 .RE .SS "textbox( )" .IX Subsection "textbox( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 1 \& $d\->textbox( path => \*(Aq/path/to/a/text/file\*(Aq ); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 Present the end user with a simple scrolling box containing the contents of the given text file. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .RS 6 \&\s-1TRUE\s0 (1) if the response is \s-1OK\s0 and \s-1FALSE\s0 (0) for anything else. .RE .RE .RS 4 .RE .SS "menu( )" .IX Subsection "menu( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 5 \& my $selection1 = $d\->menu( text => \*(AqSelect one:\*(Aq, \& list => [ \*(Aqtag1\*(Aq, \*(Aqitem1\*(Aq, \& \*(Aqtag2\*(Aq, \*(Aqitem2\*(Aq, \& \*(Aqtag3\*(Aq, \*(Aqitem3\*(Aq ] \& ); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 Present the user with a selectable list. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .RS 6 a \s-1SCALAR\s0 of the chosen tag if the response is \s-1OK\s0 and \s-1FALSE\s0 (0) for anything else. .RE .RE .RS 4 .RE .SS "checklist( )" .IX Subsection "checklist( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 5 \& my @selection = $d\->checklist( text => \*(AqSelect one:\*(Aq, \& list => [ \*(Aqtag1\*(Aq, [ \*(Aqitem1\*(Aq, 0 ], \& \*(Aqtag2\*(Aq, [ \*(Aqitem2\*(Aq, 1 ], \& \*(Aqtag3\*(Aq, [ \*(Aqitem3\*(Aq, 1 ] ] \& ); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 Present the user with a selectable checklist. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .RS 6 an \s-1ARRAY\s0 of the chosen tags if the response is \s-1OK\s0 and \s-1FALSE\s0 (0) for anything else. .RE .RE .RS 4 .RE .SS "radiolist( )" .IX Subsection "radiolist( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 5 \& my $selection = $d\->radiolist( text => \*(AqSelect one:\*(Aq, \& list => [ \*(Aqtag1\*(Aq, [ \*(Aqitem1\*(Aq, 0 ], \& \*(Aqtag2\*(Aq, [ \*(Aqitem2\*(Aq, 1 ], \& \*(Aqtag3\*(Aq, [ \*(Aqitem3\*(Aq, 0 ] ] \& ); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 Present the user with a selectable radiolist. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .RS 6 a \s-1SCALAR\s0 of the chosen tag if the response is \s-1OK\s0 and \s-1FALSE\s0 (0) for anything else. .RE .RE .RS 4 .RE .SS "fselect( )" .IX Subsection "fselect( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 1 \& my $text = $d\->fselect( path => \*(Aq/path/to/a/file/or/directory\*(Aq ); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 Present the user with a file selection widget preset with the given path. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .RS 6 a \s-1SCALAR\s0 if the response is \s-1OK\s0 and \s-1FALSE\s0 (0) for anything else. .RE .RE .RS 4 .RE .SS "dselect( )" .IX Subsection "dselect( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 1 \& my $text = $d\->dselect( path => \*(Aq/path/to/a/directory\*(Aq ); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 Present the user with a file selection widget preset with the given path. Unlike \fIfselect()\fR this widget will only return a directory selection. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .RS 6 a \s-1SCALAR\s0 if the response is \s-1OK\s0 and \s-1FALSE\s0 (0) for anything else. .RE .RE .RS 4 .RE .SS "gauge_start( )" .IX Subsection "gauge_start( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 1 \& $d\->gauge_start( text => \*(Aqgauge...\*(Aq, percentage => 1 ); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 Display a meter bar to the user. This get's the widget realized but requires the use of the other gauge_*() methods for functionality. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .RS 6 \&\s-1TRUE\s0 (1) if the widget loaded fine and \s-1FALSE\s0 (0) for anything else. .RE .RE .RS 4 .RE .SS "gauge_inc( )" .IX Subsection "gauge_inc( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 1 \& $d\->gauge_inc( 1 ); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 Increment the meter by the given amount. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .RS 6 \&\s-1TRUE\s0 (1) if the widget incremented fine and \s-1FALSE\s0 (0) for anything else. .RE .RE .RS 4 .RE .SS "gauge_dec( )" .IX Subsection "gauge_dec( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 1 \& $d\->gauge_dec( 1 ); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 Decrement the meter by the given amount. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .RS 6 \&\s-1TRUE\s0 (1) if the widget incremented fine and \s-1FALSE\s0 (0) for anything else. .RE .RE .RS 4 .RE .SS "gauge_set( )" .IX Subsection "gauge_set( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 1 \& $d\->gauge_set( 99 ); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 Set the meter bar to the given amount. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .RS 6 \&\s-1TRUE\s0 (1) if the widget set fine and \s-1FALSE\s0 (0) for anything else. .RE .RE .RS 4 .RE .SS "gauge_text( )" .IX Subsection "gauge_text( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 1 \& $d\->gauge_text( \*(Aqstring\*(Aq ); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 Set the meter bar message to the given string. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .RS 6 \&\s-1TRUE\s0 (1) if the widget set fine and \s-1FALSE\s0 (0) for anything else. .RE .RE .RS 4 .RE .SS "gauge_stop( )" .IX Subsection "gauge_stop( )" .IP "\s-1EXAMPLE\s0" 4 .IX Item "EXAMPLE" .RS 4 .Vb 1 \& $d\->gauge_stop(); .Ve .RE .RS 4 .RE .IP "\s-1DESCRIPTION\s0" 4 .IX Item "DESCRIPTION" .RS 4 .RS 6 End the meter bar widget process. .RE .RE .RS 4 .RE .IP "\s-1RETURNS\s0" 4 .IX Item "RETURNS" .RS 4 .RS 6 \&\s-1TRUE\s0 (1) if the widget closed fine and \s-1FALSE\s0 (0) for anything else. .RE .RE .RS 4 .RE .SH "SEE ALSO" .IX Header "SEE ALSO" .IP "\s-1PERLDOC\s0" 2 .IX Item "PERLDOC" .Vb 3 \& UI::Dialog \& UI::Dialog::Console \& UI::Dialog::Backend .Ve .IP "\s-1MAN FILES\s0" 2 .IX Item "MAN FILES" .Vb 1 \& whiptail(1) .Ve .SH "BUGS" .IX Header "BUGS" .Vb 2 \& Please email the author with any bug reports. Include the name of the \& module in the subject line. .Ve .SH "AUTHOR" .IX Header "AUTHOR" .Vb 1 \& Kevin C. Krinke, Ekevin@krinke.caE .Ve .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" .Vb 1 \& Copyright (C) 2004\-2016 Kevin C. Krinke \& \& This library is free software; you can redistribute it and/or \& modify it under the terms of the GNU Lesser General Public \& License as published by the Free Software Foundation; either \& version 2.1 of the License, or (at your option) any later version. \& \& This library is distributed in the hope that it will be useful, \& but WITHOUT ANY WARRANTY; without even the implied warranty of \& MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU \& Lesser General Public License for more details. \& \& You should have received a copy of the GNU Lesser General Public \& License along with this library; if not, write to the Free Software \& Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111\-1307 USA .Ve