2009-07-23 9 views
4

Ich verwende das Term::Shell Paket in Perl für die Implementierung eines CLI-Tools. Ich kann die Tab-Vervollständigung eines Befehlsteils damit nicht machen.Wie mache ich die Tab-Vervollständigung in Perls Term :: Shell?

comp_CMD() - das ist eine API, die von diesem Term :: Shell zur Verfügung gestellt wird, soll die Tab-Vervollständigung erreichen. Das hilft mir nicht. Weiß jemand wie man das macht ??

Beispielcode:

#!/usr/bin/env perl 
package Sample; 
use base qw(Term::Shell); 

sub prompt_str { "Sample\>" }; 

sub comp_show 
{ 
    my $o = shift; 
    my $word = shift; 
    $o->completions($word, [qw(all work and no play is no fun at)]); 
} 

sub run_show 
{ 
     print "run show\n"; 
} 

package main; 
Sample->new->cmdloop; 

Dies ist ein Lauf des Programms:

Sample>show[TAB] 

Der obige Befehl doesnt geben die erwartete Ausgabe .. es gibt mir nur eine Registerkarte.

+1

Bitte senden Sie einen Beispielcode, den Sie versucht haben, zu arbeiten. – Inshallah

+0

Bitte löschen Sie Ihre Antwort und fügen Sie den Beispielcode zu Ihrer Frage hinzu. Bitte ziehen Sie außerdem jede Zeile des Beispielcodes mit 4 zusätzlichen Leerzeichen ein, damit sie als Codeblock angezeigt wird. – Inshallah

+1

@Anandan: Ich habe versucht, die Formatierung in Ihrem Code aufzuräumen, aber Inshalla hat Recht. Bitte lösche die Antwort und poste den Code als Teil deiner Frage. Verwenden Sie die Bearbeitungsschaltflächen, um den Code ordnungsgemäß als Code zu formatieren. – Telemachus

Antwort

2

Ihr Beispiel funktioniert für mich. Sowohl "show" als auch seine Argumente werden vervollständigt.

Nachdem Sie "show" eingegeben haben, gibt es nichts mehr zu vervollständigen, es ist bereits ein voller Befehl. Um das erste Argument zu vervollständigen, müssen Sie mindestens seinen ersten Buchstaben angeben; Wenn Sie also <TAB> direkt nach der Show eingeben, gelangen Sie nur zu der Stelle, an der Sie den ersten Buchstaben des Arguments eingeben müssen, das Sie vervollständigen möchten. Und wenn Sie zweimal hintereinander <TAB> drücken, sehen Sie, welche Fertigstellungen verfügbar sind.

Das einzige, was ich seltsam fand, ist, dass, wenn es nur ein einzelnes mögliches Argument gibt, das abgeschlossen wird, es wird nicht automatisch vervollständigt. Sie müssen noch den ersten Buchstaben angeben. Es ist ein bisschen merkwürdig, aber vielleicht nur ein Versehen des Herstellers.

+0

Das gleiche hier: sh [tab] wird erweitert, um – Cebjyre

0

vor allem bekomme ich nicht die "Kommentar hinzufügen" -Taste .. so posten ich als Antwort.

habe ich versucht, auf diese Weise:

sample> sh"TAB" 

sample>show w"TAB" 

Nichts funktionierte.

Hat es etwas mit der Umwelt zu tun? oder etwas anderes?

+0

anzuzeigen Sie sollten in der Lage sein, Ihre eigene Antwort zu bearbeiten. –

+0

Um einen Kommentar abzugeben, benötigen Sie mindestens 50 Rep-Punkte. –