2011-01-16 14 views
8

Imagine el juego dunnet.el, el médico de eliza o el modo IELM ...; Esto es, evaluar respuestas e incitar nuevas preguntas en el buffer principal, luego realizar algunas acciones de acuerdo con sus reglas de elisp.Emacs Lisp: ¿Cómo, un búfer interactivo con REPL?

Crearía algo así como un asistente interactivo, PERO NO le pediría a minibuffer que lo haga (interactivo) (no lo hace M-x) ... Necesito un tipo de bucle REPL. Entonces la pregunta es cómo obtener interacción en el búfer de trabajo (la pantalla principal), como cualquier texto conversacional/aventura, pero para llamar a mis funciones eliminadas de esta manera.

Así que necesito un esqueleto elisp básico, para hacer un REPL personalizado. El objetivo es crear un asistente con un lenguaje natural, luego analizar las notas y realizar algunas acciones según las reglas.

Gracias por su tiempo,

Steve,

+0

¿Sería suficiente configurar un búfer en algún modo principal con un enlace apropiado de la tecla de retorno? –

Respuesta

2

Dependiendo de lo que puede ir encendido en su memoria intermedia, puede que acaba de darle un modo mayor con una adecuada re-unión de return? (Esta respuesta vagamente inspirada por Lisp-Interaction-Mode's C-j)

+0

Bueno, ese debería ser un modo principal, un REPL interativo, un retorno de enlace ... Mi objetivo es crear un asistente de texto que pueda interpretar el lenguaje natural y convertirlo en llamadas de función elisp. Permítanme poner un ejemplo: Imagine un editor que quiere integrar texto sin formato a algún tipo de fuente de Tex (LaTex, Texinfo ...). En primer lugar, el diálogo podría solicitar un título, un autor, un tamaño de libro, un esquema, los principales archivos de texto ... O imagine un REPL con lenguaje natural que analiza las consultas en una selección de sqlite ... Algo así como una interfaz textual. – user577475

+1

Es probable que desee configurar su propio mapa de teclas "en bruto" para que el usuario no pueda moverse libremente en el búfer. Comprueba el código fuente de term-mode, hace algo así en su "modo-char" predeterminado. – Thomas

5

Eche un vistazo a ielm, que es una elisp repl incluida con emacs.

0

Debería unir todas las teclas que se usan para mover en el búfer como C-p C-n, Flechas arriba/abajo/arriba de la página solo conéctelas al (lambda()). cambie la función para C-b y C-f (Flechas izquierda y derecha) si la posición del cursor está al principio o al final de la línea. Y enlace la tecla Volver a la función que lee la línea actual desde el final hasta la solicitud opcional (puede usar Regex para eliminar el mensaje) haga lo que quiera con esa cadena, y luego vaya a la siguiente línea en el búfer e imprima su resultado.

Cuestiones relacionadas