!7 cmodule MoveModulesEffect > DynSingleFunction { transient L entries; sclass Entry { S module; Rect original; Pt destiny; } void doIt { entries = new L; int w = dm_desktopWidth(), mid = w/2, margin = 20, steps = 10; try { for (S module : dm_visibleModuleIDs()) { Rect r = dm_frameRect(module); Pt destiny = pt(r.x >= mid ? w+margin : -margin-r.w, r.y); entries.add(nu(Entry.class, +module, original := r)); } for i to steps: { for (Entry e : entries) dm_setBounds(e.module, blend(original.x, destiny.x, doubleRatio(i, steps-1)), blend(original.y, destiny.y, doubleRatio(i, steps-1)), original.w, original.h); } } finally { for (Entry e : entries) dm_setBounds(e.module, original); } } }