1

我编写了一个用于在 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])
4

1 回答 1

0

在 PyDev 团队的 Ingo 和 Fabio 提供一些有用的提示后,我取得了一些进展。主要提示是为事件创建扩展org.python.pydev.pydev_pyedit_listener并注册onCreatePartControl,然后围绕常规PyEdit控件包装另一个组合。SWT 小部件参考有助于学习如何构建扩展界面。

另一个挑战是同步两个滚动条。似乎您必须注册该onCreateSourceViewer事件,然后注册一个视口侦听器。

我在github上发布了一个示例项目来演示该技术。

于 2012-09-08T05:24:39.580 回答