3

同じテキスト (GtkTextBuffer に保存しましたが、代替も歓迎します) を複数のカーソルを使用して、それぞれ別の GtkTextView で編集しようとしています。テキストを編集できるようにするには(そして他のビューに反映されるようにするには)、すべてのカーソルが必要です。1 つのカーソルを (キーボードなどで) 移動しても、他のカーソルは移動してはなりません。

おなじみの方のために、私は emacs の分割ウィンドウの動作をエミュレートしようとしています。

これを行う最も簡単な方法は何ですか?

バックグラウンド

テキスト ウィジェットの概要には、次のように記載されています。

各バッファは、任意の数のビューで表示できます。

ただし、カーソルは GtkTextView ではなく GtkTextBuffer に格納されます。特に、あるビューでカーソルを移動すると、他のすべてのビューでカーソルの位置が変更されます。

技術的な詳細

私は実際に私の特定の例で pygtk と gtksourceview2 を使用しています。特に、GtkTextView は GtkSourceView (python では gtksourceview2.View) です。しかし、私の質問は pygtk 固有のものではありません。

4

1 に答える 1

2

そのままの GtkSourceView ではそれを行うことはできません。残念ながら、自分で作成する必要があります。

私がそれを書く方法は、GtkSourceBuffer をサブクラス化することです。元の GtkSourceBuffer を「ラップ」しますが、独自の別のカーソル位置を維持します。次に、これらの「ラッピング」ソース バッファを 2 つ作成し、ソース ビューに配置します。

ただし、すべてのカーソルをすべてのソース ビューに表示したい場合は、うまくいきません。おそらく、GtkSourceBuffer をサブクラス化し、追加されたビューごとに個別のカーソル位置を維持することができます。

各ビューで異なるテキストを選択したらどうしますか? コーディングを始める前に、よく考えてください。

ソース ビューの「フォーカス イン イベント」および「フォーカス アウト イベント」シグナルに接続するのが手っ取り早い方法です。フォーカスを失うと、ビューに現在のカーソル位置を記録させます。次に、フォーカスを取得したら、そのカーソル位置を復元します。そうすれば、各ビューに独自のカーソル位置があるようになります。

于 2011-08-10T19:14:57.147 に答える