App-optex-pingu
view release on metacpan or search on metacpan
lib/App/optex/pingu.pm view on Meta::CPAN
B<pingu> command. So make an alias in F<~/.optex.d/config.toml> to
call L<ping(1)> command instead:
[alias]
pingu = "ping -Mpingu"
=head1 MAKING NEW PING OPTION
You can add, say, B<--pingu> option to the original L<ping(1)>
command. Make a symbolic link C<< ping->optex >> in F<~/.optex.d/bin>
directory:
$ optex --ln ping
And create an rc file F<~/.optex.d/ping.rc> for B<ping>:
option --pingu -Mpingu
Then pingu will show up when you use B<--pingu> option to execute
L<ping(1)> command:
$ ping --pingu localhost -c15
If you want to enable this option always (really?), put next line in
your F<~/.optex.d/ping.rc>:
option default --pingu
=head1 SEE ALSO
L<https://github.com/sheepla/pingu>
L<App::optex>,
L<https://github.com/kaz-utashiro/optex/>
L<App::optex::pingu>,
L<https://github.com/kaz-utashiro/optex-pingu/>
=head2 ARTICLES
L<https://qiita.com/kaz-utashiro/items/abb436d7df349fe84e69>
=head1 AUTHOR
Kazumasa Utashiro
=head1 LICENSE
Copyright Â©ï¸ 2022-2024 Kazumasa Utashiro.
You can redistribute it and/or modify it under the same terms
as Perl itself.
=cut
use File::Share qw(dist_dir);
use List::Util qw(first pairmap);
use Time::HiRes qw(usleep);
use Scalar::Util;
use Hash::Util qw(lock_keys);
*is_number = \&Scalar::Util::looks_like_number;
use App::optex::pingu::Picture;
my $image_dir = $ENV{OPTEX_PINGU_IMAGEDIR} //= dist_dir 'App-optex-pingu';
our %opt = (
pingu => \(our $pingu = 1),
image => 'pingu',
char => 'â',
repeat => 1,
interval => 0.1,
);
lock_keys %opt;
sub hash_to_spec {
pairmap {
my $ref = ref $b;
if (not defined $b) { "$a!" }
elsif ($ref eq 'SCALAR') { "$a!" }
elsif (is_number($b)) { "$a=f" }
else { "$a=s" }
} shift->%*;
}
use App::optex::util::filter qw(io_filter);
sub finalize {
our($mod, $argv) = @_;
#
# private option handling
#
if (@$argv and $argv->[0] !~ /^-M/ and
defined(my $i = first { $argv->[$_] eq '--' } keys @$argv)) {
splice @$argv, $i, 1; # remove '--'
if (local @ARGV = splice @$argv, 0, $i) {
use Getopt::Long qw(GetOptionsFromArray);
Getopt::Long::Configure qw(bundling);
GetOptions \%opt, hash_to_spec \%opt or die "Option parse error.\n";
}
}
io_filter(\&pingu, STDOUT => 1);
}
sub get_image {
my $name = shift;
my $file = do {
first { -s }
map {
my $dir = $_;
map { "${dir}${name}$_" } '', '.asc4', '.asc2', '.asc';
} '', "$image_dir/";
};
die "$name: image file not found.\n" unless $file;
App::optex::pingu::Picture::load($file);
}
sub pingu {
@_ = map { utf8::is_utf8($_) ? $_ : decode('utf8', $_) } @_;
my %param = @_;
my @image = get_image($opt{image});
( run in 1.724 second using v1.01-cache-2.11-cpan-97f6503c9c8 )