2011-01-16 19 views
8

Wyobraź sobie grę dunnet.el, lekarza Elizy lub tryb IELM ...; Chodzi o to, aby ocenić odpowiedzi i zadać nowe pytania na temat głównego bufora, a następnie podjąć pewne działania zgodnie z ich elispostycznymi regułami.Emacs Lisp: Jak, interaktywny bufor z REPL?

Chciałbym stworzyć coś w rodzaju interaktywnego asystenta, ALE NIE prosi się o minibufor, ponieważ (interaktywne) robi (nie robi M-x) ... Potrzebuję rodzaju pętli REPL. Pytanie więc, w jaki sposób uzyskać interakcję z buforem roboczym (głównym ekranem), jak każdy tekst konwersacyjny/przygodowy, ale w celu wywołania moich zdyskwalifikowanych funkcji w ten sposób.

Potrzebuję więc podstawowego szkieletu elizacyjnego, aby stworzyć niestandardowy REPL. Celem jest stworzenie asystenta z naturalnym językiem, następnie przeanalizowanie anobserów i wykonanie pewnych działań zgodnie z zasadami.

Dziękuję za poświęcony czas,

Steve,

+0

Czy wystarczy ustawić bufor w pewnym trybie głównym z odpowiednim ponownym związaniem klucza powrotu? –

Odpowiedz

2

W zależności od tego, co można przejść w buforze, można po prostu dać jej główną tryb z odpowiednim ponownego wiązania return? (Ta odpowiedź jest niejasno inspirowana przez C-j Lp-Interaction-Mode)

+0

Cóż, to powinien być tryb główny, interaktywny REPL, powrót do wiązania ... Moim celem jest zbudowanie asystenta tekstowego, który mógłby interpretować język naturalny i przekonwertować go na wywołania funkcji elisp. Pozwolę sobie podać przykład: Wyobraźmy sobie wydawcę, który chce zintegrować zwykły tekst z jakimś źródłem Tex (LaTex, Texinfo ...). Po pierwsze, w oknie dialogowym można poprosić o tytuł, autora, rozmiar książki, zarys, pliki tekstowe z głównych tematów ... Albo wyobraź sobie REPL z naturalnym językiem, który parsuje zapytania do selekcji sqlite ... Coś jak tekstowy frontend. – user577475

+1

Prawdopodobnie chcesz ustawić własną "surową" mapę klawiszy, aby użytkownik nie mógł swobodnie poruszać się w buforze. Sprawdź kod źródłowy trybu-warunku, robi on coś takiego w domyślnym "trybie char". – Thomas

5

Sprawdź ielm, który jest repliką elisp zawiera emacs.

0

Powinieneś związać wszystkie klawisze, których używasz do przemieszczania się w buforze, jak C-p C-n, Strzałki w górę/strona w górę/w dół, po prostu powiąż je z (lambda()). zmienić funkcję dla C-b i C-f (strzałki w lewo w prawo), jeśli pozycja kursora znajduje się na początku lub na końcu linii. I przywiąż klucz Return do funkcji, która odczytuje bieżącą linię od końca do opcjonalnego pytania (możesz użyć Regex do usunięcia monitu) rób, co chcesz z tym ciągiem, a następnie przejdź do następnego wiersza w buforze i wydrukuj wynik.