在MS Windows上使用Emacs的"Mx term":错误产生子进程:无效参数

fni*_*sen 11 emacs bash shell terminal term

每当我尝试从我的Windows发行版GNU Emacs启动Mx术语时,我都会收到错误消息:

apply: Spawning child process: invalid argument
Run Code Online (Sandbox Code Playgroud)

接受默认程序运行("bash.exe"或"zsh.exe",来自Cygwin,并出现在我的Windows PATH环境变量中).

Mx shell可以与Cygwin的Zsh/Bash一起使用.但是我想使用Term来获得更多功能......

有帮助吗?

Ale*_*iev 11

根据我的经验,Windows下不支持Emacs中的终端模拟器(术语,术语,多项).看起来主要原因是它们都依赖于对Windows不提供的终端(stty等)的低级支持.试图通过编辑term.el中对例如/ bin/sh的引用来强制Emacs使用Cygwin bash也无济于事.它可能在Cygwin Emacs中工作,但我很久没有使用它了,因为原生的W32 Emacs好多了(对我来说).Shell模式适用于Cygwin bash或Windows cmd(通过cmdproxy,这是Emacs安装的一部分).如果你这样做,你可以支持ANSI颜色

(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
Run Code Online (Sandbox Code Playgroud)

我尝试了很多次eshell,但最终使用了bash的shell模式,因为我倾向于使用管道和重定向.您是否希望使用需要全功能终端支持的特定应用程序?我top一开始不知道,但后来才开始使用M-x proced.

更新:term,ansi-termmulti-term 在Cygwin的emacs的工作.


Nei*_*and 7

这是尝试记录有关消息“生成子进程:无效参数”的更一般的答案,该消息在各种情况下由emacs生成。我在Windows 7上使用的是emacs 25.0.50.1,但是之前我已经在较早的版本中进行了研究,因此我认为没有任何相关的更改。由于某种原因,即使debug-on-error设置了此错误,它也不会启动调试器。然而,似乎总是由功能所产生的误差start-processsubr.el(在顶部口齿不清目录)。因此M-x debug-on-entry RET start-process RET,您可以输入,然后执行引起错误的任何措施。然后,Emacs将显示一个回溯缓冲区,其第二行将显示传递给start-process。最后一个参数应该是可执行文件的名称。在所有遇到“生成子进程:无效参数”错误的情况下,可执行文件实际上都不存在。然后,您需要确定emacs从何处获取文件名以及如何更改它。您可以从回溯缓冲区的其余部分中获得一些线索。

对于该M-x term命令,使用的可执行文件是具有非nil值的以下各项的第一项:

  • lisp变量explicit-shell-file-name(输入后可以自定义C-h v RET explicit-shell-file-name RET
  • 环境变量 ESHELL
  • 环境变量 SHELL
  • 硬编码值 /bin/sh

(您可以通过查看term.el顶部lisp目录中的代码来查看此内容。)