Emacs Lisp: Wie geht es, ein interaktiver Puffer mit REPL?

8

Stellen Sie sich das Spiel dunnet.el, den eliza doctor oder den IELM-Modus vor ...; Das bedeutet, Antworten zu bewerten und neue Fragen zum Hauptpuffer zu stellen und dann einige Aktionen entsprechend ihren Regeln durchzuführen.

Ich würde so etwas wie einen interaktiven Assistenten erstellen, ABER NICHT die Aufforderung vom Minibuffer als (interaktiv) tut (nicht M-x) ... Ich brauche eine Art von REPL-Schleife. Also die Frage, wie ich Interaktion auf dem Arbeitspuffer (der Hauptbildschirm), wie jeder Text Konversation / Abenteuer, aber zum Aufruf meiner defun'ed Funktionen auf diesem Weg.

Also brauche ich ein grundlegendes elisp Skelett, um eine benutzerdefinierte REPL zu machen. Das Ziel besteht darin, einen Assistenten mit einer natürlichen Sprache zu erstellen, die Anwser zu analysieren und einige Aktionen gemäß den Regeln auszuführen.

Danke für Ihre Zeit,

Steve,

    
user577475 16.01.2011, 15:26
quelle

3 Antworten

5

Sieh dir iielm an, das ist ein elispl repl, das in emacs enthalten ist.

    
user347585 16.01.2011 16:54
quelle
2

Je nachdem, was in Ihrem Puffer passieren kann, können Sie ihm einfach einen Hauptmodus mit einer entsprechenden Neubindung von return geben? (Diese Antwort ist vage vom C-j von Lisp-Interaction-Mode inspiriert)

    
Ulrich Schwarz 16.01.2011 16:14
quelle
0

Sie sollten alle Schlüssel binden, die für die Bewegung in einem Puffer wie C-p C-n, Nach unten Pfeile / Seite hoch / runter verwendet werden, binden Sie sie einfach an (lambda ()) . Ändern Sie die Funktion für C-b und C-f (Pfeil links nach rechts), wenn sich die Cursorposition am Anfang oder Ende der Zeile befindet. Und binden Sie den Return-Schlüssel an die Funktion, die die aktuelle Zeile vom Ende zur optionalen Eingabeaufforderung liest (Sie können Regex verwenden, um die Eingabeaufforderung zu entfernen), was Sie wollen mit dieser Zeichenfolge, und gehen Sie dann zur nächsten Zeile im Puffer und drucken Sie Ihr Ergebnis. p>     

jcubic 23.01.2011 22:12
quelle