Control-g çok büyük dosyalarda çalışmadığında emacs nasıl kesilir?


16

Emacs çok büyük (örneğin 128 MB) dosyaları görüntülerken ve dosyanın sonuna atlama O (n ^ 2) bir tür veya daha kötü davranış içine koştum. Metni bağlamsal olarak renklendirmek için renklendirme algoritmamla ilgili olması gerektiğini düşünüyorum. Control-g (klavye-quit) yazarsam işlem etkilenmez. Emacs oturumumu öldürmeden kurtarmanın bir yolunu istiyorum. Bir SIGINT göndermeyi denedim, ama emacs yeni çıkmıştı. Gönderebileceğim sinyaller var mı, yoksa herhangi bir işlemin vazgeçip kontrolü bana geri göndermeye zorlamak için başka bir yol var mı (belki bir hata ayıklayıcıda)?


Yazı tipi kilidini kesilebilir hale getirmenin bir yolunu bilmiyorum, ancak yazı tipi kilidini hızlandırma konusunda bu Emacs Wiki sayfasında bir şeyler bulabilirsiniz .
Aaron Miller

5
3 kez kaçmayı denedin mi?
yPhil

Evet, bence kendi yazı tipi kilit kodunuz muhtemelen hatalı. font-lock-keywordsSorunu bulmaya çalışmak için normal ifadelerinizi dikkatle inceleyin .
Drew

1
Emacs: sekiz megabayt ve sürekli takas :-)
user829755

2
Üç kez kaçmak benim için hiçbir şey yapmaz.
WilliamKF

Yanıtlar:


9

Yazı tipi kilit modu olduğundan şüpheliyim. Bu muhtemelen sadece görünür olanın yakınındaki bölümleri yapar. Muhtemelen bellekteki verileri kopyalamaktadır.

sigusr1

sigusr2

Bu olaylar Emacs işlemi sinyalleri aldığında SIGUSR1ve oluşur SIGUSR2. Ek veri içermediğinden sinyaller ek bilgi içermez. Hata ayıklama için yararlı olabilirler (bkz. Hata Hata Ayıklama ).

Kaynak: GNU Emacs Lisp Başvuru Kılavuzu: Diğer Etkinlikler

Ne yapacağını (veya emacs'ın hangi sürümünü çalıştırdığınızı) bilmiyorum, ancak Olası bir tahribatsız sinyali (USR1 veya USR2) deneyebilirsiniz.

$ kill -USR1 pid

Ya da uyuyabilir ve düzelip düzelmediğini görebilirsiniz.


Makinenizin ne kadar meşgul (CPU ve disk) olduğunu merak ediyorum. Bu size ne yaptığı hakkında biraz bilgi verebilir. .. ve emac'lerin başka bir kopyasını çalıştırabilir ve önem verdiğinizi yapmadan önce ne olacağını görmek için bu yeniyi "kill -USR1 pid" i çalıştırabilirsiniz.
9jjb

3
Vay, gönderme kill -USR2için Emacs'ta-mac js2 modunda büyük bir dosya yüklenir ve bir ISearch başladı - benzer bir durumda benim için çalıştı. USR2 aramadan çıkar ve hata ayıklayıcıya girer. Süreci öldürmekten çok daha iyi!
William

Şüphelerinize katılmıyorum. Öldürmek benim için çalıştı. Beni hata ayıklayıcıya tekmeledi ve font-lock-default-fontify-bölgesi sıkıştığı yerdi.
Brian C.

2

Emacs yaptığı herhangi bir sinyal işleme farkında değilim ama emacs server-startçalışan örneğinizde RPC yapabilirsiniz böylece ~ / .emacs dosyanızı koyarak Emacs Server kullanabilirsiniz .

Sonra emacs öldürmek ve yazmak istediğinizde kabuğunuzdan arayabilirsiniz emacsclient -e '(save-buffers-kill-emacs t)'.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.