Mac'de Emacsdaemon ve Emacsclient


25

OS: OS X 10.9.5, Mavericks

GNU Emacs Rainers-MacBook-Pro-3.local'a ilişkin 2014-04-03 tarihlerinde 24.3.1 (x86_64-apple-darwin13.1.0, Karbon Versiyonu 1.6.0 AppKit 1265.19)

Ben aracılığıyla Emacs yüklü homebrew gelen railwaycat ve güzel çalışıyor - hiçbir şikayet. Termoinalde emac kullanmıyorum ve genellikle uygulama ile başlıyorum.

Dediğim gibi - Şimdiye kadar mutluyum.

Ben sadece doğru yapmayı başaramadığım (daha önce linux altında güzelce çalışan) bir şeyim var, ki:

  1. Girişe başlayan emacs cini kullan
  2. açmak için emacsclient kullanma
  3. emacsdaemon'u kapatın ve oturum kapattıktan sonra tüm dosyaları kaydedin

Bunu kurmamda bana yardımcı olabilecek herhangi bir çalışma tarifi var mı?

Bilgi eklendi

Giriş yaptıktan sonra bir emacs arka plan programı başlatmak için

Bash komutunu çalıştıran bir Automator Uygulaması oluşturdum

/usr/local/bin/emacs --daemon

ve güzel çalışan Login Öğelerine eklendi.

Terminalden daemon kullanılması

Emacs daemon'unu kullanarak faydalanabilirim.

emacsclient .bashrc

Bir emacs terminal oturumunda .bashrc açar.

GUI'den yararlanma

Şimdi soru şu: GUI'den nasıl yararlanabilirim?

Emacsclient'i anladığım gibi, açılacak bir dosya belirtmediğim sürece bir emacsclient açamıyorum.

Emacsclient bir GUI açmak ve daha önce açılmış tüm dosyaları açmak ister misiniz? Mümkün mü?

Kullanabileceğimi öğrendim

emacsclient -c

istediğim şeyi yapmak için bir terminalde - ancak GUI için de aynı şeyi yapabilir miyim?


"GUI'den" burada ne anlama geldiğini anlamıyorum. "Finder'da bir dosyaya çift tıklamak" veya tamamen başka bir şey olabilir.
tarsius

Uygulama Başlatıcı'yı kullanma (örn. Spotlight aracılığıyla)
Rainer

Uygulama Başlatıcı dosyaların seçilmesine izin veriyor mu (daha sonra dosya türü için varsayılan uygulama kullanılarak açılır). Ya da sadece "Uygulamalar"? emacsclientOS X söz konusu olduğunda bir Uygulama değil, yalnızca Emacs(ve yalnızca bu şekilde kurulmuşsa). Açık bir uygulama / pencere seçmek için neden sadece sistem anahtarı bağlayıcılarını kullanmıyorsunuz? (Emacs daemon modunda başlatıldıysa ve henüz çerçeve ("pencere") yoksa işe yaramaz).
tarsius

Emacsclient adında bir uygulamayı tanımladım - bu yüzden Emacsclient uygulaması orada. Açıkçası çalışan bir emacs örneğine geçebilirim - ancak bu yukarıda belirtilen iş akışına bakmanın dışında bir nokta.
Rainer

1
Bu soru cevaplarından neredeyse daha faydalıdır :)
Roy Truelove

Yanıtlar:


6

Her zaman çalışan Emacs.app gerçekten umursamıyorum, ancak yanlışlıkla Emacs sunucusunu öldürmeden pencereyi kapatamam gerçeği sinir bozucu oldu. Ve son kareyi öldürmek için çok uğraşsanız bile, yine de size izin vermiyor: "Tek görünür veya ikonize edilmiş kareyi silmeye çalışın". ... Yani hile yapıyoruz.

Bu çözüm , kapat düğmesini tıklatarak son pencereyi kapatmaya çalıştığınızda yalnızca Emacs'ı ( Command+ gibi h) gizler .

Aşağıdakileri Emacs'ınıza bir yere yerleştirin:

(defadvice handle-delete-frame (around my-handle-delete-frame-advice activate)
  "Hide Emacs instead of closing the last frame"
  (let ((frame   (posn-window (event-start event)))
        (numfrs  (length (frame-list))))
    (if (> numfrs 1)
      ad-do-it
      (do-applescript "tell application \"System Events\" to tell process \"Emacs\" to set visible to false"))))

Ve "Kullanıcılar ve Gruplar> Giriş Öğeleri" ne Emacs ekleyin ve "Gizle" onay kutusunu tıklayın.

Sizin Emacs da aramak gerekir init (start-server)yerde.

emacsclientEmacs'ı öne getirmek için bu sarıcıyı kullanıyorum :

#!/bin/sh
osascript -e 'tell application "Emacs" to activate'
exec emacsclient "$@"

Sorunlar:

  • Emac'leri etkinleştirme / gösterme işlemi tüm pencereleri öne çıkarır . Bu biraz can sıkıcı bir durum.
  • Dock'taki Emacs simgesine tıklamak, rastgele bazen yeni bir pencere oluşturuyor gibi görünmektedir. Ama her zaman değil.
  • TODO: Belki son karede Command+ yapmak Emacs'ı wda gizliyor?
  • Düzenleme ile YENİ: tüm pencereler simge durumuna küçültüldüğünde yuva simgesini tıklamak, bunlardan birini otomatik olarak en üst düzeye çıkarmaz.

