command based undo history using a ring buffer for a limited size (i.e. 20 for testing)