Як перервати emacs, коли control-g не працює у дуже великих файлах?


16

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


Я не знаю, як зробити блокування шрифтів переривчастим, але ви можете знайти щось корисне на цій сторінці Emacs Wiki для прискорення блокування шрифту .
Аарон Міллер

5
Ви намагалися вдарити втечу 3 рази?
yPhil

Так, я вважаю, що тут винен власний код блокування шрифтів. Уважно вивчіть свої font-lock-keywordsреджекспи, щоб спробувати знайти проблему.
Дрю

1
EMACS: вісім мегабайт і постійно
міняються

2
Втрата втечі тричі для мене нічого не робить.
WilliamKF

Відповіді:


9

Я сумніваюся, що це режим блокування шрифту. Це, мабуть, лише розділи біля того, що видно. Ймовірно, це копіювання даних у пам'ять.

sigusr1

sigusr2

Ці події генеруються, коли процес Emacs приймає сигнали SIGUSR1та SIGUSR2. Вони не містять додаткових даних, оскільки сигнали не несуть додаткової інформації. Вони можуть бути корисними для налагодження (див. Налагодження помилок ).

Джерело: Довідковий посібник GNU Emacs Lisp: Різні події

Я не знаю, що б це робило (або яку версію emacs ви використовуєте), але ви можете спробувати ПРОБАВНО неруйнівний сигнал (USR1 або USR2).

$ kill -USR1 pid

Або ви могли б заснути і подивитися, чи відновиться він.


Цікаво, наскільки зайнятий (процесор і диск) ваша машина. Це може трохи розповісти про те, що він робить. .. і ви, можливо, зможете запустити ще одну копію emacs та "убити -USR1 pid", щоб побачити, що станеться перед тим, як зробити той, який вас хвилює.
9mjb

3
Нічого собі, відправка kill -USR2на emacs-mac працювала на мене у подібній ситуації - завантажила великий файл у режимі js2 та розпочала пошук. USR2 вийшов з пошуку та увійшов до налагоджувача. Набагато краще, ніж вбивати процес!
Вільям

Я не згоден з вашими сумнівами. Вбивство працювало на мене. Це підштовхнуло мене до налагоджувача і області шрифту-lock-default-fontify-region, де він застряг.
Брайан К.

2

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

Тоді, коли ви хочете вбити emacs і написати, ви можете зателефонувати зі своєї оболонки emacsclient -e '(save-buffers-kill-emacs t)'.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.