3

我想打开一个带有项目根目录的 cmd.exe 窗口,因为它是当前目录。

这是我的 elisp 代码:

(defun open-cmd-and-cd-to-project-root()
  (interactive)
  (projectile-mode t)
  (cd (projectile-get-project-root))
  (shell))

它在 Emacs 缓冲区中打开一个 cmd shell。但我希望它打开一个在 Windows 中运行的新本机 cmd.exe 窗口,而不是在 Emacs 中运行的缓冲区。我怎样才能做到这一点?

4

2 回答 2

6

做这个:

(let ((proc (start-process "cmd" nil "cmd.exe" "/C" "start" "cmd.exe")))
  (set-process-query-on-exit-flag proc nil))

set-process-query-on-exit-flagtonil是这样它就不会在关闭时打扰(emacs我们无论如何都不能杀死它)。

于 2012-11-22T09:14:33.297 回答
1

根据系统配置,该start命令将启动本机终端或资源管理器窗口。

我相信选择取决于您是否允许explorershell 的多个实例(文件浏览器),但可能涉及其他一些配置(本地组策略等)

M-! start

您的困惑源于这样一个事实,即M-!创建一个临时 shell 用于由默认处理器(cmd.exe或者更确切地说cmdproxy.exe在这种情况下)执行命令,因此从 shell 启动shell不会产生单独的终端窗口。

start是一个cmd.exe内置的,它打开一个新的 shell 窗口(同样,取决于系统配置,以及传递给它的参数)。

于 2021-02-05T12:38:12.373 回答