명령 줄에서 Emacs를 호출하고 그래픽 Emacs가 실행 중이 아닌 경우 시작하거나 이미 실행중인 Emacs의 파일을 방문하고 싶습니다. 이 작업을 수행 emacsclient
하는 “올바른”방법이라는 것을 알고이 작업을 시도했지만 OS X에서 많은 문제가 발생했습니다. 무작위로 충돌하거나 emacs --daemon
시스템을 종료하거나 재부팅하는 동안 프로세스가 중단됩니다. 그리고 일반적인 약점. 내가 그것을 작동시키고 싶지만, 지금 open -a
아래에 설명 할이 하나의 문제를 제외하고 실제로 실제로 훨씬 더 잘 작동합니다.
open -a
이처럼 사용 :
$ open -a Emacs file.txt
Emacs가 실행되고 있지 않으면 시작하고 파일을 방문하십시오. 그러나 현재 버퍼가 아닌 경우이 작업을 수행 *scratch*
하면 파일이 새 프레임 (예 : 새 시스템 창)에서 열립니다.
세션 예는 다음과 같습니다.
$ open -a Emacs file.txt
그러면 Emacs가 시작되고 file.txt가 열리므로이 버퍼가있는 단일 프레임이 있습니다. *scratch*
버퍼로 전환하면 다음 을 수행하십시오.
$ open -a Emacs file1.txt
이 파일을 같은 프레임에서 엽니 다. 이제이 파일을 열어 놓은 단일 프레임이 있으며이 작업을 수행하면
$ open -a Emacs file2.txt
새 프레임이 열리면서 한 번에 두 개의 프레임이 열립니다.
--args
스위치를 사용하여 Emacs에 명령 줄 인수를 사용하여 시도했지만 open
다음 호출에서는 작동하지 않는 것 같습니다.
$ open -a Emacs --args --eval='(print "foo")'
$ open -a Emacs --args --eval='(print "bar")'
이것은 메시지 버퍼에 “foo”만 인쇄합니다. 두 번째로 Emacs가 포 그라운드로 가져 오지만 메시지는 인쇄되지 않습니다.
open
이미 실행중인 응용 프로그램과 어떻게 통신 하는지 잘 모르겠습니다. 내가 어떻게 알 수 있습니까? 아니면 Messages
버퍼 보다 무슨 일이 일어나고 있는지에 대한 훨씬 자세한 로그를 얻는 방법이 있습니까? 위의 세션 중에 해당 버퍼에 흥미로운 내용이 인쇄되어 있지 않으므로 Emacs Lisp를 해킹하여 원하는 작업을 수행하는 방법을 모르겠습니다.
감사!
답변
답은 여기 있습니다 :
emacs 변수는 원래 프레임에서 “열기”
최신 버전의 emacs에서 기본 설정으로 변경되었습니다. 더하다:
(setq ns-pop-up-frames nil)
.emacs 파일로.
이것을 발견하게되어 매우 기쁩니다.