Windows, Emacs, Git Bash i polecenie powłoki


Windows 7. Emacs 24.3.1. Git 1.8.1.msysgit.1. Mam następujący plik w moim odpowiedniku .emacs:
(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)))

To działa świetnie, kiedy chcę

M-x shell
: Mogę otworzyć powłokę i wpisać „ls”.
ale

Polecenie powłoki M-x

zawodzi. Kiedy próbuję uruchomić "ls" za pomocą polecenia powłoki (które powinno wypisać swoje wyjście do bufora * Shell Command Output *, zgodnie z

C-h f do polecenia powłoki
), Pojawia się jeden komunikat o błędzie:
"Searching for program: permission denied, bash"
Google ma kilka bardzo starych sugestii dotyczących

proces połączenia

i wiele pytań na StackOverflow o tym, jak uruchomić powłokę w Emacsie. Proszę to zanotować

M-x shell

działa świetnie i chciałbym pracować za pomocą polecenia powłoki.
(Przyczyna:

https://github.com/donkirkby/l ... -mode
https://github.com/donkirkby/l ... -mode
)
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spróbuj ustawić obie zmienne tak, aby wskazywały na ten sam plik wykonywalny i upewnij się, że ścieżka znajduje się w lokalizacji
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")
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wiem, że to starsze pytanie, ale znalazłem je, gdy szukałem pomocy w tej samej sprawie, więc oto rozwiązanie, którego używam w moim konkretnym przypadku użycia, na wypadek, gdyby pomogło to komuś w przyszłości.
Synchronizuję plik
.emacs.d
między wszystkimi komputerami, na których używam emacsa, w tym zarówno Linux & amp; Windows. Wkleiłem to do mojego pliku
init.el
, aby automatycznie rozwiązać ten problem w środowisku 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))

Zwróć uwagę, że zmienna
git-shell-path
musi być zdefiniowana w zależności od tego, gdzie w systemie jest zainstalowany
git
. Instaluję go w
% USERPROFILE% \ LocalAppInfo \ apps \ Git
na jednym komputerze z systemem Windows, na którym go używam.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Używając GitBash, możesz użyć skryptu lein zamiast skryptu lein.bat. Umieść skrypt lein w katalogu o nazwie
bin
na swoim koncie użytkownika Windows. GitBash musi mieć ten katalog
bin
w swoim pliku wykonywalnym
PATH
, więc możesz uruchomić
lein
w dowolnym miejscu.
Przy takim podejściu nie potrzebujesz żadnej konfiguracji w Emacs Lisp.
Zobacz moją pełną odpowiedź
https://coderoad.ru/39761234/

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się