OSX에서 Emacs 서버의 기본 설정


9

최근에 10 년 만에 첫 번째 Mac을 구입했으며이를 구성하는 중입니다. 저는 Emacs 사용자이며 Aquamacs가 아닌 일반 Emacs 만 원 하므로 다른 운영 체제에서 기존 구성을 사용할 수 있습니다. 나는 많은 다음 시도했습니다 방법 - TOS 내가 찾은 온라인 (같은 이 하나 , 이 하나내가 이맥스를 다운로드 한 사이트에서이 하나 , 그리고 조각을 임의의 수의 방법을 결합 시도했다, 그러나 결코) 내가 익숙해 졌던 것에 접근하는 상태로 물건을 얻었습니다.

  1. Emacs 데몬은 시작할 때 또는 필요할 때 바로 실행 되기 시작 합니다 . 어느 쪽이든 괜찮습니다. 모든 새로운 Emacs 프레임은 동일한 서버에 의해 백업됩니다.
  2. Finder에서 텍스트 파일을 열면 가능한 경우 기존 그래픽 프레임에서 Emacs로 파일이 열립니다.
  3. Emacs.app를 실행하면 시스템은 새 인스턴스를 시작하고 새 창을 여는 대신 백그라운드에서 실행중인 emacs 데몬을 재사용합니다. ( 모자 끝 )
  4. 터미널에서 Emacs를 실행하면 터미널이 Emacs로 끝나기를 기다리지 않고 비즈니스를 시작합니다 ( '-nw'를 사용하지 않는 한)
  5. 위에서 설명한 작업 중 AFAIK는 Emacs가 입력을 기다리는 상태 ( "서버 편집 모드?")가되어야 C-x #하는데, 이에 대해 깊이 이해하지는 못합니다.
  6. (이것은 보너스로 간주됩니다) 터미널에서 Emacs를 호출하여 Emacs가 가능한 경우 기존 프레임을 재사용 할 수있는 방법이 있습니다.

Emacs가 이와 같이 동작하도록 어떻게 구성 할 수 있습니까?

내가 찾은 가이드가 일반적으로 여러 별칭, Applescripts, bash 스크립트 등을 생성하기 때문에 Finder가 원하는 방식으로 Emacs에서 물건을 열도록함으로써 특히 당황합니다 (2 번). 텍스트 파일을 여는 데 Finder에 사용하고 싶습니다.

감사!

A. @lawlist는 "기존 프레임이 있어도 터미널에서 새 파일을 열 때 기본적으로 새 프레임이 열려 있습니까?"라고 묻습니다 . 대답은 여기 에 설명 된대로 시작할 때 서버를 시작 하고 프레임을 연 다음을 입력 /Applications/Emacs.app/Contents/MacOS/bin/emacsclient -n <whatever>하여 파일을 열면 파일을 기존 프레임에서 열 수 있습니다. 현재 열려있는 프레임이 없으면 "-nc"를 사용해야하거나 파일을 열려고 할 때 아무 일도 일어나지 않습니다.

B. @lawlist는 "로그인시 데몬을 실행 하시겠습니까, 아니면 로그인 후 수동으로 Emacs를로드하기에 충분합니까?"라고 묻습니다 . 수동으로 실행하는 것이 좋습니다.


1, 2, 3, 4, 5, 6 및 7 및 8로 번호를 매길 수 있습니까? 또한 기존 프레임이 있어도 터미널에서 새 파일을 열면 기본적으로 새 프레임이 열립니다 ? 나는 대답 중 일부를 알고 있지만 전부는 아니므로 질문에 대한 숫자가 도움이 될 것입니다. 로그인시 데몬을 실행 하시겠습니까, 아니면 로그인 후 수동으로 Emacs를로드하기에 충분합니까?
lawlist December

@Lauri Ranta는 좋은 대답이 있습니다. 통신 할 수 M-x server-start있도록 서버를 수동으로 시작합니다 emacsclient. 나는 놓여있다 (server-start)내에서 init.el대신 로그인시 데몬을 사용하여 파일 - 그러나, 많은 사람들이 데몬 로그인 옵션을 선호합니다. 물론이 .emacs파일은에 적합한 장소입니다 (server-start).
lawlist

Finder에서 파일을 여는 것과 관련하여 dummies.com/how-to/content/… 와 같은 것을 필요로하는 단계를 훨씬 넘어서는 것으로 가정합니다. 그냥 괜찮을 ns-find-file파일이 Emacs.app과 연관 될 때 자동으로 활성화됩니다 -. 위의 링크에서 가로 채기 파일 기능도 ns-find-file관심있는 부분인지 수정 합니다. 물론, 당신은 Emacs 내장이 필요합니다 --with-ns.
lawlist

