gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:18:30 28 4
gpt4 key购买 nike

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

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

最简单的方法是什么?

背景

Text Widget Overview指出

Each buffer can be displayed by any number of views.

除了光标存储在 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com