Tôi đang chạy gnu emacs 23.3.1 bản dựng ca cao trên OS X 10.6.
Tôi đã thêm phần sau vào ~ / Library / LaunchAgents / gnu.emacs.daemon.plist để nó sẽ khởi động một daemon và tự động khởi động lại emacs nếu tôi vô tình giết nó.
<?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>
Loại này hoạt động nhưng tôi nhận thấy rằng chủ đề màu sắc của tôi không hoạt động đúng. Sau đó, tôi nhớ rằng tôi đã thêm sau đây vào tập tin init của tôi:
(when window-system
(require 'alpha)
(require 'color-theme-ir-black)
(modify-frame-parameters (selected-frame) '((alpha . 85)))
(color-theme-ir-black))
Khi bắt đầu như một hệ thống cửa sổ daemon rõ ràng là sai và điều đó có ý nghĩa, tuy nhiên lý do tôi thêm vào là vì tôi thỉnh thoảng muốn bắt đầu xây dựng emacs bình thường trong một thiết bị đầu cuối từ ssh vv và sơ đồ màu này hoàn toàn không thể đọc được trong iTerm, do đó (khi hệ thống cửa sổ ...). Có cách nào để buộc emacs bắt đầu chế độ cửa sổ khi bắt đầu với --daemon không?
Một vấn đề khác tôi nhận thấy là khi tôi chạy nhấn sw (xóa khung hình) ở chế độ dameon, tôi không gặp lỗi khi xóa khung hình có thể nhìn thấy hoặc được biểu tượng hóa và emacs tiếp tục chạy trong nền. Tôi thích điều này trong hầu hết các phần, tuy nhiên tôi đã nhận thấy rằng một khi khung hình cuối cùng bị giết, tôi không thể mở lại các emacs từ tài liệu và mặc dù các emacs sẽ kích hoạt và các menu được hiển thị chúng không hoạt động và tôi không thể tạo một khung hình mới ngoại trừ bằng cách sử dụng emacsclient từ dòng lệnh. Bất cứ ai khác có vấn đề này và hoặc khuyến nghị về cách giải quyết? có lẽ tôi có thể liên kết sw để phát hiện nếu khung hình cuối cùng và biểu tượng hóa khung hình thay thế, nhưng không chắc tại sao nó nghĩ rằng nó không phải là cửa sổ cuối cùng và cho phép tôi giết nó ngay từ đầu.
CẬP NHẬT:
Tôi đã tìm thấy một nhận xét trên blog sau đây của Steve Purcell với một bản sửa lỗi cho một vấn đề rất giống nhau: http://emacs-fu.blogspot.com/2009/03/color-theming.html
Bí mật có vẻ là sử dụng hook các hàm chức năng sau khi tạo khung để thiết lập khung vừa tạo và cũng để (setq color-theme-is-global nil) để mỗi khung có thể có chủ đề màu riêng. Vì vậy, các phần có liên quan của init của tôi bây giờ trông như thế này:
(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)))
Tuy nhiên, tôi vẫn gặp vấn đề trong đó khung xóa sẽ đóng khung cuối cùng khi emacs được khởi động dưới dạng daemon và không cho phép tôi tạo khung mới khác sau đó bằng cách sử dụng emacsclient.
CẬP NHẬT:
Nếu tôi eval (frame-list)
thấy có 2 khung được liệt kê mặc dù chỉ có một khung nhìn thấy được. Tôi nhận thấy rằng điều này không xảy ra nếu tôi khởi động Emacs với open /Applications/Emacs.app
thay vì emacsclient. Tôi thường bắt đầu emacs từ dòng lệnh với bí danh e='emacsclient -c -n '
là thứ tạo ra khung thứ hai. Tôi dường như chỉ có thể gắn vào khung khác bằng cách bắt đầu emacs bằng lệnh mở. Nếu tôi dùng thử emacsclient -n somefile mà không -c
nhận được gì, và nếu tôi chạy emacsclient -n -e '(frame-list)'
tôi thấy có một khung hình không thể nhìn thấy cho đến khi tôi sử dụng -c
để tạo khung mới hoặc mở emacs từ thư mục ứng dụng.