Emacs, “open -a” ile açıldığında dosyaları yeni bir çerçevede açar


20

Komut satırından Emac'ları çağırabilmek ve çalışmazsa grafiksel Emacs başlatmak veya zaten çalışan bir Emac'ta bir dosyayı ziyaret etmek istiyorum. Bunu yapmanın emacsclient"doğru" yolu olduğunu bildiğim bir şey yapmaya çalıştım , ancak OS X'te çok fazla sorun yaşadım, rasgele kilitlenirdi emacs --daemonya da makineyi kapatırken ya da yeniden başlatırken işlem askıda kalıyordu , ve genel lapa lapa olma. Bunun işe yaramasını isterken, şu anda open -agerçekten daha iyi çalışıyor, bunun dışında aşağıda açıklayacağım bir sorun dışında:

Bu open -agibi kullanarak :

$ open -a Emacs file.txt

Çalışmıyorsa Emacs'ı başlatacak ve dosyayı ziyaret edecektir. Ancak eğer mevcut tampon değilken bunu yaparsam *scratch*, dosya yeni bir çerçevede (yani yeni bir sistem penceresi) açılır.

İşte örnek bir oturum:

$ open -a Emacs file.txt

Bu, Emacs'ı başlatır ve file.txt dosyasını açar, bu yüzden içinde bu tamponla birlikte tek bir kare vardır. Ben geçerseniz *scratch*tampon ve bunu:

$ open -a Emacs file1.txt

Bu dosyayı aynı çerçevede açar. Şimdi bu dosya açık olan tek bir kare var ve eğer bunu yaparsam:

$ open -a Emacs file2.txt 

Yeni bir kare açar ve aynı anda iki karenin açılmasını sağlar.

Komut satırı ile uğraşmayı Emacs'a --argsgeçmek için anahtarı kullanmaya çalıştım open, ancak bu sonraki çağrılar için işe yaramıyor gibi gözüküyor:

$ open -a Emacs --args --eval='(print "foo")'
$ open -a Emacs --args --eval='(print "bar")'

Bu yalnızca mesaj tamponunda "foo" yu basar ... ikinci kez Emacs ön plana çıkarılır ancak hiçbir mesaj yazdırılmaz.

openZaten çalışan uygulamalarla nasıl iletişim kurduğumdan emin değilim , nasıl öğrenebileceğimi bilen var mı? Veya Messagesarabellekten daha çok olup bitenler hakkında daha ayrıntılı bir kayıt tutmanın bir yolu var mı? Yukarıdaki oturum sırasında bu tampon belleğe ilginç bir şey yazılmıyor, bu yüzden bazı Emacs Lisp'i istediğimi yapmak için nasıl hackleyebileceğimi bilmiyorum ...

Teşekkürler!


OSX hakkında hiçbir şey bilmiyorum, bu yüzden somut bir şey sağlayamıyorum. Bununla birlikte, hata ayıklama olsaydım, bazı sözdizimi hatalarını içine atardım find-fileve sonra debug-on-errort'ye ayarlarım ve Emacs'ın nasıl çağırıldığına dair bazı ipuçları için yığın izini kontrol ederdim . Bir hata eklemek find-file, işlev tanımını lisp çizik arabelleğine kopyalamak ve içine bir çağrı eklemek kadar basit olabilir error(örneğin (error "cause stack trace"). KAYNAK DOSYASINI DEĞİŞTİRMEYİNİZ find-file- - bunu daima çizilmeye çalışabilir!
Joe Casadonte

@Joe Teşekkürler! Bu oldukça iyi bir fikir, geleceği düşüneceğim. Aslında kullanmaya çalışıyor sona erdi emacsclienttekrar ve onu başlayan (server-start)benim de init.eldaha iyi çalışıyor gibi görünüyor emacs --daemondenedim ilk kez çalışıyorlardı budur açılışta yukarı, at emacsclient.
michiakig

Yanıtlar:


26

Cevap burada: emacs değişkeni orijinal çerçevede "birlikte aç"

Daha yeni emacs sürümlerinde varsayılan ayarlarda yapılan değişiklik. Eklemek:

(setq ns-pop-up-frames nil)

.emacs dosyasına.

Bunu bulduğum için çok mutluyum.


Bu çok yardımcı oldu! Bir diğer adla birlikte open -a /Applications/Emacs.app $1işler iyi çalışıyor gibi görünüyor! Sunucuyu benim çıkarımda başlattığımı unutmayın, örneğin git için emac'lar var.
Dror
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.