|
1 | | -import re |
| 1 | +import collections, re |
2 | 2 | import sublime, sublime_plugin |
3 | 3 | from . import cs_cljfmt, cs_common, cs_parser, cs_printer |
4 | 4 |
|
@@ -195,3 +195,43 @@ def run(self, edit): |
195 | 195 | view.replace(edit, region, string) |
196 | 196 | # Add selection at the end of newly inserted region |
197 | 197 | view.sel().add(sublime.Region(point, point)) |
| 198 | + |
| 199 | +class ClojureSublimedAlignCursorsCommand(sublime_plugin.TextCommand): |
| 200 | + def run(self, edit): |
| 201 | + view = self.view |
| 202 | + by_row = collections.defaultdict(list) |
| 203 | + for region in view.sel(): |
| 204 | + row, col = view.rowcol(region.a) |
| 205 | + by_row[row].append(region) |
| 206 | + # print('by_row', by_row) |
| 207 | + cols = max(len(line_regions) for line_regions in by_row.values()) |
| 208 | + # print('cols', cols) |
| 209 | + change_id = view.change_id() |
| 210 | + # upd = lambda r: view.transform_region_from(r, change_id) |
| 211 | + for col in range(0, cols): |
| 212 | + col_regions = [line_regions[col] for line_regions in by_row.values() if len(line_regions) > col] |
| 213 | + col_regions = [view.transform_region_from(r, change_id) for r in col_regions] |
| 214 | + col_regions.sort(key = lambda r: view.rowcol(r.a)[0]) |
| 215 | + # print('col', col, col_regions) |
| 216 | + max_col = max(view.rowcol(r.a)[1] for r in col_regions) |
| 217 | + max_len = max(r.size() for r in col_regions) |
| 218 | + # print("max_col", max_col, "max_len", max_len) |
| 219 | + change_id_2 = view.change_id() |
| 220 | + for r in col_regions: |
| 221 | + r = view.transform_region_from(r, change_id_2) |
| 222 | + _, col = view.rowcol(r.begin()) |
| 223 | + length = r.size() |
| 224 | + prepend = max_col - col |
| 225 | + append = max_len - length |
| 226 | + # print("r", r, "col", col, "len", length, "left", max_col - col, "right", max_len - length) |
| 227 | + view.replace(edit, sublime.Region(r.begin()), ' ' * prepend) |
| 228 | + # r = view.transform_region_from(r, change_id) |
| 229 | + # print("new r", r) |
| 230 | + view.replace(edit, sublime.Region(r.end() + prepend), ' ' * append) |
| 231 | + |
| 232 | + |
| 233 | + # change_id = view.change_id() |
| 234 | + # for region in list(view.sel()): |
| 235 | + # region = view.transform_region_from(region, change_id) |
| 236 | + # _, col = view.rowcol(region.a) |
| 237 | + # view.replace(edit, region, ' ' * (max_col - col)) |
0 commit comments