4

如何从劣质 shell 以编程方式调用 emacs lisp 函数?

例如,我在一个使用一些 emacs 识别并尝试自动扩展的字符的 shell 中,所以我想运行这个命令(setq comint-input-autoexpand nil)来将它应用到我所在的 shell。

我现在可以通过在 shell 中输入命令的文本并在其上运行类似的东西来做到这一点eval-region,但我希望我的 shell 能够自己调用这个命令。


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

“emacsclient”的建议似乎是在正确的方向,但我担心 Windows 不完全支持它的选项,并且不清楚这样的命令会影响我调用它的缓冲区,因为我会通过外部“壳”命令。

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

4

2 回答 2

2

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

于 2013-01-23T00:24:26.433 回答
2

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

您可以像这样在 shell 中评估 elisp 代码:

emacsclient --eval '(setq comint-input-autoexpand nil)'
于 2013-01-23T16:22:43.870 回答