[\docKeyDownActions, \docPositions].do { |x| if(Archive.global.at(x).isNil) { Archive.global.put(x, IdentityDictionary.new) }; }; ( Document.initAction_{|doc| var arch, pos, cursor, k, action, saveFunc, loadFunc; saveFunc = {|doc| if(doc.path.notNil) { Archive.global.at(\docPositions).put(doc.path.asSymbol, [doc.bounds, doc.selectionStart]); doc.keyDownAction !? { Archive.global.at(\docKeyDownActions).put(doc.path.asSymbol, doc.keyDownAction.asCompileString) } } }; loadFunc = { var pos, cursor, action; #pos, cursor = Archive.global.at(\docPositions).at(doc.path.asSymbol).asArray; if(pos.notNil){{doc.bounds = pos}.defer(0.1)}; if(cursor.notNil and: { doc.path.endsWith(".sc").not }) {{doc.selectRange(cursor)}.defer(0.1)}; action = Archive.global.at(\docKeyDownActions).at(doc.path.asSymbol); if(action.notNil) { doc.keyDownAction = action.interpret; }; }; doc.onClose = saveFunc; loadFunc.value; } );
jrh