1

PyDev エディターに表示列を追加するPython でのライブ コーディング用の Eclipse プラグインを作成しました。その列には、コードの実行に伴って変数値がどのように変化するかが示されます。これには、ループや繰り返しの関数呼び出しの複数の列が含まれます。コードを編集すると、表示が更新されます。

私の質問は次のとおりです。PyDev エディターをきれいに拡張して、ソース コードで垂直方向にスクロールし、水平方向にスクロールして長時間実行ループで多くの列を表示するこの余分な列を追加するにはどうすればよいですか? 私のビジョンは、2 つのテキスト ファイルを比較したときに得られるウィンドウのようなものを作成することですが、それでもユーザーが 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

After some helpful hints from Ingo and Fabio on the PyDev team, I've made some progress. The main hint was to create an extension for org.python.pydev.pydev_pyedit_listener and register for the onCreatePartControl event, then wrap another composite around the regular PyEdit control. The SWT widgets reference was helpful for learning how to build the extended interface.

Another challenge was synchronizing the two scroll bars. It seems like you have to register for the onCreateSourceViewer event, and then register a view port listener.

I posted a sample project on github to demonstrate the technique.

于 2012-09-08T05:24:39.580 に答える