2009-10-08 15 views
9

Bu oldukça basit bir sorudur, ancak yeni bir dosyayı ayrı bir çerçevede (yeni çerçeve) emaclardan açmak veya dosyayı bir emacsclient örneğinde açmak arasındaki pratik fark nedir? Bir terminalde çalışıyorsanız farkın açık olduğunu görebiliyorum ... ama emacsclient ek olarak bu tampon bellekte (tampon-menü) ya da ido-mode tarafından erişilen tamponların listesini bu özel emacsclient örneğinde açılan tamponlarla kısıtlayabilir mi?Emacs - emacsclient veya yeni kare?

cevap

5

İki durum arasında, sunucunun C-x #'u (server-edit) etkinleştirmek için arabellek-yerel durumunu ayarlamasından başka hiçbir fark yoktur.

Eğer şu tavsiye ile soruyorsun gibi Sen M-x list-buffers davranışı sınırlayabilir

: (

(defadvice list-buffers-noselect (before list-buffers-noselect-limit-to-those-for-emacsclient activate) 
    "When the current buffer is a being viewed by an emacclient, restrict the buffers to those associated with the emacsclient" 
    (when (and (null (ad-get-arg 1)) server-buffer-clients) 
    (let ((blist (delete-dups (reduce 'append 
             (mapcar (lambda (proc) (process-get proc 'buffers)) 
               server-buffer-clients))))) 
     (ad-set-arg 1 blist)))) 
Şimdi

Eğer emacsclient tarafından ziyaret edilen bir tampon içerisinde M-x buffer-menu yaptığınızda, yalnızca aynı istemci tarafından ziyaret diğer tampon bkz lar). Tampon bir emacsclient tarafından ziyaret edilmediğinde normal çalışır.

ido kullanmayın, ancak özelleştirmenin benzer olacağını düşünün (bu öneri işe yaramıyorsa).

Ayrıntılar, emacsclient çalıştırdığınızda, açılan arabelleklerin sunucu işlemiyle ilişkilendirilmesidir (birden fazla olabilir, çünkü aynı dosyayı birden çok emacsclient çağrısıyla açabilirsiniz). Bir ara belleğin sunucu istemcileri, arabellek yerel değişkeni server-buffer-clients'da depolanır.

, emacsclient belirli bir çağırma ile ilişkili olan tamponlar bulmak bu emacsclient için süreç bulmak ve yapmak için: (process-get proc 'buffers) ( proc özellikle emacsclient işlemdir burada - server-buffer-clients bulunan listesinin elemanları biri).

Bu, tüm önerileri yapar.

+0

Teşekkürler! Jed'in belirttiği gibi, yeni bir çerçeve açıldığında fark yoktur, ancak emacsclient -t ile yeni bir dosya açtığımda yukarıdaki tavsiyede bulunur. İlginç ... ido modu ve muhtemelen ibuffer için buna bakacağım. Çok takdir! – hatmatrix

+0

Bunu ido ile çalıştınız mı? – tatsuhirosatou

3

Emacsserver çalıştırıldığı sürece emacs 23'te fark yoktur. Arabellek listesi her birinde aynı olacaktır.

+0

Teşekkürler - evet çoğunlukla doğru görünüyor ancak Trey'in işaret ettiği gibi, müşterinin belirli bir dosyaya erişme konusunda emacs konusunda bir miktar farkındalık var gibi görünüyor ... ama girişiniz için teşekkürler! – hatmatrix