#!/usr/bin/perl
use strict;
use Clipboard;
my %methods = (
    -html => sub { require CGI; CGI::escapeHTML($_[0]) },
    -uri => sub { require URI::Escape; URI::Escape::uri_escape($_[0]) },
);

my $result = filter(($ARGV[0]), Clipboard->paste);
Clipboard->copy($result);
print $result, "\n... is now in the clipboard.\n";

sub filter {
    my ($method, $data) = @_;
    if (exists $methods{$method}) {
        return $methods{$method}->($data);
    } else {
        require IPC::Run;
        my $cmd = [ split /\s+/, $method ];
        my $ret;
        IPC::Run::run($cmd, \$data, \$ret);
        return $ret;
    }
}

=head1 NAME

clipfilter - various conversions for your clipboard data

=head1 USAGE

    # copy some stuff
    $ clipfilter -html
    # paste, with html entities substituted in
    
    # or URI-escaping:
    $ clipfilter -uri

    # or pipe through an arbitrary program, like `tac`, the backwards cat:
    $ clipfilter tac
    # Note: currently, it splits that input on space and sends it to IPC::Run

=head1 MOTIVATION

A very frequent user pattern is to copy something, edit it in some rote way,
and then paste it back. Writing your own filter scripts will make it even more
useful.

=head1 AUTHOR

Ryan King <rking@panoptic.com>

=head1 COPYRIGHT

Copyright (c) 2010.  Ryan King.  All rights reserved.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

See L<http://www.perl.com/perl/misc/Artistic.html>
