View this PageEdit this PageUploads to this PageHistory of this PageTop of the SwikiRecent ChangesSearch the SwikiHelp Guide

keep your window size, cursor positions, and keyDownActions of documents when re-opened

Home   How To   Code Pool   Public Library   Theory   Events


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

Link to this Page