-
-
Notifications
You must be signed in to change notification settings - Fork 109
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feature]: Support clink、cmder shell on Windows #129
Comments
因为cmd不支持hook所以会有提示语.
如果支持hook的话可以支持的, 参照下面的进行实现就可以: https://github.com/version-fox/vfox/blob/main/internal/shell/powershell.go https://github.com/version-fox/vfox/blob/main/internal/shell/shell.go 有兴趣可以提个PR ;) |
验证过可以支持hook的,用lua脚本扩展 大体上hook脚本可以这么写,甚至clink还可以加上vfox命令自动完成 (https://github.com/vladimir-kotikov/clink-completions/blob/master/nvm.lua)
不过我不太清楚pwsh实现方式,为什么需要加载EnvContent,和最后进程退出的env --cleanup是在干什么 按我目前的理解设计是这样: 通过hook shell prompt,能够在shell每次进入目录时候执行命令vfox env命令,执行该命令之后拿到在当前目录下nodejs的真实路径,
另外这里为了防止PATH无限的拼接到开头,或许可以加个(@vfoxstart@和@vfoxend@)等标识符,每次都先判断如果存在就去掉老的这部分,然后再拼接(不知道还有什么简单的方法)
至于那个env --cleanup好像没啥用,设置的PATH环境变量只会对当前进程有效,当shell退出后,不需要手动清理 |
EnvContent就是一个占位符, vfox会把知道需要配置的环境变量和PATH(初始的环境的和全局SDK的), 通过你实现的shell翻译成对应的语句(也就是Export函数的实现), 替换到EnvContent上.
清理临时文件, 因为
不是每次进入目录, 而是每次执行完命令都需要调用 |
我自己测试了这个改动,目前完成全局、会话、项目三种切换模式都没问题。没找到clink退出终端的hook,但是我看清理逻辑会删除一定时间之前的会话文件,应该没啥大问题。 按照readme描述在clink脚本目录添加2个脚本文件即可。也不知道有没有更好的方案,所以没提PR。 |
不好意没有测试纯clink的场景,我习惯用cmder了,我的测试是在cmder里面成功。你可以下载cmder试试看。 我刚用纯clink也出现相同问题,我再查查看怎么解决这个问题吧。 |
我更新了方法,现在只需要在clink脚本路径放一个lua脚本就可以了。之前多了个 这是改动:jan-bar@f3d4a5d |
这个放在下个版本处理. |
-- vfox
local vfox_sdk_table = {}
local vfox_add_table = {}
local vfox_available = io.popen('vfox available')
for line in vfox_available:lines() do
local sdk,name = line:match('^([%a-]+)/([%a-]+)')
if sdk and name then
table.insert(vfox_sdk_table, sdk)
table.insert(vfox_add_table, sdk..'/'..name)
end
end
vfox_available:close()
local vfox_sdk = clink.argmatcher():addarg(vfox_sdk_table):nofiles()
local vfox_add = clink.argmatcher():addarg(vfox_add_table):nofiles()
local vfox_use = clink.argmatcher():addflags({
'-g'..vfox_sdk,'-s'..vfox_sdk,'-p'..vfox_sdk,
}):nofiles()
clink.argmatcher('vfox'):addarg({
"add"..vfox_add,
"use"..vfox_use,'u'..vfox_use,
"info"..vfox_sdk,
"remove"..vfox_sdk,
"search"..vfox_sdk,
"update"..vfox_sdk,
"available"..vfox_sdk,
"install",'i',"current",'c',"list",'ls',"uninstall",'un',
}):nofiles() 简单的写个自动补全脚本,如果需要 不过我看最新仓库代码换了插件相关逻辑,到时候这个自动补全脚本还得优化额。。暂时我的 https://github.com/jan-bar/vfox/tree/feat_clink 这个分支代码我自己用起来还可以额。 |
@jan-bar 有兴趣加入VersionFox吗? 哈哈哈, clink玩的太6了. |
不是Discord, 我给你发邮件, 注意看邮箱 |
好的,已经加入了。 |
Support the clink terminal's automatic completion and vfox environment switching functions by writing Lua scripts link: version-fox#129
#167 我创建了clink的所有功能,包括自动补全和vfox环境切换。再测测看看有没有问题吧。这次加上了use带版本的自动补全。 |
太帅了! 我下午测试一下. |
666 |
我提交了一些修改, |
不用一次就写得很完美, 开源项目嘛, 慢慢来! 试了, 非常棒! |
嗯嗯,感谢支持。那个lua脚本,我暂时也想不出有啥需要改的了。我已经按照自己的用法,比对每个命令的参数做好补全了额。 |
也感谢你的贡献! |
1. Your usage scenarios?
windows上我一般使用clink或者cmder来增强cmd,因为powershell启动速度太慢了
而在cmd.exe运行的话,会出现
The current shell lacks hook support or configuration
2. What is your expected outcome?
我看clink和cmder等终端貌似有hook的扩展接口提供,不知道作者是否考虑以后也支持这类终端
https://chrisant996.github.io/clink/clink.html#extending-clink
The text was updated successfully, but these errors were encountered: