summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn M Moore <code@sartak.org>2013-06-27 13:55:54 -0400
committerShawn M Moore <code@sartak.org>2013-06-27 13:55:54 -0400
commitc437b3ded1a8a0700cab205c3801a854969c77c9 (patch)
tree6f2fe3cc9b6615a838b49748230de15320670ac8
parentbf09193613e1130f3e02ace7bc2acb09f6685714 (diff)
downloadreply-c437b3ded1a8a0700cab205c3801a854969c77c9.tar.gz
reply-c437b3ded1a8a0700cab205c3801a854969c77c9.zip
First cut of Autocomplete: completes Perl keywords
-rw-r--r--dist.ini1
-rw-r--r--lib/Reply/Plugin/Autocomplete.pm40
2 files changed, 41 insertions, 0 deletions
diff --git a/dist.ini b/dist.ini
index 810cec4..09da71c 100644
--- a/dist.ini
+++ b/dist.ini
@@ -35,6 +35,7 @@ Data::Dump = 0
Data::Printer = 0
Proc::InvokeEditor = 0
Term::ReadLine::Gnu = 0
+B::Keywords = 0
; XXX it'd be nice if we could make this recommended instead of required
[OSPrereqs / MSWin32]
diff --git a/lib/Reply/Plugin/Autocomplete.pm b/lib/Reply/Plugin/Autocomplete.pm
new file mode 100644
index 0000000..621a832
--- /dev/null
+++ b/lib/Reply/Plugin/Autocomplete.pm
@@ -0,0 +1,40 @@
+package Reply::Plugin::Autocomplete;
+use strict;
+use warnings;
+# ABSTRACT: tab complete your input
+
+use base 'Reply::Plugin';
+
+use B::Keywords qw/@Functions @Barewords/;
+
+=head1 SYNOPSIS
+
+ ; .replyrc
+ [Autocomplete]
+
+=head1 DESCRIPTION
+
+This plugin registers a tab key handler to autocomplete Perl code.
+
+=cut
+
+sub tab_handler {
+ my ($self, $line) = @_;
+
+ return (
+ $self->_tab_keyword($line),
+ );
+}
+
+sub _tab_keyword {
+ my ($self, $line) = @_;
+
+ my ($last_word) = $line =~ /(\w+)$/;
+ return unless $last_word;
+
+ my $re = qr/^\Q$last_word/;
+
+ return grep { $_ =~ $re } @Functions, @Barewords;
+}
+
+1;