forward_display_line 无效
forward_display_line doesn't work
我正在使用 Gtk.TextView
显示文本,如下所示:
我的目标是以编程方式将光标移动到下一个 display 行的开头(不是缓冲行的开头,而是下一个 [=] 中的第一个字符16=]行)。
它使用 Gtk.WrapMode.WORD_CHAR
作为环绕首选项。从 TextBuffer
:
访问时,移动 TextIter
对象工作正常
/* This works as expected */
Gtk.TextIter start_iter;
buffer.get_start_iter (out start_iter);
或者直接使用 TextIter
:
/* This also works as expected */
Gtk.TextIter iter;
...
iter.forward_line ();
但是当我想使用 TextView
移动 TextIter
时,例如:
Gtk.TextView text_view;
Gtk.TextIter iter;
...
text_view.forward_display_line (iter);
它不移动迭代器,尽管 forward_display_line
返回 true
(表示迭代器已移动)。
这是我正在使用的代码(在 TextView
派生的 class 中):
Gtk.TextIter line_end;
/* Initializing TextIter, placing it at the start of the buffer. */
this.buffer.get_start_iter (out line_end);
print ("Offset before forwarding: %i\n", line_end.get_offset ()); //returns 0
this.forward_display_line (line_end);
print ("Offset after forwarding: %i\n", line_end.get_offset ()); // still returns 0
为什么这段代码不起作用?由 TextBuffer
初始化的 TextIter
是否不适用于 TextView
方法?
在您的代码中,您调用 Gtk.TextBuffer
forward_display_line()
method which "consumes" a Gtk.TextIter but does not output this same "Iter" with the changes performed by the method. Both calls to Gtk.TextIter
get_offset ()
应该 return 相同的值。
相反,如果您使用 Gtk.TextIter
forward_line ()
,则更改应该并且将会反映在第二次打印中,例如:
Gtk.TextIter line_end;
/* Initializing TextIter, placing it at the start of the buffer. */
this.buffer.get_start_iter (out line_end);
print ("Offset before forwarding: %i\n", line_end.get_offset ()); //returns 0
line_end.forward_line ();
print ("Offset after forwarding: %i\n", line_end.get_offset ()); // should be different from 0 if buffer has some text
正如@José 所建议的,这确实是 Vala C 绑定的一个错误。问题已发布 here。
我会尝试修复这个错误,如果修复成功,我会更新这个答案。
我正在使用 Gtk.TextView
显示文本,如下所示:
我的目标是以编程方式将光标移动到下一个 display 行的开头(不是缓冲行的开头,而是下一个 [=] 中的第一个字符16=]行)。
它使用 Gtk.WrapMode.WORD_CHAR
作为环绕首选项。从 TextBuffer
:
TextIter
对象工作正常
/* This works as expected */
Gtk.TextIter start_iter;
buffer.get_start_iter (out start_iter);
或者直接使用 TextIter
:
/* This also works as expected */
Gtk.TextIter iter;
...
iter.forward_line ();
但是当我想使用 TextView
移动 TextIter
时,例如:
Gtk.TextView text_view;
Gtk.TextIter iter;
...
text_view.forward_display_line (iter);
它不移动迭代器,尽管 forward_display_line
返回 true
(表示迭代器已移动)。
这是我正在使用的代码(在 TextView
派生的 class 中):
Gtk.TextIter line_end;
/* Initializing TextIter, placing it at the start of the buffer. */
this.buffer.get_start_iter (out line_end);
print ("Offset before forwarding: %i\n", line_end.get_offset ()); //returns 0
this.forward_display_line (line_end);
print ("Offset after forwarding: %i\n", line_end.get_offset ()); // still returns 0
为什么这段代码不起作用?由 TextBuffer
初始化的 TextIter
是否不适用于 TextView
方法?
在您的代码中,您调用 Gtk.TextBuffer
forward_display_line()
method which "consumes" a Gtk.TextIter but does not output this same "Iter" with the changes performed by the method. Both calls to Gtk.TextIter
get_offset ()
应该 return 相同的值。
相反,如果您使用 Gtk.TextIter
forward_line ()
,则更改应该并且将会反映在第二次打印中,例如:
Gtk.TextIter line_end;
/* Initializing TextIter, placing it at the start of the buffer. */
this.buffer.get_start_iter (out line_end);
print ("Offset before forwarding: %i\n", line_end.get_offset ()); //returns 0
line_end.forward_line ();
print ("Offset after forwarding: %i\n", line_end.get_offset ()); // should be different from 0 if buffer has some text
正如@José 所建议的,这确实是 Vala C 绑定的一个错误。问题已发布 here。
我会尝试修复这个错误,如果修复成功,我会更新这个答案。