Also, angefangen hat alles als ich auf Kommandozeilenoptionen zum Verändern des IPython-Prompts gestoßen bin. Ich sehe nämlich echt keinen Mehrwert darin, dass ein toller Zähler mitläuft, der sich stetig erhöht, wenn man einen Befehl abgeschickt hat. Mir ist der Prompt der ganz "normalen" Python-Shell viel lieber.
Im Zuge dessen wurde mir bewusst (und jetzt fallt bitte nicht vom Stuhl), dass man IPython ja konfigurieren kann - und das nicht zu knapp. Die Dateien finden sich unter Linux sinnigerweise im Verzeichnis `~/.ipython`.
Ich picke mir jetzt nur ein paar Punkte aus der Vorlage `ipythonrc` raus. Eben jene, die ich als verändernswert für mich erachtete. Die Datei selbst wird in den integrierten Kommentaren als deprecated bezeichnet. Man solle das neuere Interface - eine "echte" Python-Datei - benutzen. Da dort aber nicht soviele Beispiele drin sind und ich zu faul gewesen bin, die Befehle auf die andere API zu übertragen, widme ich mich wider der Empfehlung erstmal der besagten Datei. Ich gehe im Folgenden davon aus, dass der interessierte Leser jetzt die Datei im Editor aufgemacht hat und die Suchfunktion zum Auffinden der Punkte nutzen wird.
Das erste ist `confirm_exit` (bei mir in Zeile 196). Dieses ist halt die Nachfrage, ob denn wirklich beendet werden soll. Ich habe den Wert von 1 auf 0 gesetzt, weil ich sowas nicht brauche.
Und nun kommen wir auch schon zum Prompt. Es gibt `prompt_in1` und `prompt_in2`, wobei letzteres die berühmten 3 Punkte (`...`) sind, wenn man innerhalb einer Verschachtelung ist. Diese sehen bei mir jetzt so aus:
Code: Alles auswählen
# Prompt strings
# Most bash-like escapes can be used to customize IPython's prompts, as well as
# a few additional ones which are IPython-specific. All valid prompt escapes
# are described in detail in the Customization section of the IPython HTML/PDF
# manual.
# Use \# to represent the current prompt number, and quote them to protect
# spaces.
#prompt_in1 'In [\#]: '
prompt_in1 '\C_Normal>>> '
# \D is replaced by as many dots as there are digits in the
# current value of \#.
#prompt_in2 ' .\D.: '
prompt_in2 '\C_Normal... '
Danach kommt noch der Prompt für den Returnwert nach einem Befehl, welchen ich gemäß der Standardshell von Python überhaupt nicht gesondert benannt haben möchte:
Code: Alles auswählen
#prompt_out 'Out[\#]: '
prompt_out ''
Ich möchte ebenfalls keine extra neue Zeile nach einer Ausgabe haben, also: `nosep 1`.
Dann noch ein paar Einstellungen für `readline`. Ich möchte, dass er meine angefangene Eingabe nach einem Druck auf die Tab-Taste mit dem erstmöglichen Vorschlag komplettiert und im Zweifel so oft auf `Tab` drücken bis ich das richtige habe. Also so herum auskommentiert:
Code: Alles auswählen
#readline_parse_and_bind tab: complete
readline_parse_and_bind tab: menu-complete
Code: Alles auswählen
readline_parse_and_bind "\C-l": possible-completions
Code: Alles auswählen
import readline
readline.parse_and_bind('set completion-query-items 1000')
readline.parse_and_bind('set page-completions no')
So, dass war's auch schon. Eventuell hat es ja jemandem geholfen...