2016-04-07 24 views
1

In IPython ist es ziemlich einfach zu tab-Vervollständigung für benutzerdefinierte Objekt bereitzustellen: Definieren Sie einfach eine __dir__ Methode, die eine Liste von Zeichenfolgen an das Objekt zurückgibt.IPython benutzerdefinierte Tab-Vervollständigung für Benutzer magische Funktion

IPython bieten uns auch eine Möglichkeit, unsere eigenen benutzerdefinierten magischen Funktionen mit dem praktischen register_line_magic Dienstprogramm zu definieren. In einigen ~/.ipython/profile_default/startup/magictest.py:

from IPython.core.magic import register_line_magic 

@register_line_magic 
def show(dataType): 
    # do something depending on the given `dataType` value 

Nun meine Frage ist: Wie Auto-Vervollständigung dieser magischen Funktion zur Verfügung zu stellen?

Nach this email, sollte man in IPython.core.interactiveshell.InteractiveShell.init_completer() suchen Sie nach einem Beispiel der Magie Funktion Beender wie %reset, ‚% cd‘, etc ...

jedoch in der gleichen Startdatei als dem, in dem meine Magie Funktion definiert ist, hat der folgende Code nicht:

from IPython.core.interactiveshell import InteractiveShell 

def show_complete(): 
    return ['dbs', 'databases', 'collections'] 

InteractiveShell._instance.set_hook(
    'complete_command', show_complete, str_key='%show') 

im IPython Schale, %show TAB löst nichts (print-Anweisungen in der Funktion zeigen, dass die Funktion nicht einmal genannt wird) eingeben.

Kann mir jemand auf einige Dokumentationen oder Beispiele hinweisen, wie man solche Benutzer-magischen Befehlsparameter in den Ipython-Startup-Dateien definiert?

Danke!

Antwort

1

Sie können diese verwenden:

def load_ipython_extension(ipython): 
    def apt_completers(self, event): 
     """ This should return a list of strings with possible completions. 

     Note that all the included strings that don't start with event.symbol 
     are removed, in order to not confuse readline. 
     """ 

     return ['update', 'upgrade', 'install', 'remove'] 

    ipython.set_hook('complete_command', apt_completers, re_key = '%%apt') 

%% apt ist die magische Stichwort