我正在编写一个文本编辑器,我似乎对gtksourceview和undo没有了解。我希望撤消操作在每次调用时撤消单个操作,但它似乎想要做更多的操作。
以下是一个例子:
我输入两行:
第一行
第二行
然后我上去并先删除“r”,然后按ctrl + z执行撤消。结果是什么:
第一行
第二
文档说:
操作定义为对gtk_text_buffer_begin_user_action()和gtk_text_buffer_end_user_action()的调用之间的操作组,或同一行上类似编辑(插入或删除)的序列。
我不知道如何恢复“r”并删除“line”这个词是“在同一行上进行类似的编辑(插入或删除)。”
击败撤消非常迷惑,必须记住重做,因为比预期的更多被撤消。其他编辑不这样做,所以我只是执行错误吗?
这是我的撤消代码: GtkSourceBuffer * sbuffer;
sbuffer = GTK_SOURCE_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(txtinput[current_tab])));
if (gtk_source_buffer_can_undo(sbuffer))
{
gtk_source_buffer_undo(sbuffer);
}
答案 0 :(得分:3)
使用GtkSourceView“撤销”是免费的,并且根据您的描述,听起来好像发生了两次撤消操作,因此很可能您未能通知Gtk您处理了一个事件(通过返回true),并且它正在进行中也有自己的撤消。但无论如何,你所看到的行为并不正常。您也可以尝试相同的gedit来表明这一点。