mirror of
https://github.com/cmderdev/cmder.git
synced 2025-01-10 16:29:08 +08:00
Merge pull request #1834 from b0bh00d/master
Refactored the Mercurial prompt code to be more efficient.
This commit is contained in:
commit
35eab7a51a
39
vendor/clink.lua
vendored
39
vendor/clink.lua
vendored
@ -285,31 +285,40 @@ end
|
||||
|
||||
local function hg_prompt_filter()
|
||||
|
||||
local result = ""
|
||||
|
||||
local hg_dir = get_hg_dir()
|
||||
if hg_dir then
|
||||
-- Colors for mercurial status
|
||||
local colors = {
|
||||
clean = "\x1b[1;37;40m",
|
||||
dirty = "\x1b[31;1m",
|
||||
}
|
||||
|
||||
if get_hg_dir() then
|
||||
-- if we're inside of mercurial repo then try to detect current branch
|
||||
local branch = get_hg_branch()
|
||||
local color
|
||||
if branch then
|
||||
-- Has branch => therefore it is a mercurial folder, now figure out status
|
||||
if get_hg_status() then
|
||||
color = colors.clean
|
||||
else
|
||||
color = colors.dirty
|
||||
end
|
||||
-- 'hg id' gives us BOTH the branch name AND an indicator that there
|
||||
-- are uncommitted changes, in one fast(er) call
|
||||
local pipe = io.popen("hg id 2>&1")
|
||||
local output = pipe:read('*all')
|
||||
local rc = { pipe:close() }
|
||||
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", color.."("..branch..")")
|
||||
return false
|
||||
if output ~= nil and
|
||||
string.sub(output,1,7) ~= "abort: " and -- not an HG working copy
|
||||
string.sub(output,1,12) ~= "000000000000" and -- empty wc (needs update)
|
||||
(not string.find(output, "is not recognized")) then -- 'hg' not in path
|
||||
local color = colors.clean
|
||||
-- split elements on space delimiter
|
||||
local items = {}
|
||||
for i in string.gmatch(output, "%S+") do
|
||||
table.insert(items, i)
|
||||
end
|
||||
-- if the repo hash ends with '+', the wc has uncommitted changes
|
||||
if string.sub(items[1], -1, -1) == "+" then color = colors.dirty end
|
||||
-- substitute the branch in directly -- already WITH parentheses. :)
|
||||
result = color .. items[2] -- string.sub(items[2], 1, string.len(items[2]) - 1)
|
||||
end
|
||||
end
|
||||
|
||||
-- No mercurial present or not in mercurial file
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", "")
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", result)
|
||||
return false
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user