我为live coding in Python编写了一个Eclipse插件,它将一个显示列添加到PyDev编辑器中。在该列中,它显示了代码运行时变量值的变化情况,包括循环或重复函数调用的多个列。编辑代码时显示会更新。
我的问题是:我如何干净地扩展PyDev编辑器以添加这个将与源代码垂直滚动的额外列,并水平滚动以在长时间运行的循环中显示许多列?我的愿景是创建类似于比较两个文本文件时获得的窗口,但仍然让用户编辑Python代码并使用PyDev编辑器的语法高亮显示。目前,我只显示文字,但我也希望能够在此栏中显示图片。
我当前获得第一个版本工作的黑客是将行号标尺子类化并用我自己的文本替换行号。这真的很难看,尤其是我实现水平滚动的方式。
如果PyDev团队中的任何人有兴趣合并该功能或暴露一些扩展点以使其更好地工作,我很乐意做咕噜咕噜的工作并提出拉取请求。不过,我确实需要一些指导。
这个想法来自Bret Victor的演讲,Inventing on Principle,尤其是17:30-21:30的部分。如果您想查看到目前为止我已实施的内容,我发布了a demo video以及a walk-through。
这是二进制搜索算法的示例显示。 (显示在左侧,代码在右侧。)
# 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])
答案 0 :(得分:0)
在Ingo和Fabio对PyDev团队提供了一些有用的提示后,我取得了一些进展。主要提示是为org.python.pydev.pydev_pyedit_listener
创建扩展并注册onCreatePartControl
事件,然后在常规PyEdit
控件周围包装另一个复合。 SWT widgets reference有助于学习如何构建扩展接口。
另一个挑战是同步两个滚动条。您似乎必须注册onCreateSourceViewer
事件,然后注册视图端口侦听器。
我在github上发布了一个示例项目来演示该技术。