<\body> Vorgabemäÿig überprüft Ihr Dokument nach möglichen Ergänzungen Ihrer Eingabe, wenn Sie auf die -Taste drücken. Innerhalb einer Sitzung möchten Sie das Verhalten vielleicht anpassen, z.B. um vorhandene Befehle zu vervollständigen. dafür müssen Sie nur die Konfigurations-Option <\scheme-fragment> (:tab-completion #t) in der Initialisierungs-Datei .scm> so setzen, dass geeignete Anforderungen an die Anwendung richtet, wenn die -Taste innerhalb einer solchen Sitzung gedrückt wird. Diese Befehle haben die Form <\quotation> <\framed-fragment> <\verbatim> (complete ) Hier steht für das Zeichen (ASCII 16). Der > ist die komplette Zeichenkette, in der auftrat und > eine Ganzzahl, die die Position des Cursors angibt, bei der gedrückt wurde. erwartet von der Anwendung ein Tupel mit allen möglichen Ergänzungen der Form <\quotation> <\framed-fragment> scheme:(tuple >>)> Hier ist > die Teil-Zeichenkette bis zur Cursorposition und > bis > ist eine Liste von möglichen Ergänzungen, die an der aktuellen Cursorposition eingefügt werden könnten. Wenn keine gefunden werden können Sie eine leere Kette zurückgeben. <\remark> Im Prinzip sollte der Eingabe-Ergänzungs-Mechanismus auch im Mathematik-Modus arbeiten. Aber > entspricht dann der Linearisierung der Eingabe. <\remark> Die Art und Weise wie Befehle an die Anwendung schickt, kann ganz ähnlich wie die Eingabe angepasst werden. Dafür gibt es die Konfigurations-Option , die ganz ähnlich wie die Option arbeitet. > Ein sehr rudimentäres Beispiel dafür, wie der Ergänzungs-Mechanismus arbeitet, findet sich in dem Plugin, das die folgenden Dateien umfasst: <\verbatim> \ \ \ \ \ \ \ \ \ \ \ \ Die Begrüÿungs-Botschaft in sorgt für einen Teil der Konfiguration:t <\cpp-fragment> cout \\ DATA_BEGIN \\ "verbatim:"; format_plugin (); cout \\ "We know how to complete 'h'"; cout \\ DATA_END; fflush (stdout); Hier lautet so <\cpp-fragment> void format_plugin () { \ \ // The configuration of a plugin can be completed at startup time. \ \ // This may be interesting for adding tab-completion a posteriori. \ \ cout \\ DATA_BEGIN \\ "command:"; \ \ cout \\ "(plugin-configure complete (:tab-completion #t))"; \ \ cout \\ DATA_END; } In der Hauptschleife kümmern wir uns zuerst um die normale Eingabe: <\cpp-fragment> char buffer[100]; cin.getline (buffer, 100, '\\n'); if (buffer[0] != DATA_COMMAND) { \ \ cout \\ DATA_BEGIN \\ "verbatim:"; \ \ cout \\ "You typed " \\ buffer; \ \ cout \\ DATA_END; } Dann behandeln wir den Fall, dass eine Aufforderung zur Ergänzung kommt: <\cpp-fragment> else { \ \ cout \\ DATA_BEGIN \\ "scheme:"; \ \ cout \\ "(tuple \\"h\\" \\"ello\\" \\"i there\\" \\"ola\\" \\"opsakee\\")"; \ \ cout \\ DATA_END; } fflush (stdout); Wie Sie sehen, wird der eigentliche Befehl ignoriert. Unser Beispiel ist wirklich sehr rudimentär. <\initial> <\collection>