# HG changeset patch # User Tero Koskinen # Date 1454275314 -7200 # Sun Jan 31 23:21:54 2016 +0200 # Node ID 8131b94f4ee3732bfed87ffef2719a496fe62007 # Parent ba0130e66186b60d8f367cae341fc6099c7147bf Refactor the logic to actually work at some level. diff --git a/hgcomplete.lua b/hgcomplete.lua --- a/hgcomplete.lua +++ b/hgcomplete.lua @@ -7,13 +7,73 @@ return 1 end -param = arg[2] -if param == nil or #arg == 3 then - winapi.setenv("TABCOMPLETIONRESULT", "add rm commit push pull revert init") - return 0 -elseif string.sub(param,1,1) == "c" then - winapi.setenv("TABCOMPLETIONRESULT", "commit") +function string:split(sep) + local sep, fields = sep or ":", {} + local pattern = string.format("([^%s]+)", sep) + self:gsub(pattern, function(c) fields[#fields+1] = c end) + return fields +end + +-- print("SCRIPT PARAMETERS:") +-- print("amount of parameters: " .. #arg) +-- for a,b in pairs(arg) +-- do +-- print(a .. ":" .. b) +-- end + +possible_params = { "add", "clone", "commit", "push", "pull", "revert", "rm", "init" } + +argument_table = string.split(arg[#arg], " ") + +if #argument_table < 2 then + -- print "all arguments:" + -- for a,b in pairs(argument_table) + -- do + -- print(a .. ":" .. b) + -- end + winapi.setenv("TABCOMPLETIONRESULT", table.concat(possible_params, " ")) return 0 end +if #arg == 3 then + cursor_pos = arg[2] +elseif #arg == 4 then + cursor_pos = arg[3] +else + cursor_pos = 0 +end + +-- argument_table = justWords(all_arguments) + +possibilities = {} + +-- print("arguments:") +-- for a,b in pairs(argument_table) +-- do +-- print(a .. ":" .. b) +-- end + +if #arg == 4 and #argument_table == 2 then + for i,p in pairs(possible_params) + do + if string.sub(p, 1, string.len(argument_table[2])) == argument_table[2] then + table.insert(possibilities, p) +-- else +-- print("argument_table[2] len = " .. string.len(argument_table[2])) +-- print("no match: " .. p .. "|" .. string.sub(p, 1, string.len(argument_table[2])) .. "|" .. argument_table[2]) + end + end + + if #possibilities > 0 then + winapi.setenv("TABCOMPLETIONRESULT", table.concat(possibilities, " ")) + return 0 + end +elseif #arg == 3 and #argument_table >= 2 then + if argument_table[2] == "commit" then + winapi.setenv("TABCOMPLETIONRESULT", "--edit --addremove --amend --interactive --message") + return 0 + end +end + return 1 +