package Bash::Completion::Request; { $Bash::Completion::Request::VERSION = '0.008'; } # ABSTRACT: Abstract a completion request use strict; use warnings; sub line { return $_[0]{line} } sub word { return $_[0]{word} } sub args { return @{$_[0]{args}} } sub count { return $_[0]{count} } sub point { return $_[0]{point} } sub new { my ($class) = @_; return bless { candidates => [], line => $ENV{COMP_LINE}, point => $ENV{COMP_POINT}, _get_completion_word(), _get_arguments(), }, $class; } sub candidates { my $self = shift; my $c = $self->{candidates}; return @$c unless @_; push @$c, @_; } ####### # Utils ## Stolen from http://github.com/yanick/dist-zilla/blob/master/contrib/dzil-complete sub _get_completion_word { my $comp = substr $ENV{'COMP_LINE'}, 0, $ENV{'COMP_POINT'}; $comp =~ s/.*\s//; return word => $comp; } sub _get_arguments { my $comp = substr $ENV{'COMP_LINE'}, 0, $ENV{'COMP_POINT'}; my @args = split(/\s+/, $comp); return args => \@args, count => scalar(@args); } 1; __END__ =pod =head1 NAME Bash::Completion::Request - Abstract a completion request =head1 VERSION version 0.008 =head1 ATTRIBUTES =head2 line The full command line as given to us by bash. =head2 word The word to be completed. =head2 args The command line, up to and including the word to be completed, as a list of terms. The split of the command line into terms is very very basic. There might be dragons here. =head2 count Number of words in the command line before the completion point. =head2 point The index in the command line where the shell cursor is. =head1 METHODS =head2 new Constructs a completion request object based on the bash environment variables: C and C. =head2 candidates Accepts a list of completion candidates and passes them on to the shell. =head1 AUTHOR Pedro Melo =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2011 by Pedro Melo. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible) =cut