Пример #1
0
    def _execute_action(
        self,
        action,
        context,
        additional_locals={}
    ):
        mark_to_use = '`'
        with _vim.save_mark(mark_to_use):
            _vim.set_mark_from_pos(mark_to_use, _vim.get_cursor_pos())

            cursor_line_before = _vim.buf.line_till_cursor

            locals = {
                'context': context,
            }

            locals.update(additional_locals)

            snip = self._eval_code(action, locals)

            if snip.cursor.is_set():
                vim.current.window.cursor = snip.cursor.to_vim_cursor()
            else:
                new_mark_pos = _vim.get_mark_pos(mark_to_use)

                cursor_invalid = False

                if _vim._is_pos_zero(new_mark_pos):
                    cursor_invalid = True
                else:
                    _vim.set_cursor_from_pos(new_mark_pos)
                    if cursor_line_before != _vim.buf.line_till_cursor:
                        cursor_invalid = True

                if cursor_invalid:
                    raise RuntimeError(
                        'line under the cursor was modified, but ' +
                        '"snip.cursor" variable is not set; either set set ' +
                        '"snip.cursor" to new cursor position, or do not ' +
                        'modify cursor line'
                    )

        return snip
Пример #2
0
    def _execute_action(
        self,
        action,
        context,
        additional_locals={}
    ):
        mark_to_use = '`'
        with _vim.save_mark(mark_to_use):
            _vim.set_mark_from_pos(mark_to_use, _vim.get_cursor_pos())

            cursor_line_before = _vim.buf.line_till_cursor

            locals = {
                'context': context,
            }

            locals.update(additional_locals)

            snip = self._eval_code(action, locals)

            if snip.cursor.is_set():
                vim.current.window.cursor = snip.cursor.to_vim_cursor()
            else:
                new_mark_pos = _vim.get_mark_pos(mark_to_use)

                cursor_invalid = False

                if _vim._is_pos_zero(new_mark_pos):
                    cursor_invalid = True
                else:
                    _vim.set_cursor_from_pos(new_mark_pos)
                    if cursor_line_before != _vim.buf.line_till_cursor:
                        cursor_invalid = True

                if cursor_invalid:
                    raise RuntimeError(
                        'line under the cursor was modified, but ' +
                        '"snip.cursor" variable is not set; either set set ' +
                        '"snip.cursor" to new cursor position, or do not ' +
                        'modify cursor line'
                    )

        return snip