mirror of
				https://github.com/cmderdev/cmder.git
				synced 2025-10-30 17:01:57 +08:00 
			
		
		
		
	Merge pull request #1834 from b0bh00d/master
Refactored the Mercurial prompt code to be more efficient.
This commit is contained in:
		
							
								
								
									
										49
									
								
								vendor/clink.lua
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										49
									
								
								vendor/clink.lua
									
									
									
									
										vendored
									
									
								
							| @@ -285,31 +285,40 @@ end | ||||
|  | ||||
| local function hg_prompt_filter() | ||||
|  | ||||
|     -- Colors for mercurial status | ||||
|     local colors = { | ||||
|         clean = "\x1b[1;37;40m", | ||||
|         dirty = "\x1b[31;1m", | ||||
|     } | ||||
|     local result = "" | ||||
|  | ||||
|     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 | ||||
|     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", | ||||
|         } | ||||
|  | ||||
|         -- '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() } | ||||
|  | ||||
|         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 | ||||
|  | ||||
|             clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", color.."("..branch..")") | ||||
|             return false | ||||
|             -- 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 | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user