vis
a vi-like editor based on Plan 9's structural regular expressions
git clone https://9o.is/git/vis.git
commit 18ad69a4d136c37832888d980f6dbaacb4d32740 parent 5dbae778c6b7082402e161e1f2c6513eb6b39312 Author: Marc André Tanner <mat@brain-dump.org> Date: Sun, 27 Mar 2016 17:05:34 +0200 vis: align selections with <Tab> in visual mode Diffstat:
| M | config.def.h | | | 1 | + |
| M | main.c | | | 7 | +++++-- |
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/config.def.h b/config.def.h @@ -278,6 +278,7 @@ static const KeyBinding bindings_visual[] = { { "o", ACTION(SELECTION_FLIP) }, { ">", ALIAS("<vis-operator-shift-right>gv") }, { "<", ALIAS("<vis-operator-shift-left>gv") }, + { "<Tab>" , ACTION(CURSORS_ALIGN_INDENT) }, { 0 /* empty last element, array terminator */ }, }; diff --git a/main.c b/main.c @@ -1230,7 +1230,9 @@ static const char *cursors_align_indent(Vis *vis, const char *keys, const Arg *a for (int i = 0; i < columns; i++) { int mincol = INT_MAX, maxcol = 0; for (Cursor *c = view_cursors_column(view, i); c; c = view_cursors_column_next(c, i)) { - int col = text_line_width_get(txt, view_cursors_pos(c)); + Filerange sel = view_cursors_selection_get(c); + size_t pos = text_range_valid(&sel) ? sel.start : view_cursors_pos(c); + int col = text_line_width_get(txt, pos); if (col < mincol) mincol = col; if (col > maxcol) @@ -1244,7 +1246,8 @@ static const char *cursors_align_indent(Vis *vis, const char *keys, const Arg *a memset(buf, ' ', len); for (Cursor *c = view_cursors_column(view, i); c; c = view_cursors_column_next(c, i)) { - size_t pos = view_cursors_pos(c); + Filerange sel = view_cursors_selection_get(c); + size_t pos = text_range_valid(&sel) ? sel.start : view_cursors_pos(c); int col = text_line_width_get(txt, pos); if (col < maxcol) { size_t off = maxcol - col;