विंडो-सिस्टम के साथ OS X पर डेमॉन के रूप में Emacs


13

मैं OS X 10.6 पर 23.3.1 कोको का निर्माण कर रहा हूँ।
मैंने निम्नलिखित को ~ / लाइब्रेरी / लॉन्चअगेंट्स / gnu.emacs.daemon.plist में जोड़ा ताकि यह एक डेमॉन शुरू कर दे और अगर मैं अनजाने में इसे मार दूं तो स्वचालित रूप से ईमैक्स को फिर से चालू कर देगा।

<?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>

यह सॉर्ट काम करता है लेकिन मैंने देखा कि मेरा रंग विषय ठीक से काम नहीं कर रहा था। तब मुझे याद आया कि मैंने अपनी इनिट फ़ाइल में निम्नलिखित को जोड़ा था:

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

जब डेमॉन विंडो-सिस्टम के रूप में शुरू किया गया है, तो यह स्पष्ट रूप से गलत है और यह समझ में आता है, हालांकि इसका कारण मैंने इसे जोड़ा है क्योंकि मैं कभी-कभार एससीएस आदि से एक टर्मिनल में सामान्य एमएसीएस का निर्माण शुरू करना पसंद करता हूं और यह रंग योजना पूरी तरह से iTerm में अपठनीय है। (जब विंडो-सिस्टम ...)। क्या विंडो मोड को प्रारंभ करने के लिए emacs को बाध्य करने का एक तरीका है - जब शुरू होता है?

एक और मुद्दा मैंने देखा है कि जब मैं डेमॉन मोड में प्रेस स्वा (डिलीट-फ्रेम) चलाता हूं तो मुझे एकमात्र दृश्यमान या आइकॉनिफाइड फ्रेम को डिलीट करने का त्रुटि प्रयास नहीं मिलता है और बैकग्राउंड में ईमैक्स चलती रहती है। मुझे यह सबसे अधिक पसंद है, हालांकि मैंने देखा है कि एक बार अंतिम फ्रेम को मार देने के बाद मैं अब डॉक से इमेक को दोबारा नहीं खोल सकता हूं और हालांकि एमएसीएस सक्रिय हो जाएगा और मेनू प्रदर्शित होते हैं कि वे काम नहीं करते हैं और मैं एक नया फ्रेम नहीं बना सकता हूं सिवाय कमांड लाइन से एमकैशिएंट का उपयोग करके। किसी और को यह मुद्दा है और या वर्कअराउंड पर सिफारिश? शायद मैं अंतिम फ्रेम और आइकोइज़्ड-फ़्रेम के बजाय यह पता लगाने के लिए स्व-बाइंड कर सकता हूं, लेकिन यह निश्चित नहीं है कि यह अंतिम विंडो क्यों नहीं सोचता है और मुझे इसे पहली जगह पर मारने की अनुमति देता है।

अपडेट करें:

मुझे स्टीव पर्सेल द्वारा निम्नलिखित ब्लॉग पर एक ऐसी ही समस्या के समाधान के लिए एक टिप्पणी मिली: http://emacs-fu.blogspot.com/2009/03/color-theming.html

ऐसा लगता है कि नए बनाए गए फ्रेम को सेटअप करने के लिए और उसके बाद (सेट-कलर-थीम-इस-ग्लोबल निल) को सेटअप करने के लिए 'आफ्टर-मेक-फ्रेम-फंक्शन हुक का उपयोग करना है ताकि प्रत्येक फ्रेम का अपना रंग विषय हो सके। तो मेरे init के संबंधित अनुभाग अब इस तरह दिखते हैं:

(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)))

हालाँकि, मैं अभी भी समस्या है जहाँ डिलीट-फ्रेम अंतिम फ्रेम को बंद कर देता है जब emacs को डेमॉन के रूप में शुरू किया गया था और मुझे emacsclient का उपयोग करके एक नया फ्रेम बनाने की अनुमति नहीं दी।

अपडेट करें:

अगर मैं eval (frame-list)देखूं कि केवल एक दिखाई देने के बावजूद 2 फ्रेम सूचीबद्ध हैं। मैंने देखा कि अगर मैं /Applications/Emacs.appEmacsclient के बजाय खुले के साथ Emacs शुरू करता हूं तो यह नहीं होता है । मैं सामान्य रूप से कमांड से एक उपनाम के साथ emacs शुरू करता हूं e='emacsclient -c -n 'जो कि दूसरा फ्रेम बनाता है। मैं केवल खुले कमांड के साथ emacs शुरू करके दूसरे फ्रेम से जुड़ सकता हूं। अगर मैं बिना किसी चीज़ के एमेसक्लिएंट-एन की कोशिश करता -cहूं, तो मुझे कुछ भी नहीं मिलता है, और अगर मैं दौड़ता emacsclient -n -e '(frame-list)'हूं तो मुझे लगता है कि एक फ्रेम है जो तब तक दिखाई नहीं देता जब तक कि मैं -cएप्लिकेशन फ़ोल्डर से नया फ्रेम या ओपन एमएसीएस बनाने के लिए उपयोग नहीं करता ।


यह एक Emacs प्रश्न की तरह नहीं दिखता है।
ceving

जवाबों:


1

एक लॉन्च डेमॉन के रूप में एक प्रक्रिया या एप्लिकेशन को चलाना सामान्य रूप से या कमांड लाइन पर इसे चलाने से बहुत अलग वातावरण देता है। मुझे आश्चर्य है कि अगर यह एक लॉगिन आइटम के रूप में शेल स्क्रिप्ट का उपयोग करने के लिए बेहतर काम नहीं कर सकता है।

उदाहरण के लिए:

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

इस स्क्रिप्ट को .commandएक्सटेंशन और 755 अनुमतियों ( chmod 0755 myemacsscript.command) के साथ एक फ़ाइल में सहेजना होगा और फिर सिस्टम वरीयताएँ: लॉगिन: लॉगिन आइटम फलक में जोड़ा जाना चाहिए।

जब आप लॉगिन करेंगे, तो टर्मिनल इस स्क्रिप्ट को लॉन्च और चलाएगा। आप शायद एक डिफ़ॉल्ट टर्मिनल प्रोफ़ाइल को सेटअप करना चाहेंगे जो टर्मिनल को इस विशेष स्क्रिप्ट के लिए छोड़ने पर संकेत देने से बाहर कर देता है, ताकि जब आप लॉग आउट करें तो यह आपको पकड़ न ले।

मुझे नहीं पता कि यह Emacs.app के साथ विशेष समस्याओं को ठीक करेगा, लेकिन यह कम से कम एक वातावरण प्रदान कर सकता है जो Emacs.app को उम्मीद है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.