| @@ -1,32 +1,11 @@ | |||||
| -- ec = require("editorconfig_core") | -- 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 function setIndentation(properties, view) | ||||
| local indent_size_str = properties["indent_size"] | local indent_size_str = properties["indent_size"] | ||||
| local tab_width_str = properties["tab_width"] | local tab_width_str = properties["tab_width"] | ||||
| local indent_style = properties["indent_style"] | local indent_style = properties["indent_style"] | ||||
| -- TODO: Fix logic to decide indent_size | |||||
| local indent_size = tonumber(indent_size_str, 10) | local indent_size = tonumber(indent_size_str, 10) | ||||
| if indent_size ~= nil then | if indent_size ~= nil then | ||||
| messenger:Message("set tabsize to " .. indent_size_str) | messenger:Message("set tabsize to " .. indent_size_str) | ||||
| @@ -51,19 +30,20 @@ local function setInsertFinalNewline(properties, view) | |||||
| end | end | ||||
| 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 | end | ||||
| local view = CurView() | |||||
| setIndentation(properties, view) | setIndentation(properties, view) | ||||
| -- Currently micro does not support changing coding-systems | -- Currently micro does not support changing coding-systems | ||||
| -- (Always use utf-8 with LF?) | -- (Always use utf-8 with LF?) | ||||
| @@ -74,6 +54,23 @@ function onViewOpen(view) | |||||
| setInsertFinalNewline(properties, view) | setInsertFinalNewline(properties, view) | ||||
| end | 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) | function onSave(view) | ||||
| -- messenger:Message("Saved!") | -- messenger:Message("Saved!") | ||||
| end | end | ||||