在不同的gtkTextView中具有相同gtkTextBuffer的多个游标

时间:2011-08-10 18:02:34

标签: gtk gtktextview

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

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

最简单的方法是什么?

背景

Text Widget Overview表示

  

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

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

更多技术细节

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

1 个答案:

答案 0 :(得分:1)

你不能用GtkSourceView开箱即用 - 不幸的是你必须自己写。

我写这篇文章的方法是将GtkSourceBuffer子类化。让它'包装'原始的GtkSourceBuffer,但保持它自己独立的光标位置。然后创建两个“包装”源缓冲区并将它们放在源视图中。

但是,如果您希望在所有源视图中显示所有游标,则无效。也许你可以继承GtkSourceBuffer子类,并为它添加的每个视图保持一个单独的光标位置。

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

快速的方法是连接源视图的'焦点事件'和'焦点输出事件'信号。在失去焦点时,让视图记录其当前光标位置。然后在获得焦点时,让它恢复光标位置。这样,几乎每个视图都有自己的光标位置。