| App-Nopaste documentation | Contained in the App-Nopaste distribution. |
App::Nopaste::Command - command-line utility for App::Nopaste
nopaste - command-line utility to nopaste
This application will take some text on STDIN and give you a URL on STDOUT.
You may also specify files as arguments, they will be concatenated together into one large nopaste.
The one line description of your paste. The default is usually the first few characters of your text.
Your nickname, usually displayed with the paste. Default: $NOPASTE_NICK then
$USER.
The language of the nopaste. The values accepted depend on the nopaste service. There is no mapping done yet. Default: perl.
The channel for the nopaste, not always relevant. Usually tied to a pastebot in that channel which will announce your paste.
The nopaste services to try, in order. You may also specify this in $NOPASTE_SERVICES (space-separated list of service names, e.g. Shadowcat Gist).
If specified, automatically copy the URL to your clipboard, using the Clipboard module.
If specified, use only the clipboard as input, using the Clipboard module.
If specified, automatically open the URL using Browser::Open. Browser::Open tries a number of different browser commands depending on your OS.
If specified, do not warn or complain about broken services.
| App-Nopaste documentation | Contained in the App-Nopaste distribution. |
package App::Nopaste::Command; use Moose; with 'MooseX::Getopt'; use App::Nopaste; has desc => ( traits => ['Getopt'], is => 'rw', isa => 'Str', cmd_aliases => ['description', 'd'], documentation => "The one line description of your paste. The default is usually the first few characters of your text.", ); has nick => ( traits => ['Getopt'], is => 'rw', isa => 'Str', cmd_aliases => ['nickname', 'name', 'n'], documentation => "Your nickname, usually displayed with the paste.", ); has lang => ( traits => ['Getopt'], is => 'rw', isa => 'Str', default => 'perl', cmd_aliases => ['language', 'l'], documentation => "The language of the nopaste. Default: perl.", ); has chan => ( traits => ['Getopt'], is => 'rw', isa => 'Str', cmd_aliases => ['channel', 'c'], documentation => "The channel for the nopaste, not always relevant. Usually tied to a pastebot in that channel which will announce your paste.", ); has services => ( traits => ['Getopt'], is => 'rw', isa => 'ArrayRef[Str]', cmd_aliases => ['service', 's'], documentation => "The nopaste services to try, in order. You may also specify this in the env var NOPASTE_SERVICES.", ); has list_services => ( traits => ['Getopt'], is => 'rw', isa => 'Bool', cmd_aliases => ['list', 'L'], documentation => "List available nopaste services", ); has copy => ( traits => ['Getopt'], is => 'rw', isa => 'Bool', cmd_aliases => ['x'], documentation => "If specified, automatically copy the URL to your clipboard.", ); has paste => ( traits => ['Getopt'], is => 'rw', isa => 'Bool', cmd_aliases => ['p'], documentation => "If specified, use only the clipboard as input.", ); has open_url => ( traits => ['Getopt'], is => 'rw', isa => 'Bool', cmd_aliases => ['open', 'o'], documentation => "If specified, automatically open the URL using Browser::Open.", ); has quiet => ( traits => ['Getopt'], is => 'rw', isa => 'Bool', cmd_aliases => ['q'], documentation => "If specified, do not warn or complain about broken services.", ); has private => ( traits => ['Getopt'], is => 'rw', isa => 'Bool', documentation => "If specified, paste privately to services where possible.", ); sub run { my $self = shift; if ($self->list_services) { for (sort App::Nopaste->plugins) { s/App::Nopaste::Service::(\w+)$/$1/; print $_, "\n"; } exit 0; } my $text = $self->read_text; my %args = ( text => $text, filename => $self->detect_filename, desc => $self->desc, nick => $self->nick, lang => $self->lang, chan => $self->chan, services => $self->services, private => $self->private, ); $args{error_handler} = $args{warn_handler} = sub { } if $self->quiet; my $url = App::Nopaste->nopaste(%args); if ($self->copy) { require Clipboard; Clipboard->import; Clipboard->copy($url); } if ($self->open_url) { require Browser::Open; Browser::Open::open_browser($url); } return $url; } sub read_text { my $self = shift; if ($self->paste && @{ $self->extra_argv }) { die "You may not specify --paste and files simultaneously.\n"; } if ($self->paste) { require Clipboard; Clipboard->import; return Clipboard->paste; } local @ARGV = @{ $self->extra_argv }; local $/; return <>; } sub detect_filename { my $self = shift; my @files = @{ $self->extra_argv }; return undef unless @files; return undef if $self->paste or $files[0] eq '-'; return $files[0]; } __PACKAGE__->meta->make_immutable; no Moose; 1; __END__