Index: lib/Padre/Wx/Menu.pm
===================================================================
--- lib/Padre/Wx/Menu.pm	(Revision 165)
+++ lib/Padre/Wx/Menu.pm	(Arbeitskopie)
@@ -50,7 +50,8 @@
     EVT_MENU( $win, $menu->{edit}->Append( wxID_FIND, '' ),           \&Padre::Wx::MainWindow::on_find             );
     EVT_MENU( $win, $menu->{edit}->Append( -1, "&Find Again\tF3" ),   \&Padre::Wx::MainWindow::on_find_again       );
     EVT_MENU( $win, $menu->{edit}->Append( -1, "&Goto\tCtrl-G" ),     \&Padre::Wx::MainWindow::on_goto             );
-    EVT_MENU( $win, $menu->{edit}->Append( -1, "&AutoComp\tCtrl-P" ), \&Padre::Wx::MainWindow::on_autocompletition );
+    EVT_MENU( $win, $menu->{edit}->Append( -1, "&AutoComp->\tCtrl-N" ), \&Padre::Wx::MainWindow::on_forward_autocompletition );
+    EVT_MENU( $win, $menu->{edit}->Append( -1, "<-&AutoComp\tCtrl-P" ), \&Padre::Wx::MainWindow::on_backward_autocompletition );
     EVT_MENU( $win, $menu->{edit}->Append( -1, "Subs\tAlt-S"     ),   sub { $_[0]->{rightbar}->SetFocus()} ); 
     EVT_MENU( $win, $menu->{edit}->Append( -1, "&Comment out block\tCtrl-M" ),   \&Padre::Wx::MainWindow::on_comment_out_block       );
     EVT_MENU( $win, $menu->{edit}->Append( -1, "&UnComment block\tCtrl-Shift-M" ),   \&Padre::Wx::MainWindow::on_uncomment_block       );
Index: lib/Padre/Wx/MainWindow.pm
===================================================================
--- lib/Padre/Wx/MainWindow.pm	(Revision 165)
+++ lib/Padre/Wx/MainWindow.pm	(Arbeitskopie)
@@ -400,28 +400,58 @@
 }
 
 
-sub on_autocompletition {
-   my $self   = shift;
+sub on_forward_autocompletition {
+   my $self = shift;
+   
+   $self->_autocompletition("forward");
+   return;
+}
 
-   my $id     = $self->{notebook}->GetSelection;
-   my $page   = $self->{notebook}->GetPage($id);
-   my $pos    = $page->GetCurrentPos;
-   my $line   = $page->LineFromPosition($pos);
-   my $first  = $page->PositionFromLine($line);
-   my $prefix = $page->GetTextRange($first, $pos); # line from beginning to current position
-      $prefix =~ s{^.*?((\w+::)*\w+)$}{$1};
-   my $last   = $page->GetLength();
-   my $text   = $page->GetTextRange(0, $last);
+
+sub on_backward_autocompletition {
+   my $self = shift;
+   
+   $self->_autocompletition("backward");
+   return;
+}
+
+
+sub _autocompletition {
+   my $self      = shift;
+   my $direction = shift;
+
+   my $id        = $self->{notebook}->GetSelection;
+   my $page      = $self->{notebook}->GetPage($id);
+   my $pos       = $page->GetCurrentPos;
+   my $line      = $page->LineFromPosition($pos);
+   my $first     = $page->PositionFromLine($line);
+   my $prefix    = $page->GetTextRange($first, $pos); # line from beginning to current position
+   $prefix =~ s{^.*?((\w+::)*\w+)$}{$1};
+   my $last      = $page->GetLength();
+   my $pre_text  = $page->GetTextRange(0, $first+length($prefix));
+   my $post_text = $page->GetTextRange($first, $last);
+
    my %seen;
-   my @words = grep { ! $seen{$_}++ } sort ($text =~ m{\b($prefix\w*(?:::\w+)*)\b}g);
-   if (@words > 20) {
-      @words = @words[0..19];
+   my @words;
+   my $completion_regexp = qr{\b($prefix\w*(?:::\w+)*)\b};
+   if ($direction eq 'forward') {
+     push @words, grep { ! $seen{$_}++ } ($post_text =~ /$completion_regexp/g);
+     push @words, grep { ! $seen{$_}++ } ($pre_text  =~ /$completion_regexp/g);
+   } else {
+     push @words, grep { ! $seen{$_}++ } reverse ($pre_text  =~ /$completion_regexp/g);
+     push @words, grep { ! $seen{$_}++ } reverse ($post_text =~ /$completion_regexp/g);
    }
+
+   my $max_words = 20;
+   if (@words > $max_words) {
+      @words = @words[0..$max_words-1];
+   }
    $page->AutoCompShow(length($prefix), join " ", @words);
 
    return;
 }
 
+
 sub on_right_click {
     my ($self, $event) = @_;
 #print "right\n";
