如何在lua中实现redo

如何在lua中实现redo,lua,undo-redo,Lua,Undo Redo,我刚刚被介绍到LUA语言,我正在着手我的第一个项目。然而,我现在面临的最大挑战是如何实现或进行撤销和重做 但是,为了澄清问题,该项目是一个自定义文本编辑器,因此,编辑任何输入文本都需要在此处执行撤消/重做。我已经设法处理诸如剪切、复制、清除、查找单词,以及更改字体、文本颜色、插入表格和图像等问题,所有这些都是用lua语言处理的。显然,有一些定制的文本编辑器,我相信为满足许多人的需求所做的努力将为未来的进步或改进铺平道路。但是撤销/重做操作让我分崩离析,从我的研究来看,这甚至是大多数现有自定义文本

我刚刚被介绍到LUA语言,我正在着手我的第一个项目。然而,我现在面临的最大挑战是如何实现或进行撤销和重做

但是,为了澄清问题,该项目是一个自定义文本编辑器,因此,编辑任何输入文本都需要在此处执行撤消/重做。我已经设法处理诸如剪切、复制、清除、查找单词,以及更改字体、文本颜色、插入表格和图像等问题,所有这些都是用lua语言处理的。显然,有一些定制的文本编辑器,我相信为满足许多人的需求所做的努力将为未来的进步或改进铺平道路。但是撤销/重做操作让我分崩离析,从我的研究来看,这甚至是大多数现有自定义文本编辑器所缺乏的

我搜索了几个论坛,它们似乎都给出了使用关联表加载信息并从中检索信息的提示。令人难以置信的是,我认为其中一些网站只是分享他们从其他网站获得的知识,而没有任何技术观点或任何东西。这是因为,我遇到的大多数建议看起来都很相似,而且在各个方面都是一样的。对于访问过的大约几十个站点,没有一个用户试图发布一个示例,但我所看到的是对大多数lua用户的相同抱怨。毫无疑问,对于本论坛中一些受尊敬的大师来说,这似乎有点容易

我似乎不了解这些建议的真实情况。
有人能给我举个例子吗?

撤销/重做非常适合

首先,您需要编写一些文本操作功能本身。只需做一部分,不用担心联合国或再联合国。这将是大量的工作本身

然后,您将拥有一系列函数来操作文档。像
insertText()
setFont()
insertJpgImage()
之类的东西。诀窍在于,现在需要将每个函数包装在一个所谓的对象中。每个命令类必须有一个方法来
do()
自身和
undo()
自身

现在,所有文本操纵操作都由命令对象表示,您可以通过以下方式执行每个操作(例如,加粗某些文本):

boldCommand = setTextPropertyCommand:new(document, selectedArea, textProperties.bold)
boldCommand:do() --actually modify text
table.insert(commandUndoStack, boldCommand) --keep the command for possible undoing later.
如果要撤消某些文本的粗体显示,则可以调用:

command = table.remove(commandUndoStack)
command:undo()

注意,如果您在Lua中使用一些GUI框架绑定,那么这个框架可能有自己的现成撤销/重做功能。例如(使用qtlua绑定)提供类。

您试图撤消/重做什么?请提供更多的背景资料,你能解释一下你在做什么样的项目吗?绘画应用程序的撤消/重做功能不同于文本编辑器。Ok Tadeusz,这是最好的响应,而且非常快速。但我使用的应用程序允许我创建RichText对象,所以我实际上要问的是如何在这个RichText对象中实现重做,因为尽管您的响应很快,但作为一个大人物,我实际上想知道如何使用media studio的个人版创建撤消重做。谢谢,不过还是希望你能给一个如此简单的新手一个回复,这是最好的回复,而且非常快。但是我正在使用一个允许我创建RichText对象的应用程序,所以我实际上要问的是如何在这个RichText对象中实现重做,因为尽管您的响应很快,但作为初学者,我实际上想知道如何使用例如media studio的个人版创建撤消重做。谢谢,不过还是指望你的回复,对新手来说会很有用simple@Derick当前位置你完成我计划的第一部分了吗?您可以从编写一些文本处理功能开始,而不用担心撤消或重做。@Kadlubowski:嗨,朋友,您真好,继续写下去。你是一个如此可靠的程序员,一个人离不开你。我从没想过你会那么快。我会记得所有最好的朋友@卡德鲁博夫斯基:嗨,我的朋友,这条评论似乎被缩短了。我说是的,我注意到了你的帖子,所以现在让我说我有这样的事情;RichText.GetText、RichText.GetSelection、RichText.SetText等。那么在这种情况下,我如何做像RichText.Undo和RichText.Redo这样的事情呢?拜托,我现在正在学习lua,所以请降低到一个绝对初学者的水平。尽管如此,我还是希望你们的慷慨和可靠能成为我的朋友!