Bunu bir process filter function kullanarak yapabilirsiniz.
Bir işlem filtresi işlevi, ilişkili işlemden standart çıktısını alan bir işlevdir. Bir işlem bir filtreye sahipse, bu işlemden çıkan tüm çıktılar filtreye iletilir. İşlem arabelleği, yalnızca filtreli olduğu zaman işlemden çıkış için doğrudan kullanılır.
[...]
Birçok filtre fonksiyonları bazen (ya da her zaman) hiçbir filtre olduğunda Emacs eylemlerini taklit sürecin tamponu içinde çıkışını yerleştirin.
start-process
bir değişkene saklayabileceğiniz Lisp'te yeni alt işlemi açılımı bir süreç nesnesi döndüren, proc
söylüyorlar. İşlemin çıktısını sadece ilişkili çıktı tamponuna ekleyen basit bir filtre işlevi yazabilirsiniz, böylece point
arabelleğin sonuna taşınır.
(defun my-insertion-filter (proc string)
(when (buffer-live-p (process-buffer proc))
(with-current-buffer (process-buffer proc)
;; Insert the text, advancing the process marker.
(goto-char (process-mark proc))
(insert string)
(set-marker (process-mark proc) (point)))))
kullanın set-process-filter
sizin süreçlere bu filtre fonksiyonunu atamak. işlemi sonlandırıldı sadece bir kez tampon sonuna atlamak için yeterli olmadığını
(set-process-filter proc 'my-insertion-filter)
Alternatif olarak, bir sentinel kullanmak isteyebilirsiniz.
bir proses nöbetçi ilişkili süreç , sonlandırmak durdurmak veya devam etmesini (sürecin kendi eylemleri Emacs tarafından gönderilen veya neden olsun) sinyalleri dahil olmak üzere herhangi bir nedenle durumunu her değiştirdiğinde çağrılan bir işlevdir süreç. Işlemin çıkması durumunda işlem sentinel de denir.
(defun my-sentinel (proc event)
(when (buffer-live-p (process-buffer proc))
(with-current-buffer (process-buffer proc)
(end-of-buffer))))
(sürecin sonunda bu fonksiyon kaydırır sürecin sonunda sadece gerçekleşebilir denir her zaman tampon unutmayın. Eğer gerçekten sadece yapmak istiyorum Eğer İşlem sonlandırıldığında, event
dizgisinin "finished\n"
dizgisi olup olmadığını kontrol edin.)
Bu sentinel'i işleminize atamak için set-process-sentinel
kullanın.
(set-process-sentinel proc 'my-sentinel)
Bu sorunun bir varyantım var. Belirli bir tuş kombinasyonunu bir kabuk komutunu (kabuk-komut fonksiyonu aracılığıyla) çalıştırmak için .emacs'de global-set-anahtar kullanıyorum.OP ile aynı sorunu yaşıyorum; Ben sadece * Kabuk Komutu Çıkışı *'nın en üstünü değil, altını görüyorum. Yukarıdaki proses filtre maddelerini .emacs dosyama körü körüne yazdım ve bir "Uyarı değeri değişken olarak geçersiz: proc" set-process-filter komutundan geliyor. Proc'un kabuk arabelleği ile ilişkili işlemin adı olduğunu varsayalım ama 0 lisp bilgim var. M-x'den kaçmak mı gerekiyor? –
@KevinBuzzard Sorununuz bir yorumda yanıtlanamayacak kadar karmaşıktır; daha ayrıntılı yanıtlar için uygun bir soru sormayı düşünün. – Thomas