[libterm-shell-perl] 03/08: Imported Upstream version 0.07
Lucas Kanashiro
kanashiro.duarte at gmail.com
Tue Jan 12 02:52:20 UTC 2016
This is an automated email from the git hooks/post-receive script.
kanashiro-guest pushed a commit to branch master
in repository libterm-shell-perl.
commit 0ac6d27a41784ed2a791fee25e1fbcd6a17b3b37
Author: Lucas Kanashiro <kanashiro.duarte at gmail.com>
Date: Tue Jan 12 00:08:50 2016 -0200
Imported Upstream version 0.07
---
Build.PL | 110 +++--
Changes | 7 +
MANIFEST | 24 +-
MANIFEST.SKIP | 1 +
META.json | 66 ---
META.yml | 36 +-
Makefile.PL | 21 -
README | 66 +--
_build/auto_features | 2 +
_build/build_params | 167 +++++++
_build/cleanup | 10 +
_build/config_data | 2 +
_build/features | 2 +
_build/magicnum | 1 +
_build/notes | 2 +
_build/prereqs | 18 +
_build/runtime_params | 2 +
dist.ini | 46 ++
lib/Term/Shell.pm | 1158 +++++++++++++++++++++++++++++++++++++++++++-
lib/Term/Shell.pod | 1004 --------------------------------------
scripts/tag-release.pl | 26 +
t/00-compile.t | 57 +++
t/03catchsmry.t | 11 +-
t/author-pod-syntax.t | 15 +
t/release-cpan-changes.t | 19 +
t/release-kwalitee.t | 17 +
t/release-trailing-space.t | 38 ++
t/style-trailing-space.t | 2 +-
weaver.ini | 39 ++
29 files changed, 1750 insertions(+), 1219 deletions(-)
diff --git a/Build.PL b/Build.PL
index 8bbfbf9..26dc587 100644
--- a/Build.PL
+++ b/Build.PL
@@ -1,50 +1,70 @@
+
+# This file was automatically generated by Dist::Zilla::Plugin::ModuleBuild v5.040.
use strict;
use warnings;
-use lib "./inc";
-
-use Test::Run::Builder;
-
-my $builder = Test::Run::Builder->new(
- module_name => 'Term::Shell',
- license => 'perl',
- dist_author => q{Shlomi Fish <shlomif at cpan.org>},
- dist_version_from => 'lib/Term/Shell.pm',
- requires =>
- {
- 'Data::Dumper' => 0,
- 'Term::ReadLine' => 0,
- 'perl' => '5.008',
- 'strict' => 0,
- 'warnings' => 0,
- },
- build_requires =>
- {
- 'Test' => 0,
- 'Test::More' => 0,
- 'vars' => 0,
- },
- configure_requires =>
- {
- 'Module::Build' => 0,
- },
- add_to_cleanup => [ 'Term-Shell-*' ],
- create_makefile_pl => 'traditional',
- meta_merge =>
- {
- resources =>
- {
- repository => "https://github.com/shlomif/Term-Shell",
- },
- keywords =>
- [
- 'console',
- 'readline',
- 'shell',
- 'term',
- 'terminal',
- ],
- },
+use Module::Build 0.28;
+use lib qw{inc}; use Test::Run::Builder;
+
+my %module_build_args = (
+ "build_requires" => {
+ "Module::Build" => "0.28"
+ },
+ "configure_requires" => {
+ "Module::Build" => "0.28"
+ },
+ "dist_abstract" => "A simple command-line shell framework.",
+ "dist_author" => [
+ "Shlomi Fish <shlomif\@cpan.org>"
+ ],
+ "dist_name" => "Term-Shell",
+ "dist_version" => "0.07",
+ "license" => "mit",
+ "module_name" => "Term::Shell",
+ "recursive_test_files" => 1,
+ "requires" => {
+ "Data::Dumper" => 0,
+ "File::Temp" => 0,
+ "Getopt::Long" => "2.36",
+ "IO::Select" => 0,
+ "Term::ReadKey" => 0,
+ "Term::ReadLine" => 0,
+ "Text::Autoformat" => 0,
+ "perl" => "5.008",
+ "strict" => 0,
+ "vars" => 0,
+ "warnings" => 0
+ },
+ "test_requires" => {
+ "File::Spec" => 0,
+ "File::Temp" => 0,
+ "IO::Handle" => 0,
+ "IPC::Open3" => 0,
+ "Test::More" => 0,
+ "base" => 0,
+ "blib" => "1.01"
+ }
+);
+
+
+my %fallback_build_requires = (
+ "File::Spec" => 0,
+ "File::Temp" => 0,
+ "IO::Handle" => 0,
+ "IPC::Open3" => 0,
+ "Module::Build" => "0.28",
+ "Test::More" => 0,
+ "base" => 0,
+ "blib" => "1.01"
);
-$builder->create_build_script();
+
+unless ( eval { Module::Build->VERSION(0.4004) } ) {
+ delete $module_build_args{test_requires};
+ $module_build_args{build_requires} = \%fallback_build_requires;
+}
+
+my $build = Test::Run::Builder->new(%module_build_args);
+
+
+$build->create_build_script;
diff --git a/Changes b/Changes
index 1c571c4..4900489 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,10 @@
+0.07 2015-12-30
+ - Convert to Dist-Zilla.
+ - Add scripts/tag-release.pl
+ - Skip a failing test file ( t/03catchsmry.t ) on Windows:
+ - https://rt.cpan.org/Ticket/Display.html?id=40771
+ - https://rt.cpan.org/Ticket/Display.html?id=110555
+
0.06 2014-04-10
- Consistent versioning (CPANTS).
diff --git a/MANIFEST b/MANIFEST
index bcbf3cb..88bea68 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1,20 +1,36 @@
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.040.
Build.PL
Changes
LICENSE
MANIFEST
-META.json
-META.yml Module meta-data (added by MakeMaker)
-Makefile.PL
+MANIFEST.SKIP
+META.yml
README
+_build/auto_features
+_build/build_params
+_build/cleanup
+_build/config_data
+_build/features
+_build/magicnum
+_build/notes
+_build/prereqs
+_build/runtime_params
+dist.ini
examples/old-test.pl
examples/psh.pl
inc/Test/Run/Builder.pm
lib/Term/Shell.pm
-lib/Term/Shell.pod
scripts/bump-version-number.pl
+scripts/tag-release.pl
+t/00-compile.t
t/01require.t
t/02default.t
t/03catchsmry.t
+t/author-pod-syntax.t
t/cpan-changes.t
t/pod.t
+t/release-cpan-changes.t
+t/release-kwalitee.t
+t/release-trailing-space.t
t/style-trailing-space.t
+weaver.ini
diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP
new file mode 100644
index 0000000..2e58f07
--- /dev/null
+++ b/MANIFEST.SKIP
@@ -0,0 +1 @@
+~$
diff --git a/META.json b/META.json
deleted file mode 100644
index 506cded..0000000
--- a/META.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "abstract" : "A simple command-line shell framework.",
- "author" : [
- "Shlomi Fish <shlomif at cpan.org>"
- ],
- "dynamic_config" : 1,
- "generated_by" : "Module::Build version 0.4205",
- "keywords" : [
- "console",
- "readline",
- "shell",
- "term",
- "terminal"
- ],
- "license" : [
- "perl_5"
- ],
- "meta-spec" : {
- "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
- "version" : "2"
- },
- "name" : "Term-Shell",
- "prereqs" : {
- "build" : {
- "requires" : {
- "Test" : "0",
- "Test::More" : "0",
- "vars" : "0"
- }
- },
- "configure" : {
- "requires" : {
- "Module::Build" : "0"
- }
- },
- "runtime" : {
- "requires" : {
- "Data::Dumper" : "0",
- "Term::ReadLine" : "0",
- "perl" : "5.008",
- "strict" : "0",
- "warnings" : "0"
- }
- }
- },
- "provides" : {
- "Term::Shell" : {
- "file" : "lib/Term/Shell.pm",
- "version" : "0.06"
- },
- "Term::Shell::OnScopeLeave" : {
- "file" : "lib/Term/Shell.pm",
- "version" : "0.06"
- }
- },
- "release_status" : "stable",
- "resources" : {
- "license" : [
- "http://dev.perl.org/licenses/"
- ],
- "repository" : {
- "url" : "https://github.com/shlomif/Term-Shell"
- }
- },
- "version" : "0.06"
-}
diff --git a/META.yml b/META.yml
index e328a44..0a4c7ac 100644
--- a/META.yml
+++ b/META.yml
@@ -3,38 +3,42 @@ abstract: 'A simple command-line shell framework.'
author:
- 'Shlomi Fish <shlomif at cpan.org>'
build_requires:
- Test: '0'
+ File::Spec: '0'
+ File::Temp: '0'
+ IO::Handle: '0'
+ IPC::Open3: '0'
+ Module::Build: '0.28'
Test::More: '0'
- vars: '0'
+ base: '0'
+ blib: '1.01'
configure_requires:
- Module::Build: '0'
-dynamic_config: 1
-generated_by: 'Module::Build version 0.4205, CPAN::Meta::Converter version 2.140640'
+ Module::Build: '0.28'
+dynamic_config: 0
+generated_by: 'Dist::Zilla version 5.040, CPAN::Meta::Converter version 2.150005'
keywords:
- console
- readline
- shell
- term
- terminal
-license: perl
+license: mit
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
version: '1.4'
name: Term-Shell
-provides:
- Term::Shell:
- file: lib/Term/Shell.pm
- version: '0.06'
- Term::Shell::OnScopeLeave:
- file: lib/Term/Shell.pm
- version: '0.06'
requires:
Data::Dumper: '0'
+ File::Temp: '0'
+ Getopt::Long: '2.36'
+ IO::Select: '0'
+ Term::ReadKey: '0'
Term::ReadLine: '0'
+ Text::Autoformat: '0'
perl: '5.008'
strict: '0'
+ vars: '0'
warnings: '0'
resources:
- license: http://dev.perl.org/licenses/
- repository: https://github.com/shlomif/Term-Shell
-version: '0.06'
+ bugtracker: http://rt.cpan.org/NoAuth/Bugs.html?Dist=Games-Solitaire-Verify
+ repository: git://git@github.com:shlomif/Term-Shell.git
+version: '0.07'
diff --git a/Makefile.PL b/Makefile.PL
deleted file mode 100644
index d8f7e93..0000000
--- a/Makefile.PL
+++ /dev/null
@@ -1,21 +0,0 @@
-# Note: this file was auto-generated by Module::Build::Compat version 0.4205
-require 5.008;
-use ExtUtils::MakeMaker;
-WriteMakefile
-(
- 'NAME' => 'Term::Shell',
- 'VERSION_FROM' => 'lib/Term/Shell.pm',
- 'PREREQ_PM' => {
- 'Data::Dumper' => 0,
- 'Term::ReadLine' => 0,
- 'Test' => 0,
- 'Test::More' => 0,
- 'strict' => 0,
- 'vars' => 0,
- 'warnings' => 0
- },
- 'INSTALLDIRS' => 'site',
- 'EXE_FILES' => [],
- 'PL_FILES' => {}
-)
-;
diff --git a/README b/README
index c7f31ff..70dd5e1 100644
--- a/README
+++ b/README
@@ -1,68 +1,16 @@
-INTRODUCTION
-Term::Shell -- Write command-line shells in Perl.
-Term::Shell makes it joyfully easy to write command-line interfaces in Perl.
-All the boring details like command-line parsing and terminal handling are
-done for you.
+This archive contains the distribution Term-Shell,
+version 0.07:
-Example:
+ A simple command-line shell framework.
- package MyShell;
- use base qw(Term::Shell);
+This software is Copyright (c) 2014 by Shlomi Fish.
- # This behaves like the system echo command, minus shell expansion
- sub run_echo {
- my $o = shift;
- print "@_\n" if @_; # print the arguments
- }
+This is free software, licensed under:
- package main;
- MyShell->new->cmdloop;
+ The MIT (X11) License
-Here is a sample session from this program:
- shell> help
- Type 'help command' for more detailed help on a command.
- Commands:
- echo - undocumented - no help available
- exit - exits the program
- help - prints this screen, or help on 'command'
- shell> echo
- shell> echo 1 2 3
- 1 2 3
- shell> echo $VAR
- $VAR
- shell> exit
+This README file was generated by Dist::Zilla::Plugin::Readme v5.040.
-------------------------------------------------------------------------------
-INSTALLATION:
-
-This module requires Term::ReadLine to be installed. This module has been a
-core module since at least 5.005_03, so it shouldn't be a problem.
-
-This module requires Text::Autoformat for some features. Text::Autoformat can
-be found on your nearest CPAN mirror, probably the same place you got
-Term::Shell.
-
-To install Term::Shell do this:
-
-perl Makefile.PL
-make
-make test
-make install
-
-(On ActivePerl for MSWin32, use nmake instead of make.)
-
-You have to 'make install' before you can run it successfully.
-
-------------------------------------------------------------------------------
-INFORMATION:
-
-- For more information on Term::Shell see 'perldoc Term::Shell'.
-- For more information on Term::ReadLine see 'perldoc Term::ReadLine'.
-- For more information on Text::Autoformat see 'perldoc Text::Autoformat'.
-
-Please send questions and comments to "Neil Watkiss" <NEILW at cpan.org>
-
-Copyright (c) 2002, Neil Watkiss. All Rights Reserved.
diff --git a/_build/auto_features b/_build/auto_features
new file mode 100644
index 0000000..2df4e46
--- /dev/null
+++ b/_build/auto_features
@@ -0,0 +1,2 @@
+do{ my $x = {};
+$x; }
\ No newline at end of file
diff --git a/_build/build_params b/_build/build_params
new file mode 100644
index 0000000..64b6545
--- /dev/null
+++ b/_build/build_params
@@ -0,0 +1,167 @@
+do{ my $x = [
+ {
+ 'ARGV' => []
+ },
+ {},
+ {
+ 'PL_files' => undef,
+ '_added_to_INC' => [
+ './inc',
+ '/home/shlomif/apps/perl/modules/lib/perl5/site_perl/5.22.0/x86_64-linux-thread-multi',
+ '/home/shlomif/apps/perl/modules/lib/perl5/site_perl/5.22.0',
+ '/home/shlomif/apps/perl/modules/lib/site_perl/5.22.0',
+ '/home/shlomif/apps/perl/modules/lib/perl5/5.22.0/x86_64-linux-thread-multi',
+ '/home/shlomif/apps/perl/modules/lib/perl5/5.22.0',
+ '/home/shlomif/apps/perl/modules/lib/perl5/site_perl/5.20.1/x86_64-linux-thread-multi',
+ '/home/shlomif/apps/perl/modules/lib/perl5/site_perl/5.20.1',
+ '/home/shlomif/apps/perl/modules/lib/site_perl/5.20.1',
+ '/home/shlomif/apps/perl/modules/lib/perl5/5.20.1/x86_64-linux-thread-multi',
+ '/home/shlomif/apps/perl/modules/lib/perl5/5.20.1',
+ '/home/shlomif/apps/perl/modules/lib/perl5/site_perl/5.20.0/x86_64-linux-thread-multi',
+ '/home/shlomif/apps/perl/modules/lib/perl5/site_perl/5.20.0',
+ '/home/shlomif/apps/perl/modules/lib/site_perl/5.20.0',
+ '/home/shlomif/apps/perl/modules/lib/perl5/5.20.0',
+ '/home/shlomif/apps/perl/modules/lib/perl5/site_perl/5.18.2/x86_64-linux-thread-multi',
+ '/home/shlomif/apps/perl/modules/lib/perl5/site_perl/5.18.2',
+ '/home/shlomif/apps/perl/modules/lib/site_perl/5.18.2',
+ '/home/shlomif/apps/perl/modules/lib/perl5/5.18.2',
+ '/home/shlomif/apps/perl/modules/lib/perl5/site_perl/5.18.1',
+ '/home/shlomif/apps/perl/modules/lib/site_perl/5.18.1',
+ '/home/shlomif/apps/perl/modules/lib/perl5/5.18.1'
+ ],
+ 'allow_mb_mismatch' => 0,
+ 'allow_pureperl' => 0,
+ 'auto_configure_requires' => 1,
+ 'autosplit' => undef,
+ 'base_dir' => '/home/shlomif/progs/perl/cpan/Term/Shell/Term-Shell',
+ 'bindoc_dirs' => [
+ 'blib/script'
+ ],
+ 'blib' => 'blib',
+ 'build_bat' => 0,
+ 'build_class' => 'Test::Run::Builder',
+ 'build_elements' => [
+ 'PL',
+ 'support',
+ 'pm',
+ 'xs',
+ 'share_dir',
+ 'pod',
+ 'script'
+ ],
+ 'build_requires' => {
+ 'Test' => 0,
+ 'Test::More' => 0,
+ 'vars' => 0
+ },
+ 'build_script' => 'Build',
+ 'bundle_inc' => [],
+ 'bundle_inc_preload' => [],
+ 'c_source' => undef,
+ 'config' => undef,
+ 'config_dir' => '_build',
+ 'configure_requires' => {
+ 'Module::Build' => 0
+ },
+ 'conflicts' => {},
+ 'cpan_client' => 'cpan',
+ 'create_license' => undef,
+ 'create_makefile_pl' => 'traditional',
+ 'create_packlist' => 1,
+ 'create_readme' => undef,
+ 'debug' => undef,
+ 'debugger' => undef,
+ 'destdir' => undef,
+ 'dist_abstract' => undef,
+ 'dist_author' => [
+ 'Shlomi Fish <shlomif at cpan.org>'
+ ],
+ 'dist_name' => 'Term-Shell',
+ 'dist_suffix' => undef,
+ 'dist_version' => '0.06',
+ 'dist_version_from' => 'lib/Term/Shell.pm',
+ 'dynamic_config' => 1,
+ 'extra_compiler_flags' => [],
+ 'extra_linker_flags' => [],
+ 'extra_manify_args' => undef,
+ 'get_options' => {},
+ 'has_config_data' => undef,
+ 'html_css' => '',
+ 'include_dirs' => [],
+ 'install_base' => undef,
+ 'install_base_relpaths' => {},
+ 'install_path' => {},
+ 'install_sets' => {},
+ 'installdirs' => 'site',
+ 'libdoc_dirs' => [
+ 'blib/lib',
+ 'blib/arch'
+ ],
+ 'license' => 'perl',
+ 'magic_number' => undef,
+ 'mb_version' => '0.4214',
+ 'meta_add' => {},
+ 'meta_merge' => {
+ 'keywords' => [
+ 'console',
+ 'readline',
+ 'shell',
+ 'term',
+ 'terminal'
+ ],
+ 'resources' => {
+ 'repository' => 'https://github.com/shlomif/Term-Shell'
+ }
+ },
+ 'metafile' => 'META.yml',
+ 'metafile2' => 'META.json',
+ 'module_name' => 'Term::Shell',
+ 'mymetafile' => 'MYMETA.yml',
+ 'mymetafile2' => 'MYMETA.json',
+ 'needs_compiler' => '',
+ 'orig_dir' => '/home/shlomif/progs/perl/cpan/Term/Shell/Term-Shell',
+ 'original_prefix' => {},
+ 'perl' => '/usr/bin/perl5.22.0',
+ 'pm_files' => undef,
+ 'pod_files' => undef,
+ 'pollute' => undef,
+ 'prefix' => undef,
+ 'prefix_relpaths' => {},
+ 'prereq_action_types' => [
+ 'requires',
+ 'build_requires',
+ 'test_requires',
+ 'conflicts',
+ 'recommends'
+ ],
+ 'program_name' => undef,
+ 'pureperl_only' => 0,
+ 'quiet' => undef,
+ 'recommends' => {},
+ 'recurse_into' => [],
+ 'recursive_test_files' => undef,
+ 'release_status' => 'stable',
+ 'requires' => {
+ 'Data::Dumper' => 0,
+ 'Term::ReadLine' => 0,
+ 'perl' => '5.008',
+ 'strict' => 0,
+ 'warnings' => 0
+ },
+ 'script_files' => undef,
+ 'scripts' => undef,
+ 'share_dir' => undef,
+ 'sign' => undef,
+ 'tap_harness_args' => {},
+ 'test_file_exts' => [
+ '.t'
+ ],
+ 'test_files' => undef,
+ 'test_requires' => {},
+ 'use_rcfile' => 1,
+ 'use_tap_harness' => 0,
+ 'verbose' => undef,
+ 'xs_files' => undef
+ }
+ ];
+$x; }
\ No newline at end of file
diff --git a/_build/cleanup b/_build/cleanup
new file mode 100644
index 0000000..68c2ecd
--- /dev/null
+++ b/_build/cleanup
@@ -0,0 +1,10 @@
+do{ my $x = {
+ 'Term-Shell-0.06' => 1,
+ 'Term-Shell-0.02' => 1,
+ 'Term-Shell-0.05' => 1,
+ 'Term-Shell-*' => 1,
+ 'Term-Shell-0.04' => 1,
+ 'Term-Shell-0.03' => 1,
+ 'blib' => 1
+ };
+$x; }
\ No newline at end of file
diff --git a/_build/config_data b/_build/config_data
new file mode 100644
index 0000000..2df4e46
--- /dev/null
+++ b/_build/config_data
@@ -0,0 +1,2 @@
+do{ my $x = {};
+$x; }
\ No newline at end of file
diff --git a/_build/features b/_build/features
new file mode 100644
index 0000000..2df4e46
--- /dev/null
+++ b/_build/features
@@ -0,0 +1,2 @@
+do{ my $x = {};
+$x; }
\ No newline at end of file
diff --git a/_build/magicnum b/_build/magicnum
new file mode 100644
index 0000000..c0cb706
--- /dev/null
+++ b/_build/magicnum
@@ -0,0 +1 @@
+210417
\ No newline at end of file
diff --git a/_build/notes b/_build/notes
new file mode 100644
index 0000000..2df4e46
--- /dev/null
+++ b/_build/notes
@@ -0,0 +1,2 @@
+do{ my $x = {};
+$x; }
\ No newline at end of file
diff --git a/_build/prereqs b/_build/prereqs
new file mode 100644
index 0000000..a2a9ac2
--- /dev/null
+++ b/_build/prereqs
@@ -0,0 +1,18 @@
+do{ my $x = {
+ 'build_requires' => {
+ 'Test' => 0,
+ 'Test::More' => 0,
+ 'vars' => 0
+ },
+ 'conflicts' => {},
+ 'recommends' => {},
+ 'requires' => {
+ 'Data::Dumper' => 0,
+ 'Term::ReadLine' => 0,
+ 'perl' => '5.008',
+ 'strict' => 0,
+ 'warnings' => 0
+ },
+ 'test_requires' => {}
+ };
+$x; }
\ No newline at end of file
diff --git a/_build/runtime_params b/_build/runtime_params
new file mode 100644
index 0000000..2df4e46
--- /dev/null
+++ b/_build/runtime_params
@@ -0,0 +1,2 @@
+do{ my $x = {};
+$x; }
\ No newline at end of file
diff --git a/dist.ini b/dist.ini
new file mode 100644
index 0000000..6c4e288
--- /dev/null
+++ b/dist.ini
@@ -0,0 +1,46 @@
+name = Term-Shell
+author = Shlomi Fish <shlomif at cpan.org>
+license = MIT
+copyright_holder = Shlomi Fish
+copyright_year = 2014
+
+[@Filter]
+-bundle = @Basic
+-remove = MakeMaker
+-remove = License
+[AutoPrereqs]
+skip = ^Term::InKey$
+skip = ^Term::Screen$
+skip = ^Term::Size$
+skip = ^Win32::Console$
+[ExecDir]
+dir = bin
+[Keywords]
+keyword = console
+keyword = readline
+keyword = shell
+keyword = term
+keyword = terminal
+[ModuleBuild]
+mb_class = Test::Run::Builder
+testing_command = runtest
+[PodSyntaxTests]
+; [PodCoverageTests]
+[Prereqs / Runtime]
+-phase = runtime
+Getopt::Long = 2.36
+[MetaResources]
+bugtracker.web = http://rt.cpan.org/NoAuth/Bugs.html?Dist=Games-Solitaire-Verify
+bugtracker.mailto = bug-term-shell at rt.cpan.org
+repository.url = git://git@github.com:shlomif/Term-Shell.git
+repository.web = https://github.com/shlomif/Term-Shell
+repository.type = git
+[PodWeaver]
+[Test::Compile]
+fake_home = 1
+skip = bump-ver
+[Test::CPAN::Changes]
+[Test::Kwalitee]
+[Test::TrailingSpace]
+filename_regex = (?:(?:\.(?:t|pm|pl|PL|yml|json|arc|vim))|README|Changes|LICENSE)\z
+[VersionFromModule]
diff --git a/lib/Term/Shell.pm b/lib/Term/Shell.pm
index 5952f6f..b2beea7 100644
--- a/lib/Term/Shell.pm
+++ b/lib/Term/Shell.pm
@@ -10,7 +10,7 @@ use Term::ReadLine;
use vars qw($VERSION);
-$VERSION = '0.06';
+$VERSION = '0.07';
#=============================================================================
# Term::Shell API methods
@@ -915,7 +915,7 @@ package Term::Shell::OnScopeLeave;
use vars qw($VERSION);
-$VERSION = '0.06';
+$VERSION = '0.07';
sub new {
return bless [@_[1 .. $#_]], ref($_[0]) || $_[0];
@@ -931,3 +931,1157 @@ sub DESTROY {
}
1;
+
+__END__
+
+=pod
+
+=encoding utf-8
+
+=head1 NAME
+
+Term::Shell - A simple command-line shell framework.
+
+=head1 VERSION
+
+version 0.07
+
+=head1 SYNOPSIS
+
+ package MyShell;
+ use base qw(Term::Shell);
+
+ sub run_command1 { print "command 1!\n"; }
+ sub smry_command1 { "what does command1 do?" }
+ sub help_command1 {
+ <<'END';
+ Help on 'command1', whatever that may be...
+ END
+ }
+
+ sub run_command2 { print "command 2!\n"; }
+
+ package main;
+ my $shell = MyShell->new;
+ $shell->cmdloop;
+
+=head1 DESCRIPTION
+
+Term::Shell lets you write simple command-line shells. All the boring details
+like command-line parsing, terminal handling, and tab completion are handled
+for you.
+
+The base class comes with two commands pre-defined: exit and help.
+
+To write a shell with an C<exec> command, do something like this:
+
+ package MyShell;
+ use base qw(Term::Shell); # or manually edit @MyShell::ISA.
+
+ sub run_exec {
+ my ($o, $cmd, @args) = @_;
+ if ($cmd ne $0) {
+ print "I'm sorry you're leaving us...\n";
+ }
+ exec $cmd, @args;
+ exit 1;
+ }
+
+When Term::Shell needs to handle the C<exec> command, it will invoke this
+method. That's all there is to it! You write handlers, and Term::Shell handles
+the gory details.
+
+=head1 Using Term::Shell Shells
+
+How do you bring your shell to life? Assuming the package C<MyShell> contains
+your actions, just do this:
+
+ use MyShell;
+ my $shell = MyShell->new;
+
+ # Setup code here (if you wish)
+
+ # Invoke the shell
+ $shell->cmdloop;
+
+ # Cleanup code here (if you wish)
+
+Most people put the setup code in the shell itself, so you can usually get
+away with this:
+
+ use MyShell;
+ MyShell->new->cmdloop;
+
+It's that simple! All the actions and command handlers go in C<MyShell.pm>,
+and your main program is simple. In fact, it's so simple that some people like
+to write both the actions and the invocation in the same file:
+
+ package main;
+ MyShell->new->cmdloop;
+
+ package MyShell;
+ use base qw(Term::Shell);
+
+ # Actions here
+
+Adding commands to your shell is just as easy, if not easier.
+
+=head1 Adding Commands to Your Shell
+
+For every command C<foo>, Term::Shell needs a method called C<run_foo()>,
+where 'foo' is what the user will type in. The method will be called with the
+Term::Shell object as the first parameter, followed by any arguments the user
+typed after the command.
+
+Several prefixes other than C<run_> are supported; each prefix tells
+Term::Shell to call that handler under different circumstances. The following
+list enumerates all the "special" prefixes. Term::Shell will ignore any method
+that doesn't start with a prefix listed here.
+
+=over 4
+
+=item 1
+
+run_foo()
+
+Adds the command C<foo> to the list of supported commands. The method's return
+value is saved by Term::Shell, but is not used.
+
+The method is called with the Term::Shell object as its first argument,
+followed by any arguments the user typed in.
+
+Special case: if you provide a method C<run_()>, Term::Shell will call it
+whenever the user enters a blank line. A blank line is anything which matches
+the regular expression C</^\s*$/>.
+
+=item 2
+
+help_foo()
+
+Adds the command C<foo> to the list of help topics. This means the user may
+enter 'help foo' and get a help screen. It should return a single string to be
+displayed to the user.
+
+The method is called with the Term::Shell object as its first argument,
+followed by any arguments the user typed in after 'help foo'. You can
+implement hierarchical help documents by using the arguments.
+
+If you do not provide a C<help_foo()> method, typing 'help foo' produces an
+error message.
+
+=item 3
+
+smry_foo()
+
+Should return a one-line summary of C<foo>, to be displayed in the help screen.
+
+This method is called with the Term::Shell object as its first argument, and
+no other arguments.
+
+If you do not provide a C<smry_foo()> method, then the string 'undocumented'
+is used instead.
+
+=item 4
+
+comp_foo()
+
+Provides custom tab-completion for C<foo>. That means if the user types 'foo '
+and then hits <TAB>, this method will be called. It should return an array
+reference containing a list of possible completions.
+
+This method is called with the Term::Shell object as its first argument,
+followed by the three arguments:
+
+=over 4
+
+=item 1
+
+$word
+
+The word the user is trying to complete.
+
+=item 2
+
+$line
+
+The line as typed by the user so far.
+
+=item 3
+
+$start
+
+The offset into $line where $word starts.
+
+=back
+
+If you do not provide C<comp_foo()>, Term::Shell will always return no
+completions for C<foo>.
+
+Special case: if you provide C<comp_()>, Term::Shell will call it when the
+user is trying to complete the name of a command. Term::Shell provides a
+default C<comp_()> method, which completes the actions that you have written
+handlers for. If you want to provide tab-completion for commands that do not
+have handlers, override C<comp_()>.
+
+=item 5
+
+alias_foo()
+
+Returns a list of aliases for C<foo>. When one of the aliases is used instead
+of C<foo>, the corresponding handler for C<foo> is called.
+
+=item 6
+
+catch_run()
+
+catch_help()
+
+catch_comp()
+
+catch_smry()
+
+Called when an undefined action is entered by the user. Normally when the
+user enters an unrecognized command, Term::Shell will print an error message
+and continue.
+
+This method is called with the Term::Shell object, the command typed by the
+user, and then the arguments which would normally be passed to the real
+handler.
+
+The C<catch_> methods may do anything the original function would have done.
+If you want, you can implement all the commands in it, but that means you're
+doing more work than you have to. Be lazy.
+
+=back
+
+=head2 When you want something done right...
+
+You sometimes have to do it yourself. Introducing add_handlers(). Naturally,
+it adds a handler to the list of defined handlers in the shell.
+
+Term::Shell can't always find the commands you want to implement by searching
+the inheritance tree. Having an AUTOLOAD() method, for instance, will break
+this system. In that situation, you may wish to tell Term::Shell about the
+extra commands available using add_handlers():
+
+ package MyShell;
+ use base qw(Term::Shell);
+
+ sub AUTOLOAD {
+ if ($AUTOLOAD =~ /::run_fuzz$/) {
+ # code for 'fuzz' command
+ }
+ elsif ($AUTOLOAD =~ /::run_foozle$/) {
+ # code for 'foozle' command
+ }
+ }
+
+ sub init {
+ my $o = shift;
+ $o->add_handlers("run_fuzz", "run_foozle");
+ }
+
+There are other ways to do this. You could write a C<catch_run> routine and do
+the same thing from there. You'd have to override C<comp_> so that it would
+complete on "foozle" and "fuzz". The advantage to this method is that it adds
+the methods to the list of commands, so they show up in the help menu I<and>
+you get completion for free.
+
+=head1 Removing Commands from Your Shell
+
+You're probably thinking "just don't write them". But remember, you can
+inherit from another shell class, and that parent may define commands you want
+to disable. Term::Shell provides a simple method to make itself forget about
+commands it already knows about:
+
+=over 4
+
+=item 1
+
+remove_commands()
+
+Removes all handlers associated with the given command (or list of commands).
+
+For example, Term::Shell comes with two commands (C<exit> and C<help>)
+implemented with seven handlers:
+
+=over 4
+
+=item 1
+
+smry_exit()
+
+=item 2
+
+help_exit()
+
+=item 3
+
+run_exit()
+
+=item 4
+
+smry_help()
+
+=item 5
+
+help_help()
+
+=item 6
+
+comp_help()
+
+=item 7
+
+run_help()
+
+=back
+
+If you want to create a shell that doesn't implement the C<help> command,
+your code might look something like this example:
+
+ package MyShell;
+ use base qw(Term::Shell);
+
+ sub init {
+ my $o = shift;
+ $o->remove_commands("help");
+ }
+
+ # ... define more handlers here ...
+
+=item 2
+
+remove_handlers()
+
+Removes the given handler (or handlers) from the list of defined commands. You
+have to specify a full handler name, including the 'run_' prefix. You can
+obviously specify any of the other prefixes too.
+
+If you wanted to remove the help for the C<exit> command, but preserve the
+command itself, your code might look something like this:
+
+ package MyShell;
+ use base qw(Term::Shell);
+
+ sub init {
+ my $o = shift;
+ $o->remove_handlers("help_exit");
+ }
+
+ # ... define more handlers here ...
+
+=back
+
+=head2 Cover Your Tracks
+
+If you do remove built in commands, you should be careful not to let
+Term::Shell print references to them. Messages like this are guaranteed to
+confuse people who use your shell:
+
+ shell> help
+ Unknown command 'help'; type 'help' for a list of commands.
+
+Here's the innocuous looking code:
+
+ package MyShell;
+ use base qw(Term::Shell);
+
+ sub init {
+ my $o = shift;
+ $o->remove_commands("help");
+ }
+
+ MyShell->new->cmdloop;
+
+The problem is that Term::Shell has to print an error message, and by default
+it tells the user to use the C<help> command to see what's available. If you
+remove the C<help> command, you still have to clean up after yourself and tell
+Term::Shell to change its error messages:
+
+=over 4
+
+=item 1
+
+msg_unknown_cmd()
+
+Called when the user has entered an unrecognized command, and no action was
+available to satisfy it. It receives the object and the command typed by the
+user as its arguments. It should return an error message; by default, it is
+defined thusly:
+
+ sub msg_unknown_cmd {
+ my ($o, $cmd) = @_;
+ <<END;
+ Unknown command '$cmd'; type 'help' for a list of commands.
+ END
+ }
+
+=item 2
+
+msg_ambiguous_cmd()
+
+Called when the user has entered a command for which more than handler exists.
+(For example, if both "quit" and "query" are commands, then "qu" is an
+ambiguous command, because it could be either.) It receives the object, the
+command, and the possible commands which could complete it. It should return
+an error message; by default it is defined thusly:
+
+ sub msg_ambiguous_cmd {
+ my ($o, $cmd, @c) = @_;
+ local $" = "\n\t";
+ <<END;
+ Ambiguous command '$cmd': possible commands:
+ @c
+ END
+ }
+
+=back
+
+=head1 The Term::Shell API
+
+Shell classes can use any of the methods in this list. Any other methods in
+Term::Shell may change.
+
+=over 4
+
+=item 1
+
+new()
+
+Creates a new Term::Shell object. It currently does not use its arguments. The
+arguments are saved in '$o->{API}{args}', in case you want to use them later.
+
+ my $sh = Term::Shell->new(@arbitrary_args);
+
+=item 2
+
+cmd()
+
+ cmd($txt);
+
+Invokes C<$txt> as if it had been typed in at the prompt.
+
+ $sh->cmd("echo 1 2 3");
+
+=item 3
+
+cmdloop()
+
+mainloop()
+
+Repeatedly prompts the user, reads a line, parses it, and invokes a handler.
+Uses C<cmd()> internally.
+
+ MyShell->new->cmdloop;
+
+mainloop() is a synonym for cmdloop(), provided for backwards compatibility.
+Earlier (unreleased) versions of Term::Shell have only provided mainloop().
+All documentation and examples use cmdloop() instead.
+
+=item 4
+
+init()
+
+fini()
+
+Do any initialization or cleanup you need at shell creation (init()) and
+destruction (fini()) by defining these methods.
+
+No parameters are passed.
+
+=item 5
+
+preloop()
+
+postloop()
+
+Do any initialization or cleanup you need at shell startup (preloop()) and
+shutdown (postloop()) by defining these methods.
+
+No parameters are passed.
+
+=item 6
+
+precmd()
+
+postcmd()
+
+Do any initialization or cleanup before and after calling each handler.
+
+The parameters are:
+
+=over 4
+
+=item 1
+
+$handler
+
+A reference to the name of the handler that is about to be executed.
+
+Passed by reference so you can control which handler will be called.
+
+=item 2
+
+$cmd
+
+A reference to the command as the user typed it.
+
+Passed by reference so you can set the command. (If the handler is a "catch_"
+command, it can be fooled into thinking the user typed some other command, for
+example.)
+
+=item 3
+
+$args
+
+The arguments as typed by the user. This is passed as an array reference so
+that you can manipulate the arguments received by the handler.
+
+=back
+
+ sub precmd {
+ my $o = shift;
+ my ($handler, $cmd, @args) = @_;
+ # ...
+ }
+
+=item 7
+
+stoploop()
+
+Sets a flag in the Term::Shell object that breaks out of cmdloop(). Note that
+cmdloop() resets this flag each time you call it, so code like this will work:
+
+ my $sh = MyShell->new;
+ $sh->cmdloop; # an interactive session
+ $sh->cmdloop; # prompts the user again
+
+Term::Shell's built-in run_exit() command just calls stoploop().
+
+=item 8
+
+idle()
+
+If you set C<check_idle> to a non-zero number (see L<The Term::Shell Object>)
+then this method is called every C<check_idle> seconds. The idle() method
+defined in Term::Shell does nothing -- it exists only to be redefined in
+subclasses.
+
+ package MyShell;
+ use base qw(Term::Shell);
+
+ sub init {
+ my $o = shift;
+ $o->{API}{check_idle} = 0.1; # 10/s
+ }
+
+ sub idle {
+ print "Idle!\n";
+ }
+
+=item 9
+
+prompt_str()
+
+Returns a string to be used as the prompt. prompt_str() is called just before
+calling the readline() method of Term::ReadLine. If you do not override this
+method, the string `shell> ' is used.
+
+ package MyShell;
+ use base qw(Term::Shell);
+
+ sub prompt_str { "search> " }
+
+=item 10
+
+prompt()
+
+Term::Shell provides this method for convenience. It's common for a handler to
+ask the user for more information. This method makes it easy to provide the
+user with a different prompt and custom completions provided by you.
+
+The prompt() method takes the following parameters:
+
+=over 4
+
+=item 1
+
+$prompt
+
+The prompt to display to the user. This can be any string you want.
+
+=item 2
+
+$default
+
+The default value to provide. If the user enters a blank line (all whitespace
+characters) then the this value will be returned.
+
+Note: unlike ExtUtils::MakeMaker's prompt(), Term::Shell's prompt() does not
+modify $prompt to indicate the $default response. You have to do that
+yourself.
+
+=item 3
+
+$completions
+
+An optional list of completion values. When the user hits <TAB>, Term::Shell
+prints the completions which match what they've typed so far. Term::Shell does
+not enforce that the user's response is one of these values.
+
+=item 4
+
+$casei
+
+An optional boolean value which indicates whether the completions should be
+matched case-insensitively or not. A true value indicates that C<FoO> and
+C<foo> should be considered the same.
+
+=back
+
+prompt() returns the unparsed line to give you maximum flexibility. If you
+need the line parsed, use the line_parsed() method on the return value.
+
+=item 11
+
+cmd_prefix()
+
+cmd_suffix()
+
+These methods should return a prefix and suffix for commands, respectively.
+For instance, an IRC client will have a prefix of C</>. Most shells have an
+empty prefix and suffix.
+
+=item 12
+
+page()
+
+ page($txt)
+
+Prints C<$txt> through a pager, prompting the user to press a key for the next
+screen full of text.
+
+=item 13
+
+line()
+
+line_parsed()
+
+Although C<run_foo()> is called with the parsed arguments from the
+command-line, you may wish to see the raw command-line. This is available
+through the line() method. If you want to retrieve the parsed line again, use
+line_parsed().
+
+line_parsed() accepts an optional string parameter: the line to parse. If you
+have your own line to parse, you can pass it to line_parsed() and get back a
+list of arguments. This is useful inside completion methods, since you don't
+get a parsed list there.
+
+=item 14
+
+run()
+
+If you want to run another handler from within a handler, and you have
+pre-parsed arguments, use run() instead of cmd(). cmd() parses its parameter,
+whereas run() takes each element as a separate parameter.
+
+It needs the name of the action to run and any arguments to pass to the
+handler.
+
+Term::Shell uses this method internally to invoke command handlers.
+
+=item 15
+
+help()
+
+If you want to get the raw text of a help message, use help(). It needs the
+name of the help topic and any arguments to pass to the handler.
+
+Term::Shell uses this method internally to invoke help handlers.
+
+=item 16
+
+summary()
+
+If you want to get the summary text of an action, use summary(). It needs the
+name of the action.
+
+Term::Shell uses this method internally to display the help page.
+
+=item 17
+
+possible_actions()
+
+You will probably want this method in comp_foo(). possible_actions() takes a
+word and a list, and returns a list of possible matches. Term::Shell uses this
+method internally to decide which handler to run when the user enters a
+command.
+
+There are several arguments, but you probably won't use them all in the simple
+cases:
+
+=over 4
+
+=item 1
+
+$needle
+
+The (possible incomplete) word to try to match against the list of actions
+(the haystack).
+
+=item 2
+
+$type
+
+The type with which to prefix C<$action>. This is useful when completing a
+real action -- you have to specify whether you want it to look for "run_" or
+"help_" or something else. If you leave it blank, it will use C<$action>
+without prefixing it.
+
+=item 3
+
+$strip
+
+If you pass in a true value here, possible_actions() will remove an initial
+C<$type> from the beginning of each result before returning the results. This
+is useful if you want to know what the possible "run_" commands are, but you
+don't want to have the "run_" in the final result.
+
+If you do not specify this argument, it uses '0' (the default is not to strip
+the results).
+
+=item 4
+
+$haystack
+
+You can pass in a reference to a list of strings here. Each string will be
+compared with C<$needle>.
+
+If you do not specify this argument, it uses the list of handlers. This is how
+Term::Shell matches commands typed in by the user with command handlers
+written by you.
+
+=back
+
+=item 18
+
+print_pairs()
+
+This overloaded beast is used whenever Term::Shell wants to print a set of
+keys and values. It handles wrapping long values, indenting the whole thing,
+inserting the separator between the key and value, and all the rest.
+
+There are lots of parameters, but most of them are optional:
+
+=over 4
+
+=item 1
+
+$keys
+
+A reference to a list of keys to print.
+
+=item 2
+
+$values
+
+A reference to a list of values to print.
+
+=item 3
+
+$sep
+
+The string used to separate the keys and values. If omitted, ': ' is used.
+
+=item 4
+
+$left
+
+The justification to be used to line up the keys. If true, the keys will be
+left-justified. If false or omitted, the keys will be right-justified.
+
+=item 5
+
+$ind
+
+A string used to indent the whole paragraph. Internally, print_pairs() uses
+length(), so you shouldn't use tabs in the indent string. If omitted, the
+empty string is used (no indent).
+
+=item 6
+
+$len
+
+An integer which describes the minimum length of the keys. Normally,
+print_pairs() calculates the longest key and assigns the column width to be
+as wide as the longest key plus the separator. You can force the column width
+to be larger using $len. If omitted, 0 is used.
+
+=item 7
+
+$wrap
+
+A boolean which indicates whether the value should be text-wrapped using
+Text::Autoformat. Text is only ever wrapped if it contains at least one space.
+If omitted, 0 is used.
+
+=item 8
+
+$cols
+
+An integer describing the number of columns available on the current terminal.
+Normally 78 is used, or the environment variable COLUMNS, but you can override
+the number here to simulate a right-indent.
+
+=back
+
+=item 19
+
+term()
+
+Returns the underlying C<Term::ReadLine> object used to interact with the
+user. You can do powerful things with this object; in particular, you will
+cripple Term::Shell's completion scheme if you change the completion callback
+function.
+
+=item 20
+
+process_esc()
+
+This method may be overridden to provide shell-like escaping of backslashes
+inside quoted strings. It accepts two parameters:
+
+=over 4
+
+=item 1
+
+$c
+
+The character which was escaped by a backslash.
+
+=item 2
+
+$quote
+
+The quote character used to delimit this string. Either C<"> or C<'>.
+
+=back
+
+This method should return the string which should replace the backslash and
+the escaped character.
+
+By default, process_esc() uses escaping rules similar to Perl's single-quoted
+string:
+
+=over 4
+
+=item 1
+
+Escaped backslashes return backslashes. The string C<"123\\456"> returns
+C<123\456>.
+
+=item 2
+
+Escaped quote characters return the quote character (to allow quote characters
+in strings). The string C<"abc\"def"> returns C<abc"def>.
+
+=item 3
+
+All other backslashes are returned verbatim. The string C<"123\456"> returns
+C<123\456>.
+
+=back
+
+Term::Shell's quote characters cannot be overridden, unless you override
+line_parsed(): they are C<"> or C<'>. This may change in a future version of
+Term::Shell.
+
+=item 21
+
+add_handlers()
+
+See L<Adding Commands to Your Shell> for information on add_handlers().
+
+=item 22
+
+remove_commands()
+
+remove_handlers()
+
+See L<Removing Commands from Your Shell> for information on remove_handlers().
+
+=back
+
+=head1 The Term::Shell Object
+
+Term::Shell creates a hash based Perl object. The object contains information
+like what handlers it found, the underlying Term::ReadLine object, and any
+arguments passed to the constructor.
+
+This hash is broken into several subhashes. The only two subhashes that a
+Shell should ever use are $o->{API} and $o->{SHELL}. The first one contains
+all the information that Term::Shell has gathered for you. The second one is a
+private area where your Shell can freely store data that it might need later
+on.
+
+This section will describe all the Term::Shell object "API" attributes:
+
+=head2 The args Attribute
+
+This an array reference containing any arguments passed to the Term::Shell
+constructor.
+
+=head2 The case_ignore Attribute
+
+This boolean controls whether commands should be matched without regard to
+case. If this is true, then typing C<FoO> will have the same effect as typing
+C<foo>.
+
+Defaults to true on MSWin32, and false on other platforms.
+
+=head2 The class Attribute
+
+The class of the object. This is probably the package containing the
+definition of your shell, but if someone subclasses I<your> shell, it's their
+class.
+
+=head2 The command Attribute
+
+Whenever Term::Shell invokes an action, it stores information about the action
+in the C<command> attribute. Information about the last "run" action to be
+invoked is stored in $o->{API}{command}{run}. The information itself is stored
+in a subhash containing these fields:
+
+=over 4
+
+=item name
+
+The name of the command, as typed by the user.
+
+=item found
+
+The a boolean value indicating whether a handler could be found.
+
+=item handler
+
+The full name of the handler, if found.
+
+=back
+
+Note that this facility only stores information about the I<last> action to be
+executed. It's good enough for retrieving the information about the last
+handler which ran, but not for much else.
+
+The following example shows a case where C<run_foo()> calls C<run_add()>, and
+prints its return value (in this case, 42).
+
+ sub run_foo {
+ my $o = shift;
+ my $sum = $o->run("add", 21, 21);
+ print "21 + 21 = ", $sum, "\n";
+ }
+
+ sub run_add {
+ my $o = shift;
+ my $sum = 0;
+ $sum += $_ for @_;
+ print "add(): sum = $sum\n";
+ return $sum;
+ }
+
+At the end of run_foo(), $o->{API}{command}{run}{handler} contains the string
+C<"run_add">.
+
+=head2 The match_uniq Attribute
+
+This boolean controls whether the user can type in only enough of the command
+to make it unambiguous. If true, then if the shell has the commands C<foo> and
+C<bar> defined, the user can type C<f> to run C<foo>, and C<b> to run C<bar>.
+
+Defaults to true.
+
+=head2 The readline Attribute
+
+Which Term::ReadLine module is being used. Currently, this is always one of
+C<Term::ReadLine::Stub>, C<Term::ReadLine::Perl>, or C<Term::ReadLine::Gnu>.
+
+=head2 The script Attribute
+
+The name of the script that invoked your shell.
+
+=head2 The version Attribute
+
+The version of Term::Shell you are running under.
+
+=head1 BUGS AND DEFICIENCIES
+
+There are bound to be some bugs lurking about.
+
+If you find bugs, please send them to C<NEILW at cpan.org>.
+
+=head1 SEE ALSO
+
+For more information about the underlying ReadLine module, see
+L<Term::ReadLine>. You may also want to look at L<Term::ReadLine::Gnu> and
+L<Term::ReadLine::Perl>.
+
+For more information about the underlying formatter used by print_pairs(), see
+L<Text::Autoformat>.
+
+The API for Term::Shell was inspired by (gasp!) a Python package called
+C<cmd>. For more information about this package, please look in the Python
+Library Reference, either in your Python distribution or at
+http://www.python.org/doc/current/lib/module-cmd.html
+
+=head1 AUTHOR
+
+Neil Watkiss (NEILW at cpan.org)
+
+=head1 COPYRIGHT
+
+Copyright (c) 2001, Neil Watkiss. All Rights Reserved.
+
+All Rights Reserved. This module is free software. It may be used,
+redistributed and/or modified under the same terms as Perl itself.
+
+See http://www.perl.com/perl/misc/Artistic.html
+
+=head1 AUTHOR
+
+Shlomi Fish <shlomif at cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is Copyright (c) 2014 by Shlomi Fish.
+
+This is free software, licensed under:
+
+ The MIT (X11) License
+
+=head1 BUGS
+
+Please report any bugs or feature requests on the bugtracker website
+http://rt.cpan.org/NoAuth/Bugs.html?Dist=Games-Solitaire-Verify or by email
+to bug-term-shell at rt.cpan.org.
+
+When submitting a bug or request, please include a test-file or a
+patch to an existing test-file that illustrates the bug or desired
+feature.
+
+=for :stopwords cpan testmatrix url annocpan anno bugtracker rt cpants kwalitee diff irc mailto metadata placeholders metacpan
+
+=head1 SUPPORT
+
+=head2 Perldoc
+
+You can find documentation for this module with the perldoc command.
+
+ perldoc Term::Shell
+
+=head2 Websites
+
+The following websites have more information about this module, and may be of help to you. As always,
+in addition to those websites please use your favorite search engine to discover more resources.
+
+=over 4
+
+=item *
+
+MetaCPAN
+
+A modern, open-source CPAN search engine, useful to view POD in HTML format.
+
+L<http://metacpan.org/release/Term-Shell>
+
+=item *
+
+Search CPAN
+
+The default CPAN search engine, useful to view POD in HTML format.
+
+L<http://search.cpan.org/dist/Term-Shell>
+
+=item *
+
+RT: CPAN's Bug Tracker
+
+The RT ( Request Tracker ) website is the default bug/issue tracking system for CPAN.
+
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=Term-Shell>
+
+=item *
+
+AnnoCPAN
+
+The AnnoCPAN is a website that allows community annotations of Perl module documentation.
+
+L<http://annocpan.org/dist/Term-Shell>
+
+=item *
+
+CPAN Ratings
+
+The CPAN Ratings is a website that allows community ratings and reviews of Perl modules.
+
+L<http://cpanratings.perl.org/d/Term-Shell>
+
+=item *
+
+CPAN Forum
+
+The CPAN Forum is a web forum for discussing Perl modules.
+
+L<http://cpanforum.com/dist/Term-Shell>
+
+=item *
+
+CPANTS
+
+The CPANTS is a website that analyzes the Kwalitee ( code metrics ) of a distribution.
+
+L<http://cpants.cpanauthors.org/dist/Term-Shell>
+
+=item *
+
+CPAN Testers
+
+The CPAN Testers is a network of smokers who run automated tests on uploaded CPAN distributions.
+
+L<http://www.cpantesters.org/distro/T/Term-Shell>
+
+=item *
+
+CPAN Testers Matrix
+
+The CPAN Testers Matrix is a website that provides a visual overview of the test results for a distribution on various Perls/platforms.
+
+L<http://matrix.cpantesters.org/?dist=Term-Shell>
+
+=item *
+
+CPAN Testers Dependencies
+
+The CPAN Testers Dependencies is a website that shows a chart of the test results of all dependencies for a distribution.
+
+L<http://deps.cpantesters.org/?module=Term::Shell>
+
+=back
+
+=head2 Bugs / Feature Requests
+
+Please report any bugs or feature requests by email to C<bug-term-shell at rt.cpan.org>, or through
+the web interface at L<https://rt.cpan.org/Public/Bug/Report.html?Queue=Term-Shell>. You will be automatically notified of any
+progress on the request by the system.
+
+=head2 Source Code
+
+The code is open to the world, and available for you to hack on. Please feel free to browse it and play
+with it, or whatever. If you want to contribute patches, please send me a diff or prod me to pull
+from your repository :)
+
+L<https://github.com/shlomif/Term-Shell>
+
+ git clone git://git@github.com:shlomif/Term-Shell.git
+
+=cut
diff --git a/lib/Term/Shell.pod b/lib/Term/Shell.pod
deleted file mode 100644
index 112b049..0000000
--- a/lib/Term/Shell.pod
+++ /dev/null
@@ -1,1004 +0,0 @@
-=head1 NAME
-
-Term::Shell - A simple command-line shell framework.
-
-=head1 SYNOPSIS
-
- package MyShell;
- use base qw(Term::Shell);
-
- sub run_command1 { print "command 1!\n"; }
- sub smry_command1 { "what does command1 do?" }
- sub help_command1 {
- <<'END';
- Help on 'command1', whatever that may be...
- END
- }
-
- sub run_command2 { print "command 2!\n"; }
-
- package main;
- my $shell = MyShell->new;
- $shell->cmdloop;
-
-=head1 DESCRIPTION
-
-Term::Shell lets you write simple command-line shells. All the boring details
-like command-line parsing, terminal handling, and tab completion are handled
-for you.
-
-The base class comes with two commands pre-defined: exit and help.
-
-To write a shell with an C<exec> command, do something like this:
-
- package MyShell;
- use base qw(Term::Shell); # or manually edit @MyShell::ISA.
-
- sub run_exec {
- my ($o, $cmd, @args) = @_;
- if ($cmd ne $0) {
- print "I'm sorry you're leaving us...\n";
- }
- exec $cmd, @args;
- exit 1;
- }
-
-When Term::Shell needs to handle the C<exec> command, it will invoke this
-method. That's all there is to it! You write handlers, and Term::Shell handles
-the gory details.
-
-=head1 Using Term::Shell Shells
-
-How do you bring your shell to life? Assuming the package C<MyShell> contains
-your actions, just do this:
-
- use MyShell;
- my $shell = MyShell->new;
-
- # Setup code here (if you wish)
-
- # Invoke the shell
- $shell->cmdloop;
-
- # Cleanup code here (if you wish)
-
-Most people put the setup code in the shell itself, so you can usually get
-away with this:
-
- use MyShell;
- MyShell->new->cmdloop;
-
-It's that simple! All the actions and command handlers go in C<MyShell.pm>,
-and your main program is simple. In fact, it's so simple that some people like
-to write both the actions and the invocation in the same file:
-
- package main;
- MyShell->new->cmdloop;
-
- package MyShell;
- use base qw(Term::Shell);
-
- # Actions here
-
-Adding commands to your shell is just as easy, if not easier.
-
-=head1 Adding Commands to Your Shell
-
-For every command C<foo>, Term::Shell needs a method called C<run_foo()>,
-where 'foo' is what the user will type in. The method will be called with the
-Term::Shell object as the first parameter, followed by any arguments the user
-typed after the command.
-
-Several prefixes other than C<run_> are supported; each prefix tells
-Term::Shell to call that handler under different circumstances. The following
-list enumerates all the "special" prefixes. Term::Shell will ignore any method
-that doesn't start with a prefix listed here.
-
-=over 4
-
-=item 1
-
-run_foo()
-
-Adds the command C<foo> to the list of supported commands. The method's return
-value is saved by Term::Shell, but is not used.
-
-The method is called with the Term::Shell object as its first argument,
-followed by any arguments the user typed in.
-
-Special case: if you provide a method C<run_()>, Term::Shell will call it
-whenever the user enters a blank line. A blank line is anything which matches
-the regular expression C</^\s*$/>.
-
-=item 2
-
-help_foo()
-
-Adds the command C<foo> to the list of help topics. This means the user may
-enter 'help foo' and get a help screen. It should return a single string to be
-displayed to the user.
-
-The method is called with the Term::Shell object as its first argument,
-followed by any arguments the user typed in after 'help foo'. You can
-implement hierarchical help documents by using the arguments.
-
-If you do not provide a C<help_foo()> method, typing 'help foo' produces an
-error message.
-
-=item 3
-
-smry_foo()
-
-Should return a one-line summary of C<foo>, to be displayed in the help screen.
-
-This method is called with the Term::Shell object as its first argument, and
-no other arguments.
-
-If you do not provide a C<smry_foo()> method, then the string 'undocumented'
-is used instead.
-
-=item 4
-
-comp_foo()
-
-Provides custom tab-completion for C<foo>. That means if the user types 'foo '
-and then hits <TAB>, this method will be called. It should return an array
-reference containing a list of possible completions.
-
-This method is called with the Term::Shell object as its first argument,
-followed by the three arguments:
-
-=over 4
-
-=item 1
-
-$word
-
-The word the user is trying to complete.
-
-=item 2
-
-$line
-
-The line as typed by the user so far.
-
-=item 3
-
-$start
-
-The offset into $line where $word starts.
-
-=back
-
-If you do not provide C<comp_foo()>, Term::Shell will always return no
-completions for C<foo>.
-
-Special case: if you provide C<comp_()>, Term::Shell will call it when the
-user is trying to complete the name of a command. Term::Shell provides a
-default C<comp_()> method, which completes the actions that you have written
-handlers for. If you want to provide tab-completion for commands that do not
-have handlers, override C<comp_()>.
-
-=item 5
-
-alias_foo()
-
-Returns a list of aliases for C<foo>. When one of the aliases is used instead
-of C<foo>, the corresponding handler for C<foo> is called.
-
-=item 6
-
-catch_run()
-
-catch_help()
-
-catch_comp()
-
-catch_smry()
-
-Called when an undefined action is entered by the user. Normally when the
-user enters an unrecognized command, Term::Shell will print an error message
-and continue.
-
-This method is called with the Term::Shell object, the command typed by the
-user, and then the arguments which would normally be passed to the real
-handler.
-
-The C<catch_> methods may do anything the original function would have done.
-If you want, you can implement all the commands in it, but that means you're
-doing more work than you have to. Be lazy.
-
-=back
-
-=head2 When you want something done right...
-
-You sometimes have to do it yourself. Introducing add_handlers(). Naturally,
-it adds a handler to the list of defined handlers in the shell.
-
-Term::Shell can't always find the commands you want to implement by searching
-the inheritance tree. Having an AUTOLOAD() method, for instance, will break
-this system. In that situation, you may wish to tell Term::Shell about the
-extra commands available using add_handlers():
-
- package MyShell;
- use base qw(Term::Shell);
-
- sub AUTOLOAD {
- if ($AUTOLOAD =~ /::run_fuzz$/) {
- # code for 'fuzz' command
- }
- elsif ($AUTOLOAD =~ /::run_foozle$/) {
- # code for 'foozle' command
- }
- }
-
- sub init {
- my $o = shift;
- $o->add_handlers("run_fuzz", "run_foozle");
- }
-
-There are other ways to do this. You could write a C<catch_run> routine and do
-the same thing from there. You'd have to override C<comp_> so that it would
-complete on "foozle" and "fuzz". The advantage to this method is that it adds
-the methods to the list of commands, so they show up in the help menu I<and>
-you get completion for free.
-
-=head1 Removing Commands from Your Shell
-
-You're probably thinking "just don't write them". But remember, you can
-inherit from another shell class, and that parent may define commands you want
-to disable. Term::Shell provides a simple method to make itself forget about
-commands it already knows about:
-
-=over 4
-
-=item 1
-
-remove_commands()
-
-Removes all handlers associated with the given command (or list of commands).
-
-For example, Term::Shell comes with two commands (C<exit> and C<help>)
-implemented with seven handlers:
-
-=over 4
-
-=item 1
-
-smry_exit()
-
-=item 2
-
-help_exit()
-
-=item 3
-
-run_exit()
-
-=item 4
-
-smry_help()
-
-=item 5
-
-help_help()
-
-=item 6
-
-comp_help()
-
-=item 7
-
-run_help()
-
-=back
-
-If you want to create a shell that doesn't implement the C<help> command,
-your code might look something like this example:
-
- package MyShell;
- use base qw(Term::Shell);
-
- sub init {
- my $o = shift;
- $o->remove_commands("help");
- }
-
- # ... define more handlers here ...
-
-=item 2
-
-remove_handlers()
-
-Removes the given handler (or handlers) from the list of defined commands. You
-have to specify a full handler name, including the 'run_' prefix. You can
-obviously specify any of the other prefixes too.
-
-If you wanted to remove the help for the C<exit> command, but preserve the
-command itself, your code might look something like this:
-
- package MyShell;
- use base qw(Term::Shell);
-
- sub init {
- my $o = shift;
- $o->remove_handlers("help_exit");
- }
-
- # ... define more handlers here ...
-
-=back
-
-=head2 Cover Your Tracks
-
-If you do remove built in commands, you should be careful not to let
-Term::Shell print references to them. Messages like this are guaranteed to
-confuse people who use your shell:
-
- shell> help
- Unknown command 'help'; type 'help' for a list of commands.
-
-Here's the innocuous looking code:
-
- package MyShell;
- use base qw(Term::Shell);
-
- sub init {
- my $o = shift;
- $o->remove_commands("help");
- }
-
- MyShell->new->cmdloop;
-
-The problem is that Term::Shell has to print an error message, and by default
-it tells the user to use the C<help> command to see what's available. If you
-remove the C<help> command, you still have to clean up after yourself and tell
-Term::Shell to change its error messages:
-
-=over 4
-
-=item 1
-
-msg_unknown_cmd()
-
-Called when the user has entered an unrecognized command, and no action was
-available to satisfy it. It receives the object and the command typed by the
-user as its arguments. It should return an error message; by default, it is
-defined thusly:
-
- sub msg_unknown_cmd {
- my ($o, $cmd) = @_;
- <<END;
- Unknown command '$cmd'; type 'help' for a list of commands.
- END
- }
-
-=item 2
-
-msg_ambiguous_cmd()
-
-Called when the user has entered a command for which more than handler exists.
-(For example, if both "quit" and "query" are commands, then "qu" is an
-ambiguous command, because it could be either.) It receives the object, the
-command, and the possible commands which could complete it. It should return
-an error message; by default it is defined thusly:
-
- sub msg_ambiguous_cmd {
- my ($o, $cmd, @c) = @_;
- local $" = "\n\t";
- <<END;
- Ambiguous command '$cmd': possible commands:
- @c
- END
- }
-
-=back
-
-=head1 The Term::Shell API
-
-Shell classes can use any of the methods in this list. Any other methods in
-Term::Shell may change.
-
-=over 4
-
-=item 1
-
-new()
-
-Creates a new Term::Shell object. It currently does not use its arguments. The
-arguments are saved in '$o->{API}{args}', in case you want to use them later.
-
- my $sh = Term::Shell->new(@arbitrary_args);
-
-=item 2
-
-cmd()
-
- cmd($txt);
-
-Invokes C<$txt> as if it had been typed in at the prompt.
-
- $sh->cmd("echo 1 2 3");
-
-=item 3
-
-cmdloop()
-
-mainloop()
-
-Repeatedly prompts the user, reads a line, parses it, and invokes a handler.
-Uses C<cmd()> internally.
-
- MyShell->new->cmdloop;
-
-mainloop() is a synonym for cmdloop(), provided for backwards compatibility.
-Earlier (unreleased) versions of Term::Shell have only provided mainloop().
-All documentation and examples use cmdloop() instead.
-
-=item 4
-
-init()
-
-fini()
-
-Do any initialization or cleanup you need at shell creation (init()) and
-destruction (fini()) by defining these methods.
-
-No parameters are passed.
-
-=item 5
-
-preloop()
-
-postloop()
-
-Do any initialization or cleanup you need at shell startup (preloop()) and
-shutdown (postloop()) by defining these methods.
-
-No parameters are passed.
-
-=item 6
-
-precmd()
-
-postcmd()
-
-Do any initialization or cleanup before and after calling each handler.
-
-The parameters are:
-
-=over 4
-
-=item 1
-
-$handler
-
-A reference to the name of the handler that is about to be executed.
-
-Passed by reference so you can control which handler will be called.
-
-=item 2
-
-$cmd
-
-A reference to the command as the user typed it.
-
-Passed by reference so you can set the command. (If the handler is a "catch_"
-command, it can be fooled into thinking the user typed some other command, for
-example.)
-
-=item 3
-
-$args
-
-The arguments as typed by the user. This is passed as an array reference so
-that you can manipulate the arguments received by the handler.
-
-=back
-
- sub precmd {
- my $o = shift;
- my ($handler, $cmd, @args) = @_;
- # ...
- }
-
-=item 7
-
-stoploop()
-
-Sets a flag in the Term::Shell object that breaks out of cmdloop(). Note that
-cmdloop() resets this flag each time you call it, so code like this will work:
-
- my $sh = MyShell->new;
- $sh->cmdloop; # an interactive session
- $sh->cmdloop; # prompts the user again
-
-Term::Shell's built-in run_exit() command just calls stoploop().
-
-=item 8
-
-idle()
-
-If you set C<check_idle> to a non-zero number (see L<The Term::Shell Object>)
-then this method is called every C<check_idle> seconds. The idle() method
-defined in Term::Shell does nothing -- it exists only to be redefined in
-subclasses.
-
- package MyShell;
- use base qw(Term::Shell);
-
- sub init {
- my $o = shift;
- $o->{API}{check_idle} = 0.1; # 10/s
- }
-
- sub idle {
- print "Idle!\n";
- }
-
-=item 9
-
-prompt_str()
-
-Returns a string to be used as the prompt. prompt_str() is called just before
-calling the readline() method of Term::ReadLine. If you do not override this
-method, the string `shell> ' is used.
-
- package MyShell;
- use base qw(Term::Shell);
-
- sub prompt_str { "search> " }
-
-=item 10
-
-prompt()
-
-Term::Shell provides this method for convenience. It's common for a handler to
-ask the user for more information. This method makes it easy to provide the
-user with a different prompt and custom completions provided by you.
-
-The prompt() method takes the following parameters:
-
-=over 4
-
-=item 1
-
-$prompt
-
-The prompt to display to the user. This can be any string you want.
-
-=item 2
-
-$default
-
-The default value to provide. If the user enters a blank line (all whitespace
-characters) then the this value will be returned.
-
-Note: unlike ExtUtils::MakeMaker's prompt(), Term::Shell's prompt() does not
-modify $prompt to indicate the $default response. You have to do that
-yourself.
-
-=item 3
-
-$completions
-
-An optional list of completion values. When the user hits <TAB>, Term::Shell
-prints the completions which match what they've typed so far. Term::Shell does
-not enforce that the user's response is one of these values.
-
-=item 4
-
-$casei
-
-An optional boolean value which indicates whether the completions should be
-matched case-insensitively or not. A true value indicates that C<FoO> and
-C<foo> should be considered the same.
-
-=back
-
-prompt() returns the unparsed line to give you maximum flexibility. If you
-need the line parsed, use the line_parsed() method on the return value.
-
-=item 11
-
-cmd_prefix()
-
-cmd_suffix()
-
-These methods should return a prefix and suffix for commands, respectively.
-For instance, an IRC client will have a prefix of C</>. Most shells have an
-empty prefix and suffix.
-
-=item 12
-
-page()
-
- page($txt)
-
-Prints C<$txt> through a pager, prompting the user to press a key for the next
-screen full of text.
-
-=item 13
-
-line()
-
-line_parsed()
-
-Although C<run_foo()> is called with the parsed arguments from the
-command-line, you may wish to see the raw command-line. This is available
-through the line() method. If you want to retrieve the parsed line again, use
-line_parsed().
-
-line_parsed() accepts an optional string parameter: the line to parse. If you
-have your own line to parse, you can pass it to line_parsed() and get back a
-list of arguments. This is useful inside completion methods, since you don't
-get a parsed list there.
-
-=item 14
-
-run()
-
-If you want to run another handler from within a handler, and you have
-pre-parsed arguments, use run() instead of cmd(). cmd() parses its parameter,
-whereas run() takes each element as a separate parameter.
-
-It needs the name of the action to run and any arguments to pass to the
-handler.
-
-Term::Shell uses this method internally to invoke command handlers.
-
-=item 15
-
-help()
-
-If you want to get the raw text of a help message, use help(). It needs the
-name of the help topic and any arguments to pass to the handler.
-
-Term::Shell uses this method internally to invoke help handlers.
-
-=item 16
-
-summary()
-
-If you want to get the summary text of an action, use summary(). It needs the
-name of the action.
-
-Term::Shell uses this method internally to display the help page.
-
-=item 17
-
-possible_actions()
-
-You will probably want this method in comp_foo(). possible_actions() takes a
-word and a list, and returns a list of possible matches. Term::Shell uses this
-method internally to decide which handler to run when the user enters a
-command.
-
-There are several arguments, but you probably won't use them all in the simple
-cases:
-
-=over 4
-
-=item 1
-
-$needle
-
-The (possible incomplete) word to try to match against the list of actions
-(the haystack).
-
-=item 2
-
-$type
-
-The type with which to prefix C<$action>. This is useful when completing a
-real action -- you have to specify whether you want it to look for "run_" or
-"help_" or something else. If you leave it blank, it will use C<$action>
-without prefixing it.
-
-=item 3
-
-$strip
-
-If you pass in a true value here, possible_actions() will remove an initial
-C<$type> from the beginning of each result before returning the results. This
-is useful if you want to know what the possible "run_" commands are, but you
-don't want to have the "run_" in the final result.
-
-If you do not specify this argument, it uses '0' (the default is not to strip
-the results).
-
-=item 4
-
-$haystack
-
-You can pass in a reference to a list of strings here. Each string will be
-compared with C<$needle>.
-
-If you do not specify this argument, it uses the list of handlers. This is how
-Term::Shell matches commands typed in by the user with command handlers
-written by you.
-
-=back
-
-=item 18
-
-print_pairs()
-
-This overloaded beast is used whenever Term::Shell wants to print a set of
-keys and values. It handles wrapping long values, indenting the whole thing,
-inserting the separator between the key and value, and all the rest.
-
-There are lots of parameters, but most of them are optional:
-
-=over 4
-
-=item 1
-
-$keys
-
-A reference to a list of keys to print.
-
-=item 2
-
-$values
-
-A reference to a list of values to print.
-
-=item 3
-
-$sep
-
-The string used to separate the keys and values. If omitted, ': ' is used.
-
-=item 4
-
-$left
-
-The justification to be used to line up the keys. If true, the keys will be
-left-justified. If false or omitted, the keys will be right-justified.
-
-=item 5
-
-$ind
-
-A string used to indent the whole paragraph. Internally, print_pairs() uses
-length(), so you shouldn't use tabs in the indent string. If omitted, the
-empty string is used (no indent).
-
-=item 6
-
-$len
-
-An integer which describes the minimum length of the keys. Normally,
-print_pairs() calculates the longest key and assigns the column width to be
-as wide as the longest key plus the separator. You can force the column width
-to be larger using $len. If omitted, 0 is used.
-
-=item 7
-
-$wrap
-
-A boolean which indicates whether the value should be text-wrapped using
-Text::Autoformat. Text is only ever wrapped if it contains at least one space.
-If omitted, 0 is used.
-
-=item 8
-
-$cols
-
-An integer describing the number of columns available on the current terminal.
-Normally 78 is used, or the environment variable COLUMNS, but you can override
-the number here to simulate a right-indent.
-
-=back
-
-=item 19
-
-term()
-
-Returns the underlying C<Term::ReadLine> object used to interact with the
-user. You can do powerful things with this object; in particular, you will
-cripple Term::Shell's completion scheme if you change the completion callback
-function.
-
-=item 20
-
-process_esc()
-
-This method may be overridden to provide shell-like escaping of backslashes
-inside quoted strings. It accepts two parameters:
-
-=over 4
-
-=item 1
-
-$c
-
-The character which was escaped by a backslash.
-
-=item 2
-
-$quote
-
-The quote character used to delimit this string. Either C<"> or C<'>.
-
-=back
-
-This method should return the string which should replace the backslash and
-the escaped character.
-
-By default, process_esc() uses escaping rules similar to Perl's single-quoted
-string:
-
-=over 4
-
-=item 1
-
-Escaped backslashes return backslashes. The string C<"123\\456"> returns
-C<123\456>.
-
-=item 2
-
-Escaped quote characters return the quote character (to allow quote characters
-in strings). The string C<"abc\"def"> returns C<abc"def>.
-
-=item 3
-
-All other backslashes are returned verbatim. The string C<"123\456"> returns
-C<123\456>.
-
-=back
-
-Term::Shell's quote characters cannot be overridden, unless you override
-line_parsed(): they are C<"> or C<'>. This may change in a future version of
-Term::Shell.
-
-=item 21
-
-add_handlers()
-
-See L<Adding Commands to Your Shell> for information on add_handlers().
-
-=item 22
-
-remove_commands()
-
-remove_handlers()
-
-See L<Removing Commands from Your Shell> for information on remove_handlers().
-
-=back
-
-=head1 The Term::Shell Object
-
-Term::Shell creates a hash based Perl object. The object contains information
-like what handlers it found, the underlying Term::ReadLine object, and any
-arguments passed to the constructor.
-
-This hash is broken into several subhashes. The only two subhashes that a
-Shell should ever use are $o->{API} and $o->{SHELL}. The first one contains
-all the information that Term::Shell has gathered for you. The second one is a
-private area where your Shell can freely store data that it might need later
-on.
-
-This section will describe all the Term::Shell object "API" attributes:
-
-=head2 The args Attribute
-
-This an array reference containing any arguments passed to the Term::Shell
-constructor.
-
-=head2 The case_ignore Attribute
-
-This boolean controls whether commands should be matched without regard to
-case. If this is true, then typing C<FoO> will have the same effect as typing
-C<foo>.
-
-Defaults to true on MSWin32, and false on other platforms.
-
-=head2 The class Attribute
-
-The class of the object. This is probably the package containing the
-definition of your shell, but if someone subclasses I<your> shell, it's their
-class.
-
-=head2 The command Attribute
-
-Whenever Term::Shell invokes an action, it stores information about the action
-in the C<command> attribute. Information about the last "run" action to be
-invoked is stored in $o->{API}{command}{run}. The information itself is stored
-in a subhash containing these fields:
-
-=over 4
-
-=item name
-
-The name of the command, as typed by the user.
-
-=item found
-
-The a boolean value indicating whether a handler could be found.
-
-=item handler
-
-The full name of the handler, if found.
-
-=back
-
-Note that this facility only stores information about the I<last> action to be
-executed. It's good enough for retrieving the information about the last
-handler which ran, but not for much else.
-
-The following example shows a case where C<run_foo()> calls C<run_add()>, and
-prints its return value (in this case, 42).
-
- sub run_foo {
- my $o = shift;
- my $sum = $o->run("add", 21, 21);
- print "21 + 21 = ", $sum, "\n";
- }
-
- sub run_add {
- my $o = shift;
- my $sum = 0;
- $sum += $_ for @_;
- print "add(): sum = $sum\n";
- return $sum;
- }
-
-At the end of run_foo(), $o->{API}{command}{run}{handler} contains the string
-C<"run_add">.
-
-=head2 The match_uniq Attribute
-
-This boolean controls whether the user can type in only enough of the command
-to make it unambiguous. If true, then if the shell has the commands C<foo> and
-C<bar> defined, the user can type C<f> to run C<foo>, and C<b> to run C<bar>.
-
-Defaults to true.
-
-=head2 The readline Attribute
-
-Which Term::ReadLine module is being used. Currently, this is always one of
-C<Term::ReadLine::Stub>, C<Term::ReadLine::Perl>, or C<Term::ReadLine::Gnu>.
-
-=head2 The script Attribute
-
-The name of the script that invoked your shell.
-
-=head2 The version Attribute
-
-The version of Term::Shell you are running under.
-
-=head1 BUGS AND DEFICIENCIES
-
-There are bound to be some bugs lurking about.
-
-If you find bugs, please send them to C<NEILW at cpan.org>.
-
-=head1 SEE ALSO
-
-For more information about the underlying ReadLine module, see
-L<Term::ReadLine>. You may also want to look at L<Term::ReadLine::Gnu> and
-L<Term::ReadLine::Perl>.
-
-For more information about the underlying formatter used by print_pairs(), see
-L<Text::Autoformat>.
-
-The API for Term::Shell was inspired by (gasp!) a Python package called
-C<cmd>. For more information about this package, please look in the Python
-Library Reference, either in your Python distribution or at
-http://www.python.org/doc/current/lib/module-cmd.html
-
-=head1 AUTHOR
-
-Neil Watkiss (NEILW at cpan.org)
-
-=head1 COPYRIGHT
-
-Copyright (c) 2001, Neil Watkiss. All Rights Reserved.
-
-All Rights Reserved. This module is free software. It may be used,
-redistributed and/or modified under the same terms as Perl itself.
-
-See http://www.perl.com/perl/misc/Artistic.html
diff --git a/scripts/tag-release.pl b/scripts/tag-release.pl
new file mode 100644
index 0000000..d94956e
--- /dev/null
+++ b/scripts/tag-release.pl
@@ -0,0 +1,26 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use IO::All;
+
+my ($version) =
+ (map { m{\$VERSION *= *'([^']+)'} ? ($1) : () }
+ io->file("./lib/Term/Shell.pm")->getlines()
+ )
+ ;
+
+if (!defined ($version))
+{
+ die "Version is undefined!";
+}
+
+my @cmd = (
+ "git", "tag", "-m",
+ "Tagging Term-Shell as $version",
+ $version,
+);
+
+print join(" ", map { /\s/ ? qq{"$_"} : $_ } @cmd), "\n";
+exec(@cmd);
diff --git a/t/00-compile.t b/t/00-compile.t
new file mode 100644
index 0000000..a943480
--- /dev/null
+++ b/t/00-compile.t
@@ -0,0 +1,57 @@
+use 5.006;
+use strict;
+use warnings;
+
+# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.054
+
+use Test::More;
+
+plan tests => 1 + ($ENV{AUTHOR_TESTING} ? 1 : 0);
+
+my @module_files = (
+ 'Term/Shell.pm'
+);
+
+
+
+# fake home for cpan-testers
+use File::Temp;
+local $ENV{HOME} = File::Temp::tempdir( CLEANUP => 1 );
+
+
+my $inc_switch = -d 'blib' ? '-Mblib' : '-Ilib';
+
+use File::Spec;
+use IPC::Open3;
+use IO::Handle;
+
+open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!";
+
+my @warnings;
+for my $lib (@module_files)
+{
+ # see L<perlfaq8/How can I capture STDERR from an external command?>
+ my $stderr = IO::Handle->new;
+
+ my $pid = open3($stdin, '>&STDERR', $stderr, $^X, $inc_switch, '-e', "require q[$lib]");
+ binmode $stderr, ':crlf' if $^O eq 'MSWin32';
+ my @_warnings = <$stderr>;
+ waitpid($pid, 0);
+ is($?, 0, "$lib loaded ok");
+
+ shift @_warnings if @_warnings and $_warnings[0] =~ /^Using .*\bblib/
+ and not eval { require blib; blib->VERSION('1.01') };
+
+ if (@_warnings)
+ {
+ warn @_warnings;
+ push @warnings, @_warnings;
+ }
+}
+
+
+
+is(scalar(@warnings), 0, 'no warnings found')
+ or diag 'got warnings: ', ( Test::More->can('explain') ? Test::More::explain(\@warnings) : join("\n", '', @warnings) ) if $ENV{AUTHOR_TESTING};
+
+
diff --git a/t/03catchsmry.t b/t/03catchsmry.t
index 2f9ee96..fce28f2 100644
--- a/t/03catchsmry.t
+++ b/t/03catchsmry.t
@@ -1,7 +1,16 @@
use strict;
use warnings;
-use Test::More tests => 1;
+use Test::More;
+
+if ($^O eq 'MSWin32')
+{
+ plan skip_all => "Test gets stuck on Windows - RT #40771";
+}
+else
+{
+ plan tests => 1;
+}
require Term::Shell;
diff --git a/t/author-pod-syntax.t b/t/author-pod-syntax.t
new file mode 100644
index 0000000..35fb1b9
--- /dev/null
+++ b/t/author-pod-syntax.t
@@ -0,0 +1,15 @@
+#!perl
+
+BEGIN {
+ unless ($ENV{AUTHOR_TESTING}) {
+ require Test::More;
+ Test::More::plan(skip_all => 'these tests are for testing by the author');
+ }
+}
+
+# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests.
+use strict; use warnings;
+use Test::More;
+use Test::Pod 1.41;
+
+all_pod_files_ok();
diff --git a/t/release-cpan-changes.t b/t/release-cpan-changes.t
new file mode 100644
index 0000000..214650f
--- /dev/null
+++ b/t/release-cpan-changes.t
@@ -0,0 +1,19 @@
+#!perl
+
+BEGIN {
+ unless ($ENV{RELEASE_TESTING}) {
+ require Test::More;
+ Test::More::plan(skip_all => 'these tests are for release candidate testing');
+ }
+}
+
+
+use strict;
+use warnings;
+
+use Test::More 0.96 tests => 2;
+use_ok('Test::CPAN::Changes');
+subtest 'changes_ok' => sub {
+ changes_file_ok('Changes');
+};
+done_testing();
diff --git a/t/release-kwalitee.t b/t/release-kwalitee.t
new file mode 100644
index 0000000..00738b8
--- /dev/null
+++ b/t/release-kwalitee.t
@@ -0,0 +1,17 @@
+
+BEGIN {
+ unless ($ENV{RELEASE_TESTING}) {
+ require Test::More;
+ Test::More::plan(skip_all => 'these tests are for release candidate testing');
+ }
+}
+
+# this test was generated with Dist::Zilla::Plugin::Test::Kwalitee 2.12
+use strict;
+use warnings;
+use Test::More 0.88;
+use Test::Kwalitee 1.21 'kwalitee_ok';
+
+kwalitee_ok();
+
+done_testing;
diff --git a/t/release-trailing-space.t b/t/release-trailing-space.t
new file mode 100644
index 0000000..3e8b540
--- /dev/null
+++ b/t/release-trailing-space.t
@@ -0,0 +1,38 @@
+#!perl
+
+BEGIN {
+ unless ($ENV{RELEASE_TESTING}) {
+ require Test::More;
+ Test::More::plan(skip_all => 'these tests are for release candidate testing');
+ }
+}
+
+
+use strict;
+use warnings;
+
+use Test::More;
+
+eval "use Test::TrailingSpace";
+if ($@)
+{
+ plan skip_all => "Test::TrailingSpace required for trailing space test.";
+}
+else
+{
+ plan tests => 1;
+}
+
+# TODO: add .pod, .PL, the README/Changes/TODO/etc. documents and possibly
+# some other stuff.
+my $finder = Test::TrailingSpace->new(
+ {
+ root => '.',
+ filename_regex => qr#(?:(?:\.(?:t|pm|pl|PL|yml|json|arc|vim))|README|Changes|LICENSE)\z#,
+ },
+);
+
+# TEST
+$finder->no_trailing_space(
+ "No trailing space was found."
+);
diff --git a/t/style-trailing-space.t b/t/style-trailing-space.t
index 0d1459a..170d19f 100644
--- a/t/style-trailing-space.t
+++ b/t/style-trailing-space.t
@@ -18,7 +18,7 @@ else
my $finder = Test::TrailingSpace->new(
{
root => '.',
- filename_regex => qr/(?:(?:\.(?:t|pm|pl|PL|yml|json|arc|vim))|README|Changes|LICENSE)\z/,
+ filename_regex => qr/(?:(?:\.(?:t|pm|pl|pod|PL|yml|json|arc|vim))|README|Changes|LICENSE)\z/,
},
);
diff --git a/weaver.ini b/weaver.ini
new file mode 100644
index 0000000..228ad8e
--- /dev/null
+++ b/weaver.ini
@@ -0,0 +1,39 @@
+[@CorePrep]
+
+[-SingleEncoding]
+
+[Generic / NAME]
+
+[Version]
+
+[Region / prelude]
+
+
+[Generic / SYNOPSIS]
+[Generic / DESCRIPTION]
+[Generic / OVERVIEW]
+
+[Collect / ATTRIBUTES]
+command = attr
+
+[Collect / METHODS]
+command = method
+
+[Leftovers]
+
+[Region / postlude]
+
+[Authors]
+[Legal]
+
+; [Generic / DESCRIPTION]
+; required = 1
+
+; [Generic / BUGS]
+
+; [Generic / Section::Bugs]
+; [Generic / Section::License]
+;
+[Bugs]
+[Support]
+all_modules = 1
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libterm-shell-perl.git
More information about the Pkg-perl-cvs-commits
mailing list