Add macro, cursor action and observer pattern