aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-03-28 12:10:03 +0200
committerMarc André Tanner <mat@brain-dump.org>2016-03-28 12:25:06 +0200
commit64e204b205f09fdbac728c8910bf1867c286ebaa (patch)
tree36c4c91247f59ab9e13336d090dc5cdde9a754d7
parent647dc4c030c0ee876d85de0447f4d706d600d3f6 (diff)
downloadvis-64e204b205f09fdbac728c8910bf1867c286ebaa.tar.gz
vis-64e204b205f09fdbac728c8910bf1867c286ebaa.tar.xz
vis: support column based alignment
That is when multiple cursors are on the same line, the first cursor on every line is aligned, then the second one and so on.
-rw-r--r--main.c49
1 files changed, 27 insertions, 22 deletions
diff --git a/main.c b/main.c
index bbb8f10..652ee11 100644
--- a/main.c
+++ b/main.c
@@ -1224,34 +1224,39 @@ static const char *cursors_align(Vis *vis, const char *keys, const Arg *arg) {
static const char *cursors_align_indent(Vis *vis, const char *keys, const Arg *arg) {
View *view = vis_view(vis);
Text *txt = vis_text(vis);
- int mincol = INT_MAX, maxcol = 0;
-
- for (Cursor *c = view_cursors(view); c; c = view_cursors_next(c)) {
- int col = text_line_width_get(txt, view_cursors_pos(c));
- if (col < mincol)
- mincol = col;
- if (col > maxcol)
- maxcol = col;
- }
+ bool left_align = arg->i < 0;
+ int columns = view_cursors_column_count(view);
+
+ 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));
+ if (col < mincol)
+ mincol = col;
+ if (col > maxcol)
+ maxcol = col;
+ }
- size_t len = maxcol - mincol;
- char *buf = malloc(len+1);
- if (!buf)
- return keys;
- memset(buf, ' ', len);
+ size_t len = maxcol - mincol;
+ char *buf = malloc(len+1);
+ if (!buf)
+ return keys;
+ memset(buf, ' ', len);
- for (Cursor *c = view_cursors(view); c; c = view_cursors_next(c)) {
- size_t pos = view_cursors_pos(c);
- int col = text_line_width_get(txt, pos);
- if (col < maxcol) {
- size_t off = maxcol - col;
- if (off <= len)
- text_insert(txt, pos, buf, off);
+ for (Cursor *c = view_cursors_column(view, i); c; c = view_cursors_column_next(c, i)) {
+ size_t pos = view_cursors_pos(c);
+ int col = text_line_width_get(txt, pos);
+ if (col < maxcol) {
+ size_t off = maxcol - col;
+ if (off <= len)
+ text_insert(txt, pos, buf, off);
+ }
}
+
+ free(buf);
}
view_draw(view);
- free(buf);
return keys;
}