2013-05-21 139 views
6

Windows 7. Emacs 24.3.1。 Git 1.8.1.msysgit.1。我在相当于.emacs文件如下:Windows,Emacs,Git Bash和shell命令

(if (equal system-type 'windows-nt) 
    (progn (setq explicit-shell-file-name 
       "C:/Program Files (x86)/Git/bin/sh.exe") 
      (setq shell-file-name "bash") 
      (setq explicit-sh.exe-args '("--login" "-i")) 
      (setenv "SHELL" shell-file-name) 
      (add-hook 'comint-output-filter-functions 'comint-strip-ctrl-m))) 

这个伟大的工程,当我想要做M-X外壳:我可以弹出打开shell并键入“LS”。

但是,M-x shell命令正在失败。当我尝试通过shell命令(它应该在* Shell命令输出*缓冲区中打印其输出时,根据Ch shell命令)运行“ls”时,我收到单个错误消息:

“搜索程序:权限被拒绝,bash“

在谷歌上有一些非常古老的建议,关于调用过程和关于让shell在Emacs中工作的许多问题。请注意,M-x外壳工作的很好,我想要的是shell命令。

(原因:https://github.com/donkirkby/live-py-plugin#installing-the-emacs-mode

回答

11

尝试设置这两个变量指向同一个可执行文件,并确保路径是在exec-path

(setq explicit-shell-file-name 
     "C:/Program Files (x86)/Git/bin/bash.exe") 
(setq shell-file-name explicit-shell-file-name) 
(add-to-list 'exec-path "C:/Program Files (x86)/Git/bin") 
+0

在此之间,并将“C:/ Program Files(x86)/ Git/bin”添加到Windows路径中,shell-command现在可以使用。谢谢! –

1

我知道这是一个老问题,但我发现当我在同一个问题上寻求帮助时,所以这里是我用于特定用例的解决方案,以防将来帮助别人。

我在所有使用emacs的计算机之间同步我的.emacs.d,其中包括两台Linux & Windows计算机。我插入到这一点我​​文件自动这一问题适当地在Windows环境中处理:

;; Set Windows-specific preferences if running in a Windows environment. 
(defun udf-windows-setup() (interactive) 
    ;; The variable `git-shell-path' contains the path to the `Git\bin' 
    ;; file on my system. I install this in 
    ;; `%USERPROFILE%\LocalAppInfo\apps\Git\bin'. 
    (setq git-shell-path 
     (concat (getenv "USERPROFILE") "\\LocalAppInfo\\apps\\Git\\bin")) 
    (setq git-shell-executable 
     (concat git-shell-path "\\bash.exe")) 
    (add-to-list 'exec-path git-shell-path) 
    (setenv "PATH" 
      (concat git-shell-path ";" 
        (getenv "PATH"))) 
    (message "Windows preferences set.")) 

(if (eq system-type 'windows-nt) 
    (udf-windows-setup)) 

请注意,变量git-shell-path将需要定义基础上,你必须在系统上安装git。我将它安装在我使用它的Windows机器上的%USERPROFILE%\LocalAppInfo\apps\Git中。