Changes
4 changed files (+99/-0)
-
-
@@ -0,0 +1,3 @@# Detectindent plugin for Micro text editor Whenever a file is opened, the detectindent plugin tries to automatically detect its indentation style (spaces or tabs) and set the `tabstospaces` option accordingly. If spaces indentation is detected, it also tries to detect the indentation width and set the `tabsize` option accordingly.
-
-
-
@@ -0,0 +1,70 @@VERSION = "1.1.1" local config = import("micro/config") local util = import("micro/util") function onBufferOpen(buf) local spaces, tabs = 0, 0 local space_count, prev_space_count = 0, 0 local tabsizes = {} local i = 0 while spaces + tabs < 500 and i < 1000 and i < buf:LinesNum() do space_count = 0 local line = buf:Line(i) local r = util.RuneAt(line, 0) if r == " " then space_count = string.len(util.GetLeadingWhitespace(line)) -- for tab vs space detection, ignore space indents of 1 -- which can be a false signal from C-style block comments if space_count > 1 then spaces = spaces + 1 end -- treat whitespace-only lines as not changing the indent if string.len(line) == space_count then space_count = prev_space_count end -- look for an increasing number of spaces, ignoring increases of 1 -- which can be a false signal from C-style block comments if space_count > prev_space_count + 1 then local t = space_count - prev_space_count if tabsizes[t] == nil then tabsizes[t] = 1 else tabsizes[t] = tabsizes[t] + 1 end end elseif r == "\t" then tabs = tabs + 1 -- treat tabbed lines as not affecting spaced indentation space_count = prev_space_count elseif r == "" then -- treat empty lines as not changing the indent space_count = prev_space_count end prev_space_count = space_count i = i + 1 end if spaces > tabs then buf:SetOptionNative("tabstospaces", true) -- get the indentation change used for the largest number of lines local tabsize = -1 local maxcount = 0 for t, count in pairs(tabsizes) do if count > maxcount then maxcount = count tabsize = t end end if tabsize > 0 then buf:SetOptionNative("tabsize", tabsize) end elseif tabs > spaces then buf:SetOptionNative("tabstospaces", false) end end function init() config.AddRuntimeFile("detectindent", config.RTHelp, "help/detectindent.md") end
-
-
-
@@ -0,0 +1,12 @@# Detectindent Whenever a file is opened, the detectindent plugin tries to automatically detect its indentation style (spaces or tabs) and set the `tabstospaces` option accordingly. If spaces indentation is detected, it also tries to detect the indentation width and set the `tabsize` option accordingly. To disable it, just turn off the plugin: ``` set detectindent off ```
-
-
-
@@ -0,0 +1,14 @@[{ "Name": "detectindent", "Description": "Automatically detect indentation settings", "Tags": ["indent", "detect"], "Versions": [ { "Version": "1.1.1", "Url": "https://github.com/dmaluka/micro-detectindent/archive/v1.1.1.zip", "Require": { "micro": ">=2.0.0" } } ] }]
-