タグ付けされた質問 「emacsclient」

emacsclientは、ユーザーがEmacsサーバーに接続できるようにするプログラムです。EmacsをUnixライクなシステムのデフォルトエディタとして使用する場合に便利です。これにより、新しいプロセスを作成せずにEmacsを呼び出すことができ、共有バッファとコマンド履歴を再利用できます。


7
TRAMP経由でアクセスするリモートマシンの$ EDITORとしてローカルEmacsクライアントを使用するにはどうすればよいですか?
私はよく、TRAMPを使用して、ファイルの編集とでのリモートシェルの実行の両方のために、複数のリモートサーバーを管理しshell-modeます。ただし、これは、コマンドがEDITOR変数を使用してファイルを編集する場合は機能しません。crontab -e特にshell-mode、「ダム」端末はその中で別のエディターの実行をサポートしていないためです。 ローカルでは、適切な呼び出しを使用してこれを行います。この呼び出しemacsclientにより、新しいバッファーが開かれ、非常に簡単になります。残念ながら、これはリモートマシンでは機能しません。 私は使用できると思いますed。(はい!) EDITORローカルのEmacsインスタンスでファイルを編集できるようにリモートを設定するにはどうすればよいですか?

5
MacのEmacsdaemonおよびEmacsclient
OS:OS X 10.9.5、Mavericks Rainers-MacBook-Pro-3.local上の2014-04-03のGNU Emacs 24.3.1(x86_64-apple-darwin13.1.0、Carbonバージョン1.6.0 AppKit 1265.19) railcatからhomebrew経由でemacsをインストールしましたが、問題なく動作します。ターミナルではemacsを使用しません。通常はアプリケーションを使用して開始します。 私が言ったように-私はこれまでのところ幸せです。 うまくいかなかったことが1つあります(以前はLinuxでうまく機能していました)。 ログイン時にemacsデーモンを起動します emacsclientを使用して開く emacsdaemonを閉じ、ログオフ時にalファイルを保存します これをセットアップするのに役立つ実用的なレシピはありますか? 追加情報 ログイン時にemacsデーモンを開始するには bashコマンドを実行するAutomatorアプリケーションを作成しました /usr/local/bin/emacs --daemon それをログインアイテムに追加して、うまく機能するようにしました。 ターミナルからデーモンを利用する を使用してemacsデーモンを利用できます emacsclient .bashrc emacsターミナルセッションで.bashrcを開きます。 GUIからの活用 疑問が残ります。GUIからどのように使用できますか? emacsclientを理解しているため、開くファイルを指定しない限り、emacsclientを開くことができません。 emacsclient GUIを開き、以前に開いたすべてのファイルを開きたいですか?これは可能ですか? 私は使用できることがわかりました emacsclient -c ターミナルで私がやりたいことをする-しかし、私はGUIのために同じことをすることができますか?

