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) почти наверняка сработает, а все остальное должно быть в порядке по модулю лишнего консольного окна, о котором вы можете заботиться или не заботиться. Дайте мне знать, как это происходит, и я посмотрю, какую дополнительную помощь я могу предложить.