mirror of
https://github.com/cmderdev/cmder.git
synced 2024-11-10 09:49:12 +08:00
add percent escaping for string.gsub (#1991)
In `string.gsub()`, the `%` character has special meaning and must be escaped to be treated verbatim, otherwise the "invalid use of '%' in replacement string" warning will show up. This adds a verbatim() function for that purpose. It fixes this warning for situations where `'%` characters are in the current path (cwd), version control branch names, or in the previous `PROMPT` set by the user.
This commit is contained in:
parent
f4389fc552
commit
51e75d4bb5
19
vendor/clink.lua
vendored
19
vendor/clink.lua
vendored
@ -13,6 +13,14 @@ dofile(clink_lua_file)
|
|||||||
|
|
||||||
-- now add our own things...
|
-- now add our own things...
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Makes a string safe to use as the replacement in string.gsub
|
||||||
|
---
|
||||||
|
local function verbatim(s)
|
||||||
|
s = string.gsub(s, "%%", "%%%%")
|
||||||
|
return s
|
||||||
|
end
|
||||||
|
|
||||||
---
|
---
|
||||||
-- Setting the prompt in clink means that commands which rewrite the prompt do
|
-- Setting the prompt in clink means that commands which rewrite the prompt do
|
||||||
-- not destroy our own prompt. It also means that started cmds (or batch files
|
-- not destroy our own prompt. It also means that started cmds (or batch files
|
||||||
@ -41,13 +49,12 @@ local function set_prompt_filter()
|
|||||||
-- color codes: "\x1b[1;37;40m"
|
-- color codes: "\x1b[1;37;40m"
|
||||||
local cmder_prompt = "\x1b[1;32;40m{cwd} {git}{hg}{svn} \n\x1b[1;39;40m{lamb} \x1b[0m"
|
local cmder_prompt = "\x1b[1;32;40m{cwd} {git}{hg}{svn} \n\x1b[1;39;40m{lamb} \x1b[0m"
|
||||||
local lambda = "λ"
|
local lambda = "λ"
|
||||||
cwd = string.gsub(cwd, "%%", "{percent}")
|
cmder_prompt = string.gsub(cmder_prompt, "{cwd}", verbatim(cwd))
|
||||||
cmder_prompt = string.gsub(cmder_prompt, "{cwd}", cwd)
|
|
||||||
|
|
||||||
if env ~= nil then
|
if env ~= nil then
|
||||||
lambda = "("..env..") "..lambda
|
lambda = "("..env..") "..lambda
|
||||||
end
|
end
|
||||||
clink.prompt.value = string.gsub(cmder_prompt, "{lamb}", lambda)
|
clink.prompt.value = string.gsub(cmder_prompt, "{lamb}", verbatim(lambda))
|
||||||
end
|
end
|
||||||
|
|
||||||
local function percent_prompt_filter()
|
local function percent_prompt_filter()
|
||||||
@ -295,7 +302,7 @@ local function git_prompt_filter()
|
|||||||
color = colors.conflict
|
color = colors.conflict
|
||||||
end
|
end
|
||||||
|
|
||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", color.."("..branch..")")
|
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", color.."("..verbatim(branch)..")")
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -340,7 +347,7 @@ local function hg_prompt_filter()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", result)
|
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", verbatim(result))
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -362,7 +369,7 @@ local function svn_prompt_filter()
|
|||||||
color = colors.dirty
|
color = colors.dirty
|
||||||
end
|
end
|
||||||
|
|
||||||
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", color.."("..branch..")")
|
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", color.."("..verbatim(branch)..")")
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user