3
元に戻す履歴を折りたたむ方法は?
私は、音声認識でEmacsを制御できるEmacsモードに取り組んでいます。私が遭遇した問題の1つは、Emacsが元に戻す操作を処理する方法が、音声で制御するときの動作の期待と一致しないことです。 ユーザーがいくつかの単語を話してから一時停止すると、それは「発話」と呼ばれます。発話は、Emacsが実行する複数のコマンドで構成される場合があります。多くの場合、認識エンジンが発話内の1つ以上のコマンドを誤って認識します。その時点で、「元に戻す」と言って、発話内の最後のアクションだけでなく、発話によって行われたすべてのアクションをEmacsで元に戻すことができます。言い換えれば、発話が複数のコマンドで構成されている場合でも、アンドゥに関する限り、Emacsが発話を単一のコマンドとして扱うようにします。また、発話前の正確な場所に戻りたいのですが、通常のEmacsの取り消しではこれが行われないことに気付きました。 各発言の最初と最後にコールバックを取得するようにEmacsをセットアップしているので、状況を検出できます。Emacsに何をさせるかを把握する必要があります。理想的には私のような何かを呼びたい(undo-start-collapsing)し、その後(undo-stop-collapsing)、何完了挟んは魔法のように一つのレコードにまとめられます。 ドキュメントをいくつか探して見つけましたundo-boundaryが、それは私が望むものの反対です-発話内のすべてのアクションを、それらを分割せずに1つのアンドゥレコードに折りたたむ必要があります。undo-boundary発話間で使用して、挿入が個別と見なされるようにすることができます(Emacsは、デフォルトでは連続する挿入アクションをある制限までの1つのアクションと見なします)が、それだけです。 その他の合併症: 私の音声認識デーモンは、X11キー押下をシミュレートすることによっていくつかのコマンドをEmacsに送信し、いくつかのコマンドをemacsclient -eそのように送信します(undo-collapse &rest ACTIONS)。 を使用しますがundo-tree、これにより事態がさら​​に複雑になるかどうかはわかりません。理想的には、ソリューションはundo-treeEmacsの通常のアンドゥ動作で動作します。 発話内のコマンドの1つが「元に戻す」または「やり直し」の場合はどうなりますか?コールバックロジックを変更して、これらを常に個別の発話としてEmacsに送信して、物事をよりシンプルに保つことができると考えています。キーボードを使用する場合と同じように処理する必要があります。 ストレッチ目標:発話には、現在アクティブなウィンドウまたはバッファを切り替えるコマンドが含まれる場合があります。この場合、各バッファで個別に「元に戻す」と言う必要がありますが、それほど派手である必要はありません。ただし、単一のバッファー内のすべてのコマンドはグループ化する必要があります。したがって、「do-x do-y do-zスイッチバッファーdo-a do-b do-c」と言うと、x、y、zは1つの取り消しになります。元のバッファのレコードとa、b、cは、バッファに切り替えられた1つのレコードでなければなりません。 これを行う簡単な方法はありますか?AFAICTには何も組み込まれていませんが、Emacsは広大で深い... 更新:少し余分なコードを追加して、以下のjhcのソリューションを使用することになりました。グローバルでbefore-change-hookは、変更されているバッファがこの発言を変更したバッファのグローバルリストにあるかどうかをチェックし、そうでない場合はリストに入れてundo-collapse-begin呼び出されます。次に、発話の最後に、リスト内のすべてのバッファーを反復処理し、呼び出しますundo-collapse-end。次のコード(md-名前空間のために関数名の前に追加): (defvar md-utterance-changed-buffers nil) (defvar-local md-collapse-undo-marker nil) (defun md-undo-collapse-begin (marker) "Mark the beginning of a collapsible undo block. This must be followed with a call to undo-collapse-end with a marker eq to this …

3
デーモンモード:起動時に対話型プロンプトを延期しますか?
(逆に、この質問はデーモンモードで起動して対話型ダイアログを非表示にする方法と同じではないことに注意してください。その質問は特定のプロンプトを表示させる原因を排除して提出者によって「回答」されたためです。) まだ存在しないミニバッファに表示されるプロンプトへの回答を待って永遠にハングアップしないようにする一般的な方法があるかどうかを知りたいemacs --daemonです。 Emacsが起動シーケンスを完了するまでサーバーは起動しないため、emacsclientに接続してこれらのプロンプトに答えることはできません。(つまり、ALTERNATE_EDITORが空の文字列に設定されている場合emacsclient、サーバーが新しいデーモンを開始できないことがわかると、複数のEmacsデーモンがすべてスタックして待機killall emacsすることになります。)問題を解決する必要があります続行する前に。 Emacsを非デーモンモードで起動し、何を要求しているかを確認することで、起動時にプロンプ​​トを表示する各問題でwhack-a-moleを再生できますが、次のデーモンを停止できないため、解決策ではありません新しい理由でスタートアップにハングアップすることから。 例を挙げると、最初の再起動後のEmacsが古いEmacsからロックファイルを盗むことができるかどうかを知りたいときに、システムが再起動またはEmacsがクラッシュした後にハングする一般的な理由です。そのプロンプトが対話なしで常に「はい」と答えるようにアドバイスを作成することで、それを修正できました。ただし、前回のセッションの保存時に開いていたファイルの1つは、sudoまたはSSHパスワードを必要とするTRAMPファイルであったため、デーモンはパスワードプロンプトで待機しています。そこで、問題のあるファイルを削除するためにセッションファイルを(viまたはemacs -q!を使用して)手動で編集することで修正します。 そのため、起動時にセッションのロードを自動的に停止し、最初のemacsclientから手動で実行する必要があるコマンドに変更できます。しかし、バックグラウンドでセッションをロードしておらず、使用する準備が整うまでに準備が整っている場合、デーモンの目的はすべて失われます! だから私が欲しいのは: (最良)残りの初期化を完了しながら、emacsclientを開くまでミニバッファープロンプトを延期する方法。 (OK)noemacsclientが実行されていない限り、上記で説明したように、私がまだアドバイスしていないすべてのミニバッファープロンプトを返す方法があります。TRAMPバッファーがほとんど機能する限り、私はTRAMPバッファーでエラーが発生しても生き続けることができます。 これらの目標のいずれかを達成する方法はありますか?

3
フック関数を一度だけ実行する方法はありますか?
コンテキスト emacsクライアント/サーバー構成でafter-make-frame-functionsテーマを適切にロードするためにフックを使用しています。具体的には、これを作成するために使用するコードスニペットです(このSO回答に基づいています)。 (if (daemonp) (add-hook 'after-make-frame-functions (lambda (frame) (select-frame frame) (load-theme 'monokai t) ;; setup the smart-mode-line and its theme (sml/setup))) (progn (load-theme 'monokai t) (sml/setup))) 問題 新しいemacsclient -c/tセッションが開始されると、フックは新しいフレームだけでなく、以前のすべての既存のフレーム(他のemacsclientセッション)でも実行され、非常に迷惑な視覚効果をもたらします(テーマはすべてのフレームで再び読み込まれます)。さらに悪いことに、ターミナルクライアントでは、既に開いているテーマの色が完全に台無しになります。明らかに、同じemacsサーバーに接続されているemacsクライアントでのみ発生します。この動作の理由は明らかであり、フックはサーバー上で実行され、すべてのクライアントが影響を受けます。 質問 この関数を一度だけ実行する方法や、フックを使用せずに同じ結果を取得する方法はありますか? 部分的な解決策 @Drewの回答のおかげで、このコードが完成しました。しかし、まだ問題があります。ターミナルでクライアントセッションを開始すると、GUIはテーマを適切にロードせず、その逆も同様です。多くのテストを行った結果、動作はどのemacsclientが最初に起動するかに依存していることを認識し、さまざまなものを破棄した後、ロードされたカラーパレットに関連している可能性があると思います。手動でリロードすると、テーマはすべて正常に機能するため、初期構成のように毎回フックによって関数が呼び出されたときにこの動作が表示されません。 (defun emacsclient-setup-theme-function (frame) (progn (select-frame frame) (load-theme 'monokai t) ;; setup the smart-mode-line and its theme (sml/setup) …

2
Gnome 3でデーモンモードを使用する
EmacsWiki pageを使用してコマンドラインで動作するようにEmacsデーモンを取得しましたが、Gnome 3ランチャーでクライアントを実行する方法に固執しています。Emacsデーモンに接続するGUIウィンドウを起動するGnomeデスクトップファイルを設定するにはどうすればよいですか?

2
emacsclientにフレームがまだない場合にのみフレームを作成させる
emacsclient -a '' -nまだフレームがない場合にのみ、新しいフレームを作成するにはどうすればよいですか? -cフラグの問題は、毎回新しいフレームを作成することです。それなしの問題は、開いているフレームがない場合、コマンドラインで開くことです。 シェルから開いているEmacsフレームがあるかどうかを確認できる場合は、それに-c依存して、または依存せずに、必要な動作を取得できます。私は試した: $ emacsclient -a '' --eval '(frames-on-display-list)' (#<frame F1 0xba2740>) 私はいつも同じ結果を得ます。 一時ファイルまたはpgrepを使用することもできますが、これらのアプローチは非常にエラーが発生しやすくなります。 これはこの質問に似ていますが、OPは呼び出しの前にフレームを開く必要があることに満足していたので、重複ではありませんemacsclient。

2
コマンドラインからフォーカスしてemacsclientを起動します
以下のようにコマンドラインからemacsclientを起動すると: emacsclient -a '' -c "$@" 常にバックグラウンド(emacsclientウィンドウの上にあるターミナルウィンドウ)で起動するため、マウスを使用してウィンドウをクリックし、emacsclientに切り替える必要があります。 それは本当にイライラさせられます、コマンドラインから呼び出されたときにポップアップするフレームにフォーカスするようにemacsclientを取得できますか?

2
MS Windowsでのemacsclientのセットアップ
emacsサーバーデーモンをセットアップし、MS Windowsでemacsclientを使用して、開かれた各ファイルのemacsの追加インスタンスの開始に伴う遅延やオーバーヘッドなしにファイルをすばやく開くようにしています。私は、MS Windowsのemacswikiで提供される特定の指示に従っています。 emacsをデーモンとして実行し、 runemacs.exe --daemon 続いemacsclientw.exeて、適切なオプションを指定して呼び出します。 デーモンの起動は成功します(プロセスリストにemacs.exeが表示されます)が、emacsclientを呼び出すとエラーが発生します。wikiは、ショートカットを作成しemacsclientw.exeてターゲットを X:\path\to\emacs\bin\emacsclientw.exe -na "X:\path\to\emacs\bin\emacsclientw.exe" -c -n これは正しいです?クライアントが2回呼び出されているようです。示されているターゲットを使用してもプログラムは実行されず、「ファイル名または引数が必要です」というエラーが発生します。上記のターゲットの最初の部分のみを使用する X:\path\to\emacs\bin\emacsclientw.exe -na 一般的なエラーを生成します。2番目の部分のみを使用する X:\path\to\emacs\bin\emacsclientw.exe -c -n 「ソケットまたは代替エディタがありません」というエラーが発生します。(公式のemacsclientオプションはここで説明されています。) 助言がありますか?Emacsは標準モードで正常に実行されます。つまり、デーモンモードでは実行されません。バージョン25.1。初期化ファイルでサーバーを起動するのではなく、デーモンを実行したいと思います。

5
Emacsクライアントはターミナルでサーバーを見つけることができません
だから、私はemacsをサーバーとして設定しようとしていますが、ターミナルから動作させるのに問題があります。ある端末でemacs --daemonを実行した場合、同じ端末からemacsclientを実行すれば接続できますが、新しい端末を開いた場合、emacsclientはサーバーを見つけられません。ランチャーからemacsclientを実行すると、問題なく動作するようです。 私は走っています emacsclient -a '' -t クライアントは言う: emacsclient: can't find socket; have you started the server? To start the server in Emacs, type "M-x server-start". 何が起こっているのかについてのアイデアはありますか? それが重要であれば、私はgnome / i3でubuntu 17.04を使用しています。

3
環境変数を再読み込み
この質問はスーパーユーザーis-there-to-reload-environment-variables-in-emacsで行われましたが、適切な解決策はありませんでした。 EmacsClientを使用していて、30を超えるバッファが開いていることがよくあります。シェルで環境変数を変更した場合は、EmacsClientを終了して(すべてのバッファを再度開く)、Emacsでも環境変数を手動で設定する必要があります。Emacsで環境変数を簡単に更新できないのは不愉快です。助言がありますか?

4
emacsclientからemacs GUIを実行する
emacs 25.1を実行しています。 起動時にデーモンとして起動するemacsサーバーがあり、次のエイリアスでemacs端末セッションを開くことができます。 alias em="emacsclient -t" どうすれば同様の方法でemacs guiを起動できますか?

1
emacsclientをEDITORまたはVISUALとして使用するにはどうすればよいですか?
シナリオ:私はzshで、すでに開いているEmacsのインスタンスで長いシェルコマンドを編集したいと思います。に設定$VISUALしましたemacsclient -n -c。C-x C-ezshから実行すると、新しいEmacsフレームが開き、zsh行の内容が表示されます。バッファを編集して保存した後、を押すC-x kとバッファが閉じます。zsh行は変更されません。Emacsで行われた変更をzshが認識しないのはなぜですか? Emacs 24.5.1、zsh 5.0.8、Mac OS X 10.10.4

3
Emacsclient:起動から常時1つのemacsプロセスで終了せず、GUIを非表示にする
emacsclientは長いパッケージの読み込み時間を適切に処理できるため、少なくとも1つのemacsプロセスを保持し、ほとんどの場合、1つのemacsプロセスのみをバックグラウンドプロセスとして開いて、GUIを非表示にします。 現在、私は.bashrcで次の関数を定義しています。 emc () { if [[ $# -eq 0 ]]; then emacs --eval "(suspend-frame)" & return fi args=($*); setsid emacsclient -c -e "(find-file \"${args[*]}\")" } また、.bashrcに次の行があります。 emc そのため、シェルを開くたびに、新しいemacsプロセスが発生します。 問題は、多くのシェルを開いた後、多くの不要なemacsプロセスが追加されることです。ただし、起動から常に1つのemacsプロセスを維持したいだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.