Pencere sistemli OS X'te daemon olarak emacs


13

OS X 10.6 üzerinde gnu emacs 23.3.1 kakao inşa çalıştırıyorum.
Aşağıdakileri ~ / Library / LaunchAgents / gnu.emacs.daemon.plist'e ekledim.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
 <plist version="1.0">
  <dict> 
    <key>Label</key>
    <string>gnu.emacs.daemon</string>
    <key>ProgramArguments</key>
    <array>
      <string>/Applications/Emacs.app/Contents/MacOS/Emacs</string>
      <string>--daemon</string>
    </array>
   <key>RunAtLoad</key>
   <true/>
   <key>KeepAlive</key>
   <true/>
   <key>ServiceDescription</key>
   <string>Gnu Emacs Daemon</string>
  </dict>
</plist>

Bu sorta çalışıyor ama renk temamın düzgün çalışmadığını fark ettim. Sonra init dosyama aşağıdakileri eklediğimi hatırladım:

(when window-system 
  (require 'alpha)
  (require 'color-theme-ir-black)
  (modify-frame-parameters (selected-frame) '((alpha . 85)))
  (color-theme-ir-black))

Bir daemon pencere sistemi olarak başlatıldığında görünüşte yanlıştır ve bu mantıklıdır, ancak bunu eklememin nedeni, bazen ssh vb. (pencere sistemi ...). --Daemon ile başladığında emac'ları pencere modunu başlatmaya zorlamanın bir yolu var mı?

Fark ettiğim bir diğer konu, basın modunu (silme çerçevesi) dameon modunda çalıştırdığımda, tek görünür veya ikonlu çerçeveyi silme girişiminde bulunmadığım ve emac'ların arka planda çalışmaya devam ettiği. Bunu çoğunlukla seviyorum, ancak son kare öldürüldükten sonra artık doktordan emacları yeniden açamayacağımı fark ettim ve emacs aktive olacak ve menüler görüntülense de çalışmıyorlar ve yeni bir çerçeve oluşturamıyorum komut satırındaki emacsclient kullanımı hariç. Başka kimsede bu sorun ve / veya geçici çözüm önerisi var mı? belki sw yerine son kare ve iconify-frame olup olmadığını tespit etmek için bağlayabilirim, ama neden onun son pencere olduğunu düşünmüyor ve ilk etapta öldürmeme izin vermiyor.

GÜNCELLEME:

Steve Purcell'in aşağıdaki blogunda çok benzer bir sorunu gideren bir yorum buldum: http://emacs-fu.blogspot.com/2009/03/color-theming.html

Görünüşe göre, yeni oluşturulan çerçeveyi ayarlamak için 'make-make-frame-fonksiyonlar kancasını kullanmak ve aynı zamanda (setq color-theme-is-global nil)' yi kullanmaktır, böylece her karenin kendi renk teması olabilir. Yani initimin ilgili bölümleri şu şekilde görünüyor:

(defvar after-make-console-frame-hooks '()
"Hooks to run after creating a new TTY frame")
(defvar after-make-window-system-frame-hooks '()
"Hooks to run after creating a new window-system frame")

(defun run-after-make-frame-hooks (frame)
"Selectively run either `after-make-console-frame-hooks' or
`after-make-window-system-frame-hooks'"
  (select-frame frame)
  (run-hooks (if window-system
               'after-make-window-system-frame-hooks
               'after-make-console-frame-hooks)))

(add-hook 'after-make-frame-functions 'run-after-make-frame-hooks)
(add-hook 'after-init-hook (lambda ()
  (run-after-make-frame-hooks (selected-frame))))


(setq color-theme-is-global nil)

(add-hook 'after-make-window-system-frame-hooks
          '(lambda ()
             (require 'alpha)
             (require 'color-theme-ir-black)
             (modify-frame-parameters (selected-frame) '((alpha . 85)))
             (color-theme-ir-black)
             (global-set-key (kbd "s-w") 'delete-frame)))

Ancak, hala emacs daemon olarak başlatıldığında silme çerçevesinin son kareyi kapatması ve emacsclient kullanarak başka bir çerçeve oluşturmama izin vermeme sorunu yaşıyorum.

GÜNCELLEME:

Ben ise eval (frame-list)ben bile olsa sıralanan 2 kare olduğunu görmek sadece tek görülebilir. Emacs /Applications/Emacs.appemacsclient yerine open ile başlatırsam bunun gerçekleşmediğini fark ettim . Normalde emacs'ı e='emacsclient -c -n 'ikinci çerçeveyi oluşturan bir takma adla komut satırından başlatırım . Diğer çerçeveye sadece emacs'ı open komutuyla başlatarak bağlanmış gibi görünebilirim. Ben emacsclient -n somefile -chiçbir şey almadan denerseniz ve ben çalıştırırsanız emacsclient -n -e '(frame-list)'ben -cyeni bir çerçeve oluşturmak veya uygulamalar klasöründen emacs açmak için kullanın kadar sadece görünür olmayan bir çerçeve görüyorum .


Bu bir Emacs sorusu gibi görünmüyor.
ceving

Yanıtlar:


1

Bir işlemi veya uygulamayı launchd daemon olarak çalıştırmak, ona normal olarak veya komut satırında çalıştırmaktan çok farklı bir ortam sağlar. Bunun yerine bir giriş öğesi olarak bir kabuk komut dosyası kullanmak daha iyi çalışmayabilir merak ediyorum.

Örneğin:

#!/bin/bash
while true
do
  open -W /Applications/Emacs.app
done

Bu komut dosyasının .command755 izinli ( chmod 0755 myemacsscript.command) uzantısına sahip bir dosyaya kaydedilmesi ve ardından Sistem Tercihleri: Oturum Açma: Oturum Açma Öğeleri bölmesine eklenmesi gerekir.

Giriş yaptığınızda, Terminal bu komut dosyasını başlatır ve çalıştırır. Muhtemelen terminalin bu belirli komut dosyası için çıkmayı istemesini engelleyen varsayılan bir terminal profili ayarlamak isteyeceksiniz, böylece oturumu kapattığınızda sizi bekletmeyecektir.

Bunun Emacs.app ile ilgili belirli sorunları çözüp çözmeyeceği hakkında hiçbir fikrim yok, ama en azından Emacs.app'ın beklediğine daha yakın bir ortam sağlayabilir.

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.