[L2Ork-dev] dynamic patching and undo/redo system
Jonathan Wilkes
jon.w.wilkes at gmail.com
Thu Jul 30 15:23:05 EDT 2020
On Thu, Jul 30, 2020 at 3:08 PM Albert Graef <aggraef at gmail.com> wrote:
>
> Hi Jonathan,
>
> I'm amazed that undo/redo works as well as it does, with everything that's going on in a complex system like Pd.
>
> For now, it seems that certain operations just have to clear the undo history, to prevent crashes further down the road. Maybe also warn the user about this the first time a patch calls any of these operations.
I didn't consider the possibility of clearing it out.
Is there already a clear method for the undo/redo system?
Also, what is a maintainable way to clear on, say, dynamic patching?
-Jonathan
>
> Albert
>
>
>
> On Mon, Jul 27, 2020 at 3:48 AM Jonathan Wilkes <jon.w.wilkes at gmail.com> wrote:
>>
>> Hi all,
>>
>> It appears that dynamic patching nnd the undo system are irreconcilable.
>>
>> For example-- Suppose you do this:
>>
>> [namecanvas foo]
>>
>> [obj 20 20 clip(
>> |
>> [send foo]
>>
>> Whenever you click the message box, a new object will be created but
>> without any undo history.
>>
>> That's probably desirable behavior, as we don't want a bunch of
>> dynamically created gumming up the undo system.
>>
>> However, the undo system is based off object indices. So by inserting
>> "[clip]" into a glist we corrupt that system. You can see this if
>> dynamic patching in the middle of other editing actions. Doing undo
>> then redo will put the patch in a corrupt state because the indices
>> will be off by one due to the "[clip]" object that the undo system
>> didn't expect.
>>
>> I don't know any clean way to deal with this. But it affects more than
>> dynamic patching:
>>
>> [pointer(
>> |
>> [canvasinfo]
>> |
>> [20 20 $1(
>> |
>> [append some_scalar x y]
>>
>> Same problem there, as well as:
>>
>> [pointer(
>> |
>> [canvasinfo]
>> |
>> [next, delete(
>> |
>> [pointer some-scalar]
>>
>> Each one breaks the assumptions of the undo system and undo/redo
>> actions can have wrong indices.
>>
>> Even more pressing-- now that we've got pointer delete method, the
>> undo system can have an out-of-bounds index and crash when it tries to
>> deference a null pointer.
>>
>> Any ideas on how to approach this?
>>
>> -Jonathan
>> _______________________________________________
>> L2Ork-dev mailing list
>> L2Ork-dev at disis.music.vt.edu
>> https://disis.music.vt.edu/listinfo/l2ork-dev
>
>
>
> --
> Dr. Albert Gr"af
> Computer Music Research Group, JGU Mainz, Germany
> Email: aggraef at gmail.com, web: https://agraef.github.io/
> _______________________________________________
> L2Ork-dev mailing list
> L2Ork-dev at disis.music.vt.edu
> https://disis.music.vt.edu/listinfo/l2ork-dev
More information about the L2Ork-dev
mailing list