Обработка сигналов под оболочкой Emacs и Cygwin - PullRequest
3 голосов
/ 22 февраля 2011

Я использую 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 и обработка моих терминальных сессий как текстовых файлов - замечательная вещь.

1 Ответ

0 голосов
/ 19 июля 2011

Я думаю, что это больше проблема с командной строкой как tty.У меня были проблемы с отправкой правильных сигналов в оболочку emacs внутри Cygwin и Cygwin в целом, поэтому я нашел эту программу под названием puttycyg.У Putty отличная оболочка, и я хотел что-то подобное для Cygwin, поэтому я использую это: http://code.google.com/p/puttycyg/.

Я создал ярлык на своем рабочем столе, чтобы было легче добраться до него.Вы можете создать сеанс и назвать его «cygwin», а затем создать ярлык для исполняемого файла и использовать -load "cygwin".

...