我正在尝试使用多个光标编辑相同的文本(我已将其存储在 GtkTextBuffer 中,但欢迎使用替代方法),每个光标都在一个单独的 GtkTextView 中。我需要所有光标才能编辑文本(并反射(reflect)在其他 View 中)。移动一个光标(例如,使用键盘)不应移动其他光标。

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

什么是最简单的方法来做到这一点?

背景

Text Widget Overview 指出



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

更多技术细节

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

最佳答案

你不能用开箱即用的 GtkSourceView 做到这一点——不幸的是,你必须自己编写它。

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

但是,如果您希望在所有源 View 中显示所有光标,那将不起作用。也许你可以继承 GtkSourceBuffer 并让它为每个添加到的 View 维护一个单独的光标位置。

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

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

关于gtk - 在不同的 gtkTextView 中具有相同 gtkTextBuffer 的多个游标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7015559/

10-12 19:00