aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--text-objects.c12
-rw-r--r--text-objects.h2
2 files changed, 8 insertions, 6 deletions
diff --git a/text-objects.c b/text-objects.c
index f1181ef..121811d 100644
--- a/text-objects.c
+++ b/text-objects.c
@@ -17,25 +17,25 @@ Filerange text_object_word(Text *txt, size_t pos) {
text_iterator_byte_next(&it, NULL);
text_iterator_byte_next(&it, &next);
if (isspace(c)) {
- /* we are in the middle of two words */
+ /* middle of two words, include leading white space */
r.start = text_char_next(txt, text_word_end_prev(txt, pos));
- r.end = text_word_start_next(txt, pos);
+ r.end = text_char_next(txt, text_word_end_next(txt, pos));
} else if (isspace(prev) && isspace(next)) {
/* on a single character */
r.start = pos;
- r.end = text_char_next(txt, pos);
+ r.end = text_word_start_next(txt, pos);
} else if (isspace(prev)) {
/* at start of a word */
r.start = pos;
- r.end = text_char_next(txt, text_word_end_next(txt, pos));
+ r.end = text_word_start_next(txt, text_word_end_next(txt, pos));
} else if (isspace(next)) {
/* at end of a word */
r.start = text_word_start_prev(txt, pos);
- r.end = text_char_next(txt, pos);
+ r.end = text_word_start_next(txt, pos);
} else {
/* in the middle of a word */
r.start = text_word_start_prev(txt, pos);
- r.end = text_char_next(txt, text_word_end_next(txt, pos));
+ r.end = text_word_start_next(txt, text_word_end_next(txt, pos));
}
return r;
}
diff --git a/text-objects.h b/text-objects.h
index 62d30e5..de8dcfb 100644
--- a/text-objects.h
+++ b/text-objects.h
@@ -4,6 +4,8 @@
#include <stddef.h>
#include "text.h"
+/* word which happens to be at pos, includes trailing white spaces. if at pos happens to
+ * be a whitespace include all neighbouring leading whitespaces and the following word. */
Filerange text_object_word(Text*, size_t pos);
Filerange text_object_word_boundry(Text*, size_t pos, int (*isboundry)(int));
Filerange text_object_char(Text*, size_t pos, char c);