aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vis-core.h6
-rw-r--r--vis-text-objects.c132
-rw-r--r--vis.c2
3 files changed, 107 insertions, 33 deletions
diff --git a/vis-core.h b/vis-core.h
index ab6e961..2ad6ea7 100644
--- a/vis-core.h
+++ b/vis-core.h
@@ -80,9 +80,9 @@ typedef struct {
Filerange (*vis)(Vis*, Text*, size_t pos);
Filerange (*user)(Vis*, Win*, void *data, size_t pos);
enum {
- INNER = 1 << 0, /* whether the object should include */
- OUTER = 1 << 1, /* the delimiting symbols or not */
- SPLIT = 1 << 2, /* whether multiple applications will yield a split range */
+ TEXTOBJECT_DELIMITED_INNER = 1 << 0, /* single byte delimited, inner variant */
+ TEXTOBJECT_DELIMITED_OUTER = 1 << 1, /* single byte delimited, outer variant */
+ TEXTOBJECT_NON_CONTIGUOUS = 1 << 2, /* multiple applications yield a split range */
} type;
void *data;
} TextObject;
diff --git a/vis-text-objects.c b/vis-text-objects.c
index b3ed463..e4b053b 100644
--- a/vis-text-objects.c
+++ b/vis-text-objects.c
@@ -97,34 +97,108 @@ static Filerange object_backtick(Text *txt, size_t pos) {
}
const TextObject vis_textobjects[] = {
- [VIS_TEXTOBJECT_INNER_WORD] = { .txt = text_object_word },
- [VIS_TEXTOBJECT_OUTER_WORD] = { .txt = text_object_word_outer },
- [VIS_TEXTOBJECT_INNER_LONGWORD] = { .txt = text_object_longword },
- [VIS_TEXTOBJECT_OUTER_LONGWORD] = { .txt = text_object_longword_outer },
- [VIS_TEXTOBJECT_SENTENCE] = { .txt = text_object_sentence },
- [VIS_TEXTOBJECT_PARAGRAPH] = { .txt = text_object_paragraph },
- [VIS_TEXTOBJECT_OUTER_SQUARE_BRACKET] = { .txt = text_object_square_bracket, .type = OUTER },
- [VIS_TEXTOBJECT_INNER_SQUARE_BRACKET] = { .txt = text_object_square_bracket, .type = INNER },
- [VIS_TEXTOBJECT_OUTER_CURLY_BRACKET] = { .txt = text_object_curly_bracket, .type = OUTER },
- [VIS_TEXTOBJECT_INNER_CURLY_BRACKET] = { .txt = text_object_curly_bracket, .type = INNER },
- [VIS_TEXTOBJECT_OUTER_ANGLE_BRACKET] = { .txt = text_object_angle_bracket, .type = OUTER },
- [VIS_TEXTOBJECT_INNER_ANGLE_BRACKET] = { .txt = text_object_angle_bracket, .type = INNER },
- [VIS_TEXTOBJECT_OUTER_PARANTHESE] = { .txt = text_object_paranthese, .type = OUTER },
- [VIS_TEXTOBJECT_INNER_PARANTHESE] = { .txt = text_object_paranthese, .type = INNER },
- [VIS_TEXTOBJECT_OUTER_QUOTE] = { .txt = object_quote, .type = OUTER },
- [VIS_TEXTOBJECT_INNER_QUOTE] = { .txt = object_quote, .type = INNER },
- [VIS_TEXTOBJECT_OUTER_SINGLE_QUOTE] = { .txt = object_single_quote, .type = OUTER },
- [VIS_TEXTOBJECT_INNER_SINGLE_QUOTE] = { .txt = object_single_quote, .type = INNER },
- [VIS_TEXTOBJECT_OUTER_BACKTICK] = { .txt = object_backtick, .type = OUTER },
- [VIS_TEXTOBJECT_INNER_BACKTICK] = { .txt = object_backtick, .type = INNER },
- [VIS_TEXTOBJECT_OUTER_ENTIRE] = { .txt = text_object_entire, },
- [VIS_TEXTOBJECT_INNER_ENTIRE] = { .txt = text_object_entire_inner, },
- [VIS_TEXTOBJECT_OUTER_FUNCTION] = { .txt = text_object_function, },
- [VIS_TEXTOBJECT_INNER_FUNCTION] = { .txt = text_object_function_inner, },
- [VIS_TEXTOBJECT_OUTER_LINE] = { .txt = text_object_line, },
- [VIS_TEXTOBJECT_INNER_LINE] = { .txt = text_object_line_inner, },
- [VIS_TEXTOBJECT_INDENTATION] = { .txt = text_object_indentation, },
- [VIS_TEXTOBJECT_SEARCH_FORWARD] = { .vis = search_forward, .type = SPLIT },
- [VIS_TEXTOBJECT_SEARCH_BACKWARD] = { .vis = search_backward, .type = SPLIT },
+ [VIS_TEXTOBJECT_INNER_WORD] = {
+ .txt = text_object_word,
+ },
+ [VIS_TEXTOBJECT_OUTER_WORD] = {
+ .txt = text_object_word_outer,
+ },
+ [VIS_TEXTOBJECT_INNER_LONGWORD] = {
+ .txt = text_object_longword,
+ },
+ [VIS_TEXTOBJECT_OUTER_LONGWORD] = {
+ .txt = text_object_longword_outer,
+ },
+ [VIS_TEXTOBJECT_SENTENCE] = {
+ .txt = text_object_sentence,
+ },
+ [VIS_TEXTOBJECT_PARAGRAPH] = {
+ .txt = text_object_paragraph,
+ },
+ [VIS_TEXTOBJECT_OUTER_SQUARE_BRACKET] = {
+ .txt = text_object_square_bracket,
+ .type = TEXTOBJECT_DELIMITED_OUTER,
+ },
+ [VIS_TEXTOBJECT_INNER_SQUARE_BRACKET] = {
+ .txt = text_object_square_bracket,
+ .type = TEXTOBJECT_DELIMITED_INNER,
+ },
+ [VIS_TEXTOBJECT_OUTER_CURLY_BRACKET] = {
+ .txt = text_object_curly_bracket,
+ .type = TEXTOBJECT_DELIMITED_OUTER,
+ },
+ [VIS_TEXTOBJECT_INNER_CURLY_BRACKET] = {
+ .txt = text_object_curly_bracket,
+ .type = TEXTOBJECT_DELIMITED_INNER,
+ },
+ [VIS_TEXTOBJECT_OUTER_ANGLE_BRACKET] = {
+ .txt = text_object_angle_bracket,
+ .type = TEXTOBJECT_DELIMITED_OUTER,
+ },
+ [VIS_TEXTOBJECT_INNER_ANGLE_BRACKET] = {
+ .txt = text_object_angle_bracket,
+ .type = TEXTOBJECT_DELIMITED_INNER,
+ },
+ [VIS_TEXTOBJECT_OUTER_PARANTHESE] = {
+ .txt = text_object_paranthese,
+ .type = TEXTOBJECT_DELIMITED_OUTER,
+ },
+ [VIS_TEXTOBJECT_INNER_PARANTHESE] = {
+ .txt = text_object_paranthese,
+ .type = TEXTOBJECT_DELIMITED_INNER,
+ },
+ [VIS_TEXTOBJECT_OUTER_QUOTE] = {
+ .txt = object_quote,
+ .type = TEXTOBJECT_DELIMITED_OUTER,
+ },
+ [VIS_TEXTOBJECT_INNER_QUOTE] = {
+ .txt = object_quote,
+ .type = TEXTOBJECT_DELIMITED_INNER,
+ },
+ [VIS_TEXTOBJECT_OUTER_SINGLE_QUOTE] = {
+ .txt = object_single_quote,
+ .type = TEXTOBJECT_DELIMITED_OUTER,
+ },
+ [VIS_TEXTOBJECT_INNER_SINGLE_QUOTE] = {
+ .txt = object_single_quote,
+ .type = TEXTOBJECT_DELIMITED_INNER,
+ },
+ [VIS_TEXTOBJECT_OUTER_BACKTICK] = {
+ .txt = object_backtick,
+ .type = TEXTOBJECT_DELIMITED_OUTER,
+ },
+ [VIS_TEXTOBJECT_INNER_BACKTICK] = {
+ .txt = object_backtick,
+ .type = TEXTOBJECT_DELIMITED_INNER,
+ },
+ [VIS_TEXTOBJECT_OUTER_ENTIRE] = {
+ .txt = text_object_entire,
+ },
+ [VIS_TEXTOBJECT_INNER_ENTIRE] = {
+ .txt = text_object_entire_inner,
+ },
+ [VIS_TEXTOBJECT_OUTER_FUNCTION] = {
+ .txt = text_object_function,
+ },
+ [VIS_TEXTOBJECT_INNER_FUNCTION] = {
+ .txt = text_object_function_inner,
+ },
+ [VIS_TEXTOBJECT_OUTER_LINE] = {
+ .txt = text_object_line,
+ },
+ [VIS_TEXTOBJECT_INNER_LINE] = {
+ .txt = text_object_line_inner,
+ },
+ [VIS_TEXTOBJECT_INDENTATION] = {
+ .txt = text_object_indentation,
+ },
+ [VIS_TEXTOBJECT_SEARCH_FORWARD] = {
+ .vis = search_forward,
+ .type = TEXTOBJECT_NON_CONTIGUOUS,
+ },
+ [VIS_TEXTOBJECT_SEARCH_BACKWARD] = {
+ .vis = search_backward,
+ .type = TEXTOBJECT_NON_CONTIGUOUS,
+ },
};
diff --git a/vis.c b/vis.c
index 0f596ee..9a1dbaa 100644
--- a/vis.c
+++ b/vis.c
@@ -771,7 +771,7 @@ void vis_do(Vis *vis) {
r = a->textobj->user(vis, win, a->textobj->data, pos);
if (!text_range_valid(&r))
break;
- if (a->textobj->type & OUTER) {
+ if (a->textobj->type & TEXTOBJECT_DELIMITED_OUTER) {
r.start--;
r.end++;
}