web-dev-qa-db-ja.com

Emacsは、「open -a」で開くと、新しいフレームでファイルを開きます

コマンドラインからEmacsを呼び出して、実行されていない場合はグラフィカルEmacsを起動するか、すでに実行されているEmacs内のファイルにアクセスできるようにしたい。 emacsclientでこれを実行しようとしましたが、これは「正しい」方法であることがわかっていますが、OS Xで多くの問題が発生したか、ランダムにクラッシュするか、emacs --daemonマシンのシャットダウンまたは再起動中にプロセスがハングし、一般的なフレークが発生します。これを機能させたいのですが、現時点では、以下で説明するこの1つの問題を除いて、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

このファイルを同じフレームで開きます。これで、このファイルを開いた状態の1つのフレームができました。これを行うと、次のようになります。

$ open -a Emacs file2.txt 

新しいフレームが開き、2つのフレームが同時に開きます。

--argsスイッチをopenに使用して、Emacsへのコマンドライン引数をいじってみましたが、これは後続の呼び出しでは機能しないようです。

$ open -a Emacs --args --eval='(print "foo")'
$ open -a Emacs --args --eval='(print "bar")'

これはメッセージバッファに「foo」を出力するだけです... 2回目はEmacsがフォアグラウンドに移動しただけですが、メッセージは出力されません。

openがすでに実行されているアプリケーションとどのように通信するのかわかりませんが、どうすればわかるのでしょうか。または、Messagesバッファよりもはるかに詳細なログを取得する方法はありますか?上記のセッション中、そのバッファには興味深いものは何も出力されないので、EmacsLISPをハックしてやりたいことを行う方法がわかりません...

ありがとう!

20
michiakig

答えはここにあります: 元のフレームで「開く」ためのemacs変数

これは、新しいバージョンのemacsのデフォルト設定への変更です。追加:

(setq ns-pop-up-frames nil)

.emacsファイルに。

これを見つけてとても幸せです。

26
Colin