Elisp,调用 progn 会产生与单独调用不同的结果

Elisp, calling with progn yields different result than calling individually

在 Emacs 中(C-:),这 2 个调用产生不同的结果:

(progn (run-python (python-shell-parse-command) nil nil) (python-shell-send-buffer))

(run-python (python-shell-parse-command) nil nil)
# then, in another C-:
(python-shell-send-buffer)

在第一个调用中,我收到 python shell 并出现以下错误:

>>> Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name '__PYTHON_EL_eval' is not defined

为什么这两个 elisp 代码的结果不同?我试图将这些命令放在一个函数中,但如果它们一起产生错误,我就不能。

正如@Lindydancer 所建议的那样,run-python 选择了 comint 缓冲区,因此 python-shell-send-buffer 将被调用 that 作为当前缓冲区,这可能是'如你所愿。

另见 C-hf save-current-buffer

另请注意,下级进程是异步启动的,因此 run-python 可能 return 在进程准备好接收输入之前。您可能需要考虑也可能不需要考虑这一点。


一般来说 没有理由期望 运行 两件事通过 progn 直接顺序产生与两个完全独立的调用相同的结果这些东西中的每一个,不仅被时间隔开,而且被 Emacs 命令循环的行程隔开,其中包含所有中间执行的代码。