-
-
Notifications
You must be signed in to change notification settings - Fork 787
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
[新功能] 支持 Fish Shell 运行环境 #3419
Comments
对 fish 不熟,你可以直接来个 pr |
ci 上的自动提交莫名失效了,等之后有空了 才能看下原因。建议直接走 xmake update 更新 或者走源码编译安装,文档里说明 |
我对于 Fish 也只是基础使用,没有太多编写 Fish Shell 脚本的经验。我在
|
这是推荐的安装方式,可以支持后续的快速 走 ppa 原本就不推荐,更新也不及时,功能也受限制 (不支持 tab 不全 和 xmake update) |
如上 Pull Requests ,按照 技术不佳,暂时没有能力去实现优雅的配置生成方式,估计只能求助于其他大佬了😭
|
@waruqi 我看到本项目在 使用
|
这个也是之前人家贡献进来的,暂时没时间更新,你有兴趣的话,也可以来个 pr 过来。 |
另外,bash/zsh/ps 都是自动转发到 xmake 去动态执行补全,不需要预生成所有子命令。我想 fish 应该也可以,可以研究下 参考 xmake/scripts/register-completions.sh Line 27 in 7fa4d65
|
根据 但是在查看了 Fish Shell 的 complete 方法之后,并没有发现这么一个「补全钩子」的机制,所有的补全都是这样人为指定的,包括 后续我可能会考虑把自己用的这个配置文件完善一下 PR 到这里,但愿它能够通用。 |
如果是这种方式的话,很难适配 xmake 不同版本的升级迭代,每次更新版本,都得去重新生成去适配。。 而且很多内部参数值的列表补全,还有用户工程中的 targets 补全,这些都只能是动态完成的。。不太可能预生成,因为每个用户的工程配置都是不同的,随时可变。。。比如补全 像此类的动态补全,还有很多地方都是,所以预生成的方式基本是完全没啥大的用处。。也不好维护。。不建议这么做。 |
那看来现阶段暂时是做不了它的 Fish Shell 补全配置文件了,至少我没找到什么很好的办法😞 此需求暂时搁置,希望后续有其他大佬能够以更优雅的方式实现❤️ |
我觉得这种应该是很平常的需求,其他shell 都支持,fish shell 不应该不行。。 而且我看 fish 里面也是通过 complete 命令来整的,跟 bash 类似,仅仅只是参数的差异。。 其实可以问问 chatgpt,将下面的 bash 方式转成 fish 方式:
下面结果不一定对,但可以做个参考: ChatGPT: 在 fish shell 中,使用 complete 命令来实现命令行补全功能。以下是将 complete -o default -o nospace -F _xmake_bash_complete xmake 转换为 fish shell 的代码:
|
ChatGPT 生成的这一段 Fish Shell 代码片段好像存在问题,在触发补全的过程中会有大量报错。 目前参考了以上结果自己写了一个,效果和那些用 |
当然不可能直接用,仅供参考的。 |
这里不用关,等我重构完,会支持上,先备着吧 |
我初步加上了 #3447 不过 get.sh/update 里面对 fish 的探测和 profile 注入还没做,fish下也还没测 |
还有如果改成
|
可以了,我重构了下,建议全量更新 dev 后测试,目前 get.sh 为了兼容现有老版本,因此只有 dev 分支编译,或者 local 本地编译安装,会启用新的注入逻辑
get.sh 会自动调用 它会先生成 内部已经兼容支持了 fish/bash/zsh $ cat ~/.xmake/profile
export XMAKE_ROOTDIR="/Users/ruki/.local/bin"
export XMAKE_PROGRAM_DIR="/Users/ruki/.local/share/xmake"
export PATH="$XMAKE_ROOTDIR:$PATH"
test $FISH_VERSION && test -f "$XMAKE_PROGRAM_DIR/scripts/profile-unix.fish" && source "$XMAKE_PROGRAM_DIR/scripts/profile-unix.fish" && exit 0
test -f "$XMAKE_PROGRAM_DIR/scripts/profile-unix.sh" && source "$XMAKE_PROGRAM_DIR/scripts/profile-unix.sh" 同时,它还会注入到 # >>> xmake >>>
test -f "/Users/ruki/.xmake/profile" && source "/Users/ruki/.xmake/profile"
# <<< xmake <<< 所以,新开的 bash/fish 终端,也能自动生效,不需要再手动 相关 patch |
@Dragon1573 @xq114 不过目前,windows 下 ps1 的 profile 还没重构,整合到 以及 fish 的 xrepo env 环境还没在 profile 中提供,后续你们有时间的话,也可以帮忙提 pr 过来。 |
这里应该差不多了,我先关了,如果有问题,可以再开或者直接 pr |
我使用
确认此项生成功能正常,内容与你提供的片段相同。
经测:
|
目前只有,macos 下会注入这个,linux 下不会注入这个。。只要 ~/.profile 被注入了,.bash_profile 就没必要再去注入了。。
这个安装后,在 fish 下重新执行 xmake update --integrate 才会被注入。。 因为 $FISH_VERISON 这个只能在 shell 中判断识别 fish ,在首次安装 xmake update --integrate 子进程里是取不到 这个值的,因为它不是环境变量,所以首次安装是识别不到当前运行在 fish 下,只有下次下载,我强行设置了 XMAKE_SHELL=fish 才能识别到。。 除非有其他办法,fish 起的子进程里面能判断识别当前在 fish 下。 |
你在什么场景下需要该功能?
我目前在 Windows 11 的 WSL2 (Ubuntu) 上使用 XMake ,配置的 Shell 环境为 Fish 。当前 XMake 提供的
curl
和wget
安装方式均为 Bash ,安装后提供的~/.xmake/profile
文件也只能在 Bash 环境下进行source
操作。以上source
命令在 Fish Shell 环境下执行会提示脚本语法错误。同时,当前最新版本的 XMake 发行版本为
v2.7.7
,而 Ubuntu PPA 可用的最新发行版仅为v2.7.4
,安装后在 Fish Shell 中使用无相关命令补全,也没有对应的 Manual Page 供fish_update_completions
命令解析以自动生成参数补全配置文件。描述可能的解决方案
shget.text
,以支持 Fish Shell 用户可以fish < (wget ...)
进行安装而不需要切换到 Bash 环境~/.xmake/profile.fish
,以支持 Fish Shell 用户激活启用 XMake 环境而不必切换到 Bashxmake.tar.gz
文件置于系统默认的文档文件目录下,以支持fish_update_completions
命令读取解析 XMake 文档并自动生成参数补全~/.config/fish/completions/xmake.fish
参数补全配置文件的方法,以支持 Fish Shell 自动加载为 XMake 提供参数补全描述你认为的候选方案
(暂时未想到其他解决方案)
其他信息
systemd
模式,支持snap
命令)deb https://ppa.launchpadcontent.net/xmake-io/xmake/ubuntu/ kinetic main
v3.5.1
The text was updated successfully, but these errors were encountered: