Принять к сведению информацию о Cygwin связанных на вики EMACS: http://www.emacswiki.org/emacs/TrampMode
Я не использую EmacsW32, но я успешно использовать бродяга через SSH с Cygwin и NT Emacs.
У меня никогда не было TRAMP, работающего без агента ssh (т. Е. Запрос учетных данных) - как вы заметили, он просто зависает, но он отлично работает с одним, поэтому я не тратил время на его решение. Предполагая, что вы также рады использовать агента (и вы уже дали ключи и добавлены authorized_keys файлы по мере необходимости), подход, который работает для меня:
- Выполнить SSH-агент из Cygwin.
- Запустите NT Emacs через cygwin (чтобы он наследовал переменные среды ssh-agent).
- Используйте 'sshx' как метод TRAMP (вы можете указать его вручную в каждом пути к файлу, но я рекомендую сделать его по умолчанию, с
(setq tramp-default-method "sshx")
).
Эти моменты все покрыты в вики, но вы также можете автоматизировать вещи несколько:
На шаге 1, мой Баш профиль автоматически запускает SSH агента, если он еще не работает, или мне подсказывает для моей кодовой фразы, если моя личность истекла. (См. Код ниже)
На шаге 2, цель моего ярлыка Windows, для запуска Emacs выглядит следующим образом:
C:\cygwin\bin\bash.exe --login -c "env HOME=\"`cygpath '%APPDATA%'`\" /cygdrive/c/emacs/emacs-23.1/bin/runemacs.exe"
--login
аргумент означает, что мой профиль Баш выполнен, который гарантирует, что шаг 1 всегда заботятся, прежде чем запускается emacs.
(Установка HOME
не является необходимым для TRAMP, но %APPDATA%
по умолчанию под NT Emacs, и это предотвращает домашний каталог Cygwin принимать преимущество, поэтому держать вашу Emacs конфига в соответствии независимо от того, используется ли этот ярлык для запуска .)
Наконец, вот код из моего cygwin .bash_profile, который управляет моим ssh-agent. Это немного хаки, но это работает для меня.
Обратите внимание, что я истекаю личность после 4 часов (14400 секунд). TRAMP может висеть после того, как это произойдет (как упоминалось ранее, я так и не получил запрос на учетные данные), поэтому имейте в виду эту проблему. Введите C-g
, чтобы остановить попытку подключения. Чтобы возобновить подключение, вы можете просто запустить еще одну оболочку cygwin, повторно ввести свою кодовую фразу, а затем TRAMP снова будет счастлив. Иногда он оставался невосприимчивым, но убийство * tramp * buffer будет сортировать это.Разумеется, не истекающая ваша личность должна обойти эту проблему, если это будет приемлемо.
SSH_ENV="${HOME}/.ssh/environment"
# Run ssh-agent, if one is not already running
function start_agent {
echo "Initialising new SSH agent..."
/usr/bin/ssh-agent -t 14400 | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" >/dev/null
/usr/bin/ssh-add;
}
# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" >/dev/null
#ps ${SSH_AGENT_PID} doesn't work under cywgin
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ >/dev/null || {
start_agent;
}
#if our ssh-added identity has expired (see -t option to ssh-agent)
#then we need to re-add it
if ! /usr/bin/ssh-add -l >/dev/null; then
/usr/bin/ssh-add;
fi
else
#no ssh-agent running at the moment
start_agent;
fi
вы пробовали 'C: \ cygwin' с косой черты в другую сторону? – Mica