def run(self, edit, **vi_cmd_data): self.debug("Data in ViRunCommand:", vi_cmd_data) try: if vi_cmd_data["restore_original_carets"]: self.save_caret_pos() # XXX: Fix this. When should we run the motion exactly? if vi_cmd_data["action"]: # If no motion is present, we know we just have to run the action (like ctrl+w, v). if (vi_cmd_data["motion"]) or ( vi_cmd_data["motion_required"] and not view.has_non_empty_selection_region() ): self.enter_visual_mode_if_needed(vi_cmd_data) self.do_whole_motion(vi_cmd_data) # The motion didn't change the selections: abort action if so required. # TODO: What to do with .post_action() and .do_follow_up_mode() in this event? if ( vi_cmd_data["mode"] == _MODE_INTERNAL_NORMAL and all([v.empty() for v in self.view.sel()]) and vi_cmd_data["cancel_action_if_motion_fails"] ): return self.do_action(vi_cmd_data) else: self.do_whole_motion(vi_cmd_data) finally: # XXX: post_action should be run only if do_action succeeds (?). self.do_post_action(vi_cmd_data) if vi_cmd_data["must_update_xpos"]: state = VintageState(self.view) first_sel = self.view.sel()[0] xpos = 0 if state.mode == MODE_VISUAL: if first_sel.a < first_sel.b: xpos = self.view.rowcol(first_sel.b - 1)[1] elif first_sel.a > first_sel.b: xpos = self.view.rowcol(first_sel.b)[1] elif state.mode == MODE_NORMAL: xpos = self.view.rowcol(first_sel.b)[1] state.xpos = xpos self.do_modify_selections(vi_cmd_data) self.do_follow_up_mode(vi_cmd_data) if vi_cmd_data["scroll_into_view"]: # TODO: If moving by lines, scroll the minimum amount to display the new sels. self.view.show(self.view.sel()[0]) state = VintageState(self.view) state.reset(next_mode=vi_cmd_data["next_mode"])
def run(self, edit, **vi_cmd_data): print("Data in ViRunCommand:", vi_cmd_data) try: if vi_cmd_data['restore_original_carets']: self.save_caret_pos() # XXX: Fix this. When should we run the motion exactly? if vi_cmd_data['action']: if ((vi_cmd_data['motion']) or (vi_cmd_data['motion_required'] and not view.has_non_empty_selection_region())): self.enter_visual_mode(vi_cmd_data) self.do_whole_motion(vi_cmd_data) # The motion didn't change the selections: abort action if so required. # TODO: What to do with .post_action() and .do_follow_up_mode() in this event? if (vi_cmd_data['mode'] == _MODE_INTERNAL_NORMAL and all([v.empty() for v in self.view.sel()]) and vi_cmd_data['cancel_action_if_motion_fails']): return self.do_action(vi_cmd_data) else: self.do_whole_motion(vi_cmd_data) finally: self.do_post_action(vi_cmd_data) self.do_follow_up_mode(vi_cmd_data) if vi_cmd_data['must_update_xpos']: state = VintageState(self.view) first_sel = self.view.sel()[0] xpos = 0 if state.mode == MODE_VISUAL: if first_sel.a < first_sel.b: xpos = self.view.rowcol(first_sel.b - 1)[1] elif first_sel.a > first_sel.b: xpos = self.view.rowcol(first_sel.b)[1] elif state.mode == MODE_NORMAL: xpos = self.view.rowcol(first_sel.b)[1] state.xpos = xpos if vi_cmd_data['scroll_into_view']: # TODO: If moving by lines, scroll the minimum amount to display the new sels. self.view.show(self.view.sel()[0])