명령 줄에서 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를 해킹하여 원하는 작업을 수행하는 방법을 모르겠습니다.
감사!
emacsclient
다시, 그리고 그것을 시작하는 (server-start)
나의에서 init.el
보다 더 잘 작동하는 것 같군 emacs --daemon
내가하려고 처음 시도했던 것입니다 부팅,시 emacsclient
.
find-file
로 설정debug-on-error
하고 스택 추적을 확인하여 Emacs가 어떻게 호출되는지에 대한 단서가 있는지 확인하십시오. 에 오류를 추가하면find-file
리스프 스크래치 버퍼에 함수 정의를 복사에 전화를 추가로 간단하게 될 수있다error
(그 안에 예(error "cause stack trace")
. FOR NEVER CHANGE 소스 파일을find-file
항상 스크래치 bufer에서이 작업을 수행 -!