윈도우 시스템으로 OS X에서 데몬으로 이맥스


13

OS X 10.6에서 gnu emacs 23.3.1 cocoa build를 실행하고 있습니다.
~ / Library / LaunchAgents / gnu.emacs.daemon.plist에 다음을 추가하여 데몬을 시작하고 실수로 죽일 경우 자동으로 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>

이 종류는 작동하지만 색상 테마가 제대로 작동하지 않는 것을 알았습니다. 그런 다음 init 파일에 다음을 추가 한 것을 기억했습니다.

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

데몬 창 시스템으로 시작했을 때 분명히 거짓이며 의미가 있지만, 이것을 추가 한 이유는 때때로 ssh 등의 터미널에서 일반 emacs 빌드를 시작하고 iTerm 에서이 색상 구성표를 완전히 읽을 수 없기 때문입니다. (창 시스템 일 때 ...). --daemon으로 시작할 때 emacs가 창 모드를 시작하게하는 방법이 있습니까?

내가 주목 한 또 다른 문제는 dameon 모드에서 프레스 sw (삭제 프레임)를 실행할 때 단독으로 표시되거나 아이콘 화 된 프레임을 삭제하는 오류가 발생하지 않으며 emacs가 백그라운드에서 계속 실행된다는 것입니다. 나는이 부분을 좋아하지만 마지막 프레임이 종료되면 더 이상 문서에서 emacs를 다시 열 수 없으며 emacs가 활성화되고 메뉴가 표시되지만 작동하지 않으며 새 프레임을 만들 수 없다는 것을 알았습니다. 명령 행에서 emacsclient를 사용하는 것을 제외하고. 다른 사람이이 문제 또는 해결 방법에 대한 권장 사항이 있습니까? 아마도 sw를 바인드하여 마지막 프레임과 iconify-frame을 대신 감지 할 수는 있지만 왜 마지막 프레임이 아니라고 생각하고 처음부터 죽일 수 있었는지 확실하지 않습니다.

최신 정보:

Steve Purcell의 다음 블로그에서 비슷한 문제에 대한 픽스를 발견했습니다. http://emacs-fu.blogspot.com/2009/03/color-theming.html

비밀은 'after-make-frame-functions 후크를 사용하여 새로 만든 프레임을 설정하고 각 프레임마다 고유 한 색상 테마를 가질 수 있도록 (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가 데몬으로 시작되었을 때 delete-frame이 마지막 프레임을 닫고 emacsclient를 사용하여 다른 프레임을 만들 수없는 문제가 여전히 있습니다.

최신 정보:

내가 eval (frame-list)하나만 볼 수 있지만 두 개의 프레임이 나열되어 있습니다. /Applications/Emacs.appemacsclient 대신 open으로 Emacs를 시작하면 이런 일이 발생하지 않는 것을 알았습니다 . 나는 보통 e='emacsclient -c -n '두 번째 프레임을 만드는 별명으로 명령 행에서 emacs를 시작 합니다. open 명령으로 emacs를 시작해야만 다른 프레임에 연결할 수 있습니다. -c아무 것도 얻지 않고 emacsclient -n somefile을 시도 하면 실행 하면 응용 프로그램 폴더에서 새 프레임을 만들거나 emacs를 열 emacsclient -n -e '(frame-list)'때까지 프레임이 보이지 않습니다 -c.


이것은 Emacs 질문처럼 보이지 않습니다.
17:53에

답변:


1

프로세스 또는 응용 프로그램을 실행 된 데몬으로 실행하면 정상적으로 실행되거나 명령 줄에서 실행되는 환경과 매우 다릅니다. 쉘 스크립트를 로그인 항목으로 사용하는 것이 더 좋지 않을지 궁금합니다.

예를 들면 다음과 같습니다.

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

이 스크립트는 .command확장명과 755 권한 ( chmod 0755 myemacsscript.command) 을 가진 파일로 저장 한 다음 시스템 환경 설정 : 로그인 : 로그인 항목 창에 추가해야합니다.

로그인하면 터미널이 시작되고이 스크립트가 실행됩니다. 이 특정 스크립트에 대한 종료시 터미널에서 프롬프트를 표시하지 않도록 기본 터미널 프로파일을 설정하여 로그 아웃 할 때 사용자를 유지하지 않을 수 있습니다.

이것이 Emacs.app의 특정 문제를 해결할지 모르겠지만 최소한 Emacs.app이 기대하는 환경에 더 가까운 환경을 제공 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.