我正在尝试使用多个游标编辑相同的文本(我已存储在GtkTextBuffer中,但欢迎使用其他选项),每个游标都在一个单独的GtkTextView中。我需要所有游标都能够编辑文本(并反映在其他视图中)。移动一个光标(例如,使用键盘)不应移动其他光标。
对于那些熟悉的人,我试图模仿emacs分裂窗口的行为。
最简单的方法是什么?
背景
每个缓冲区都可以通过任意数量的视图显示。
除了光标存储在GtkTextBuffer而不是GtkTextView中。特别是,在一个视图中移动光标会改变所有其他视图中的光标位置。
更多技术细节
我实际上在我的具体示例中使用了pygtk和gtksourceview2。特别是,GtkTextView是一个GtkSourceView(python中的gtksourceview2.View)。但我的问题不是特定于pygtk。
答案 0 :(得分:1)
你不能用GtkSourceView开箱即用 - 不幸的是你必须自己写。
我写这篇文章的方法是将GtkSourceBuffer子类化。让它'包装'原始的GtkSourceBuffer,但保持它自己独立的光标位置。然后创建两个“包装”源缓冲区并将它们放在源视图中。
但是,如果您希望在所有源视图中显示所有游标,则无效。也许你可以继承GtkSourceBuffer子类,并为它添加的每个视图保持一个单独的光标位置。
如果您在每个视图中选择了不同的文字,您会怎么做?在开始编码之前我会仔细考虑。
快速的方法是连接源视图的'焦点事件'和'焦点输出事件'信号。在失去焦点时,让视图记录其当前光标位置。然后在获得焦点时,让它恢复光标位置。这样,几乎每个视图都有自己的光标位置。