2014-11-02 2 views
0

하나의 파일을 Emacs에서 열 수 있지만 문제가 없습니다. 그러나 저는 리눅스에서 이멕스에 익숙합니다. 입력하면 emacs test.cpp &은 새로운 이맥스 프레임을 열어 터미널을 자유롭게합니다. 그러나 OS X에서 emacs test.cpp &으로 새 프레임을 열려고 시도 할 때 단말기에 프로세스가 만들어 졌음이 표시되지만 창이 팝업되지 않습니다. Ctrl + C을 누르면 터미널에 "중지됨"이 표시되지만 작업 모니터에서 볼 수 있기 때문에 프로세스가 계속 실행되는 것으로 나타납니다.Mac에서 Emacs로 여러 파일을 열 수 없습니다.

이 문제를 해결하는 방법은 무엇입니까? 감사!

+0

어떤 버전의 이맥스를 사용하고 있습니까? OSX ('/ usr/bin/emacs'에 위치)와 함께 제공되는 GUI가 아닌 버전이나 GUI 버전을 설치 했습니까?먼저'emacs test.cpp' (이것은 비 GUI 버전 임)를 호출한다고 말하면서 창이 나타납니다 (GUI 버전). – Juancho

+0

'&'는 새 프로세스를 백그라운드에 넣기위한 것입니다. 0 개, 1 개 또는 여러 파일을 여는 것과 아무런 관련이 없습니다. Emacs를 포 그라운드로 되돌리려면'fg'를 입력하십시오. – echristopherson

+0

@Juancho 필자는 homebrew를 사용하여 GUI 버전의 Emacs (24.4)를 설치하고 PATH도 수정했다. "어느 이맥스"를 입력하면 "/ usr/local/bin/emacs"가 표시되므로이 버전의 이맥스가 매번 호출된다고 가정합니다. 그러나 확실하지 않습니다. 그리고 BTW, 나는 OSX로 이전 버전을 삭제하지 않았다. – user3156285

답변

1

여기서 문제는 리눅스에서 명령 emacs가 새 프레임 열립니다 일반적으로 단지 이맥스 바이너리 자체이다 (즉의를 이맥스 말 X11 또는 다른 GUI 창에 대해) 명령 행에 -nw를 지정하지 않는 ; 반대로 Homebrew에서 제공하는 emacs 명령은 (24.3에 설치된 버전으로 대체)을 호출하는 셸 스크립트입니다. 홈 브루 (Homebrew) 버전이 터미널 앱으로 출시됩니다.

그냥 /usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs "[email protected]"으로 실행되는 셸 스크립트를 만들 수 있습니다. Mac 응용 프로그램의 새로운 인스턴스를 시작한다는 점을 제외하고는 예상대로 동작합니다 (이맥스 아이콘이 추가로 표시됨). 독. 그러한 것은 "맥 같은"것으로 간주되지 않지만 세상 끝은 아닙니다.

다른 운영 체제에서 많이 사용되는 대체 솔루션은 하나의 Emacs 프로세스를 서버로 만든 다음 emacsclient을 사용하여 명령 줄에서 파일을 여는 것입니다. Emacsclient는 현재 터미널, 새로운 프레임 (GUI 창) 또는 Emacs의 기존 인스턴스에서 파일을 열 수 있습니다. Emacs가 서버로 실행되도록하려면 M-x server-start을 실행하거나, (server-start)을 초기화 파일 (~/.emacs 또는 ~/.emacs.d/init.el)에 넣어야합니다.

내 이맥스 설정 내가 GUI 응용 프로그램을 실행할 때 자동으로 서버 모드가 시작이 조각이 있습니다 : 이맥스가 실행되면,

(when (display-graphic-p) 
    (server-start)) 

다음을 (당신은>은 시스템 환경 설정에서 로그인시 자동으로 시작 할 수 있습니다 사용자 & 그룹> 로그인 항목)에서 emacsclient -nw test.cpp을 입력하여 터미널에서 파일을 열거 나 emacsclient test.cpp &을 입력하여 기존 프레임에서 열거 나 emacsclient -c test.cpp &에서 새 프레임을 엽니 다. (기존 프레임에서 열 경우 C-x C-c 반대로, 당신은 프레임을 닫지 않고 버퍼를 닫 C-x #를 사용합니다.)

참고 난 그냥 준 터미널 emacsclient 명령은 지금 &를 사용하지 않았다고하지만, GUI가 그랬다. 명령 행의 마지막에있는 &은 프로세스를 백그라운드로 두며, 이는 터미널을 독점하지 않는 것을 의미합니다. 어떤 이유로 든 (아마도 배경 화면에서 전체 화면 터미널 응용 프로그램을 실행하는 것이 현명하지 않기 때문에), &으로 이멕스의 터미널 버전을 호출하면 단지 자체를 일시 중단합니다. 이맥스 안에서 C-z을 눌렀다면 똑같은 일이 일어날 것입니다. 포크 그라운드로 되돌리려면, fg을 입력하십시오. (fg작업 지정자을 지정하지 않으면 fg이 가장 최근의 것을 선택합니다 .bash의 man 페이지 (man bash)를보고 JOB CONTROL을 검색하십시오 자세한 내용에 관심이있는 경우).

+0

정말 고마워요! 내가 C-x C-c로 항상 "서버"를 죽이기 때문에이 스타일에 익숙해 져야합니다. – user3156285

관련 문제