gpt4 book ai didi

batch-file - Windows 上的 Anaconda (Python) + Cmder (Clink) - 统一决斗自定义提示

转载 作者:行者123 更新时间:2023-12-04 18:41:26 48 4
gpt4 key购买 nike

如果你在 Windows 上运行 Anaconda,你有一个 activate.bat 以这一行结尾的文件将您当前的 conda env 放在提示中:

set PROMPT=[%CONDA_DEFAULT_ENV%] $P$G

如果你在 windows 上运行 cmder,会有一个 nice lua script自定义提示:
function lambda_prompt_filter()
clink.prompt.value = string.gsub(clink.prompt.value, "{lamb}", "λ")
end

clink.prompt.register_filter(lambda_prompt_filter, 40)

这两个脚本不能很好地相互配合。 Clink has an API这似乎我可以用来合并来自 activate.bat 的更改,但我不知道如何从批处理文件中调用它。

我的总体目标是将这两个提示合并为更好的 Cmder 风格。我的想法是创建一个环境变量,改 activate.bat检查变量是否存在,如果存在,则调用 Clink API 来更改提示而不是 set PROMPT .那时我想我可以创建一个新的过滤器来干净地合并值。不过,我不知道如何从批处理文件中调用 API。

欢迎其他解决方案。

编辑:部分非工作解决方案
require "os" -- added to top of file, rest in filter function
local sub = os.getenv("CONDA_DEFAULT_ENV")
if sub == nil then
sub = ""
end
print(sub)
clink.prompt.value = string.gsub(clink.prompt.value, "{conda}", sub)

我一开始就在提示定义中添加了一个 {conda};从 activate.bat 中删除了提示语句,并将其添加到 git_prompt_filter .在使用激活之前,一切都很好 - {conda}'' 抑制.但是,如果我使用 activate 并切换到带有 git repo 的文件夹来触发更改,我会看到:
{conda}C:\...
是否 os.getenv没有得到用户设置的变量?不知道还有什么问题。我也尝试添加打印,它没有打印出 CONDA... 的内容任何一个。

最佳答案

这就是我重置提示并将 conda env 名称添加到提示中的操作:

---
-- Find out the basename of a file/directory (last element after \ or /
-- @return {basename}
---
function basename(inputstr)
sep = "\\/"
local last = nil
local t={} ; i=1
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
--t[i] = str
--i = i + 1
last = str
end
return last
end

---
-- Find out current conda env
-- @return {false|conda env name}
---
function get_conda_env()
env_path = clink.get_env('CONDA_DEFAULT_ENV')
if env_path then
basen = basename(env_path)
return basen
end
return false
end

---
-- after conda activate: reset prompt and add conda env name
---
function conda_prompt_filter()
-- reset to original, e.g. after conda activate destroyed it...
if string.match(clink.prompt.value, "{lamb}") == nil then
-- orig: $E[1;32;40m$P$S{git}{hg}$S$_$E[1;30;40m{lamb}$S$E[0m
-- color codes: "\x1b[1;37;40m"
cwd = clink.get_cwd()
prompt = "\x1b[1;32;40m{cwd} {git}{hg} \n\x1b[1;30;40m{lamb} \x1b[0m"
new_value = string.gsub(prompt, "{cwd}", cwd)
clink.prompt.value = new_value
end
-- add in conda env name
local conda_env = get_conda_env()
if conda_env then
clink.prompt.value = string.gsub(clink.prompt.value, "{lamb}", "["..conda_env.."] {lamb}")
end
end

clink.prompt.register_filter(conda_prompt_filter, 10)

关于batch-file - Windows 上的 Anaconda (Python) + Cmder (Clink) - 统一决斗自定义提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25125872/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com