从下一个shell运行emacs lisp命令

从下一个shell运行emacs lisp命令,shell,emacs,command,elisp,Shell,Emacs,Command,Elisp,如何从低级shell以编程方式调用emacs lisp函数 例如,我所在的shell使用emacs识别的一些字符并尝试自动展开,因此我希望运行此命令(setq comint input autoexpand nil),将其应用于我所在的shell 现在,我可以通过在shell中输入命令文本并在其上运行类似于eval region的操作来实现这一点,但我希望我的shell能够调用此命令本身 感谢那些回应我的人,但我的问题似乎还不清楚。我可以通过输入一个elisp表达式,选择它并调用它的“eval

如何从低级shell以编程方式调用emacs lisp函数

例如,我所在的shell使用emacs识别的一些字符并尝试自动展开,因此我希望运行此命令
(setq comint input autoexpand nil)
,将其应用于我所在的shell

现在,我可以通过在shell中输入命令文本并在其上运行类似于
eval region
的操作来实现这一点,但我希望我的shell能够调用此命令本身


感谢那些回应我的人,但我的问题似乎还不清楚。我可以通过输入一个elisp表达式,选择它并调用它的“eval region”来完成我想要的,但这需要手动输入。我想要的是一种自动化的方法,这样我的shell就可以向emacs发送一个命令来更改自己的设置

“EmacClient”的建议似乎方向正确,但我担心Windows不完全支持其选项,而且不清楚这样的命令是否会影响我调用它的缓冲区,因为我将通过外部“shell”命令来执行此操作


我想要的是某种转义序列,它向emacs发出信号“这个elisp表达式是给你的”。我猜可能有一种方法可以打开一个套接字到emacs,并以这种方式发送命令,但我仍然存在选择要应用命令的缓冲区的问题。同样,这在Windows中可能更加困难/不可能,因此我现在将依赖绑定到键序列的命令。

听起来您正在寻找默认绑定为M-:(Alt+冒号,即Alt+Shift+分号)的
M-x eval表达式。当调用
eval expression
时,表达式将在您所处的任何上下文中求值,因此如果表达式设置了缓冲区局部变量,则将为当前缓冲区设置该变量。

您可以使用EmacClient来执行此操作。您需要将emacs作为服务器启动,或者使用
.emacs
中的
(服务器启动)
,或者使用
--daemon
作为后台进程启动emacs

您可以在shell中计算elisp代码,如下所示:

emacsclient --eval '(setq comint-input-autoexpand nil)'

我不相信这会在所需的缓冲区中设置变量的缓冲区局部值,是吗?