From 130706b915fc22ba4b0b9f940d7d6317a36eaec5 Mon Sep 17 00:00:00 2001 From: Holger Rapp Date: Thu, 9 Jul 2009 10:20:25 +0200 Subject: [PATCH] TextObjects.py no longer needs the vim module. Now the VimBuffer also needs removing --- plugin/PySnipEmu/TextObjects.py | 33 +++++---------------------------- plugin/PySnipEmu/__init__.py | 14 +++++++++----- test.py | 4 ++++ 3 files changed, 18 insertions(+), 33 deletions(-) diff --git a/plugin/PySnipEmu/TextObjects.py b/plugin/PySnipEmu/TextObjects.py index d5e0acb..777e164 100644 --- a/plugin/PySnipEmu/TextObjects.py +++ b/plugin/PySnipEmu/TextObjects.py @@ -1,16 +1,11 @@ #!/usr/bin/env python # encoding: utf-8 -# TODO: this shouldn't be here -import vim - import re from PySnipEmu.Buffer import VimBuffer, TextBuffer from PySnipEmu.Geometry import Range, Position -from PySnipEmu.debug import debug - __all__ = [ "Mirror", "Transformation", "SnippetInstance" ] class TextObject(object): @@ -62,7 +57,7 @@ class TextObject(object): if self._end.line == 0: return ps + self._end else: - return Position(ps.line + self._end.line, self._start.col) + return Position(ps.line + self._end.line, self._end.col) return self._end abs_end = property(abs_end) @@ -398,8 +393,6 @@ class SnippetInstance(TextObject): col -= self.start.col start = Position(delta.line, col) end = Position(delta.line, col) - debug("Adding zero Tabstop!") - debug("start: %s, end: %s" % (start, end)) ts = TabStop(self, start, end, "") self.add_tabstop(0,ts) @@ -415,19 +408,6 @@ class SnippetInstance(TextObject): return None current_tab = property(current_tab) - def update(self, buf, cur): - - TextObject.update(self, buf) - - cts = self._tabstops[self._cts] - - cursor = self.start + cts.end - if cts.end.line != 0: - cursor.col -= self.start.col - lineno, col = cursor.line, cursor.col - - vim.current.window.cursor = lineno +1, col - def has_tabs(self): return len(self._children) > 0 @@ -460,24 +440,21 @@ class SnippetInstance(TextObject): self._tab_selected = True return self._tabstops[self._cts] - def backspace(self,count, previous_cp): + def backspace(self,count): cts = self._tabstops[self._cts] cts.current_text = cts.current_text[:-count] - self.update(self._vb, previous_cp) + self.update(self._vb) - def chars_entered(self, chars, cur): + def chars_entered(self, chars): cts = self._tabstops[self._cts] - debug("chars_entered"); if self._tab_selected: cts.current_text = chars - debug("cts.current_text: %s" % (cts.current_text)) self._tab_selected = False else: cts.current_text += chars - debug("cts.current_text: %s" % (cts.current_text)) - self.update(self._vb, cur) + self.update(self._vb) diff --git a/plugin/PySnipEmu/__init__.py b/plugin/PySnipEmu/__init__.py index 2895167..09f0940 100644 --- a/plugin/PySnipEmu/__init__.py +++ b/plugin/PySnipEmu/__init__.py @@ -285,6 +285,7 @@ class SnippetManager(object): self._expect_move_wo_change = True self._csnippet = snippet.launch(before.rstrip()[:-len(word)], after) + self._ctab = None # TODO: this code is duplicated above if self._csnippet is not None: @@ -334,17 +335,20 @@ class SnippetManager(object): # user cache_pos = vim.current.window.cursor del vim.current.buffer[self._vstate.pos.line-1] - self._csnippet.chars_entered('\n', self._vstate) + self._csnippet.chars_entered('\n') vim.current.window.cursor = cache_pos elif self._vstate.moved.col < 0: # Some deleting was going on - self._csnippet.backspace(-self._vstate.moved.col, - self._vstate) + self._csnippet.backspace(-self._vstate.moved.col) else: line = vim.current.line chars = line[self._vstate.pos.col - self._vstate.moved.col: self._vstate.pos.col] - self._csnippet.chars_entered(chars, self._vstate) + self._csnippet.chars_entered(chars) + + ct_end = self._ctab.abs_end + vim.current.window.cursor = ct_end.line +1, ct_end.col + self._vstate.update() @@ -364,7 +368,7 @@ class SnippetManager(object): if self._csnippet and self._csnippet.tab_selected: # This only happens when a default value is delted using backspace vim.command(r'call feedkeys("i")') - self._csnippet.chars_entered('', self._vstate) + self._csnippet.chars_entered('') self._vstate.update() else: vim.command(r'call feedkeys("\")') diff --git a/test.py b/test.py index abf7629..32abebc 100755 --- a/test.py +++ b/test.py @@ -145,6 +145,10 @@ class TabStopSimpleReplaceSurrounded1_ExceptCorrectResult(_VimTest): snippets = ("hallo", "hallo $0 a small feed") keys = "hallo\tNase" wanted = "hallo Nase a small feed" +class TabStopSimpleReplaceEndingWithNewline_ExceptCorrectResult(_VimTest): + snippets = ("hallo", "Hallo Welt\n") + keys = "hallo\t\nAnd more" + wanted = "Hallo Welt\n\nAnd more" class ExitTabStop_ExceptCorrectResult(_VimTest):