3

我正在尝试使用多个游标编辑相同的文本(我已将其存储在 GtkTextBuffer 中,但欢迎使用其他文本),每个游标都位于单独的 GtkTextView 中。我需要所有光标都能够编辑文本(并反映在其他视图中)。移动一个光标(例如,用键盘)不应移动其他光标。

对于那些熟悉的人,我试图模仿 emacs 的拆分窗口的行为。

最简单的方法是什么?

背景

文本小部件概述指出

每个缓冲区可以由任意数量的视图显示。

除了光标存储在 GtkTextBuffer 而不是 GtkTextView 中。特别是,在一个视图中移动光标会更改所有其他视图中的光标位置。

更多技术细节

在我的具体示例中,我实际上使用的是 pygtk 和 gtksourceview2。特别是,GtkTextView 是一个 GtkSourceView(python 中的 gtksourceview2.View)。但我的问题不是 pygtk 特定的。

4

1 回答 1

2

开箱即用的 GtkSourceView 无法做到这一点 - 不幸的是,您必须自己编写它。

我要写的方法是继承 GtkSourceBuffer。使其“包装”原始 GtkSourceBuffer,但保持其自己单独的光标位置。然后创建两个“包装”源缓冲区并将它们放在源视图中。

但是,如果您想让所有光标都显示在所有源视图中,那将是行不通的。也许您可以继承 GtkSourceBuffer 并让它为其添加到的每个视图维护一个单独的光标位置。

如果您在每个视图中选择不同的文本位,您会怎么做?在您开始编码之前,我会仔细考虑一下。

一个快速的'n'dirty方法是连接到源视图的'focus-in-event'和'focus-out-event'信号。在失去焦点时,让视图记录其当前光标位置。然后在获得焦点后,让它恢复该光标位置。这样,几乎就像每个视图都有自己的光标位置一样。

于 2011-08-10T19:14:57.147 回答