怎样连接 lpy 和 ob-ipython?

我的使用情形是这样的

  1. 用 org-mode 的表格记录了一些数据
  2. 使用 ob-ipython,将 org-mode 表格的数据读取到 python 中(换言之,运行代码块),数据格式为 pandas dataframe。我的理解 ob-ipython 会启动一个 ipython 进程
  3. 在一个 python buffer 使用 lpy,并将进程切换为上一步生成的 ipython 进程,这样就可以使用之前读入的表格数据。
  4. 在 python buffer 中进行数据分析,处理
  5. 用 ob-ipython 将数据以结果的方式输出到 org-mode buffer 中,可以美化并导出。

看起来好像很美好,但是卡壳在第三步了。比如上图中 kernel-none 是 ob-ipython 的默认进程,而 lispy-python-default 是 lpy 的默认进程,我曾经简单地以为我只要把 lpy 进程切换为 ob-ipython 进程就可以了,像下图这样,

为此我修改了 lispy 的函数:

(defun lispy-short-process-name (x)
  (when (string-match "^\\(?:lispy-python-\\|kernel-\\)\\(.*\\)" (process-name x))
    (match-string 1 (process-name x))))

但是显然并不行,切换以后一运行代码就卡死。我对这两个包的工作机理了解的都不深入,想请教一下论坛里的高手,出现这种情况的原因是什么呢?

@fuxialexander 好像实现过类似功能,能提示一下应该怎样做吗?

不知道符不符合你的使用情景

1 个赞

谢谢!魔改了 lpy 的函数?但是为啥函数名前面有一个*?等有电脑了试一下

我是用的doom-emacs的convention, 写个*function 然后advice原来的函数

你可以直接把*去掉

不太明白这里的用意,只是把 python-shell-buffer-name 这个变量的值改变为 lispy buffer 的名字就可以了吗?我这里所有 buffer 里这个变量的值都是 "Python"