Emacs Lisp:如何使用REPL创建交互式缓冲区?

Emacs Lisp:如何使用REPL创建交互式缓冲区?,emacs,lisp,buffer,interactive,read-eval-print-loop,Emacs,Lisp,Buffer,Interactive,Read Eval Print Loop,想象一下dunnet.el游戏、eliza医生或IELM模式。。。;也就是说,评估答案并在主缓冲区上提示新问题,然后根据其elisp规则执行一些操作 我想创建一个类似于交互式助手的东西,但不会像(交互式)那样从minibuffer中进行提示(不执行M-x)。。。我需要一种REPL循环。因此,我的问题是如何在工作缓冲区(主屏幕)上进行交互,就像任何文本对话/冒险一样,但以这种方式调用我定义的函数 所以我需要一个基本的elisp框架,来制作一个定制的REPL。目标是使用自然语言制作助手,然后解析An

想象一下dunnet.el游戏、eliza医生或IELM模式。。。;也就是说,评估答案并在主缓冲区上提示新问题,然后根据其elisp规则执行一些操作

我想创建一个类似于交互式助手的东西,但不会像(交互式)那样从minibuffer中进行提示(不执行M-x)。。。我需要一种REPL循环。因此,我的问题是如何在工作缓冲区(主屏幕)上进行交互,就像任何文本对话/冒险一样,但以这种方式调用我定义的函数

所以我需要一个基本的elisp框架,来制作一个定制的REPL。目标是使用自然语言制作助手,然后解析Anwser,并根据规则执行一些操作

谢谢你抽出时间


Steve,

根据缓冲区中可能发生的情况,您能给它一个主模式,并适当地重新绑定
return
?(这个答案隐约受到Lisp交互模式的C-j的启发)

查看ielm,它是emacs附带的一个elisp repl。

您应该绑定所有用于在缓冲区中移动的键,如C-p C-n、上下箭头/上下翻页,只需将它们绑定到
(lambda())
。若光标位置在行首或行尾,则更改C-b和C-f(左右箭头)的功能。并将Return键绑定到函数,该函数将当前行从结尾读取到可选提示(您可以使用Regex删除提示),对该字符串执行任何您想要的操作,然后转到缓冲区中的下一行并打印结果。

好的,这应该是一个主模式、一个交互REPL、一个返回重新绑定。。。我的目标是构建一个文本助手,它可以解释自然语言并将其转换为elisp函数调用。让我举一个例子:想象一个出版商想要将纯文本集成到某种Tex源(LaTex、Texinfo…)。首先,对话框可以要求标题、作者、书籍大小、大纲、主要内容文本文件。。。或者想象一个REPL使用自然语言将查询解析为sqlite select的。。。类似文本前端的东西。您可能希望设置自己的“原始”键映射,以便用户不能在缓冲区中自由移动。检查term mode的源代码,它在默认的“char mode”中执行类似的操作。在某个主要模式下设置一个缓冲区并适当地重新绑定返回键是否足够?