Ändern Sie, wie Python Cmd Module Autovervollständigung behandelt

8

Ich habe eine Cmd-Konsole eingerichtet, um Kartennamen für ein Magic: the Gathering-Sammlungsverwaltungssystem automatisch zu vervollständigen.

Er verwendet den Textparameter, um die Datenbank nach Karten abzufragen, und verwendet die Ergebnisse, um Karten automatisch zu vervollständigen / vorzuschlagen.

Allerdings haben diese Kartennamen mehrere Wörter, und Cmd führt die automatische Vervollständigung vom letzten -Feld bis zum Ende der Zeile aus.

Zum Beispiel:

%Vor%

Ich habe versucht, manuell zu greifen, was ich wollte, aus dem Parameter line , der die gewünschten Ergebnisse von der Datenbank erhält, aber das erste Wort kann nicht überschrieben werden:

%Vor%

Am Ende brauche ich den Auto-Completer, um so zu arbeiten:

%Vor%

Abgesehen von dem oben beschriebenen manuellen Parsing-Versuch, habe ich auch versucht, Leerzeichen durch Pluszeichen zu ersetzen, und festgestellt, dass Cmd auch bei diesen Teilen vollkommen glücklich ist. Das Ersetzen von Leerzeichen durch Unterstriche funktioniert, aber es gibt eine Karte in Unhinged, die _____ heißt, also muss ich durch Akrobatik gehen, um die Strings zu löschen, da ich nicht nur line.replace("_", " ") .

Hier ist ein lauffähiger Testcode:

%Vor%     
Erik Youngren 22.10.2010, 23:43
quelle

3 Antworten

10

Es sollte nicht übermäßig kompliziert sein. Etwas wie das Folgende:

%Vor%     
D Krueger 23.10.2010, 11:21
quelle
0

Sie könnten readline.set_completer_delims('') machen.

Ihre complete_* Funktionen werden jedoch nicht mehr aufgerufen. Sie müssen Cmd.complete oder Cmd.completenames überschreiben. Sehen Sie sich den Quellcode des Moduls cmd für Details an.

    
adw 23.10.2010 08:20
quelle
0

Ich habe die Cmdloop-Funktion überschrieben und es war ziemlich einfach. Ich musste nichts anderes ändern. Kopieren Sie einfach die cmdloop-Funktion aus dem Modul (Code finden Sie unter import cmd , cmd.__file__ ) und fügen Sie die zwei Zeilen zum Ändern der Trennzeichen hinzu:

%Vor%

Das hat es für mich getan. In Ihrem Fall möchten Sie möglicherweise das Trennzeichen entfernen, das die Probleme verursacht.

    
Jay Medina 17.08.2015 18:11
quelle