ฉันใช้ gnu emacs 23.3.1 cocoa build บน OS X 10.6
ฉันเพิ่มสิ่งต่อไปนี้ใน ~ / Library / LaunchAgents / gnu.emacs.daemon.plist เพื่อที่จะเริ่ม daemon และรีสตาร์ท emacs โดยอัตโนมัติถ้าฉันฆ่ามันโดยไม่ตั้งใจ
<?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>
sorta นี้ใช้งานได้ แต่ฉันสังเกตเห็นว่าชุดรูปแบบสีของฉันทำงานไม่ถูกต้อง จากนั้นฉันจำได้ว่าฉันได้เพิ่มสิ่งต่อไปนี้ในไฟล์ init ของฉัน:
(when window-system
(require 'alpha)
(require 'color-theme-ir-black)
(modify-frame-parameters (selected-frame) '((alpha . 85)))
(color-theme-ir-black))
เมื่อเริ่มเป็นหน้าต่างระบบภูตเป็นเท็จอย่างเห็นได้ชัดและที่เหมาะสม แต่เหตุผลที่ฉันเพิ่มนี้เป็นเพราะบางครั้งฉันต้องการเริ่มต้น emacs ปกติสร้างใน terminal จาก ssh ฯลฯ และรูปแบบสีนี้ไม่สามารถอ่านได้อย่างสมบูรณ์ใน iTerm ดังนั้น (เมื่อระบบหน้าต่าง ... ) มีวิธีบังคับให้ emacs เริ่มโหมดหน้าต่างเมื่อเริ่มต้นด้วย --daemon หรือไม่?
ปัญหาอื่นที่ฉันสังเกตเห็นคือเมื่อฉันเรียกใช้กด sw (ลบเฟรม) ในโหมด dameon ฉันไม่ได้รับข้อผิดพลาดในการพยายามลบเฟรมที่มองเห็นได้ แต่เพียงผู้เดียวหรือเป็นไอคอนและ emacs ยังคงทำงานในพื้นหลัง ฉันชอบสิ่งนี้เป็นส่วนใหญ่ แต่ฉันสังเกตเห็นว่าเมื่อเฟรมสุดท้ายถูกฆ่าฉันจะไม่สามารถเปิด emacs จาก doc อีกต่อไปและแม้ว่า emacs จะเปิดใช้งานและเมนูจะปรากฏขึ้นพวกเขาไม่ทำงานและฉันไม่สามารถสร้างเฟรมใหม่ได้ ยกเว้นโดยใช้ emacsclient จาก commandline ใครมีปัญหานี้และหรือคำแนะนำในการแก้ปัญหา? บางทีฉันสามารถผูก sw เพื่อตรวจสอบว่าเฟรมสุดท้ายและ iconify-frame แทน แต่ไม่แน่ใจว่าทำไมมันถึงคิดว่าไม่ใช่หน้าต่างสุดท้ายและอนุญาตให้ฉันฆ่ามันในตอนแรก
UPDATE:
ฉันพบความคิดเห็นในบล็อกต่อไปนี้โดย Steve Purcell ด้วยการแก้ไขปัญหาที่คล้ายกันมาก: http://emacs-fu.blogspot.com/2009/03/color-theming.html
ความลับที่ดูเหมือนคือการใช้ 'after-make-frame-function hook เพื่อตั้งค่าเฟรมที่สร้างขึ้นใหม่และ (setq color-theme-is-global-nil) เพื่อให้แต่ละเฟรมสามารถมีธีมสีของตัวเอง ดังนั้นส่วนที่เกี่ยวข้องของ 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 เริ่มเป็น daemon และไม่อนุญาตให้ฉันสร้างเฟรมใหม่โดยใช้ emacsclient
UPDATE:
ถ้าฉันeval (frame-list)
เห็นว่ามี 2 เฟรมอยู่ในรายการถึงแม้ว่าจะมีเพียงเฟรมเดียวที่มองเห็นได้ ฉันสังเกตว่าสิ่งนี้จะไม่เกิดขึ้นหากฉันเปิด Emacs ด้วยการเปิด/Applications/Emacs.app
แทนที่จะเป็น emacsclient ปกติฉันจะเริ่ม emacs จาก commandline ด้วยนามแฝงe='emacsclient -c -n '
ซึ่งเป็นสิ่งที่สร้างเฟรมที่สอง ฉันดูเหมือนจะแนบไปกับเฟรมอื่นโดยเริ่มต้น emacs ด้วยคำสั่ง open ถ้าฉันลอง emacsclient -n somefile โดยที่-c
ฉันไม่ได้รับอะไรเลยและถ้าฉันรันemacsclient -n -e '(frame-list)'
ฉันจะเห็นว่ามีเฟรมที่มองไม่เห็นจนกว่าฉัน-c
จะใช้เพื่อสร้างเฟรมใหม่หรือเปิด emacs จากโฟลเดอร์แอปพลิเคชัน