diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2015-10-26 19:26:05 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2015-10-26 19:30:12 +0100 |
| commit | 12fd7c278abee067c6c52e709e3cebbfc9ca04bf (patch) | |
| tree | 5fd0a6af1c4939431ebda4fee5427cc0cfcf42c9 /vis.c | |
| parent | 7bf93d00b0e40e0ba5b9c45e3be43985555c3f6c (diff) | |
| download | vis-12fd7c278abee067c6c52e709e3cebbfc9ca04bf.tar.gz vis-12fd7c278abee067c6c52e709e3cebbfc9ca04bf.tar.xz | |
vis: introduce explicit operators for case changes
Diffstat (limited to 'vis.c')
| -rw-r--r-- | vis.c | 25 |
1 files changed, 19 insertions, 6 deletions
@@ -572,7 +572,7 @@ static Operator ops[] = { [OP_PUT] = { op_put }, [OP_SHIFT_RIGHT] = { op_shift_right }, [OP_SHIFT_LEFT] = { op_shift_left }, - [OP_CASE_CHANGE] = { op_case_change }, + [OP_CASE_SWAP] = { op_case_change }, [OP_JOIN] = { op_join }, [OP_REPEAT_INSERT] = { op_repeat_insert }, [OP_REPEAT_REPLACE] = { op_repeat_replace }, @@ -1148,9 +1148,9 @@ static size_t op_case_change(Vis *vis, Text *txt, OperatorContext *c) { for (char *cur = buf; rem > 0; cur++, rem--) { int ch = (unsigned char)*cur; if (isascii(ch)) { - if (c->arg->i == 0) + if (c->arg->i == OP_CASE_SWAP) *cur = islower(ch) ? toupper(ch) : tolower(ch); - else if (c->arg->i > 0) + else if (c->arg->i == OP_CASE_UPPER) *cur = toupper(ch); else *cur = tolower(ch); @@ -2800,12 +2800,24 @@ int vis_run(Vis *vis, int argc, char *argv[]) { return vis->exit_status; } -void vis_operator(Vis *vis, enum VisOperator opi) { - Operator *op = &ops[opi]; +bool vis_operator(Vis *vis, enum VisOperator id) { + switch (id) { + case OP_CASE_LOWER: + case OP_CASE_UPPER: + case OP_CASE_SWAP: + vis->action.arg.i = id; + id = OP_CASE_SWAP; + break; + default: + break; + } + if (id >= LENGTH(ops)) + return false; + Operator *op = &ops[id]; if (vis->mode->visual) { vis->action.op = op; action_do(vis, &vis->action); - return; + return true; } /* switch to operator mode inorder to make operator options and * text-object available */ @@ -2818,6 +2830,7 @@ void vis_operator(Vis *vis, enum VisOperator opi) { } else { vis->action.op = op; } + return true; } void vis_mode_switch(Vis *vis, enum VisMode mode) { |
