aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-04-06 12:13:01 +0200
committerMarc André Tanner <mat@brain-dump.org>2016-04-06 13:41:14 +0200
commit700ec992a2ed6fc16362052fb27933390fe2d7ee (patch)
tree8d5c2ea034cd7bcdee1dad6bcf3ac669c5ae6bbc
parent7df8140a9ba4f0fbc2c55fa2de5eb789d878d4a0 (diff)
downloadvis-700ec992a2ed6fc16362052fb27933390fe2d7ee.tar.gz
vis-700ec992a2ed6fc16362052fb27933390fe2d7ee.tar.xz
text-motion: restore old text_{line_,}find_prev behavior
This partially reversts the "Fix to/till movements" commit 0d4093c3371079c5f75055338f0341f684542465 The pos += len hunk was interfering with other code which does not want this behavior. The original issue should be fixed directly within the to/till movements.
-rw-r--r--text-motions.c4
-rw-r--r--vis-motions.c10
2 files changed, 3 insertions, 11 deletions
diff --git a/text-motions.c b/text-motions.c
index fd3e99a..18e727f 100644
--- a/text-motions.c
+++ b/text-motions.c
@@ -70,11 +70,9 @@ static size_t find_prev(Text *txt, size_t pos, const char *s, bool line) {
if (!s)
return pos;
size_t len = strlen(s), matched = len - 1;
- Iterator it, sit;
+ Iterator it = text_iterator_get(txt, pos), sit;
if (len == 0)
return pos;
- pos += len;
- it = text_iterator_get(txt, pos);
for (char c; text_iterator_byte_prev(&it, &c); ) {
if (c == s[matched]) {
if (matched == 0)
diff --git a/vis-motions.c b/vis-motions.c
index 3bb0b88..df8c1fe 100644
--- a/vis-motions.c
+++ b/vis-motions.c
@@ -89,20 +89,14 @@ static size_t till(Vis *vis, Text *txt, size_t pos) {
}
static size_t to_left(Vis *vis, Text *txt, size_t pos) {
- char c;
- if (pos == text_line_begin(txt, pos))
- return pos;
- size_t hit = text_line_find_prev(txt, pos-1, vis->search_char);
- if (!text_byte_get(txt, hit, &c) || c != vis->search_char[0])
- return pos;
- return hit;
+ return text_line_find_prev(txt, pos, vis->search_char);
}
static size_t till_left(Vis *vis, Text *txt, size_t pos) {
if (pos == text_line_begin(txt, pos))
return pos;
size_t hit = to_left(vis, txt, pos-1);
- if (hit != pos)
+ if (hit != pos-1)
return text_char_next(txt, hit);
return pos;
}