【问题标题】:How to open the native cmd.exe window in Emacs如何在 Emacs 中打开本机 cmd.exe 窗口
【发布时间】:2012-11-22 02:32:50
【问题描述】:

我想以项目根目录作为当前目录打开一个 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 中运行的缓冲区。我该怎么做?

【问题讨论】:

  • 你能改写一下这个问题吗?我不明白这个问题。
  • @alinsoar:在 gvim.exe 中,我可以通过执行命令 :!cmd 打开一个新的 cmd 终端窗口。我如何在 Emacs 中做到这一点?
  • 首先,我从来没有用过比尔盖茨的窗户,所以我不知道窗户。第二。 "open a new cmd terminal window by execute the command :!cmd" 不是一个正确的表达,所以我不得不猜测。是否要使用 Meta-! 运行命令?
  • z_axis:我不明白他想要什么。我还猜想他想要“M-!”。
  • @alinsoar:在 Ubuntu 中我可以通过 Meta-! gnome-terminal 启动真实终端,但在 Windows 上我无法通过 Meta-! cmd 启动真实终端。

标签: emacs elisp


【解决方案1】:

这样做:

(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-flagnil 是这样它就不会在关闭 emacs 时烦恼(无论如何我们不能杀死它)。

【讨论】:

  • @angus 你能告诉我如何从你的代码中创建一个函数,以便我可以把它放在我的 .emacs 文件中并绑定一个键吗?不幸的是,我缺乏编程技能。
  • @KeksDose 把它放在defun 表单中:(defun start-cmd () (interactive) 我的代码在这里 )。然后用M-x start-cmd 调用它。
  • 工作得很好,所以很容易在命令窗口中的 windows 上启动 latexmk。这使得观看 pdflatex 运行变得容易......
  • 要打开 cmd 到特定目录,请执行以下操作:(defun start-cmd () (interactive) (let ((proc (start-process "cmd" nil "cmd.exe" "/C" "start" "cmd.exe" "/K" "cd" "c:\\starting\\folder"))) (set-process-query-on-exit-flag proc nil)))
【解决方案2】:

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

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

M-! start

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多