2011-01-16 12 views
8

Immagina il gioco dunnet.el, il medico eliza o la modalità IELM ...; Si tratta di valutare le risposte e suggerire nuove domande sul buffer principale, quindi eseguire alcune azioni in base alle loro regole elisp.Emacs Lisp: Come, un buffer interattivo con REPL?

Vorrei creare qualcosa come un assistente interattivo, MA NON richiede il minibuffer come (interattivo) (non facendo M-x) ... Ho bisogno di un tipo di loop REPL. Quindi la domanda è come ottenere l'interazione sul buffer di lavoro (la schermata principale), come qualsiasi testo di conversazione/avventura, ma per chiamare le mie funzioni defunate in questo modo.

Quindi ho bisogno di uno scheletro elisp di base, per creare un REPL personalizzato. L'obiettivo è quello di fare un assistente con un linguaggio naturale, quindi analizzare gli anser e fare alcune azioni secondo le regole.

Grazie per il vostro tempo,

Steve,

+0

Sarebbe sufficiente impostare un buffer in alcune modalità principali con una rilegatura appropriata della chiave di ritorno? –

risposta

2

A seconda di ciò che si può andare avanti nel buffer, si può solo dare un modo maggiore con un appropriato ri-legame di return? (Questa risposta è vagamente ispirata al C-j di Lisp-Interaction-Mode)

+0

Beh, questa dovrebbe essere una modalità principale, un REPL interativo, un re-binding di ritorno ... Il mio obiettivo è creare un assistente testuale che possa interpretare il linguaggio naturale e convertirlo in chiamate di funzioni elisp. Lasciatemi fare un esempio: immagina un editore che voglia integrare il testo in chiaro con una fonte Tex (LaTex, Texinfo ...). Innanzitutto, la finestra di dialogo potrebbe richiedere un titolo, un autore, una dimensione di un libro, una struttura, i file di testo di mainmatter ... O immaginare un REPL con un linguaggio naturale che analizzi le query su una selezione sqlite ... Qualcosa come un frontend testuale. – user577475

+1

Probabilmente vorresti impostare la tua keymap "grezza" in modo che l'utente non possa muoversi liberamente nel buffer. Controlla il codice sorgente della modalità termine, fa qualcosa di simile nella sua "modalità char" predefinita. – Thomas

5

Controlla ielm, che è un sostituto elisp incluso in emacs.

0

È necessario associare tutti i tasti che consentono di spostarsi nel buffer come C-p C-n, Frecce in su/pagina su/giù per unirli a (lambda()). cambia funzione per C-b e C-f (frecce a sinistra a destra) se la posizione del cursore è all'inizio o alla fine della linea. E collega il tasto Invio alla funzione che legge la riga corrente dalla fine al prompt facoltativo (puoi usare Regex per rimuovere il prompt) fai quello che vuoi con quella stringa, quindi vai alla riga successiva nel buffer e stampa il risultato.

Problemi correlati