[\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