def jump(self, is_forward: bool) -> None: bvars = self._vim.current.buffer.vars if not bvars['deoppet_tabstops']: self.nop() return buf = self._vim.current.buffer tabstops = bvars['deoppet_tabstops'] tabstop = tabstops[bvars['deoppet_mark_pos']] mark_begin = buf.api.get_extmark_by_id(self._ns, tabstop['id_begin']) if not mark_begin or mark_begin[0] >= len(buf): # Overflow return next_text = buf[mark_begin[0]][mark_begin[1]:] self.cursor(mark_begin[0] + 1, mark_begin[1], next_text) # Default pos = bvars['deoppet_mark_pos'] if tabstop['default']: mark_end = buf.api.get_extmark_by_id(self._ns, tabstop['id_end']) debug(self._vim, mark_begin) debug(self._vim, mark_end) if mark_begin == mark_end: self._vim.call('deoppet#util#_select_text', tabstop['default']) # Update marks buf.api.del_extmark(self._ns, tabstop['id_begin']) buf.api.del_extmark(self._ns, tabstop['id_end']) tabstop['id_begin'] = buf.api.set_extmark( self._ns, 0, mark_begin[0], mark_begin[1], {}) tabstop['id_end'] = buf.api.set_extmark( self._ns, 0, mark_begin[0], self._vim.call('col', '.') - 1, {}) bvars['deoppet_tabstops'] = tabstops else: # Select begin to end. self._vim.call('deoppet#util#_select_pos', mark_end) # Update position next_pos = pos if is_forward: next_pos += 1 else: next_pos -= 1 if next_pos < 0: next_pos = len(tabstops) - 1 elif next_pos >= len(tabstops): next_pos = 0 bvars['deoppet_mark_pos'] = next_pos
def debug(self, expr: typing.Any) -> None: return debug(self._vim, expr)
def debug(self, expr): return debug(self._vim, expr)