2009-08-12 11 views
5

誰かがOS Xでemacs 23をセットアップするための推奨事項を持っているのだろうかと思います。私はLinux/Windowsをしばらく使っていますが、emacsの多くのインスタンスを開くだけで、別々のフレームに2つの別々のファイルを持つことができます。それぞれのファイルは独自のR、Python、および/またはシェルを実行しています。私はこれを嫌に思う(?) - しかし、それは私が愛していた、各スクリプトファイルの作業ディレクトリを別々に保った。OS XのEmacs 23 - 複数のインスタンスまたはemacsclientを使用していますか?

自分の.emacsファイルで(サーバ起動)を設定して、 'Emacs'ではなく 'emacsclient'を呼び出すことの利点があることを理解しました。私は、これはAppleScriptを介して起こるために容易にこのスレッドが見つかりました: Emacs 23, OS X, multi-tty and emacsclient

をしかし、この場合、私はそれについて移動するための唯一の方法だろう - 私はOS X上2つのemacsのインスタンスを開いたとき、それは私にエラーを与える:

** CFMessagePort: bootstrap_register(): failed 1100 (0x44c) 'Permission denied', port = 0x3803, name = 'org.gnu.Emacs.ServiceProvider' 

新しいフレームが開き、ファイルを編集できます。私は、OS X上のvimのために、vimの複数のインスタンスを起動できるようにする 'mvim'と呼ばれるものがあると理解していますが、emacsに似たものがありますか?あなたの専門知識を募集したい質問があると思います。

(1)「emacsclient」は専門家の道で、 (2)if必ずしもそうではありませんが、emacs 23の複数のインスタンス(フレームだけでなく)をOS X上で実行する方法がありますか?

ありがとうございます! -Stephen

答えて

6

間接的に質問にお答えします。

ご存知のように、emacsclientは、ユーザーが既存 Emacsで外にEmacsからドキュメントを開くことができ、サービスを提供しています。これは専門家の「道のり」ですか?専門家によって異なります。私はEmacsを多用していますが、決してemacsclientを使用しないでください。どうして?私は決してのままにしておきます。最初はのEmacsを残してください。私が実行するシェルはすべて、Emacsの中にあります(自家製のscreenパッケージを使用しています)、Emacsなどでメールを読んでいます。emacsclientをコマンドラインで入力する理由はありません。

あなたの使用モデルは、複数のEmacsenを実行することをお勧めしているため、どのプロセスとファイルが一緒に使用されているかを把握しやすくなります。それは理にかなっています。あなたが望むならば、 Emacsのすべてでそれを行うことができますが、あなたの使用モデルや好みに応じて複数のインタプリタ/シェルを管理するためのカスタマイズが必要になります。

したがって、Emacsの複数のインスタンスが好きな場合は、是非これを続けてください。

あなたの.emacsに(server-start)があると問題を引き起こしているようですが、同じポートを使用しようとしている2つのEmacsenと競合しているようです。サーバを起動するためにdocumentationをチェックし、おそらく.emacsからその行を削除し、代わりに​​コマンドラインオプションを使用してサーバを起動してください。

次に、コマンドラインで新しいemacs(emacsと入力)を起動するか、または起動したサーバーに接続するか(emacsclientと入力して)選択できます。

+0

私はbootstrap_registerが失敗したときに(サーバ起動)していないし、サーバが動作しているときに警告が表示されている(サーバに接続できない)インスタンス。私はこれがOS Xアプリケーションのものだと思う:http://osdir.com/ml/emacs.macintosh.osx/2005-07/msg00036.html、Carbon Emacsページは、複数のインスタンスを開くときに警告を表示する。私が収集したものから、(1)警告を無視して2番目/ 3番目のインスタンスで作業を続けるか、(2)複数の作業ディレクトリを管理しようとする方が良くなる。 – hatmatrix

+0

を続行してください(前に600charの制限に達する) - 提案に感謝します。あなたの提案は本当にうまくいっていますが、警告が出ています(最初に編集したファイルはサーバーインスタンスに関連付けられています)。 – hatmatrix

