В emacs, как мне настроить оболочку, используемую для запуска процессов при использовании M-x comint-run - PullRequest
0 голосов
/ 15 февраля 2010

Я запускаю Emacs на Windows. Я использую cygwin, и у меня также установлены версии ruby ​​и rdebug для cygwin. Когда я вызываю M-x comint-run ENTER rdebug ENTER, я заметил, что он пытается запустить rdebug.bat через командную строку Microsoft вместо использования bash для запуска rdebug (без .bat). Я бы хотел, чтобы comint-run использовал bash для вызова любого процесса, который ему предлагается запустить. Любые идеи о том, как я могу это сделать?

Если вас интересует, почему я это делаю, см. Здесь длинный рассказ: Идеи по устранению неполадок с ошибкой emacs: "apply: порождение дочернего процесса: ошибка формата exec"

Незначительный прогресс

Я немного покопался в коде elisp для comint-run, и похоже, что он, наконец, вызывает start-process - к сожалению, здесь я застрял, поскольку start-process - это функция, определенная в исходном коде C. И start-process, по некоторым причинам, похоже, игнорирует значения явного-shell-file-name и shell-file-name.

Ответы [ 4 ]

2 голосов
/ 15 февраля 2010

У меня есть это в моем .emacs

(setenv "SHELL" "C:/cygwin/bin/bash.exe")
(setq shell-file-name "C:/cygwin/bin/bash.exe")
(add-hook 'comint-output-filter-functions 'shell-strip-ctrl-m nil t)

Я не хакер elisp, и я скопировал и вставил этот код откуда-то давно Я не знаю, поможет ли это вам. Но по крайней мере он запускает bash, когда я делаю "M-x shell".

1 голос
/ 02 марта 2011

Emacs start-process, насколько я могу судить, вообще не использует никакой оболочки - он запускает указанную вами программу без промежуточных процессов. Естественно, если вы укажете командный файл (.BAT), он будет выполняться с помощью командной оболочки Microsoft.

Если у вас несколько файлов с одинаковыми именами (один из которых заканчивается на .BAT, а другой - нет), я предлагаю вам убедиться, что правильный файл выполняется, указав полный путь. Это не Emacs, но Windows запускает командную оболочку для интерпретации командного файла, который Emacs попросил его выполнить.

1 голос
/ 05 марта 2010

Несмотря на большую отладку elisp, я не смог найти способ настроить процесс запуска для использования Cygwin Bash. Теперь, когда я оглядываюсь назад на это, для меня это имеет смысл: если предположить, что emacs использует start-process для запуска различных процессов, которые ему также нужны внутренне, start-process всегда нужно вызывать оболочку, которая зависит от основной операционной система, а не любые пользовательские настройки.

1 голос
/ 15 февраля 2010

Ответ Йоргена Лундберга наверняка сработает, однако Emacs сначала смотрит на значение переменной explicit-shell-file-name, чтобы определить, какую оболочку запустить для интерактивной подчиненной оболочки (проверьте ссылку для документации). Таким образом, верный ответ будет установлен:

(setq explicit-shell-file-name "C:/cygwin/bin/bash.exe")
...