从终端运行emacs lisp命令

4

如何从一个较劣的Shell中以编程方式调用Emacs Lisp函数?

例如,我在使用一些Emacs能够识别并尝试自动扩展的字符的Shell中,所以我想运行这个命令(setq comint-input-autoexpand nil)将其应用于当前Shell。

我现在可以通过在Shell中输入该命令的文本,并在其中运行类似eval-region的命令来实现此目的,但我希望我的Shell能够自行调用此命令。


感谢回复的人们,但是似乎我的问题不太清楚。 我可以通过输入elisp表达式、选择它,并调用“eval-region”来实现我的目标,但这需要手动输入。 我想要的是一种自动化的方式,让我的Shell能够向Emacs发送命令以更改其自己的设置。

“emacsclient”建议似乎朝着正确的方向,但我担心Windows没有完全支持它的选项,并且不清楚这样的命令是否会影响我从中调用它的缓冲区,因为我会通过外部“shell”命令进行操作。

我想要的是某种转义序列,可以向Emacs发出信号“这个elisp表达式是给你的”。我猜可能有一种打开到Emacs的socket,并通过这种方式发送命令的方法,但我仍然面临着选择应用该命令的缓冲区的问题。再次说明,这在Windows上可能更加困难/不可能,因此现在我将依靠绑定到按键序列的命令。

2个回答

2

看起来你需要使用M-x eval-expression,默认绑定为M-:(Alt+冒号,即Alt+Shift+分号)。表达式将在调用eval-expression时所处的上下文中进行评估,因此,如果表达式设置了一个缓冲区局部变量,则该变量将设置为当前缓冲区。


2
你可以使用emacsclient来实现这一功能。你需要在emacs中作为服务端启动,可以通过在你的.emacs文件中添加(server-start)或者使用--daemon参数后台启动emacs。
你可以像下面这样在shell中执行elisp代码:
emacsclient --eval '(setq comint-input-autoexpand nil)'

我不相信这会在所需的缓冲区中设置变量的缓冲区本地值,不会吧? - Ryan C. Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接