+0

数日前にemacsclientを実行して、自宅から仕事中のセッションにアクセスする必要があったので、シェルで実行されているコマンドの出力を確認できました。私は$ EDITORのためにそれを使用するのが好きなので、crontabなどを編集するための素敵な環境を持つことができます。 –

1

私はこれを私のに使っています。唯一のコールサーバスタートにemacsのサーバがすでに実行されていない場合:

(if (file-exists-p 
(concat (getenv "TMPDIR") "emacs" 
     (number-to-string 
      (user-real-uid)) "/server")) 
nil (server-start)) 

を次に変更のカップルを私の.zshrcに私が無思慮にシェルからの私のエディタコマンドとしてecを実行できるように: emacsのの

# I use the Emacs package from emacsformacosx.com 
alias emacs='open -a emacs' 
alias emacsclient='/Applications/Emacs.app/Contents/MacOS/bin/emacsclient' 
alias ec='emacsclient -a /Applications/Emacs.app/Contents/MacOS/Emacs' 
export EDITOR='ec' 
+0

素晴らしい!最初の表現についてはわかりませんでした。サーバーが実行されているかどうかを確認することはより簡単でしょうが、これはうまくいくようです。 – hatmatrix

+0

サーバが稼働しているかどうかを知る良い方法があるかもしれませんが、これは私の頭に最初に現れたものです:) – markhellewell

+0

'server-process'変数が利用可能です。' - daemon'を使用している場合、'(daemonp) 'をチェックし、initファイルとコマンドライン引数が処理されるまでサーバが起動していないことに注意してください。詳細は '(コマンドライン)'関数の終わり近くを見てください。 – phils

7

あなたが複数のインスタンス(とないフレーム)をしたい場合は、端末プロンプトで次のように使用します。

/Applications/Emacs.app/Contents/MacOS/Emacs & 

(Generic form for any app) /Path_To_Application.app/Contents/MacOS/Application & 
+0

これはあなたを噛む可能性があります。複数のインスタンスがお互いのテンポラリファイルを驚かせた場合、私は驚くことはありません。私の場合、 'auto-save-list'、' backups'、 'bookmarks'、' ido.last'、 'places'、' projectile.cache'のような '.emacs.d'ファイル/ディレクトリがあります。 。 –

+0

異なる設定ディレクトリで複数のインスタンスを実行する場合は、これをチェックしてください:[カスタムユーザ-emacs-directoryでemacsを起動する方法](http://emacs.stackexchange.com/questions/4253/how-to-start -emacs-a-custom-user-emacs-directory)(比較的新しいEmacs StackExchangeにあります。これは一見価値があります)。 –

1

私はこれをshell scriptという名前で作成しました。これにより複数のemacsインスタンスを同時に開くことができます。

インストールするには、emacs-ideスクリプトを/usr/local/bin/または$PATHの任意のディレクトリにコピーしてください。あなたのような、複数のファイルまたはディレクトリで複数のEmacsのインスタンスを実行することができます

emacs-ide ~/Projects/project-1 
emacs-ide ~/Projects/project-2 

スクリプトも編集されているディレクトリ(プロジェクト)またはファイルに一致するように、ウィンドウの名前を設定します。ここで

4

は、別のインスタンスを起動Emacsのウィンドウを上げ、それが注力与える簡単なシェルスクリプトです:

#!/bin/bash 

/Applications/Emacs.app/Contents/MacOS/Emacs \ 
    --eval '(select-frame-set-input-focus (nth 0 (frame-list)))' \ 
    "[email protected]" 

注:

  • このスクリプトは、EmacsがLinux上でemacsのように振る舞うます私は慣れています。
  • にアクティブにするフレームを識別するには、おそらく '(n番目の0(フレームリスト))'よりも良い方法がありますが、上記のスクリプトは私には右の のことを行います。
  • 私の.emacsファイルに '(​​server-start)'がありません。