問題タブ [emacsclient]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
emacs - EmacsサーバーはEmacsクライアントが指定したリモートファイルを編集できますか?
emacsclientsによって指定されたファイル が、サーバーのファイルシステムではなく、emacsclients のファイルシステムに対して相対的になるように、 emacs サーバーをセットアップしようとしています。たとえば、マシン「darkstar」にemacsサーバーをセットアップし、「brightstar」のemacsclientを介してこのサーバーに次のコマンドで接続するとします。
emacs サーバーは、brightstar ではなく darkstar で ~/fantastic ファイルを編集しようとします。私はこれの逆が好きです。私はあらゆる種類のこっけいな提案を受け入れます。
*背景メモ: さまざまなマシンで開いているすべてのバッファを追跡し、色の設定、バインドなどを追跡する emacs プロセスが必要です。このすべてを利用可能にして、任意のマシンで emacs を使用して複製したいと考えています。emacs サーバーはまさにこれを行っているように見えますが、クライアントのローカル ファイルを編集する機能はありません!
linux - emacsclientの背景をEmacsの背景として設定するには?
私は(私の.emacsで)持っています
そして、私は2つのバインディングを持っています:
exはターミナルでクライアントを開くのに問題なく動作しますが、フレームとして開きたいときは白い背景があります:(
暗い背景を使用する理由と方法を教えてください。
linux - emacsがフレームまたはターミナルにあるかどうかを確認する方法は?
この質問に基づく:emacsclientの背景をEmacsの背景として設定するにはどうすればよいですか?
フレームだけに背景が必要で、端末やコンソールには必要ありません。
これが私がコンソールの修正を追加しようとしている方法です
しかし、それではemacsclientのバックグラウンドを取得できません(フレームの場合でも)。たぶん、チェックはemacsclientでも実行されませんか?
基本的に、ターミナルとコンソールではなく、フレームでemacsclientに背景を追加したいと思います。
emacs - sudoと単一のデーモンを使用してルートファイルでemacsclientを使用する方法
私はいつもemacsをデーモンとして実行していますが、似たようなものを作りたいとき
rootが別のemacsを使用していて、2つのデーモンを実行したり、通常のemacsが単純なファイルをロードするのを待ったりしたくないので、それを行うことはできません。
emacsclientsudo /etc/make.conf
ユーザーemacsクライアントでシステムファイルを編集するには、同様の解決策が必要です:)。
macos - emacsclientの非ラテン語入力
フォアグラウンドモードで実行すると、Emacsは非ラテン入力を正しく挿入します。
emacs --damon
+として実行するとemacsclient
、狂気が始まります。文字を挿入する必要がある各キーストロークは、単語の選択、式のジャンプ、関数の選択などのアクションをもたらします。まるで(恐ろしい考えの)Vimのようです!
不足している構成オプションはありますか?
アップデート:
実際にそれを解決しました:M-x set-locale-environment
RETRET。
システム全体のロケール設定(UTF-8)を使用しない理由はまだ明らかではありません。
アップデート2:
はい、トランクに固定されています!それをしてくれた人に感謝します!
emacs - Emacs: new-frame と emacsclient -c を取得して、設定されたフレーム サイズを使用しますか?
私は StackOverflow を初めて使用しますが、Emacs を習得しようとしているときに私をいらいらさせた事実上唯一の問題について質問があります。
.emacs
次のように、 Emacs のデフォルトのフレーム サイズを 70 行 80 列に設定するようにファイルを構成しました。
これは、Emacs の起動時に問題なく動作します。問題は、new-frame
またはemacsclient -c
これらの設定を使用して新しいフレームを起動したときに無視されることです。実行時にファイル内の設定を強制emacsclient
しnew-frame
て読み取る方法はありますか?.emacs
編集:
これが私の.emacs
ファイルです:
emacs - コマンド ラインで emacs lisp 式を評価する
私はemacsの初心者です。RedHat Linux で emacs-24.1 を使用しており、elisp 式を評価しようとしています。私が emacs に実行させたいのは、emacs 自体を起動せずに elisp 式を評価することです。いろいろ試してる
emacs が式を評価しているかどうかはわかりませんが、コンソールに結果が表示されず、emacs ウィンドウが表示されます。次に試したのはこれ
Emacs クライアントはサーバーを予期しています。サーバーが見つからなかったため、エラーがスローされました (ソケットが見つからない、サーバーを起動できないなど)。そこで、サーバーを起動し(サーバー名はSERVER)、emacsclientを再度実行しました
今回は、emacs が式を評価し、結果をコンソールに出力しました。これは、emacs が既存のサーバーを使用して式を評価しているためです。サーバーが実行されていないときに問題が発生します。
今回は、コンソールでエラーが発生していません。-a (私の.emacsには(server-start)コマンドがあり、サーバー名はANOTHER_SERVERに設定されています)ため、Emacsは新しいウィンドウを起動しています。しかし、emacs はファイルを編集しようとしています (+ 2 3)。モードラインに表示されます。よくわかりません。emacsclient --help でこれが表示されました
emacsのマニュアルにはこう書かれています。
これを進める方法がわかりません。前述したように、私の目標は、emacs を起動せずに elisp 式を評価することです。出来ますか?
emacs - 他のマシンで Emacs サーバーと emacsclient を他のユーザーとして使用する
(start-server)
既存の Emacs セッション内で呼び出した後emacsclient -c
、(同じコンピューター上で) を使用して、そのサーバーに接続する新しいフレームを作成できることを知っていemacsclient
ます。 )。
私が見つけたドキュメントのほとんどは、「ローカルの Emacs にすばやくアクセスできるようにする」ユースケースに焦点を当てているため、まだ詳細を見ていないことが 2 つあります。
他の
emacsclient -c
ユーザーが開始した Emacs サーバーにアクセスできますか? それとも、自分のユーザーが開始したセッションのみを検出するように組み込まれていますか?Emacs サーバーは (直接的または間接的に) リモート接続をサポートしていますか?
emacsclient -c
つまり、リモートマシンでの呼び出しがEmacs サーバーのローカル状態にアクセスできるようにする Emacs (おそらく SSH を含む) をセットアップする方法はありますか?
(まだ想像していない方のために説明すると、私が最終的にやりたいのは、上記の 2 つの手法を組み合わせて、基本的な共同編集サポートを提供することです。)
これは現実の問題なので、私が取り組んでいることは次のとおりです。
- 必要な機能はすでに Emacs に組み込まれているはずです (23.3.1、64 ビット)。標準の Ubuntu リポジトリから Emacs 拡張機能に拡張することはできますが、そうしないほうがよいと思います。(悲しいことに、これはRudelを除外すると私は信じています。)
- 新しいユーザーやユーザーのなりすましはありません。ソリューションは既存のユーザー アカウントのセットで動作する必要があり、ユーザーは他のユーザーになりすましてはなりません (たとえば、
su
またはを介してssh
)。
違いがある場合、マシンはプライベート LAN 上にあり、OpenSSH クライアントとサーバーがインストール (および実行) されており、すべてのユーザーが (自分のアカウントで) すべてのマシンに接続できますが、共有ファイルシステムはありません。
それで、Emacsサーバーができるかどうか知っている人はいますか
- 他のユーザーにアクセスを許可する、または
- リモートアクセスを提供しますか?
編集
rwb の回答でコメントされているように、実行によってローカルで開かれている新しいウィンドウが、リモートのEmacs サーバー プロセスemacsclient -c
によって実際に作成されていることは明らかです。つまり、サーバーで関連する動作をトリガーするだけです。通常、サーバーはローカル デスクトップにアクセスできないため、ディスプレイ設定が正しくないという問題が発生します (以下を参照)。ただし、次の一連のコマンドを使用すると、リモートの Emacs セッションに接続できるようになりました。emacsclient
1 つの端末で、1.22.333.44
は次の IP アドレスですremotehost
。
次に、別の(同じマシン上で):
このemacsclient
コマンドにより、リモート Emacs サーバー (詳細は で検索/tmp/server-file
) が、リモート ホスト上の Emacs セッションと状態を共有するグラフィカルな Emacs ウィンドウ (ローカル ディスプレイ上) を開きます。
リモート Emacs サーバーは 経由で起動されたのでssh -X
、SSH は「偽の」ディスプレイ経由で私のローカル ディスプレイへのアクセスを提供し:10
ます。したがってDISPLAY=:10
、(経由で)渡されたemacsclient
により、ローカルデスクトップでウィンドウが開かれます。
上記のアプローチは「リモート マシンで Emacs サーバーを実行し、emacsclient
ローカルで接続する」ボックスにチェックを入れていますが、非常に制限されています。実際、サーバーとクライアントをすべてローカルで 1 人のユーザーとして実行する場合と大差ありません。唯一の違いは、サーバーがリモートになり、別のシステム リソースにアクセスできることです。
残念ながら、ssh -X
別のマシンの X サーバーでウィンドウを開くことができた唯一の方法は、経由で起動することです。
基本を指定して
DISPLAY=remote:0
も意味がありません (Ubuntu X サーバーは-nolisten tcp
オプションで起動されるため)。SSH 経由で接続してから使用する
DISPLAY=:0
ことも失敗しますが、今回は適切な認証資格情報が不足しているためです。(とにかく、そうだと思います:エラーメッセージは不可解にNo protocol specified
/と言っていますCan't open display
。)
2 番目の問題を回避する方法を見つけることで、解決策にかなり近づくことができると思います。
http://comments.gmane.org/gmane.emacs.devel/103350の投稿('25 Oct 14:50' の投稿から始まり、半分ほど下)を読んで、これがこれは、Emacs ができない (つまり、不可能です ;-) ) というまれなことの 1 つです。
ただし、上記のパーミッションエラーなしでリモート X ディスプレイへのアクセスを提供する方法を誰かが持っている場合、私はまだ説得の余地があります....
TL;DR
rwb の回答で指摘されているように、Emacs がリモート アクセスを許可できるかどうかに関する上記の私の質問は、物事が逆になっています。Emacs が他のユーザーにアクセス権を付与することには実際の問題はありません (server-use-tcp
そして適切server-file
にこれを処理します): むしろ問題は、あるマシン上のプロセスが他のユーザーの X ディスプレイ(具体的には実行中の Emacs)で新しい X ウィンドウを開くことを許可する方法です。(start-server)
経由で要求するユーザーのためにウィンドウを開く必要がありますemacsclient -c
)。その答えは、この質問の範囲を超えています。
代替ソリューション
回避策として、以下を使用します。
- マシン0:
tmux -S /tmp/shared-tmux-socket new-session
- machine1..machineN:
ssh -t machine0 tmux -S /tmp/shared-tmux-socket attach
に対する適切なファイル権限を持つ/tmp/shared-tmux-socket
。
次に、共有ターミナルでテキストモードの Emacs を実行します。:-) これにより、ユーザーのなりすましに関する疑問がいくつか生じますが、少なくともホストは、ゲストが行っているすべてのことを確認できます。
emacs - emacsclientからサイレントにdefunを呼び出します
ソースのコンパイル中に、GNUMakeにemacsdefunを呼び出してもらいたいと思います。このために私は2つのオプションがあります:
- 新しいemacsインスタンスを開始し、目的の関数をロードして呼び出します。
次のようにemacsclientからdefunを呼び出します。
/li>
後者には利点があり、emacsサーバーがすでに実行されており、必要なdefunがロードされているため、より高速です。
しかし、これには欠点もあります。(message ...)
から呼び出された場合(my-emacs-defun)
、アクティブなemacsセッションが中断されます。変更を試みることができた(my-emacs-defun)
ので(message ...)
呼び出されませんが、emacsの組み込み関数を使用する場合は非常に困難です。
(message ...)
したがって、 fromを抑制する方法を知りたい(my-emacs-defun)
です。(message ...)
このために呼び出されたときの動作を変更することは可能(my-emacs-defun)? Can I use
ですか(defadvice) `
編集
本当の問題は、メッセージがミニバッファに表示されることです。そのとき(例えば、中(find-file)
)にミニバッファを使用するときはイライラします。
emacs - サーバーがビジー状態のときに、emacsclient 内から emacs に Cg/quit シグナルを送信するにはどうすればよいですか?
私の現在のセットアップでは、emacs --daemon
起動時に実行し、その後は作業に使用emacsclient
しています。ただし、これには問題があることに気付きました。処理の複雑なチャンクが発生すると、C-g動作が停止します。複雑な作業を停止したり、早期に終了したりすることはできません。私が知る限り、これは、クライアントからの入力が処理される前に、emacs クライアントがサーバーからの確認を待つ必要があるためです。その結果、C-g最も必要なときに機能しません。つまり、時間がかかる、または破壊的な可能性のあるプロセスから抜け出すために.
これに対する回避策、またはサーバープロセスに「停止してください!」と伝える方法はありますか? マニュアルの終了または緊急脱出のセクションには、この問題が存在することを認めているようには見えません。したがって、これは私が何か間違ったことをした結果である可能性もあります。もしそうなら、私は何を間違っていますか?
答えが「いいえ、あなたがやりたいことをする方法はありません。emacsclient
プロセスはサーバーがかなりの時間ブロックされていることに対処できません」という場合、コードまたはドキュメントで指摘されている答えを受け入れ済みとしてマークしますその答えが得られる場所: 私はそのようなものを見つけることができませんでした. :(