Я использую Cygwin-версию Emacs. Все просто отлично, за исключением некоторых странностей при использовании оболочки Emacs (оболочка M-x). Оболочка Emacs использует Cygwin's Bash. Самая большая проблема сейчас - невозможность отправить SIGINT в оболочку, чтобы прервать текущую команду. Например, я часто использую ssh для входа на удаленный хост, а затем "tail -f" файл. Я не могу вырваться из хвоста команды. При использовании оболочки Emacs в Unix / Linux нажатие C-c C-c (comint-interrupt-subjob) отправит SIGINT в оболочку (bash), и команда tail (или что-то еще) будет прервана, как и ожидалось.
Для быстрого и простого примера запустите «M-x shell», затем «sleep 30» и попробуйте прервать команду sleep. Вы можете выйти (C-g) и делать другие вещи в Emacs, но оболочка Emacs зависает на время выполнения команды sleep.
У меня такое ощущение, что это как-то связано с разницей в отправке / обработке сигналов в Cygwin, в отличие от сигналов в Unix. Поскольку оболочка Cygwin bash должным образом реагирует на сигналы, я должен предположить, что есть какой-то способ заставить Emacs отправлять SIGINT в оболочку bash способом, который он понимает. Есть идеи?
Кстати, я использовал Emacs eshell, term и ansi-term, но я предпочитаю shell по ряду причин. Я также использую mintty и GNU Screen, и у меня нет претензий, но использование оболочки Emacs и обработка моих терминальных сессий как текстовых файлов - замечательная вещь.