# HG changeset patch # User Tero Koskinen # Date 1499200583 -10800 # Tue Jul 04 23:36:23 2017 +0300 # Node ID d79e9ae599c0cbf8278c817b04bd35a624ddb957 # Parent 8131b94f4ee3732bfed87ffef2719a496fe62007 Improve a little ('add' support) diff --git a/hgcomplete.lua b/hgcomplete.lua --- a/hgcomplete.lua +++ b/hgcomplete.lua @@ -1,4 +1,7 @@ --- TABCOMPLETIONRESULT +-- Mercurial (hg) tab completion for Take Command +-- +-- Install the script with command: +-- tabcomplete /l C:\Work\lua\tabcomplete\hgcomplete.lua require "winapi" @@ -8,10 +11,28 @@ end 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 + local sep, fields = sep or ":", {} + local pattern = string.format("([^%s]+)", sep) + self:gsub(pattern, function(c) fields[#fields+1] = c end) + return fields +end + +function changed_files() + local files = {} + local p = io.popen('hg status -n -m') + for f in p:lines() do + table.insert(files, f) + end + return files +end + +function unknown_files() + local files = {} + local p = io.popen('hg status -n --unknown') + for f in p:lines() do + table.insert(files, f) + end + return files end -- print("SCRIPT PARAMETERS:") @@ -23,6 +44,8 @@ possible_params = { "add", "clone", "commit", "push", "pull", "revert", "rm", "init" } +-- print("arg: " .. arg[#arg]) + argument_table = string.split(arg[#arg], " ") if #argument_table < 2 then @@ -36,9 +59,9 @@ end if #arg == 3 then - cursor_pos = arg[2] + cursor_pos = arg[2] elseif #arg == 4 then - cursor_pos = arg[3] + cursor_pos = arg[3] else cursor_pos = 0 end @@ -47,31 +70,49 @@ possibilities = {} --- print("arguments:") +-- print("arguments:" .. #argument_table) -- for a,b in pairs(argument_table) -- do --- print(a .. ":" .. b) +-- 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 + 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 + elseif argument_table[2] == "\"" then + winapi.setenv("TABCOMPLETIONRESULT", table.concat(possible_params, " ")) + -- else + -- print("Y2:" .. argument_table[2] .. "|" .. string.len(argument_table[2])) + end +elseif #arg >= 3 and #argument_table >= 2 then if argument_table[2] == "commit" then - winapi.setenv("TABCOMPLETIONRESULT", "--edit --addremove --amend --interactive --message") + commit_args = "--edit --addremove --amend --interactive --message" + result = commit_args + c = changed_files() + if #c > 0 then + result = result .. " " .. table.concat(c, " ") + end + winapi.setenv("TABCOMPLETIONRESULT", result) return 0 + elseif argument_table[2] == "add" then + u = unknown_files() + if #u > 0 then + winapi.setenv("TABCOMPLETIONRESULT", table.concat(u, " ")) + return 0 + else + return 1 + end end end