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


20

コマンドラインからEmacsを起動し、実行されていない場合はグラフィカルなEmacsを起動するか、既に実行中のEmacsのファイルにアクセスできるようにします。私はこれを行うemacsclientための「正しい」方法であると知っていますが、OS Xで多くの問題があり、ランダムにクラッシュemacs --daemonしたり、マシンのシャットダウンまたは再起動中にプロセスがハングしました、そして一般的な薄片。私はそれを機能させたいと思っていますが、現時点ではopen -a実際にははるかにうまく機能しますが、この1つの問題を除いて以下で説明します:

この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スイッチを使用してEmacsにコマンドライン引数をいじってみましたopenが、次の呼び出しでは機能しないようです。たとえば:

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

これは、メッセージバッファに「foo」のみを出力します... Emacsが2回目の最前面に表示されたが、メッセージは出力されません。

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

ありがとう!


私はOSXについて何も知らないので、具体的なことは何も提供できません。ただし、これをデバッグする場合は、構文エラーをスローしてからtにfind-file設定debug-on-errorし、Emacsがどのように呼び出されるかについての手がかりを得るためにスタックトレースをチェックアウトします。エラーを追加すると、find-fileLispのスクラッチバッファへの関数の定義をコピーしてへの呼び出しを追加するような単純なことができerror(それに例えば(error "cause stack trace")。FOR NEVER CHANGE THE SOURCEファイルをfind-file常にスクラッチbuferでこれを行う- !
ジョーCasadonte

@ジョーありがとう!これはかなり良い考えです。将来のために心に留めておきます。私は実際にemacsclient再び使用しようとしましたが、起動時よりもうまく起動して(server-start)いるinit.elように見えemacs --daemonますemacsclient
-michiakig

回答:


26

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

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

(setq ns-pop-up-frames nil)

.emacsファイルに。

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


これはとても役に立ちました!エイリアスと一緒に使うとopen -a /Applications/Emacs.app $1うまくいくようです!たとえば、gitでemacsを使用できるように、initでサーバーを起動します。
ドロール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.