gtksourceview撤消,撤消的次数超出预期

gtksourceview撤消,撤消的次数超出预期,gtk,gtksourceview,Gtk,Gtksourceview,我正在编写一个文本编辑器,我似乎对gtksourceview和undo有些不了解。我希望undo操作能够在每次调用中撤销一个操作,但它似乎还想做更多的事情 以下是一个例子: 我键入两行: 一线 第二线 然后我先去删除中的“r”,然后按ctrl+z执行撤消。这是什么结果: 一线 第二 文件说: 动作定义为对gtk_text_buffer_begin_user_action()和gtk_text_buffer_end_user_action()的调用之间的一组操作,或同一行上类似编辑(插入或删除)的

我正在编写一个文本编辑器,我似乎对gtksourceview和undo有些不了解。我希望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);
            }

撤销在GtkSourceView中是“免费”的,根据您的描述,听起来好像有两个撤销操作正在发生,因此您很可能没有通知Gtk您处理了一个事件(通过返回true),并且Gtk也在进行自己的撤销。但无论如何,你看到的行为都是不正常的。您可以尝试使用相同的方法,例如gedit来显示这一点

再次感谢@ergosys。我想撤销操作可能不止执行一次,所以我在keypress块中放入了printf语句。我在终端上两次都没有看到printf输出,所以我开始往其他方向看。然而,返回TRUE解决了问题。我一直被那个咬着。再次感谢。