質問: 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をハックしてやりたいことを行う方法がわかりません...ありがとう!
回答: 答えはここにあります: 元のフレームで「開く」ためのemacs変数 これは、新しいバージョンのemacsのデフォルト設定への変更です。追加:(setq ns-pop-up-frames nil) .emacsファイルに。これを見つけてとても幸せです。