2011-01-27 66 views
4

我喜歡python-send-buffer命令,但是我經常使用嵌入在應用程序中的Python,或者通過自定義包管理系統啓動Python(以啓動具有某些依賴項的Python)。換句話說,我不能只運行「蟒蛇」,並得到一個有用的Python實例(東西python-send-buffer依賴)將emacs緩衝區發送到任意Python進程

我想什麼實現的是:

    任何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特定,但有a Javascript backend,它看起來非常像我想要的...但搜索幾乎找不到任何東西,除了一些模糊(可能是真的)聲稱SLIME不能很好地與非-Lisp語言

簡而言之:

  • 做一個項目存在從一個Emacs發送代碼緩存到現有的Python程序?
  • 如果不是,你會如何推薦我寫這樣的東西(不是很熟悉elisp) - SWANK? IPython的服務器代碼?簡單的TCP服務器從頭開始?

回答

2

comint爲這類東西提供了大部分基礎設施。有一羣很好的例子,像thisthis

它允許你運行一個命令,提供的東西comint-send-string輕鬆實現send-region類型的命令。

dbr/remoterepl on Github是我在問題中描述的原始概念證明。

它沒有任何雕琢的,但它主要是工程 - 導入replify.py模塊中的目標解釋,然後評估emacs-remote-repl.el愚蠢的硬編碼路徑固定client.py

1

不是shell-command給你你在找什麼?您可以編寫包裝腳本或適當調整#!sys.path

+0

所以用'殼command`得到緩衝區內容放入腳本中?這聽起來像是一個很好的起點,謝謝! – dbr 2011-01-31 12:08:50