他のemacsインスタンスによって管理されているバッファーを表示する


7

gnus個別のemacsインスタンスで頻繁にブロックされ、メインのemacsインスタンスに「バッファを転送」する傾向がある他のことを実行することは可能ですか?より一般的には、emacsインスタンス間でどのような通信が可能か疑問に思っています。


あなたの質問への答えではなく、ほんのいくつかの考え-バッファを整理しておくためのより良い方法がないために、多くの人が複数のEmacsインスタンスを実行しているようです。使用するフレームで整理、例えば-すなわち、1つのインスタンスのみとのより良い組織-複数のインスタンス間の通信の問題は、それらを持っていないことで回避できますframe-bufs github.com/alpaker/Frame-Bufsまたは他の組織のライブラリ(例えば、様々なプロジェクトをなど)。簡単に言えば、1つのEmacsインスタンス内に膨大な量のアクティブなバッファーを効果的に編成する方法はたくさんあります。
法律家、2015

私はel-screenバッファの編成に使用し始めていますが、プロジェクト指向のアプローチの方が理にかなっているかもしれません。私はのようなマスターemacsといくつかのヘッドレスワーカーemacsesをブロックすることを想定していますgnus。emacsesがソケットを介して通信するか、マスターemacsが一時的なワーカーを生成し、すべての通信がstdinとstdoutを介して行われる最も簡単な解決策ですが、emacs固有のオブジェクトをシリアル化および逆シリアル化するために多くの問題に取り組む必要があります(つまり、私が避けようとしているハードワーク)。
Gregory Nisbet

ああ、分かった 。。。はい、Emacsを起動した後、初めてメールを送受信しているときに、通常、コーヒーを飲むか、stackexchangeの最新の質問をチェックします。つまり、あなたの痛みを感じます。Wanderlustを使用すると、その後の電子メールのチェック/送信ははるかに速くなりますが、何千もの保存された電子メールの最初のチェック/送信は、数分かかることがあります。
弁護士、2015

@ lawlist、ansiterm内でmuttを実行してみたのは、ansitermだけがロックしてしまうためでしたが、リフレッシュレートはひどいものでした(そして、muttで背景色を無効にする方法を理解できませんでした)。私もwanderlustを使用してみましたが、Gmailの設定方法がわかりませんでした(何も入っていない空のデスクトップフォルダがあります)。
Gregory Nisbet

非同期プロセスを使用してメールをダウンロードするmu4eを使用しています。(送信は依然として問題ですが、メッセージが1つしかないため、通常はそれほど問題になりません。)
mbork

回答:


4

各Emacsインスタンスが一意の名前でデーモンを実行していることを確認してください。変数server-startを設定してサーバー名を選択します。次に例を示します。

emacs --daemon &          # Normal instance with the default server name ("server")
emacs --daemon=gnus &     # Instance for GNUS only

あるインスタンスから、関数を使用して別のインスタンスでコードを実行できますserver-eval-at。式の値はローカルインスタンスに返されます。読み返すことができる値である必要があります。整数、文字列、リスト、およびその他の「透過的な」データ構造は問題ありませんが、この方法でバッファ、フレームなどを転送できます。

この機能を使用して、別のインスタンスにフレームを開くように指示したり、別のインスタンスのバッファー名を一覧表示したりできます。他のインスタンスがビジー状態の場合、デーモンに応答するまでコードはブロックされます。

(server-eval-at "gnus" `(frame-parameter
                          (make-frame-on-display ,(frame-parameter (selected-frame) 'display))
                          window-id))

この機能を使用するコードはそれほど多くありません。ほとんどのEmacsユーザーは単一のインスタンスを実行します。したがって、何をしたい場合でも、おそらくコーディング作業を行う必要があります。


emacs --daemon=gnus代わりに単純に言うことができますemacs --daemon --eval '(setq server-name "gnus")'
Phils '

0

Emacsclient

Emacsの代わりにEmacsクライアントを使用してください。最初に(server-start)Emacs(en)でa を実行し、次にを使用してクライアントを独自のフレームで実行する必要がありますemacsclient -c test.mac

オプション-f ServerFile(Windowsの場合)またはサーバー名を使用して、さまざまなサーバーファイルを区別することもできます-s ServerName。見ていてくださいhttp://www.gnu.org/software/emacs/manual/html_node/emacs/emacsclient-Options.htmlを。そのためには、Emacsenごとに異なるサーバー名を設定する必要があります(setq server-name "Server1")


emacsclientは複数のデーモンに接続できますか?
Gregory Nisbet

申し訳ありませんが、ユースケースを完全に理解できていません。例を挙げてください。
Dieter.Wilhelm

1
gnusやwanderlustなどのメール読み取りプログラムは、更新中にUIをロックします。ほとんどの場合、これらのプログラムが残りのemacsとやり取りする必要は本当にありませんが、単一のコンテキストでバッファーを管理したいので、メールのemacsとすべてのものを切り替える必要はありません。他のemacs。helmのような特定のパッケージがブロックを回避するために別のemacsインスタンスを使用することを知っており、既存のemacsクライアントの一部を書き換えて同期が遅くなるのではなく、別のemacsインスタンスからのバッファーを表示する方法があるかどうか疑問に思っていました。
Gregory Nisbet

@GregoryNisbet:なるほど、複数のデーモンまたはEmacsサーバーインスタンスに関する回答が含まれるように回答を更新しました。役立つことを願っています...
Dieter.Wilhelm

2
emacsclientのインスタンスは一度に1つのemacsサーバーのバッファにしかアクセスできないため、これはemacsの異なるインスタンスを実行することと同じではないでしょうか?
Iqbal Ansari
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.