EMACSバッファーを任意のPythonプロセスに送信します
-
25-10-2019 - |
質問
私は好き python-send-buffer
コマンド、ただし、アプリケーションに埋め込まれたPythonを使用するか、カスタムパッケージ管理システムを介してPythonを起動する(特定の依存関係を備えたPythonを起動するため)。 (何か python-send-buffer
依存している)
私が達成したいのは:
- Pythonインタープリター(またはPythonコードを評価できるアプリケーション)で、
magic_emacs_python_server.py
モジュール(に追加sys.path
必要に応じて) - emacsで、実行します
magic-emacs-python-send-buffer
これにより、リモートPythonインスタンスのバッファーが評価されます。
それは非常にシンプルであるべきだと思われます - Pythonモジュールは、スレッドでソケットに耳を傾けます。メインスレッドで評価し、 repr()
結果の(または、stdout/stderr、またはその両方をキャプチャするかもしれません)。 EMACSモジュールは、テキストをソケットに送信するだけで、応答して文字列を待ち、バッファに表示します。
このようなものがすでに存在しなければならないほどシンプルに聞こえます... iPythonは持っています ipy_vimserver
, 、しかし、これは間違った方法です。もあります swank
, 、非常にLISP固有のようですが、あります JavaScriptバックエンド 私が望むものと非常に似ているように見えます...しかし、検索は、スライムが非リスプ言語でうまく機能しないという漠然とした(おそらく本当の)主張以外にほとんど何も見つけられません
要するに:
- EMACSバッファーから既存のPythonプロセスにコードを送信するプロジェクトは存在しますか?
- そうでない場合、私はそのようなことを書くことをどのように勧めますか(Elispにあまりよく知らない) - スワンク? IPythonのサーバーコード?ゼロからシンプルなTCPサーバー?
解決
COMINT このようなものにほとんどのインフラストラクチャを提供します。のような良い例がたくさんあります これ また これ
それはあなたがコマンドを実行することを可能にし、物事を提供します comint-send-string
簡単に実装する send-region
タイプコマンド。
GitHubのDBR/Remoterepl 私が質問で説明したことの粗野な概念の証明です。
それはあらゆる種類のポリッシュがありませんが、それはほとんど機能します - あなたは replify.py
ターゲットインタープリターのモジュール、次に評価します emacs-remote-repl.el
愚かなハードコードされたパスを修正した後 client.py
他のヒント
そうではありません shell-command
あなたが探しているものをあなたに与えますか?ラッパースクリプトを書くか、調整することができます #!
と sys.path
適切に。