답변:


10

Emacs.app가 새 프레임 대신 기존 프레임에서 파일을 열도록하려면 다음 (setq ns-pop-up-frames nil)과 같은 구성 파일에 추가하십시오 ~/.emacs.

open -a emacs file또는 로 터미널에서 파일을 열 수 있습니다 emacsclient -n file. Emacs.app이 열려 있지 않지만 Emacs --daemon프로세스 가있는 경우 어떤 이유로 emacsclient -n file작동하지 않지만 작동 emacsclient -nc file합니다.

사용하는 emacsclientEmacs 버전에 포함 된 바이너리를 사용 /Applications/Emacs.app/Contents/MacOS/bin/emacsclient하거나 /usr/local/bin/emacsclientHomebrew와 함께 Emacs를 설치 했는지 확인하십시오 .

예를 들어 로그인시 Emacs 서버를 시작하려면이 plist를 ~/Library/LaunchAgents/my.emacsdaemon.plist다음 과 같이 저장하십시오 .

<?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>my.emacsdaemon</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/> <!-- run the program again if it terminates -->
</dict>
</plist>

다음에 로그인하면 plist가 자동으로로드되지만을 실행하여 즉시로드 할 수 있습니다 launchctl load ~/Library/LaunchAgents/my.emacsdaemon.plist.

편집 : 왜 사람들이 Emacs.app 대신 파일 형식을 AppleScript 응용 프로그램과 관련시키는 지 여전히 알지 못합니다. kuzzooroo의 답변에있는 스크립트는 쉘 스크립트로 작성 될 수도 있습니다.

macos=/Applications/Emacs.app/Contents/MacOS
if pgrep -qf 'Emacs.*--daemon'; then
  [[ $($macos/bin/emacsclient -e '(<= 2 (length (visible-frame-list)))') = t ]] && args=-nc || args=-n
else
  $macos/Emacs --daemon
  args=-nc
fi
$macos/bin/emacsclient $args "$@"
open -a /Applications/Emacs.app

Platypus 를 사용하여 스크립트를 응용 프로그램으로 저장할 수 있습니다 .

방금 Emacs를 사용하기 시작했지만 완전히 다른 설정이 있습니다. iTerm.app 사본을 만들고 Info.plist에서 CFBundleIdentifier를 변경하여 응용 프로그램이 다른 환경 설정 파일을 사용하고 기본 명령을으로 설정하여 자체 Emacs 응용 프로그램을 만들었습니다 /usr/local/bin/emacs. 내가 추가 한 (server-start)~/.emacs내가 로그인 할 때 사용자 정의 이맥스 응용 프로그램을 엽니 다. Platypus를 사용하여 실행되는 응용 프로그램을 만들고 emacsclient -n "$@";open -b my.emacs텍스트 파일의 기본 응용 프로그램으로 만들었습니다.


2

의견의 제안과 결합 된 Lauri의 솔루션은 내 문제를 크게 해결했습니다. 나는 온라인에서 찾은 것들에서 함께 바느질 한 일부 Applescript를 아래에 붙여 넣었습니다. 이 스크립트는 남아있는 주름을 부드럽게하는 데 도움이됩니다. 예를 들어 현재 Emacs 프레임이없는 경우 동작이 약간 개선됩니다.

편집 : 스크립트의 목적은 Finder의 .txt 파일과 관련이 있습니다.

-- http://superuser.com/questions/457484/how-to-open-emacs-from-macs-finder
-- https://gist.github.com/ambethia/304964#comment-799519
on run {input}
    set filepath to quoted form of POSIX path of input
    tell application "Terminal"
        try
            -- we look for <= 2 because Emacs --daemon seems to always have an entry in visibile-frame-list even if there isn't
            set frameVisible to do shell script "/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -e '(<= 2 (length (visible-frame-list)))'"
            if frameVisible is "t" then
                do shell script "/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -n " & filepath
            else
                -- there is a not a visible frame, launch one
                do shell script "/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -c -n " & filepath
            end if
        on error
            -- daemon is not running, start the daemon and open a frame     
            do shell script "/Applications/Emacs.app/Contents/MacOS/Emacs --daemon"
            do shell script "/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -c -n"
        end try
    end tell

    -- bring the visible frame to the front
    tell application "Emacs" to activate

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