All tests pass
This commit is contained in:
parent
686bacb7a2
commit
e557c8751e
@ -28,9 +28,6 @@ def feedkeys(s, mode='n'):
|
|||||||
"""Wrapper around vim's feedkeys function. Mainly for convenience."""
|
"""Wrapper around vim's feedkeys function. Mainly for convenience."""
|
||||||
vim.command(r'call feedkeys("%s", "%s")' % (s, mode))
|
vim.command(r'call feedkeys("%s", "%s")' % (s, mode))
|
||||||
|
|
||||||
# TODO: remove this again
|
|
||||||
from debug import debug
|
|
||||||
|
|
||||||
class _SnippetDictionary(object):
|
class _SnippetDictionary(object):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self._snippets = []
|
self._snippets = []
|
||||||
@ -460,27 +457,25 @@ class VimState(object):
|
|||||||
delta = r.end - r.start
|
delta = r.end - r.start
|
||||||
lineno, col = r.start.line, r.start.col
|
lineno, col = r.start.line, r.start.col
|
||||||
|
|
||||||
debug("col: %s, vim.current.buffer[lineno: '%s'" % (col, vim.current.buffer[lineno]))
|
|
||||||
# TODO: document hack
|
|
||||||
if col >= len(vim.current.buffer[lineno]):
|
|
||||||
vim.current.buffer[lineno] += " "
|
|
||||||
if r.end.col >= len(vim.current.buffer[r.end.line]):
|
|
||||||
vim.current.buffer[r.end.line] += " "
|
|
||||||
|
|
||||||
debug("col: %s, vim.current.buffer[lineno: '%s'" % (col, vim.current.buffer[lineno]))
|
|
||||||
|
|
||||||
vim.current.window.cursor = lineno + 1, col
|
vim.current.window.cursor = lineno + 1, col
|
||||||
|
|
||||||
debug("r.start: %s" % (r.start))
|
|
||||||
debug("r.end: %s" % (r.end))
|
|
||||||
debug("delta: %s" % (delta))
|
|
||||||
|
|
||||||
if delta.line == delta.col == 0:
|
if delta.line == delta.col == 0:
|
||||||
if col == 0 or vim.eval("mode()") != 'i':
|
if col == 0 or vim.eval("mode()") != 'i':
|
||||||
feedkeys(r"\<Esc>i")
|
feedkeys(r"\<Esc>i")
|
||||||
else:
|
else:
|
||||||
feedkeys(r"\<Esc>a")
|
feedkeys(r"\<Esc>a")
|
||||||
else:
|
else:
|
||||||
|
# If a tabstop immediately starts with a newline, the selection
|
||||||
|
# must start after the last character in the current line. But if
|
||||||
|
# we are in insert mode and <Esc> out of it, we cannot go past the
|
||||||
|
# last character with move_one_right and therefore cannot
|
||||||
|
# visual-select this newline. We have to hack around this by adding
|
||||||
|
# an extra space which we can select. Note that this problem could
|
||||||
|
# be circumvent by selecting the tab backwards (that is starting
|
||||||
|
# at the end); one would not need to modify the line for this.
|
||||||
|
if col >= len(vim.current.buffer[lineno]):
|
||||||
|
vim.current.buffer[lineno] += " "
|
||||||
|
|
||||||
if delta.line:
|
if delta.line:
|
||||||
move_lines = "%ij" % delta.line
|
move_lines = "%ij" % delta.line
|
||||||
else:
|
else:
|
||||||
@ -497,7 +492,11 @@ class VimState(object):
|
|||||||
# and select right from there. Note that the we have to select
|
# and select right from there. Note that the we have to select
|
||||||
# one column less since vim's visual selection is including the
|
# one column less since vim's visual selection is including the
|
||||||
# ending while Python slicing is excluding the ending.
|
# ending while Python slicing is excluding the ending.
|
||||||
if r.end.col > 1:
|
if r.end.col == 0 and not len(vim.current.buffer[r.end.line]):
|
||||||
|
# Selecting should end on an empty line -> Select the previous
|
||||||
|
# line till its end
|
||||||
|
do_select = "k$"
|
||||||
|
elif r.end.col > 1:
|
||||||
do_select = "0%il" % (r.end.col-1)
|
do_select = "0%il" % (r.end.col-1)
|
||||||
else:
|
else:
|
||||||
do_select = "0"
|
do_select = "0"
|
||||||
@ -505,7 +504,6 @@ class VimState(object):
|
|||||||
move_cmd = LangMapTranslator().translate(
|
move_cmd = LangMapTranslator().translate(
|
||||||
r"\<Esc>%sv%s%s\<c-g>" % (move_one_right, move_lines, do_select)
|
r"\<Esc>%sv%s%s\<c-g>" % (move_one_right, move_lines, do_select)
|
||||||
)
|
)
|
||||||
debug("move_cmd: %s" % (move_cmd))
|
|
||||||
|
|
||||||
feedkeys(move_cmd)
|
feedkeys(move_cmd)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user