refactor set_cursor()