diff --git a/tests/vim.py b/tests/vim.py index 5561fff4..89beb9c3 100644 --- a/tests/vim.py +++ b/tests/vim.py @@ -1,10 +1,10 @@ # vim:fileencoding=utf-8:noet _log = [] -_g = {} +vars = {} _window = 0 _mode = 'n' _buf_purge_events = set() -_options = { +options = { 'paste': 0, 'ambiwidth': 'single', } @@ -151,7 +151,7 @@ def command(cmd): if cmd.startswith('let g:'): import re varname, value = re.compile(r'^let g:(\w+)\s*=\s*(.*)').match(cmd).groups() - _g[varname] = value + vars[varname] = value elif cmd.startswith('hi '): sp = cmd.split() _highlights[sp[1]] = sp[2:] @@ -162,9 +162,9 @@ def command(cmd): @_vim def eval(expr): if expr.startswith('g:'): - return _g[expr[2:]] + return vars[expr[2:]] elif expr.startswith('&'): - return _options[expr[1:]] + return options[expr[1:]] elif expr.startswith('PowerlineRegisterCachePurgerEvent'): _buf_purge_events.add(expr[expr.find('"') + 1:expr.rfind('"') - 1]) return "0" @@ -174,7 +174,7 @@ def eval(expr): @_vim def bindeval(expr): if expr == 'g:': - return _g + return vars import re match = re.compile(r'^function\("([^"\\]+)"\)$').match(expr) if match: @@ -201,10 +201,10 @@ def _emul_getbufvar(bufnr, varname): if bufnr not in buffers: return '' try: - return _buf_options[bufnr][varname[1:]] + return buffers[bufnr].options[varname[1:]] except KeyError: try: - return _options[varname[1:]] + return options[varname[1:]] except KeyError: return '' raise NotImplementedError @@ -213,12 +213,12 @@ def _emul_getbufvar(bufnr, varname): @_vim @_str_func def _emul_getwinvar(winnr, varname): - return _win_scopes[winnr][varname] + return windows[winnr].vars[varname] @_vim def _emul_setwinvar(winnr, varname, value): - _win_scopes[winnr][varname] = value + windows[winnr].vars[varname] = value @_vim @@ -262,7 +262,7 @@ def _emul_bufnr(expr): @_vim def _emul_exists(varname): if varname.startswith('g:'): - return varname[2:] in _g + return varname[2:] in vars raise NotImplementedError @@ -273,10 +273,9 @@ def _emul_line2byte(line): return sum((len(s) for s in buflines)) + 1 raise NotImplementedError + _window_ids = [None] _window_id = 0 -_win_scopes = [None] -_win_options = [None] class _Window(object): @@ -295,15 +294,13 @@ class _Window(object): windows.append(self) _window_id += 1 _window_ids.append(_window_id) - _win_scopes.append({}) - _win_options.append({}) + self.options = {} + self.vars = {} def __repr__(self): return '' -_buf_scopes = {} -_buf_options = {} _buf_lines = {} _undostate = {} _undo_written = {} @@ -317,8 +314,8 @@ class _Buffer(object): bufnr = _last_bufnr self.number = bufnr self.name = os.path.abspath(name) if name else None - _buf_scopes[bufnr] = {} - _buf_options[bufnr] = { + self.vars = {} + self.options = { 'modified': 0, 'readonly': 0, 'fileformat': 'unix', @@ -337,13 +334,13 @@ class _Buffer(object): return _buf_lines[self.number][line] def __setitem__(self, line, value): - _buf_options[self.number]['modified'] = 1 + self.options['modified'] = 1 _buf_lines[self.number][line] = value from copy import copy _undostate[self.number].append(copy(_buf_lines[self.number])) def __setslice__(self, *args): - _buf_options[self.number]['modified'] = 1 + self.options['modified'] = 1 _buf_lines[self.number].__setslice__(*args) from copy import copy _undostate[self.number].append(copy(_buf_lines[self.number])) @@ -359,12 +356,10 @@ class _Buffer(object): def __del__(self): bufnr = self.number - if _buf_options: - _buf_options.pop(bufnr) + if _buf_lines: _buf_lines.pop(bufnr) _undostate.pop(bufnr) _undo_written.pop(bufnr) - _buf_scopes.pop(bufnr) class _Current(object): @@ -436,8 +431,9 @@ def _undo(): return _undostate[_buffer()].pop(-1) _buf_lines[_buffer()] = _undostate[_buffer()][-1] + buf = current.buffer if _undo_written[_buffer()] == len(_undostate[_buffer()]): - _buf_options[_buffer()]['modified'] = 0 + buf.options['modified'] = 0 @_vim @@ -468,8 +464,6 @@ def _split(): @_vim def _del_window(winnr): win = windows.pop(winnr - 1) - _win_scopes.pop(winnr) - _win_options.pop(winnr) _window_ids.pop(winnr) return win @@ -525,7 +519,7 @@ def _get_buffer(): @_vim def _set_bufoption(option, value, bufnr=None): - _buf_options[bufnr or _buffer()][option] = value + buffers[bufnr or _buffer()].options[option] = value if option == 'filetype': _launch_event('FileType') @@ -565,11 +559,11 @@ class _WithBufOption(object): self.new = new def __enter__(self): - self.bufnr = _buffer() - self.old = _set_dict(_buf_options[self.bufnr], self.new, _set_bufoption)[0] + self.buffer = buffers[_buffer()] + self.old = _set_dict(self.buffer.options, self.new, _set_bufoption)[0] def __exit__(self, *args): - _buf_options[self.bufnr].update(self.old) + self.buffer.options.update(self.old) class _WithMode(object): @@ -632,8 +626,8 @@ def _with(key, *args, **kwargs): elif key == 'bufoptions': return _WithBufOption(**kwargs) elif key == 'options': - return _WithDict(_options, **kwargs) + return _WithDict(options, **kwargs) elif key == 'globals': - return _WithDict(_g, **kwargs) + return _WithDict(vars, **kwargs) elif key == 'split': return _WithSplit()