Como interromper o emacs quando o controle-g não funciona em arquivos muito grandes?

16

Eu me deparei com algum tipo de O (n ^ 2) ou pior comportamento ao visualizar arquivos muito grandes (por exemplo, 128MB) no Emacs e pular para o final do arquivo. Eu acho que pode ter a ver com o meu algoritmo de coloração para colorir o texto contextualmente. Se eu digitar control-g (keyboard-quit), a operação não será afetada. Eu gostaria de alguma maneira de recuperar minha sessão do emacs sem apenas matá-lo. Eu tentei enviar um SIGINT, mas o emacs acabou de sair. Há algum sinal que eu possa enviar ou de alguma outra maneira (talvez em um depurador) para forçar a ação que está sendo executada a desistir e retornar o controle para mim?

    
por WilliamKF 05.09.2013 / 02:04

2 respostas

8

Eu duvido que seja o modo de bloqueio de fonte. Isso provavelmente só faz seções perto do que é visível. Provavelmente está copiando dados na memória.

sigusr1

sigusr2

These events are generated when the Emacs process receives the signals SIGUSR1 and SIGUSR2. They contain no additional data because signals do not carry additional information. They can be useful for debugging (see Error Debugging).

Source: GNU Emacs Lisp Reference Manual: Misc Events

Eu não sei o que ele faria (ou qual versão do emacs você está executando), mas você poderia tentar um sinal PROVABILMENTE não-destrutivo (USR1 ou USR2).

$ kill -USR1 pid

Ou você pode ir dormir e ver se ele se recupera.

    
por 11.12.2013 / 08:25
2

Não tenho conhecimento de nenhum sinal que o emacs faz, mas você poderia usar o Emacs Server colocando server-start no seu arquivo ~ / .emacs para poder fazer o RPC na sua instância do emacs em execução.

Então quando você quiser matar o emacs e escrever, você pode chamar do seu shell emacsclient -e '(save-buffers-kill-emacs t)' .

    
por 09.02.2014 / 07:53