16

Я столкнулся с некоторым типом O(n ^ 2) или хуже при просмотре очень больших (например, 128 МБ) файлов в Emacs и переходе к концу файла. Я думаю, что это может иметь отношение к моему алгоритму окраски, чтобы окрашивать текст контекстно. Если я наберу control-g (клавиатура-выход), операция не будет затронута. Я хотел бы как-нибудь восстановить мой сеанс Emacs, не убивая его. Я попытался отправить SIGINT, но emacs только что вышел. Могу ли я послать какие-либо сигналы или каким-либо другим способом (возможно, в отладчике), чтобы заставить любое выполняемое действие отказаться и вернуть мне контроль?

2 ответа2

8

Я сомневаюсь, что это режим блокировки шрифтов. Это, вероятно, только делает разделы рядом с тем, что видно. Это, вероятно, копирование данных в памяти.

sigusr1

sigusr2

Эти события генерируются, когда процесс Emacs получает сигналы SIGUSR1 и SIGUSR2 . Они не содержат никаких дополнительных данных, потому что сигналы не несут дополнительную информацию. Они могут быть полезны для отладки (см. « Отладка ошибок»).

Источник: GNU Emacs Lisp Справочное руководство: Разные события

Я не знаю, что он будет делать (или какую версию emacs вы используете), но вы можете попробовать НАДЕЖНЫЙ неразрушающий сигнал (USR1 или USR2).

$ kill -USR1 pid

Или вы могли бы пойти спать и посмотреть, излечится ли это.

2

Я не знаю о какой-либо обработке сигналов, которую выполняет emacs, но вы можете использовать Emacs Server, поместив server-start в ваш файл ~/.emacs, чтобы вы могли выполнять RPC на своем работающем экземпляре emacs.

Затем, когда вы хотите убить emacs и написать, вы можете вызвать из своей оболочки emacsclient -e '(save-buffers-kill-emacs t)' .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .