コマンドラインから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をハックして自分がやりたいことをする方法を知りません...
ありがとう!
emacsclient
再び使用しようとしましたが、起動時よりもうまく起動して(server-start)
いるinit.el
ように見えemacs --daemon
ますemacsclient
。
find-file
設定debug-on-error
し、Emacsがどのように呼び出されるかについての手がかりを得るためにスタックトレースをチェックアウトします。エラーを追加すると、find-file
Lispのスクラッチバッファへの関数の定義をコピーしてへの呼び出しを追加するような単純なことができerror
(それに例えば(error "cause stack trace")
。FOR NEVER CHANGE THE SOURCEファイルをfind-file
常にスクラッチbuferでこれを行う- !