============================== Cmder の Prompt を修正する方法 ============================== :blog_date:`2016/11/12` Cmder のデフォルトのプロンプトのらむだが表示上邪魔になるときがある。以下はその際 にプロンプトを変える手順を記す。 `Cmder `__ の新しめのバージョンは内部で `Clink `__ の lua 処理で Prompt を設定している。そのため、 ``config\user-profile.cmd`` で ``Prompt`` の設定をしてもうまく反映されない。 そのため、 ``config\*.lua`` として適当な Lua ファイルを作成し、そこで ``clink.prompt.register_filter(set_my_prompt_filter, 1)`` などとして適当に上書きすると良い。 僕は ``vendor\clink.lua`` から ``set_prompt_filter()`` を参照し、以下のようにし て ``config\prompt.lua`` ファイルを作成して対応している。 .. code-block:: lua function set_my_prompt_filter() -- get_cwd() is differently encoded than the clink.prompt.value, so everything other than -- pure ASCII will get garbled. So try to parse the current directory from the original prompt -- and only if that doesn't work, use get_cwd() directly. -- The matching relies on the default prompt which ends in X:\PATH\PATH> -- (no network path possible here!) local old_prompt = clink.prompt.value local cwd = old_prompt:match('.*(.:[^>]*)>') if cwd == nil then cwd = clink.get_cwd() end -- environment systems like pythons virtualenv change the PROMPT and usually -- set some variable. But the variables are differently named and we would never -- get them all, so try to parse the env name out of the PROMPT. -- envs are usually put in round or square parentheses and before the old prompt local env = old_prompt:match('.*%(([^%)]+)%).+:') -- also check for square brackets if env == nil then env = old_prompt:match('.*%[([^%]]+)%].+:') end -- build our own prompt -- orig: $E[1;32;40m$P$S{git}{hg}$S$_$E[1;30;40m{lamb}$S$E[0m -- color codes: "\x1b[1;37;40m" local cmder_prompt = "\x1b[1;32;40m{cwd} {git}{hg} \n\x1b[1;30;40m{lamb} \x1b[0m" cmder_prompt = string.gsub(cmder_prompt, "{cwd}", cwd) if env == nil then lambda = ">" else lambda = "("..env..") >" end clink.prompt.value = string.gsub(cmder_prompt, "{lamb}", lambda) end clink.prompt.register_filter(set_my_prompt_filter, 1)