Bu, @ noaham'ın Emacs'ı en aza indirmeyi öneren cevabına ve bu cevabı da son pencereyi kapatmaya çalışırken nasıl bağlanacağını açıklıyor.

DÜZENLE:

Kaynak ararken, hangi aramalar için "anahtar bağlama" bulundumac-apple-event-mapmac-ae-reopen-application . mac-ae-reopen-applicationGörünür ve ikonize edilmiş kareleri kontrol ediyor gibi görünüyor ve bir şekilde gizli olanı özlüyor olmalı. Bu muhtemelen bir hatadır.

Kolay düzeltme, init'inizdeki anahtar bağlamayı devre dışı bırakmaktır:

(define-key mac-apple-event-map [core-event reopen-application] nil)

Bu yeni bir küçük hata ortaya çıkarmaktadır: tüm pencereler küçültüldüğünde dock simgesine tıklamak, bunlardan birini otomatik olarak büyütmez. Doğru düzeltme yeniden yazmak olacaktır mac-ae-reopen-application, ancak emacs ve elisp'i çok az tanırım.


Herhangi biri rasgele yeni pencerenin nasıl durdurulacağını anlarsa (lütfen madde 2). Belki de bu kurulum için beni hala rahatsız eden tek şey kaldı.
parent5446

@ parent5446, yapıldı! Tıpkı ilk düzeltme kadar hack ama işe yarıyor
Kasım'da 19:14

Teşekkürler! Kesmek bir kısmı beni rahatsız etmiyor çünkü çoğu zaman Emacs'ı yine de iskeleden başlatmam.
parent5446

4

Yamamoto Mitsuharu emacs limanı maalesef çoğunu desteklemiyor (bu konuya bakınız ). Bu, emacs arka planını terminalden başlatamayacağınız ve emacsclient ile bir gui penceresi açamayacağınız anlamına gelir.

İşte yaptığım şey: init.el'imde giriş yaptım (server-start)ve Emacs.app'i başlattım. Buradaki sıkıntı, bunun el ile küçültmem gereken bir pencere açması.

Sonra emacscaşağıdaki ile adlandırılan bir bash betiği var

#!/bin/bash                                                                          
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
emacsclient -n -c

Daha sonra aşağıdakileri içeren applescript ile bir uygulama oluşturun

tell application "Emacs"
    activate
end tell
do shell script "~/bin/emacsc"

-nBayrağı emacsclient'e iletmek önemlidir, aksi halde bir seferde yalnızca bir müşteri açmak için emacsc uygulamasını kullanabilirsiniz. Yol değişkenini ayarlamak, OS X'in doğru emacsclient sürümünü bulabildiğinden emin olmanızı sağlar.

Emacs'a "aktif hale getirmelerini" söylemek, müşteri pencerenizin ön planda açılmasını sağlar.

Dediğim gibi sıkıntı, oturum açma sırasında emacs penceresini manuel olarak küçültmeniz ve ardından iskelede oturmasını sağlamanızdır. Bundan kaçınmanın bir yolu, oturum açtıktan sonra Emacs'ı otomatik olarak "gizlemektir" ancak sonra etkinleştirilmesi, gösterilmesinin engellenmesine neden olacaktır.


2

Emin railwaycat Emacs düzenli ev demlemek formülünden farklı olduğunu değilim ama yapardın ikincisi ile ln -sfv /usr/local/opt/emacs/*.plist ~/Library/LaunchAgentsaday olacağını, hangi emacs --daemongirişte.

Pist, formülde HERE-belge olarak dahil edilmiştir . Kabul etmeniz gereken tek şey, satırdaki emacs uygulamanızın yolunu değiştirmektir <string>#{opt_bin}/emacs</string>.

BTW, eğer seçeneği takarsanız, Emacs'ı Homebrew Emacs ile OS X uygulaması olarak da alabilirsiniz --cocoa. (Ayrıca brew linkapps, bağlantı kurmak /Applicationsveya bağlantıyı kendiniz oluşturmak için daha sonra da çalışmanız gerekir .


1

Mac’te çalışanlar zamanın% 90’ını piyasaya sürmeyi başardı . Bunları kullanıcı giriş / çıkış da dahil olmak üzere birçok tetikleyicide çalıştırabilir. Piyasaya sürülen çeşitli şeyleri görüntülemek ve düzenlemek için Lingon adında güzel bir Mac Uygulaması var . Emacs wiki'de ve example config dosyası da dahil olmak üzere, bundan bahseder . Fakat bu sizin endişelerinize hitap etmiyor gibi gözüküyor, yani oturum açarken daemonu nasıl kapatacağınız.


0

Bunun gibi bir AppleScript uygulaması oluşturun:

tell application "Terminal"
do shell script "/usr/local/bin/emacsclient -c"
endtell

Yolu ayarlamanız gerekebilir veya yolu tamamen bırakabilirsiniz. Ayrıca henüz çalışmıyorsa, arka planda çalışan bir meraklıyı kullanabilirsiniz.


@Rainer Bununla herhangi bir başarınız var mı? Ayrıca, emacsclient kullanarak bağlanmadan önce gerekli olduğunda arka plan planını başlatan meraklı uygulaması aramayı da isteyebilirsiniz. "applescript emacsclient" google aramayla iyi sonuçlar veriyor.
tarsius

Hala daha iyi bir cevap mı bekliyorsun yoksa bunu kabul etmek mümkün mü?
tarsius
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.