1) Emacs, скорее всего, запускается в консольном режиме, потому что переменная DISPLAY не установлена; установите эту переменную среды со значением, указывающим на X-сервер, способный принимать клиентов, и вы должны найти лучшие результаты. Вы также можете передать идентификатор дисплея через параметр командной строки --display
или -d
в Emacs, что я и сделаю в следующем примере, потому что я не знаю, как установить переменные env в пакетных файлах Windows:
@echo off
chdir c:\LocalApp\cygwin\bin
start mintty.exe /usr/bin/emacs-X11.exe --display 127.0.0.1:0 %1
Если необходимо, что, вероятно, не так, замените приведенное здесь значение --display
на что-то более подходящее для вашей конфигурации X-сервера.
Это, вероятно, по-прежнему будет отображать консольное окно, так как вы используете команду запуска Windows для запуска неосторожного процесса, который вы затем просите запустить Emacs. Вместо этого вы можете использовать команду запуска Cygwin, которая запускает данный двоичный файл без окна консоли и устраняет избыточный процесс mintty:
@echo off
chdir c:\LocalApp\cygwin\bin
run /usr/bin/emacs-X11.exe --display 127.0.0.1:0 %1
2) Наконец, вам нужно найти способ передать путь к файлу в Emacs в форме, которую он может понять. К сожалению, я почти уверен, что командная интерполяция невозможна в пакетном языке Windows, поэтому вы не можете сделать эквивалент, например, Bash $(cygpath -au %1)
. Возможно, лучшим вариантом может быть запуск пакетного файла Windows с помощью Cygwin Bash, который передает аргумент имени файла в скрипт, который переводит его и запускает Emacs. Например, ваш командный файл может быть
@echo off
chdir C:\LocalApp\cygwin\bin
run sh /path/to/launch-emacs.sh %1
И затем, в файле launch-emacs.sh, у вас может быть что-то вроде:
#!/bin/sh
cd /cygdrive/c/LocalApp/cygwin/bin
/usr/bin/emacs-X11 --display 127.0.0.1:0 `cygpath -au $1`
который переводит путь через cygpath
, затем передает его в Emacs вместе с идентификатором дисплея, как описано выше.
Моя единственная коробка с Windows находится дома, поэтому у меня не было возможности протестировать эти точные сценарии, но я делаю довольно похожие вещи с Emacs на этой машине; при условии, что ваш X-сервер правильно сконфигурирован, материал в 1) почти наверняка сработает, а все остальное должно быть в порядке по модулю лишнего консольного окна, о котором вы можете заботиться или не заботиться. Дайте мне знать, как это происходит, и я посмотрю, какую дополнительную помощь я могу предложить.