我编写了一个用于在 Python 中进行实时编码的 Eclipse 插件,它向 PyDev 编辑器添加了一个显示列。在该列中,它显示了变量值如何随着代码运行而变化,包括用于循环或重复函数调用的多个列。编辑代码时会更新显示。
我的问题是:如何干净地扩展 PyDev 编辑器以添加这个额外的列,该列将随源代码垂直滚动,并水平滚动以在长时间运行的循环中显示许多列?我的愿景是创建类似于比较两个文本文件时得到的窗口的东西,但仍然让用户编辑 Python 代码并使用 PyDev 编辑器的语法突出显示。目前,我只显示文本,但我还希望能够在此列中显示图形。
我目前使第一个版本正常工作的技巧是将行号标尺子类化并用我自己的文本替换行号。这真的很难看,尤其是我实现水平滚动的方式。
如果 PyDev 团队中的任何人有兴趣合并该功能或公开一些扩展点以使其更好地工作,我很乐意完成繁重的工作并提出拉取请求。不过,我确实需要一些指导。
这个想法来自 Bret Victor 的演讲,Inventing on Principle,特别是 17:30-21:30 的部分。如果你想看看我到目前为止实现了什么,我发布了一个演示视频,以及一个演练。
这是二进制搜索算法的示例显示。(显示在左边,代码在右边。)
# echo on
# echo width 40
n = 4 a = [1, 2, 4] def search(n, a):
low = 0 low = 0
high = 2 high = len(a) - 1
| while low <= high:
mid = 1 | mid = 2 mid = (low + high) / 2
v = 2 | v = 4 v = a[mid]
| if n == v:
| return 2 return mid
| if n < v:
| high = mid - 1
| else:
low = 2 | low = mid + 1
return -1
i = 2 i = search(4, [1, 2, 4])