diff --git a/micro/init.lua b/micro/init.lua index 2a21c04..4a36f48 100644 --- a/micro/init.lua +++ b/micro/init.lua @@ -1,32 +1,11 @@ -- ec = require("editorconfig_core") -local function getProperties(fullpath) - -- FIXME: Commands can be injected here! - -- For example, issuing this command will create file b.txt - -- $ micro "a.txt'; touch 'b.txt" - local file = io.popen("editorconfig '" .. fullpath .. "'", "r") - local output = file:read("*all") - file:close() - - local properties = {} - -- TODO: Which is better? output:gmatch(), string.gmatch(output, ...) - for line in output:gmatch('([^\n]+)') do - -- TODO: Fix regex - local key, value = line:match('([^=]*)=(.*)') - key = key:gsub('^%s(.-)%s*$', '%1') - value = value:gsub('^%s(.-)%s*$', '%1') - -- TODO: Throw error when key is empty string - properties[key] = value - end - - return properties -end - local function setIndentation(properties, view) local indent_size_str = properties["indent_size"] local tab_width_str = properties["tab_width"] local indent_style = properties["indent_style"] + -- TODO: Fix logic to decide indent_size local indent_size = tonumber(indent_size_str, 10) if indent_size ~= nil then messenger:Message("set tabsize to " .. indent_size_str) @@ -51,19 +30,20 @@ local function setInsertFinalNewline(properties, view) end end -function onViewOpen(view) - -- Is this portable? (work on windows?) - local pwd = os.getenv("PWD") - local filename = view.Buf.Path - -- prop, names = ec.parse(filepath) - local fullpath = JoinPaths(pwd, filename) - local properties = getProperties(fullpath) - if properties["indent_style"] == nil then - messenger:Message("edconf: nil") - else - messenger:Message("edconf: " .. properties["indent_style"]) +function onEditorConfigExit(output) + local properties = {} + -- TODO: Which is better? output:gmatch(), string.gmatch(output, ...) + for line in output:gmatch('([^\n]+)') do + -- TODO: Fix regex + local key, value = line:match('([^=]*)=(.*)') + key = key:gsub('^%s(.-)%s*$', '%1') + value = value:gsub('^%s(.-)%s*$', '%1') + -- TODO: Throw error when key is empty string + properties[key] = value end + local view = CurView() + setIndentation(properties, view) -- Currently micro does not support changing coding-systems -- (Always use utf-8 with LF?) @@ -74,6 +54,23 @@ function onViewOpen(view) setInsertFinalNewline(properties, view) end +local function applyProperties(view) + -- Is this portable? (work on windows?) + local pwd = os.getenv("PWD") + local filename = view.Buf.Path + -- prop, names = ec.parse(filepath) + local fullpath = JoinPaths(pwd, filename) + + -- FIXME: Commands can be injected here! + -- For example, issuing this command will create file b.txt + -- $ micro "a.txt'; touch 'b.txt" + JobStart("editorconfig " .. fullpath, "", "", "init.onEditorConfigExit") +end + +function onViewOpen(view) + applyProperties(view) +end + function onSave(view) -- messenger:Message("Saved!") end