diff options
-rw-r--r-- | manifest.json | 2 | ||||
-rw-r--r-- | plugins/indentguide.lua | 41 |
2 files changed, 22 insertions, 21 deletions
diff --git a/manifest.json b/manifest.json index c88545f..16b2204 100644 --- a/manifest.json +++ b/manifest.json @@ -589,7 +589,7 @@ "id": "indentguide", "mod_version": "3", "path": "plugins/indentguide.lua", - "version": "0.2" + "version": "0.3" }, { "description": "Adds inter-process communication support, single-instance mode and tab drag and drop between instances.", diff --git a/plugins/indentguide.lua b/plugins/indentguide.lua index 0b40116..3c29c51 100644 --- a/plugins/indentguide.lua +++ b/plugins/indentguide.lua @@ -27,24 +27,17 @@ config.plugins.indentguide = common.merge({ } }, config.plugins.indentguide) --- TODO: replace with `doc:get_indent_info()` when 2.1 releases -local function get_indent_info(doc) - if doc.get_indent_info then - return doc:get_indent_info() - end - return config.tab_type, config.indent_size -end +local indentguide = {} - -local function get_line_spaces(doc, line, dir) - local _, indent_size = get_indent_info(doc) +function indentguide.get_line_spaces(doc, line, dir) + local _, indent_size = doc:get_indent_info() local text = doc.lines[line] if not text or #text == 1 then return -1 end local s, e = text:find("^%s*") if e == #text then - return get_line_spaces(doc, line + dir, dir) + return indentguide.get_line_spaces(doc, line + dir, dir) end local n = 0 for _,b in pairs({text:byte(s, e)}) do @@ -54,15 +47,16 @@ local function get_line_spaces(doc, line, dir) end -local function get_line_indent_guide_spaces(doc, line) +function indentguide.get_line_indent_guide_spaces(doc, line) if doc.lines[line]:find("^%s*\n") then return math.max( - get_line_spaces(doc, line - 1, -1), - get_line_spaces(doc, line + 1, 1)) + indentguide.get_line_spaces(doc, line - 1, -1), + indentguide.get_line_spaces(doc, line + 1, 1)) end - return get_line_spaces(doc, line) + return indentguide.get_line_spaces(doc, line) end + local docview_update = DocView.update function DocView:update() docview_update(self) @@ -74,7 +68,7 @@ function DocView:update() local function get_indent(line) if line < 1 or line > #self.doc.lines then return -1 end if not self.indentguide_indents[line] then - self.indentguide_indents[line] = get_line_indent_guide_spaces(self.doc, line) + self.indentguide_indents[line] = indentguide.get_line_indent_guide_spaces(self.doc, line) end return self.indentguide_indents[line] end @@ -84,10 +78,10 @@ function DocView:update() local minline, maxline = self:get_visible_line_range() for i = minline, maxline do - self.indentguide_indents[i] = get_line_indent_guide_spaces(self.doc, i) + self.indentguide_indents[i] = indentguide.get_line_indent_guide_spaces(self.doc, i) end - local _, indent_size = get_indent_info(self.doc) + local _, indent_size = self.doc:get_indent_info() for _,line in self.doc:get_selections() do local lvl = get_indent(line) local top, bottom @@ -129,12 +123,17 @@ function DocView:update() end +function indentguide.get_width() + return math.max(1, SCALE) +end + + local draw_line_text = DocView.draw_line_text function DocView:draw_line_text(line, x, y) if config.plugins.indentguide.enabled and self:is(DocView) then local spaces = self.indentguide_indents[line] or -1 - local _, indent_size = get_indent_info(self.doc) - local w = math.max(1, SCALE) + local _, indent_size = self.doc:get_indent_info() + local w = indentguide.get_width() local h = self:get_line_height() local font = self:get_font() local space_sz = font:get_width(" ") @@ -152,3 +151,5 @@ function DocView:draw_line_text(line, x, y) end return draw_line_text(self, line, x, y) end + +return indentguide |