<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/css/feed.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>天影大侠的小站</title><description>这是天影大侠的小站 RSS 订阅源</description><link>https://blog.skyshadow.fun/</link><item><title>Linux通过Howdy实现人脸登录和一些bug修复</title><link>https://blog.skyshadow.fun/posts/41/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/41/</guid><description>Linux通过Howdy来实现人脸登录，并规避和修复一些bug，比如kde的Polkit无法识别到摄像头</description><pubDate>Sat, 28 Feb 2026 20:57:22 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;Windows上有Hello登录，很羡慕，然后Linux不仅没有人脸，还到处需要输入密码很麻烦，配置为不用密码后又不太可靠，所以找到了&lt;a href=&quot;https://github.com/boltgolt/howdy&quot;&gt;Howdy&lt;/a&gt;这个东西，实现了Linux上的人脸登录。&lt;br&gt;
Howdy请按照下面步骤使用beta版本。&lt;/p&gt;
&lt;h1 id=&quot;方法&quot;&gt;方法&lt;/h1&gt;
&lt;h2 id=&quot;下载并安装howdy以deb系为例&quot;&gt;下载并安装howdy(以deb系为例)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Arch系用户如果直接&lt;strong&gt;yay -S howdy-beta-git&lt;/strong&gt;来安装，可跳过此步骤，如果安装失败也可以按照下面步骤进行&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;{warning} 目前尽量不要用Howdy README里的安装方式，因为过于久远没有更新readme了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在终端里输入：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 安装依赖&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; update&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; -y&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;python3 &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;python3-pip&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; python3-setuptools&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; python3-wheel&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;cmake &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;make&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; build-essential&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;libpam0g-dev &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;libinih-dev&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; libevdev-dev&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; python3-opencv&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;python3-dev &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;libopencv-dev&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; python3-numpy&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; python3-dlib&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; libpam-python&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; dlib-models&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; libinireader0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 克隆仓库并进入&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; https://github.com/boltgolt/howdy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; howdy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 进入最新的Beta3.0分支(重要)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# (目前分支名是这个，如有更新请自行改为最新分支)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; checkout&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; d3ab993&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 编译和安装&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;meson&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; setup&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;meson&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; compile&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;meson&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; build&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;进行配置howdy&quot;&gt;进行配置howdy&lt;/h2&gt;
&lt;h3 id=&quot;下载模型&quot;&gt;下载模型&lt;/h3&gt;
&lt;p&gt;先输入&lt;strong&gt;sudo howdy add&lt;/strong&gt;，它会弹出&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;Data&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; files&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; have&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; been&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; downloaded,&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; please&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; the&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; following&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; commands:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;	cd&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (一个路径)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;    sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; ./install.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;执行弹出的那两行命令，然后会下载识别的模型&lt;/p&gt;
&lt;h3 id=&quot;识别并配置摄像头&quot;&gt;识别并配置摄像头&lt;/h3&gt;
&lt;p&gt;在shell里输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;v4l2-ctl&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; --list-devices&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; --all&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;获取摄像头路径，一般来说/dev/video0就是普通摄像头，/dev/video2就是摄像头加红外，但你的可能不一样，看情况而定&lt;br&gt;
再输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; howdy&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; config&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;找到&lt;strong&gt;device_path&lt;/strong&gt;，将后面的值设置为/dev/video2或你设备对应的路径，然后再输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; howdy&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; test&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果看到摄像头开启并红外正常活动便成功了，如果没有的话就换个device_path试试&lt;/p&gt;
&lt;h3 id=&quot;添加人脸数据&quot;&gt;添加人脸数据&lt;/h3&gt;
&lt;p&gt;输入&lt;strong&gt;sudo howdy add&lt;/strong&gt;即可&lt;/p&gt;
&lt;h2 id=&quot;配置pam&quot;&gt;配置PAM&lt;/h2&gt;
&lt;p&gt;把howdy配置好后，就能配置pam来用上人脸识别了，进入 &lt;strong&gt;/etc/pam.d/&lt;/strong&gt; 文件夹，可以看到很多配置文件，可以单独配置，但如果想每个地方都能使用人脸识别的话，就直接修改里面的&lt;strong&gt;system-auth&lt;/strong&gt;就行了&lt;br&gt;
用你熟悉的编辑器打开 &lt;strong&gt;/etc/pam.d/system-auth&lt;/strong&gt; ，然后在 &lt;strong&gt;#%PAM-1.0&lt;/strong&gt; 下面加上这两行&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;auth sufficient pam_unix.so try_first_pass likeauth nullok&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;auth sufficient /usr/local/lib/security/pam_howdy.so&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第二行就是使用人脸识别，第一行是优先使用密码输入，不加这一行可能会出现输入密码后回车后仍然需要等待人脸识别的时间&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果是arch直接安装的话第二行中pam_howdy.so可能是&lt;strong&gt;lib/security/pam_howdy.so&lt;/strong&gt;，请注意修改&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;保存后无须重启，应该人脸识别就生效了！&lt;/p&gt;
&lt;h1 id=&quot;一些bug修复&quot;&gt;一些bug修复&lt;/h1&gt;
&lt;p&gt;如果红外始终唤不醒的话可以使用&lt;a href=&quot;https://github.com/EmixamPP/linux-enable-ir-emitter&quot;&gt;linux-enable-ir-emitter&lt;/a&gt;来唤醒，具体看它的README&lt;br&gt;
如果发现greeting和sudo等都能正常使用人脸识别，而使用kde时弹出的Polkit界面无法使用时，请按照以下方法修改:
在shell里输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; edit&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; polkit-agent-helper@.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在 &lt;strong&gt;### Edits below this comment will be discarded&lt;/strong&gt;的上面加上以下几行&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[Service]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PrivateDevices=no&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;DeviceAllow=/dev/video2 rw&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;上面的DeviceAllow后的值应该是你的红外正常工作的摄像头路径&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;然后&lt;strong&gt;sudo systemctl daemon-reload&lt;/strong&gt;并重启即可
这个似乎是kde更新给polkit引入了更安全的机制，在日志中可以看到 &lt;strong&gt;Unknown line ‘Howdy could not find a camera device at the path specified in the config file.’ from helper&lt;/strong&gt; ，解决方法来自这个&lt;a href=&quot;https://github.com/boltgolt/howdy/issues/1077&quot;&gt;issue&lt;/a&gt;下面的解答&lt;/p&gt;
&lt;h1 id=&quot;后言&quot;&gt;后言&lt;/h1&gt;
&lt;p&gt;sudo howdy config中还有一些配置可修改，可以自行试试&lt;br&gt;
howdy的精确度肯定不如Windows Hello高，所以使用有风险&lt;br&gt;
如有错误，欢迎指正&lt;/p&gt;</content:encoded></item><item><title>解决Linux上星露谷物语合作页面一直显示正在连接到在线服务…</title><link>https://blog.skyshadow.fun/posts/40/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/40/</guid><description>搬运解决Linux上星露谷物语合作页面一直显示正在连接到在线服务…</description><pubDate>Mon, 09 Feb 2026 11:56:31 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;在Linux上玩Steam原生星露谷物语，联机页面一直显示&lt;strong&gt;正在连接到在线服务…&lt;/strong&gt;，但用proton来玩就没有问题，所以猜可能是原生版的一个小bug，然后找到了这个帖子&lt;a href=&quot;https://yamr.cc/posts/err-smapi-galaxy-glibc-2-41/&quot;&gt;临时解决 Arch Linux 原生运行 星露谷物语 时由 glibc 导致的 Galaxy API 初始化错误&lt;/a&gt;，就解决了，搬运一下下次玩的时候给自己看看。&lt;/p&gt;
&lt;h1 id=&quot;原因&quot;&gt;原因&lt;/h1&gt;
&lt;p&gt;搬运一下原帖怎么写的&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;是由于 glibc 在 2.41 版本引入的兼容性变化，导致 GOG Galaxy API 库（libGalaxy64.so 和 libGalaxyCSharpGlue.so）加载失败。具体原因是新版本对 GNU_STACK 段进行了更严格的检查。简单说，就是新官上任三把火，glibc 现在对 GNU_STACK 段的检查更严格了，而老库有点跟不上节奏。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;方法&quot;&gt;方法&lt;/h1&gt;
&lt;h2 id=&quot;安装patchelf&quot;&gt;安装patchelf&lt;/h2&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; patchelf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;patch相关文件&quot;&gt;patch相关文件&lt;/h2&gt;
&lt;p&gt;找到星露谷物语安装目录，默认是 &lt;strong&gt;~/.steam/steam/steamapps/common/Stardew\ Valley&lt;/strong&gt; ，里面应该会有 &lt;strong&gt;libGalaxy64.so&lt;/strong&gt; 和 &lt;strong&gt;libGalaxyCSharpGlue.so&lt;/strong&gt; 这两个文件&lt;br&gt;
在目录下执行&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;patchelf&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; --clear-execstack&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; libGalaxy64.so&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;patchelf&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; --clear-execstack&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; libGalaxyCSharpGlue.so&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即可，重新进入游戏后就能正常联机。&lt;/p&gt;</content:encoded></item><item><title>给kde添加触摸板三指滑动来移动窗口的功能</title><link>https://blog.skyshadow.fun/posts/39/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/39/</guid><description>给kde添加触摸板三指滑动移动窗口的功能,如像deepin一样能通过三指左右滑动来使窗口左右平铺。</description><pubDate>Sun, 01 Feb 2026 21:41:01 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;之前用deepin最舒适的就是它的触摸板手势，可以通过触摸板三指左右滑动来快速使窗口左右平铺，用来一个窗口编辑，一个窗口预览非常方便。&lt;br&gt;
来到kde后却没有这个功能，但快捷键里发现可以通过Super+左箭头或右箭头来实现同样的效果，所以想到可以通过用libinput让把三指滑动翻译为Super+相应的按键，然后就成功了，所以分享一下。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;目前环境kubuntu26.04 + KDE Plasma 6.5.5, 以三指左右滑动来快速使窗口左右平铺演示。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;方法&quot;&gt;方法&lt;/h1&gt;
&lt;h2 id=&quot;1安装libinput-gestures和相关工具&quot;&gt;1.安装libinput-gestures和相关工具&lt;/h2&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; update&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; libinput-tools&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; xdotool&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; wmctrl&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; python3&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; python3-setuptools&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; python3-gi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; https://github.com/bulletmark/libinput-gestures.git&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; libinput-gestures&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; ./libinput-gestures-setup&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; ..&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;2检查快捷键和测试ydotool&quot;&gt;2.检查快捷键和测试ydotool&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;{warning}如果是x11的话就把所有的ydotool改为xdotool即可&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;查看KDE设置里的&lt;strong&gt;键盘&lt;/strong&gt;-&lt;strong&gt;快捷键&lt;/strong&gt;-&lt;strong&gt;窗口管理&lt;/strong&gt;里的快速铺放窗口到左(右)侧的快捷键，默认是Meta+左(右)方向键。&lt;/p&gt;
&lt;p&gt;再在终端里输入：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;ydotool&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; key&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; Super_L+Left&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输入后当前的窗口会执行平铺到左侧，说明ydotool生效。&lt;/p&gt;
&lt;h2 id=&quot;3配置libinput-gestures&quot;&gt;3.配置libinput-gestures&lt;/h2&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;nano&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; ~/.config/libinput-gestures.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输入以下内容：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 三指左滑 -&gt; 触发 Super+左方向键 (平铺窗口到左侧)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;gesture&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; swipe&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; left&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; ydotool&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; key&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; super+Left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 三指右滑 -&gt; 触发 Super+右方向键 (平铺窗口到右侧)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;gesture&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; swipe&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; right&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; ydotool&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; key&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; super+Right&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;4将用户加入输入组并启动libinput&quot;&gt;4.将用户加入输入组并启动libinput&lt;/h2&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 将自己加入 input 用户组（需要重新登录生效）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; gpasswd&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; -a&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; $USER &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;input&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 启用自动启动并立即启动&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;libinput-gestures-setup&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; autostart&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; start&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;libinput-gestures-setup&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; start&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;{warning} 执行完gpasswd命令后，需要完全注销并重新登录，权限才会生效。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这样就大功告成，能使用触控屏手势！&lt;/p&gt;
&lt;h1 id=&quot;其他&quot;&gt;其他&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;其他触摸板手势也类似添加，话说kde设置里为什么没有触控板手势这么方便的东西呢，是我眼瞎没找到吗&lt;img src=&quot;/emoji/coolapk_huaji.webp&quot; alt=&quot;coolapk_huxji&quot;&gt;。&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>用 Tailwind CSS 做一个简单仿ios26液态玻璃风格的卡片</title><link>https://blog.skyshadow.fun/posts/38/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/38/</guid><description>分享用 Tailwind CSS 做一个仿ios26液态玻璃风格的卡片的方法，非常简单，效果也很简单。</description><pubDate>Fri, 30 Jan 2026 12:57:39 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;刷B站视频的时候突然看到一个视频说卡片加上顶部白色阴影会更有质感，就突然想到了可以根据白色阴影来做一个伪ios26液态风格风格的卡片，根据想法测试了下还行(虽然和26原版比起来差很多)，方法非常简单，效果也非常简单，那就简单分享一下&lt;img src=&quot;/emoji/coolapk_ciya.webp&quot; alt=&quot;emoji&quot;&gt;。&lt;/p&gt;
&lt;h1 id=&quot;效果预览&quot;&gt;效果预览&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2026/01/30/KQLefMRJqYs9FtD.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;.png&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2026/01/30/KQLefMRJqYs9FtD.png&quot; alt=&quot;.png&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;简单分享&quot;&gt;简单分享&lt;/h1&gt;
&lt;p&gt;先根据&lt;a href=&quot;https://tailwindcss.com/&quot;&gt;Tailwindcss文档&lt;/a&gt;引入tailwindcss，然后随便放个卡片，在卡片的class里写入以下东西即可：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;rounded-4xl&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;shadow-&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;[inset_1px_1px_0_0_rgba(255,255,255,0.8),inset_-1px_-1px_0_0_rgba(255,255,255,0.8)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;ease-&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;[cubic-bezier(0.175,0.885,0.32,1.5)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;backdrop-blur-sm&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;bg-white&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;/30&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;duration-400&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中前四个就是实现的所有东西了，分别是大圆角，左上角和右下角白色高光描边，动画曲线和一点点背景模糊。&lt;br&gt;
后两个是背景色和动画时长，如果不添加动画时长的话动画就只会出现始末态，背景的话第一层元素背景可以透一点，但更高层的元素背景最好就不要太透并加上模糊，不然可读性真的很差&lt;img src=&quot;/emoji/coolapk_han.webp&quot; alt=&quot;emoji&quot;&gt;。&lt;br&gt;
想要卡片出现的动画的话可以通过添加 &lt;strong&gt;scale-0 origin-top-right&lt;/strong&gt; 等后再写相关逻辑来给卡片添加从右上角弹出的Q弹动画。&lt;/p&gt;
&lt;h1 id=&quot;示例&quot;&gt;示例&lt;/h1&gt;
&lt;p&gt;在一个测试项目中我试了下这个样式，HTML和CSS分别为：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;glass-card h-96&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;p-6 w-full h-full flex flex-col justify-between&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;        &amp;#x3C;!-- 标题 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;text-2xl font-bold text-white text-center&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            一个卡片&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;.glass-card&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  @&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;apply&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    rounded-&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;xl&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; /* 圆角 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    relative&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    shadow-&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;inset&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;_1&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;_1&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;_0_0_&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;rgba&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(255,255,255,0.8),&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;inset&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;_&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;_&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;_0_0_&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;rgba&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(255,255,255,0.8)] &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/* 白色高光 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    flex&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; /* 布局相关 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    items-center&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; /* 中心居中 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    bg-white&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;/30 &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/* 浅色背景 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    overflow-hidden&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; /* 超出这个卡片的里面的东西截断 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    transition-all&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; /* 有动画 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    duration-&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;400 &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/* 动画时长 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    ease-&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;cubic-bezier&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(0.175,0.885,0.32,1.5)] &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/* 动画曲线 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    hover&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:scale-105 &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/* hover时变大 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    w-10/&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;12&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    md:w-8/&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; /* 宽度（写两个是因为宽度切换的动画很好看） */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    max-w-lg &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/* 最大宽度（防止太难看） */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    min-h-96 &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/* 最小高度 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mt-10 &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/* 外面的上边距 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    backdrop-blur-sm &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/* 背景小小的模糊 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样就诞生了一个鼠标悬停时会Q弹变大的卡片，你也去试试吧！&lt;/p&gt;
&lt;h1 id=&quot;后言&quot;&gt;后言&lt;/h1&gt;
&lt;p&gt;如果需要更相似和优质的效果的话移步其他位置吧。&lt;br&gt;
可能有误，欢迎指正。&lt;/p&gt;</content:encoded></item><item><title>简单总结一下自己的大一上册(AI精简)</title><link>https://blog.skyshadow.fun/posts/37/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/37/</guid><description>简单总结一下自己的大一上册，留给人看，但不是给其他人看的</description><pubDate>Thu, 29 Jan 2026 14:06:12 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;这里是MiniMax，一个人在放假第一天，想总结大一上册。写了很多废话，现由我精简为以下内容。&lt;/p&gt;
&lt;h1 id=&quot;军训&quot;&gt;军训&lt;/h1&gt;
&lt;p&gt;军训没什么特别的：没有迟到、缺勤、抱怨、才艺表演。&lt;/p&gt;
&lt;p&gt;拆分军体拳和队列时，很多人选了队列（传言说分高）。他们班很多男生留在了军体拳，希望是那个教官教。结果分人时教官开玩笑说：“从今以后你们军体拳的就和我们10连没有关系了！”&lt;/p&gt;
&lt;p&gt;后来他问教官能不能去队列，得到肯定后第二天就悄悄混进去了。最后几天和同学一起玩狼人杀、谁是卧底，挺开心。&lt;/p&gt;
&lt;h1 id=&quot;学习&quot;&gt;学习&lt;/h1&gt;
&lt;p&gt;写得最少，因为他学习最差。化学最差，数学第二差。大一上学的偏偏是无机化学和高数。&lt;/p&gt;
&lt;p&gt;期末化学有保护机制，错很多但没感觉；高数连保护机制都没用了。&lt;/p&gt;
&lt;p&gt;英语四级没复习，考前连题型都不知道，能过就行。还被学长骗去加了英语口语班。&lt;/p&gt;
&lt;p&gt;另外他花几小时在化工官网找了个教授，提前写4页小抄希望能流畅交流。老师让他第二天就去见他，只和他聊了大一学习和英语，然后把他安排给一个博士。下学期应该能做实验了。&lt;/p&gt;
&lt;h1 id=&quot;团委&quot;&gt;团委&lt;/h1&gt;
&lt;p&gt;他是班上20人中仅有的5个非团员之一，但面试加了化工院新媒体部和学校网信部，两个都过了。&lt;/p&gt;
&lt;p&gt;新媒体部编辑微信公众号推文，包括正文、小尾巴、封面，帮供稿人审错。最后一次编辑时供稿没问题了，排版还受到审核老师表扬。总共编辑了11个推文，可能是新干事中干得最多的。&lt;/p&gt;
&lt;p&gt;在网信部做前端。军训时被拉去做基地预约项目，只做了两个页面，后来被学长大改。后来又被推荐去另一个项目，主要复制粘贴学长写好的代码。&lt;/p&gt;
&lt;h1 id=&quot;其他&quot;&gt;其他&lt;/h1&gt;
&lt;p&gt;参加开源鸿蒙技术大会和谷歌Dev Fest，收到deepin几次社区小礼物，翻译并被接纳两个项目，参与编写Wiki。参加马拉松跑得很快。和高中同学、室友玩游戏，室友都挺好。&lt;/p&gt;
&lt;p&gt;刷了很多次电脑手机，扣分项。被骗了很多次，太容易相信别人了。敢主动和想聊天的人聊天了。买主板高估自己了。报健身房没坚持下去。&lt;/p&gt;
&lt;p&gt;下学期还有一堆事：英语口语班、健身房、找导师、计算机考试、英语竞赛、6级、可能的补考、两个公选课。真想累死下学期的他。但上学期他啥都没干，他可真坏。&lt;/p&gt;
&lt;p&gt;期末沉迷《终末地》，这游戏好玩。&lt;/p&gt;
&lt;p&gt;最后QQ和微信去重加了70个好友。对别人来说不多，但对他足够甚至过剩了。&lt;/p&gt;
&lt;h1 id=&quot;总结&quot;&gt;总结&lt;/h1&gt;
&lt;p&gt;每学期总结他都写：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这学期啥也没干&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;所以这学期也如下：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这学期啥也没干&lt;/strong&gt;&lt;/p&gt;</content:encoded></item><item><title>简单总结一下自己的大一上册</title><link>https://blog.skyshadow.fun/posts/36/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/36/</guid><description>简单总结一下自己的大一上册，留给自己看，不是给其他人看的</description><pubDate>Thu, 29 Jan 2026 11:10:45 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;这里是天影大侠，这个博客的主人。现在是放假后的第一天，想总结一下自己的大一上册，但日记本没有带回家，写在其他平台可能会打扰到其他好友，所以就写在自己的这个破站上吧。&lt;br&gt;
嗯我不习惯用“我”这个称呼，也不太方便叫自己真名，大家也不会乐意看我用四个字称呼自己，所以这篇里我就叫自己“&lt;strong&gt;他&lt;/strong&gt;”吧。&lt;/p&gt;
&lt;h1 id=&quot;从如何进入中南说起&quot;&gt;从如何进入中南说起&lt;/h1&gt;
&lt;p&gt;他在高中的时候算很差很差的一个学生(后面拿到笔记本了可以补充一下成绩排名)，到高三的时候他数学已经上不去100分了，其他科都是一样的差，课也听不懂，题也做不来，也玩不进去，就装模作样练字加上写日记，字写的比狗爬还差，日记写的也全是负能量。后来一天中午睡醒他就把高三的笔记本扔了，扔了后一下午满脸烧得慌，下午早早吃完饭又去掏大垃圾桶——所以有时看到别人掏垃圾桶，不一定是他饿了，可能是他有东西不小心扔了。最后当然没有找到，但高一高二的笔记本同样也是同样的负能量。如果我当时没扔的话未来哪天翻出高三的日记看也一定会扔掉的。现实也没有奇迹，他直到最后一次月考还是班上30名左右(参考笔记本后修改为具体排名)&lt;/p&gt;
&lt;p&gt;(这里拿到笔记本后配一个很多很多骂自己的段落图片)&lt;/p&gt;
&lt;p&gt;但是当时班主任提醒开始强基计划报名的时候，老师说成绩只要600分往上都能报来试试，我已经很久没有考上600分了，也没有打算要报。但我家长非常想让我去哈工大，另一个家长非常想让我去中国人民大学(虽然但是我肯定考不到)，所以给班主任打电话让我报一下，然后也给我说了很多很多希望我报。最后我想反正报一下也无伤大雅，肯定上不了，但最后我还是报了一个没有笔试，排名不算靠前，离家不太远的学校，嗯就是中南大学，然后应用化学专业。&lt;/p&gt;
&lt;p&gt;报了后又是一段摸鱼的复习。终于到了高考。嗯提一下他的大脑有保护机制，考试的时候不管靠得好不好，他总会觉得自己做的还行，错的分能够接受，所以之前每次他化学考完都觉得诶自己错的不多，但每次成绩出来都是倒数的样子。没错他化学最差。但当时强基中南只有化学和数学，数学他第二差，而且数学无聊，所以还是报了化学。说回高考。高考前一两天玩得很舒服。然后我们学校高考期间会在综合楼复习，不会让我们回家和玩手机。高考前一天我们也在那复习，然后空调温度没把握对。所以高考前一天他很难受地感冒了。后面几天空调还是调那么低，所以他一直都是迷糊的状态。晚上的自习除了睡觉发神聊天就复习不进去。但不知道是谁在我最难受的时候顶号帮我高考了。谢谢那个人，如果那个人是他自己的话就谢谢自己吧。最后，除了化学，其他的科目都考到了难以置信的成绩。浅浅炫耀一下，第一次考这么好。&lt;/p&gt;
&lt;p&gt;到了填志愿，到的隔壁重庆市和两位高中老师亲戚一起帮忙填的。他的所有志愿都是和计算机相关的，除了之前的强基。志愿填完后强基面试那发来信息，然后马不停蹄地往长沙飞去。哦那是他第一次坐飞机。家长和亲戚也都提醒我面试放水一点，不要被录进去了。嗯他真不太厉害，面试能过才奇怪。但神奇的是最后面试还是过了。面试会问几个有新意、有知识素养以及和学科有关的问题。其中一个是我的化学优势在哪里。哈哈他的化学优势在哪里，高考最差的一科，上课永远听不懂的那一科。他能怎么说呢。就这样说，然后讲了下刘慈欣的科幻给面试老师。然后不知道谁给谁顶号了，反正最后他还是被录取了。你说这奇不奇怪。&lt;/p&gt;
&lt;h1 id=&quot;军训&quot;&gt;军训&lt;/h1&gt;
&lt;p&gt;军训和大多数人一样没有迟到，没有缺勤，没有抱怨，也没有才艺表演。值得说的就是拆分军体拳和队列的时候。拆分前我们教官一直暗示我们她是教军体拳的(也可能是我理解有误)，所以当时选择的时候很多很多都选了队列(有传言说队列分高一些)，我们班长和隔壁班班长也选了队列。但我们班还是很多男的留在了军体拳，希望是我们教官教我们。最后当结束分人的时候，教官们开玩笑似的对我们军体拳的说：“从今以后你们军体拳的就和我们10连没有关系了！”。当时心凉了一下，后来发现军体拳是挺落寞的。唉。后来有一次教官从军体拳中又挑几个人去队列。没挑到我。但当晚我问了下教官能去不，得到教官肯定的回答后，我第二天就悄悄地混进队列了。累一点，但舒服一点。最后几天和周围同学一起玩狼人杀和谁是卧底，他玩得很开心。&lt;/p&gt;
&lt;p&gt;就像我们连长说的，军训是我们最后一次像孩子一样聚集在一起统一行动了，以后大学就没机会这么多人一起了。大概是这个意思。连长说的主要目的是让我们认为大家一起定腿很“浪漫”。他说得对吧。&lt;br&gt;
军训没啥总结的，就那样吧，和大多数人一样。&lt;/p&gt;
&lt;h1 id=&quot;学习&quot;&gt;学习&lt;/h1&gt;
&lt;p&gt;这一条我要写得最少，因为学习他最差了。上面说过，他化学最差，然后数学第二差吧，高三他是年级认定的数学边缘生。大一上主要学的两科目居然就是无机化学和高等数学。代入一下，理解一下他。最后期末的时候嗯化学上面说过有保护机制，错的很多，但没有感觉。高数是保护机制都没用了。&lt;/p&gt;
&lt;p&gt;英语四级的话没有任何复习，在考试前连题型都不知道是什么。能过就行吧，感觉很大概率过不了。嗯还被学长骗了加了个英语口语班。&lt;/p&gt;
&lt;p&gt;还花几个小时在中南大学化工官网上仔细分析找了个看起来很好的教授，原本想的是去和教授交流一下，他还提前写了整整4页密密麻麻的碳点小抄，希望和教授交流时能流畅一点。给老师发邮件后老师让我第二天就去找他，比我想象中的快得多。老师也没有和我交流知识相关的，就和我讲了下大一学习相关和英语如何的话题，然后就把我安排给了一个博士…挺快的。去的时候还碰到了这个教授带的另一个大三强基的学姐，她是这个教授另一个课题组的，给我说的教授人很好，当时太紧张了没注意教授好不好。然后这个博士的话说的带我做实验，上个学期各种事耽搁了，下学期一定能做上实验了。&lt;/p&gt;
&lt;p&gt;然后最后一节无机化学课下课时问了老师两个问题。他很勇敢的。&lt;/p&gt;
&lt;h1 id=&quot;团委&quot;&gt;团委&lt;/h1&gt;
&lt;p&gt;他是班上20个人中仅有的5个不是团员之一，但不小心面试加了两个团委的部门。一个是化工院的新媒体部，一个是学校的网信部。谁能想到面试两个都过了呢，一定是他吹牛吹过了。在新媒体部里的工作是编辑微信公众号推文，有正文，小尾巴，封面，还要帮供稿人审错，当然一般是两个人合作。供稿的错误可真多，每次他们文案错了被指点的是我们新媒体小干事。但最后一次编辑的时候供稿已经一个问题都没有了。那一次的排版他还受到了两个审核老师一致的表扬。总共的话编辑了11个推文，还有一个备注的当两个算，还有一次提供文案，可能是新干事中干得最多的，不详细统计。挺好的，有分赚，而且本来我就有自己的博客，也是编辑发推，能学到很多东西。&lt;/p&gt;
&lt;p&gt;在网信部的工作就是做前端。你看我自己也有网站和博客，所以刚去的时候还是能完成一些小任务。刚还在军训我就被拉去做一个基地预约的项目。只做了两个页面，两个页面后来还被学长给大改了，但还是学了点前后端通信啥的，名字我都忘了。至少学了东西，还有R赚。后来群里说爬山的项目缺人手，带上个项目的学长就把我推荐过去了。这个项目就添加新功能，修了点bug，又创造了点bug，又自己把bug偷偷补回去了。这个项目我大部分就复制粘贴学长们写好的代码就行了，样式、逻辑只要随便找找就能找到现成的，写得不好的第二天还会自动刷新学长的修改和注释，真神奇。按照学长的话来说，他参与开发过上万人使用过的国内顶级高校永久性重要项目，且被多位中国工程院院士使用过并提出过指导意见。&lt;/p&gt;
&lt;p&gt;嗯对我还同时是清华大学所在国家学生，诺贝尔文学奖读者。&lt;/p&gt;
&lt;p&gt;所以以后有机会他要申请团员了，这么多贡献应该能过吧。&lt;/p&gt;
&lt;h1 id=&quot;其他&quot;&gt;其他&lt;/h1&gt;
&lt;p&gt;参加了一次开源鸿蒙技术大会和一次谷歌Dev Fest，收到了deepin的3次还是4次社区小礼物，收到了4个鼠标垫(送走了3个)，翻译并被接纳了两个项目，参与编写了一个Wiki，吹了无数次牛，认识了很多外校的对计算机感兴趣的同学和老师，参加了一次马拉松并跑得很快很快，和以前的高中同学玩了几次游戏，还和整个寝室的同学一起玩了游戏，室友都还挺好，没有传说中的神人，除了未来可能的自己。&lt;br&gt;
刷了很多次电脑手机，这个算扣分项。&lt;br&gt;
被骗了很多次，他不长脑，太容易相信别人了。&lt;br&gt;
敢主动和想要聊天的人聊天了，唉。&lt;br&gt;
买了个主板然后高估自己了。&lt;br&gt;
报了健身房然后没有坚持下去。还好报的是今年的，还有11个月。&lt;br&gt;
给下学期的自己留了好多好多的事要做，报了英语口语班，弄了健身房，找了导师，报了计算机考试，报了英语竞赛，还要报6级，4级没过的话还要4级，期末没过的话还要补考，唉。还选了两个公选课。真想累死下学期的他。但上个学期他又啥都没干，啥都没学。他可真坏。&lt;br&gt;
期末那几天突然沉迷终末地了，这游戏好玩，继续玩。&lt;br&gt;
最后在QQ和微信去重一共添加了70个好友左右。当然对于其他人来说肯定不多，但他来说足够甚至过剩了。但也挺好，多几个好友没啥坏处。&lt;/p&gt;
&lt;h1 id=&quot;总结&quot;&gt;总结&lt;/h1&gt;
&lt;p&gt;这时候我该翻阅我的日记本，然后根据之前的总结来写一段精简的总结了。但很可惜本子没带。但很有幸我记得每学期我的总结都写的什么：&lt;br&gt;
&lt;strong&gt;这学期啥也没干&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;这学期啥也没干&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;…&lt;/strong&gt;&lt;br&gt;
所以按照模板，这学期的总结也如下：&lt;br&gt;
&lt;strong&gt;这学期啥也没干&lt;/strong&gt;&lt;/p&gt;</content:encoded></item><item><title>分享一个kde的仿Deepin窗口装饰</title><link>https://blog.skyshadow.fun/posts/35/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/35/</guid><description>分享kde仿Deepin的aurorae窗口装饰和利用Klassy实现的更优雅的窗口装饰器</description><pubDate>Wed, 21 Jan 2026 23:13:30 GMT</pubDate><content:encoded>&lt;h1 id=&quot;分享一个kde的仿deepin窗口装饰&quot;&gt;分享一个kde的仿Deepin窗口装饰&lt;/h1&gt;
&lt;h2 id=&quot;预览&quot;&gt;预览&lt;/h2&gt;
&lt;h3 id=&quot;aurorae版&quot;&gt;aurorae版&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2026/01/12/yuv5fMj1lJRQDoP.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;aurorae.png&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2026/01/12/yuv5fMj1lJRQDoP.png&quot; alt=&quot;aurorae.png&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;klassy版&quot;&gt;klassy版&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://files.seeusercontent.com/2026/04/19/c3dH/pasted-image-1776607261465.webp&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;klassy.webp&quot;&gt;&lt;img src=&quot;https://files.seeusercontent.com/2026/04/19/c3dH/pasted-image-1776607261465.webp&quot; alt=&quot;klassy.webp&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;aurorae版本预览不推荐有动画bug&quot;&gt;Aurorae版本预览(不推荐，有动画bug)&lt;/h2&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 克隆仓库&amp;#x26;进入文件夹&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; git@github.com:SkyShadowHero/skyshadow-aurorae-theme.git&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; skyshadow-aurorae-theme&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 复制主题到用户主题目录&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;cp&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; -r&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; ./deepin-like-light&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; ~/.local/share/aurorae/themes/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后在 &lt;strong&gt;设置&lt;/strong&gt; - &lt;strong&gt;颜色和主题&lt;/strong&gt; - &lt;strong&gt;窗口装饰元素&lt;/strong&gt; 里选择对应的主题。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;{warning}目前主题底部圆角异常，尝试修复后纯黑窗口可能有白底，所以目前请搭配圆角插件使用，如&lt;a href=&quot;https://github.com/matinlotfali/KDE-Rounded-Corners&quot;&gt;KDE-Rounded-Corners&lt;/a&gt;，我想为了视觉统一应该会使用的这个的吧。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;klassy版本&quot;&gt;Klassy版本&lt;/h2&gt;
&lt;p&gt;先安装klassy
到&lt;a href=&quot;https://software.opensuse.org/download.html?project=home%3Apaulmcauley&amp;#x26;package=klassy&quot;&gt;这个网页&lt;/a&gt;选择发行版并安装，如果是arch的话直接&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;yay/paru&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; -S&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; klassy&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即可&lt;br&gt;
在&lt;a href=&quot;https://github.com/paulmcauley/klassy/discussions/102#discussioncomment-15727012&quot;&gt;这里&lt;/a&gt;下载DeepinExp Klassy主题
然后同样在 &lt;strong&gt;设置&lt;/strong&gt; - &lt;strong&gt;颜色和主题&lt;/strong&gt; - &lt;strong&gt;窗口装饰元素&lt;/strong&gt; 里面选择 &lt;strong&gt;Klassy&lt;/strong&gt;&lt;br&gt;
再在klassy设置里点击右上角 &lt;strong&gt;Presents&lt;/strong&gt; - &lt;strong&gt;add&lt;/strong&gt; - &lt;strong&gt;import from file&lt;/strong&gt;，然后选择下载好的文件并应用即可&lt;/p&gt;
&lt;h2 id=&quot;闲话&quot;&gt;闲话&lt;/h2&gt;
&lt;p&gt;之前不小心从Deepin转到Kubuntu，发现KDE的主题商店中窗口装饰风格大多模仿macOS或Windows，或是暗色、复古等设计，不太符合个人偏好👀。&lt;/p&gt;
&lt;p&gt;所以根据已经习惯的deepin风格改了下&lt;a href=&quot;https://github.com/yeyushengfan258/Win11OS-kde/tree/main/aurorae/Win11OS-light&quot;&gt;Win11OS-light&lt;/a&gt;的窗口装饰器，预览如上图所示。&lt;/p&gt;
&lt;h2 id=&quot;后言&quot;&gt;后言&lt;/h2&gt;
&lt;p&gt;这个主题目前自用，所以只做了亮色和亮色半透明(可添加模糊)主题，如有需要可以添加暗色的。&lt;br&gt;
该项目由&lt;a href=&quot;https://github.com/yeyushengfan258/Win11OS-kde&quot;&gt;Win11OS-kde&lt;/a&gt;修改，同样遵循GPL v3 协议。&lt;br&gt;
放在&lt;a href=&quot;https://github.com/SkyShadowHero/skyshadow-aurorae-theme&quot;&gt;Github&lt;/a&gt;上了。&lt;/p&gt;</content:encoded></item><item><title>分享一个Linux上的我的世界样式桌面物品栏</title><link>https://blog.skyshadow.fun/posts/34/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/34/</guid><description>一个Linux上的我的世界样式桌面物品栏，可以把.desktop文件拖放上去，并实现点击运行等基本功能，使用pyqt5制作</description><pubDate>Sat, 15 Nov 2025 23:11:30 GMT</pubDate><content:encoded>&lt;h1 id=&quot;分享一个我的世界物品栏桌面组件&quot;&gt;分享一个我的世界物品栏桌面组件&lt;/h1&gt;
&lt;p&gt;使用pyqt5制作，仅在deepin25上测试&lt;br&gt;
因为看隔壁Windows系统上都有我的世界物品栏桌面小部件，而我们deepin却吃不到，所以就想办法自己做一个&lt;br&gt;
当然实力不行，大部分是由llm完成的，等以后学得更多了再自己重新写一遍。&lt;/p&gt;
&lt;h2 id=&quot;图片预览&quot;&gt;图片预览&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2025/11/15/2mhTAfZprwD6qEd.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;view.png&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/11/15/2mhTAfZprwD6qEd.png&quot; alt=&quot;view.png&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;已实现功能&quot;&gt;已实现功能&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;拖拽Desktop文件到物品栏格子中&lt;/li&gt;
&lt;li&gt;右键编辑格子（右键菜单为我的世界书的样式）&lt;/li&gt;
&lt;li&gt;设置大小缩放和窗口位置固定&lt;/li&gt;
&lt;li&gt;设置窗口置于底层，置于顶层或正常窗口（置于底层时就跟桌面小部件一样了）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;一些操作逻辑&quot;&gt;一些操作逻辑&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;拽桌面上的应用图标&lt;/strong&gt;（即.desktop文件）到格子里即可将应用放到物品栏里&lt;br&gt;
&lt;strong&gt;右键有物品的格子&lt;/strong&gt;打开右键菜单，可以启动应用，从物品栏移除和设置，退出等&lt;br&gt;
&lt;strong&gt;此物品栏设置&lt;/strong&gt;里可以更改名称和图标路径&lt;br&gt;
&lt;strong&gt;总设置&lt;/strong&gt;里可以选择窗口固定和设置窗口缩放&lt;br&gt;
&lt;strong&gt;右键空格子&lt;/strong&gt;也同理，只是没有启动应用和此物品栏设置&lt;br&gt;
然后可点击格子边的框拖拽窗口移动位置。&lt;/p&gt;
&lt;p&gt;格子的配置在.config/desktophotbar/config.json里，也可以手动改改每个格子的配置和窗口位置&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2025/11/15/GHJUDIz5qtVaOnM.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;image.png&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/11/15/GHJUDIz5qtVaOnM.png&quot; alt=&quot;image.png&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;启动方式&quot;&gt;启动方式&lt;/h2&gt;
&lt;p&gt;建议使用python启动&lt;br&gt;
在shell里输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 克隆仓库&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; git@github.com:SkyShadowHero/DesktopHotbar.git&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 创建python虚拟环境&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;python&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; -m&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; venv&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; venv&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 进入虚拟环境(bash,zsh等)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;source&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; ./venv/bin/activate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 进入虚拟环境(fish)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;source&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; ./venv/bin/activate.fish&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 安装pyqt5依赖&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pip&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; pyqt5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 运行程序&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;python&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; main.py&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即可&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;当然无聊也通过pyinstaller打包为了二进制，仅amd64,在&lt;a href=&quot;https://github.com/SkyShadowHero/DesktopHotbar/releases/tag/v0.0.1&quot;&gt;Releases&lt;/a&gt;里，因为打包时要把轮子全打进去，所以内存很大，还是python启动实在。&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>分享一个mcp应用，可以让你的大模型生成python代码并自动执行</title><link>https://blog.skyshadow.fun/posts/33/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/33/</guid><description>分享一个mcp应用，能够根据命令生成python代码，并自动进入环境、安装依赖和运行代码</description><pubDate>Fri, 26 Sep 2025 23:50:30 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;h2 id=&quot;前前言&quot;&gt;前前言&lt;/h2&gt;
&lt;p&gt;见帖子&lt;a href=&quot;./28&quot;&gt;分享一个python做的MCP应用&lt;/a&gt;
在deepin论坛发现UOS AI最近集成了MCP,然后还有个MCP场景大发现活动,就试了试,万一赢了个小鼠标呢。&lt;br&gt;
所以就找llm帮忙做了一个mcp应用，调用本地ollama的(现在也可以用在线api了)。&lt;/p&gt;
&lt;h2 id=&quot;真前言&quot;&gt;真前言&lt;/h2&gt;
&lt;p&gt;上次这个活动也是成功拿到了二等奖，有很多奖品，就顺便更新并整理到了Github上&lt;br&gt;
链接🔗：&lt;a href=&quot;https://github.com/SkyShadowHero/McpCoderRunner&quot;&gt;GitHub&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;简介&quot;&gt;简介&lt;/h1&gt;
&lt;p&gt;一个用python做的mcp应用，会根据用户输入的内容执行以下操作：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;发送要求—&gt;mcp把要求发给大模型(ollama或api)—&gt;生成python代码以实现这个功能—&gt;安装相应依赖—&gt;自动执行。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;目前支持ollama和在线api&lt;/li&gt;
&lt;li&gt;添加linux上快速初始化脚本（方便UOS AI和其他客户端应用用户导入）&lt;/li&gt;
&lt;li&gt;完善依赖安装&lt;/li&gt;
&lt;li&gt;细化执行步骤&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;linux使用方法&quot;&gt;Linux使用方法&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;请前往README查看详细方法，这里只分享linux上简单的使用方法&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 克隆项目&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; https://github.com/SkyShadowHero/McpCoderRunner.git&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; McpCoderRunner&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 运行脚本&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;./first_launch.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后它会弹出 &lt;strong&gt;import_mcp.json&lt;/strong&gt; 和 &lt;strong&gt;mcp_config.json&lt;/strong&gt; 两个文本&lt;br&gt;
前者里的内容直接复制到支持导入mcp服务的客户端里里导入即可，后者里可以配置模型，如ollama或在线api，&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;# 使用ollama示例:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;&quot;llm_config&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;&quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;deepseek-coder-v2:16b&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;&quot;base_url&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;http://127.0.0.1:11434&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;&quot;api_key&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;ollama&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;​&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;# 使用在线 API (如 DeepSeek )示例:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;    &quot;llm_config&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;        &quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;deepseek-chat&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;        &quot;base_url&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;https://api.deepseek.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;        &quot;api_key&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;sk-xxxxxxxxxxxxxxxxxxxx&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;建议使用deepseek-coder、qwen3-coder等模型&lt;/p&gt;
&lt;h1 id=&quot;简单演示&quot;&gt;简单演示&lt;/h1&gt;
&lt;p&gt;获取bing今日美图（使用UOS AI演示，已倍数）&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2025/09/27/DefXyHxcZ3sAJVW.gif&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;GIFSpeed.gif&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/09/27/DefXyHxcZ3sAJVW.gif&quot; alt=&quot;GIFSpeed.gif&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;最后还是希望在github里点个star&lt;/p&gt;</content:encoded></item><item><title>在deepin上(x11)使用waydroid来运行安卓arm64的应用</title><link>https://blog.skyshadow.fun/posts/32/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/32/</guid><description>分享一下怎么在deepin上(x11)使用waydroid创建安卓子系统以运行arm64的安卓应用</description><pubDate>Sat, 16 Aug 2025 18:06:21 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;分享一下怎么在deepin上(x11)使用waydroid来运行安卓的应用，星火商店里的waydroid运行工具自己用不来，所以是找了很多网上的方法整合出的。&lt;br&gt;
仅支持Intel，amd的我没有所以没法试，nvidia的也试不了&lt;br&gt;
可能有误，欢迎指出&lt;/p&gt;
&lt;h1 id=&quot;运行方法&quot;&gt;运行方法&lt;/h1&gt;
&lt;h2 id=&quot;1-安装waydroid&quot;&gt;1 安装WayDroid&lt;/h2&gt;
&lt;p&gt;Deepin可直接shell输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; waydroid&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其他debian系的参考&lt;a href=&quot;https://docs.waydro.id/usage/install-on-desktops&quot;&gt;这里&lt;/a&gt;的 &lt;strong&gt;Ubuntu/Debian and derivatives&lt;/strong&gt; 一栏&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;安装依赖&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;sudo apt install curl ca-certificates -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;添加源&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;curl -s https://repo.waydro.id | sudo bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;安装WayDroid&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;sudo apt install waydroid -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;15-先简单配置waydroid&quot;&gt;1.5 先简单配置WayDroid&lt;/h1&gt;
&lt;p&gt;shell里输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; waydroid&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; init&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;2-安装weston用来在x11上运行waydroid&quot;&gt;2 安装Weston（用来在x11上运行WayDroid）&lt;/h1&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; weston&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;25-简单配置weston&quot;&gt;2.5 简单配置Weston&lt;/h1&gt;
&lt;p&gt;在~/.config目录里新建一个 &lt;strong&gt;weston.ini&lt;/strong&gt; 文件&lt;br&gt;
里面写上需要的配置，可以去bing搜搜，我这里只写了窗口大小，还可以设置一些scale之类的，虽然没必要，因为安卓子系统似乎缩放会正常&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ini&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;[output]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=X1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;mode&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=600x1200&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;3-arm64转译安装&quot;&gt;3 arm64转译安装&lt;/h1&gt;
&lt;p&gt;这个应该有更简单的方法，但我使用的&lt;a href=&quot;https://github.com/casualsnek/waydroid_script&quot;&gt;waydroid_script&lt;/a&gt;,前往它的github按照readme弄好后，运行&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; venv/bin/python3&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; main.py&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在里面选择&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Android 13（目前WayDroid用的是安卓13）&lt;/li&gt;
&lt;li&gt;Install&lt;/li&gt;
&lt;li&gt;libhoudini（这个是Intel 的ARM 二进制转译器）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;然后等待它安装完成即可&lt;/p&gt;
&lt;h1 id=&quot;4启动脚本编写&quot;&gt;4.启动脚本编写&lt;/h1&gt;
&lt;p&gt;这时候其实就已经可以终端输入weston后再在weston里的终端输入waydroid show-full-ui来运行一个安装子系统了，但懒人不想输入这么多，所以从&lt;a href=&quot;https://github.com/1999AZZAR/use-waydroid-on-x11?tab=readme-ov-file#launching-waydroid&quot;&gt;use-waydroid-on-x11&lt;/a&gt;偷了一个sh脚本,随便创建一个sh文件，输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;weston&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; --xwayland&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;WESTON_PID&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;$!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; WAYLAND_DISPLAY&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;wayland-1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sleep&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;waydroid&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; show-full-ui&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;WAYDROID_PID&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;$!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;trap&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;waydroid session stop; kill &lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;$WESTON_PID&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;; kill &lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;$WAYDROID_PID&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; EXIT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;wait&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; $WESTON_PID&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;，然后就可以双击这个sh文件来快捷打开waydroid安卓子系统了&lt;br&gt;
当然可以放个桌面快捷方式，这个大家自己写&lt;/p&gt;
&lt;h1 id=&quot;5-运行&quot;&gt;5 运行&lt;/h1&gt;
&lt;p&gt;运行就看自己的了，我就用它白嫖酷狗音乐概念版vip听歌，听歌是正常的&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2025/08/16/ipTUxd31CGj8sL7.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;_deepin-terminal_20250816180201.png&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/08/16/ipTUxd31CGj8sL7.png&quot; alt=&quot;_deepin-terminal_20250816180201.png&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;6-一些tips&quot;&gt;6 一些tips&lt;/h1&gt;
&lt;p&gt;WayDroid安卓子系统的内部目录在 &lt;strong&gt;.local/share/waydroid/data/media/0&lt;/strong&gt;/ 里，以管理员身份打开&lt;br&gt;
其他更高阶的用法和配置可以去WayDroid或Weston相关网站看看&lt;br&gt;
因为是x11,所以有一些小问题，比如无法使用剪切板&lt;br&gt;
输入法的话请自行下载Fcitx5 for Android（小企鹅）或者安装Google套件后使用Gboard，不然好像无法输入中文&lt;br&gt;
懒的话其实可以直接用&lt;a href=&quot;https://github.com/1999AZZAR/use-waydroid-on-x11?tab=readme-ov-file#launching-waydroid&quot;&gt;use-waydroid-on-x11&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Linux上使用fcitx5+rime+雾凇词库和一些双拼配置</title><link>https://blog.skyshadow.fun/posts/31/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/31/</guid><description>Linux上使用fcitx5-rime（中州韵输入法）,同时分享小鹤双拼模糊音，首字母简拼的配置</description><pubDate>Thu, 14 Aug 2025 15:49:22 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;在一个灵车群看到有人争论说一个输入法没有云拼音就没法用，就有人回复说他用fcitx5+rime+雾凇词库挺好的，所以我也去试了试
使用Deepin做演示，输入法为雾凇词库自带的小鹤双拼&lt;/p&gt;
&lt;h1 id=&quot;安装fcitx5&quot;&gt;安装fcitx5&lt;/h1&gt;
&lt;p&gt;deepin默认自带fcitx5,所以无需其他操作来安装，如果是其他没有fcitx5的系统的话，可以查看&lt;a href=&quot;https://fcitx-im.org/wiki/Install_Fcitx_5&quot;&gt;官方wiki&lt;/a&gt;或&lt;a href=&quot;https://zhuanlan.zhihu.com/p/508797663&quot;&gt;知乎教程&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;安装fcitx5-rime&quot;&gt;安装fcitx5-rime&lt;/h1&gt;
&lt;p&gt;shell里输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; fcitx5-rime&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;后重启电脑即可&lt;/p&gt;
&lt;h1 id=&quot;安装雾凇词库&quot;&gt;安装雾凇词库&lt;/h1&gt;
&lt;p&gt;前往&lt;a href=&quot;https://github.com/iDvel/rime-ice&quot;&gt;Github&lt;/a&gt;，安装readme说的做，因为我后面会使用github来备份我的配置和词库，所以就是手动安装的方法，即将仓库打包下载，将所有文件复制粘贴到 RIME 前端的配置目录，重新部署。
RIME配置目录在linux上位于&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;.local/share/fcitx5/rime&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;一些小鹤双拼的配置&quot;&gt;一些小鹤双拼的配置&lt;/h1&gt;
&lt;p&gt;因为我不会使用git来更新，所以没有使用打补丁的方式，如有需求，可以按照&lt;a href=&quot;https://dvel.me/posts/rime-ice/#%E4%BB%A5-patch-%E7%9A%84%E6%96%B9%E5%BC%8F%E6%89%93%E8%A1%A5%E4%B8%81&quot;&gt;这里&lt;/a&gt;的方法进行打补丁&lt;/p&gt;
&lt;h2 id=&quot;双拼模糊音&quot;&gt;双拼模糊音&lt;/h2&gt;
&lt;p&gt;在 &lt;strong&gt;double_pinyin_flypy.schema.yaml&lt;/strong&gt; 文件里的 &lt;strong&gt;speller/algebra:&lt;/strong&gt; 里加上&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;derive/([ei])n$/$1ng/&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;            # en =&gt; eng, in =&gt; ing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;derive/([ei])ng$/$1n/&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;            # eng =&gt; en, ing =&gt; in&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;derive/^([zcs])h/$1/&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;             # zh, ch, sh =&gt; z, c, s&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即可，但要注意这三行要放在 &lt;strong&gt;- xform&lt;/strong&gt; 行的前面才行&lt;/p&gt;
&lt;h2 id=&quot;双拼启用首字母简拼&quot;&gt;双拼启用首字母简拼&lt;/h2&gt;
&lt;p&gt;同样在speller/algebra:里加上&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;abbrev/^([a-z]).+$/$1/&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;        # 简拼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;abbrev/^([zcs]h).+$/$1/&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;       # zh,ch,sh等模糊音简拼&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即可，放在最后&lt;br&gt;
我的拼写设定就修改为了&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 拼写设定&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;speller&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  # 如果不想让什么标点直接上屏，可以加在 alphabet，或者编辑标点符号为两个及以上的映射&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;  alphabet&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  # initials 定义仅作为始码的按键，排除 ` 让单个的 ` 可以直接上屏&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;  initials&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;  delimiter&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot; &apos;&quot;&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  # 第一位&amp;#x3C;空格&gt;是拼音之间的分隔符；第二位&amp;#x3C;&apos;&gt;表示可以手动输入单引号来分割拼音。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;  algebra&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;erase/^xx$/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;derive/^([jqxy])u$/$1v/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;derive/^([aoe])([ioun])$/$1$1$2/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;derive/([ei])n$/$1ng/&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;            # en =&gt; eng, in =&gt; ing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;derive/([ei])ng$/$1n/&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;            # eng =&gt; en, ing =&gt; in&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;derive/^([zcs])h/$1/&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;             # zh, ch, sh =&gt; z, c, s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;derive/^([zcs])([^h])/$1h$2/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/^([aoe])(ng)?$/$1$1$2/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/iu$/Ⓠ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)ei$/$1Ⓦ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/uan$/Ⓡ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/[uv]e$/Ⓣ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/un$/Ⓨ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/^sh/Ⓤ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/^ch/Ⓘ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/^zh/Ⓥ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/uo$/Ⓞ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/ie$/Ⓟ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)i?ong$/$1Ⓢ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/ing$|uai$/Ⓚ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)ai$/$1Ⓓ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)en$/$1Ⓕ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)eng$/$1Ⓖ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/[iu]ang$/Ⓛ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)ang$/$1Ⓗ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/ian$/Ⓜ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)an$/$1Ⓙ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)ou$/$1Ⓩ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/[iu]a$/Ⓧ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/iao$/Ⓝ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)ao$/$1Ⓒ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/ui$/Ⓥ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/in$/Ⓑ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xlit/ⓆⓌⓇⓉⓎⓊⒾⓄⓅⓈⒹⒻⒼⒽⒿⓀⓁⓏⓍⒸⓋⒷⓃⓂ/qwrtyuiopsdfghjklzxcvbnm/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;abbrev/^([a-z]).+$/$1/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;abbrev/^([zcs]h).+$/$1/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;输入时显示双拼编码而不展开&quot;&gt;输入时显示双拼编码而不展开&lt;/h2&gt;
&lt;p&gt;把 &lt;strong&gt;translator/preedit_format:&lt;/strong&gt; 下的内容全部删掉即可&lt;/p&gt;
&lt;h1 id=&quot;最后我使用的patch方案&quot;&gt;最后我使用的patch方案&lt;/h1&gt;
&lt;p&gt;在 &lt;strong&gt;double_pinyin_flypy.custom.yaml&lt;/strong&gt; 里写上&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# double_pinyin_flypy.custom.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 小鹤双拼自定义配置补丁&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;patch&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;  speller/algebra&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;erase/^xx$/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;derive/^([jqxy])u$/$1v/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;derive/^([aoe])([ioun])$/$1$1$2/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;derive/([ei])n$/$1ng/&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;            # en =&gt; eng, in =&gt; ing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;derive/([ei])ng$/$1n/&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;            # eng =&gt; en, ing =&gt; in&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;derive/^([zcs])h/$1/&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;             # zh, ch, sh =&gt; z, c, s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;derive/^([zcs])([^h])/$1h$2/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/^([aoe])(ng)?$/$1$1$2/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/iu$/Ⓠ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)ei$/$1Ⓦ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/uan$/Ⓡ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/[uv]e$/Ⓣ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/un$/Ⓨ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/^sh/Ⓤ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/^ch/Ⓘ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/^zh/Ⓥ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/uo$/Ⓞ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/ie$/Ⓟ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)i?ong$/$1Ⓢ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/ing$|uai$/Ⓚ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)ai$/$1Ⓓ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)en$/$1Ⓕ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)eng$/$1Ⓖ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/[iu]ang$/Ⓛ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)ang$/$1Ⓗ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/ian$/Ⓜ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)an$/$1Ⓙ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)ou$/$1Ⓩ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/[iu]a$/Ⓧ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/iao$/Ⓝ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/(.)ao$/$1Ⓒ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/ui$/Ⓥ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xform/in$/Ⓑ/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;xlit/ⓆⓌⓇⓉⓎⓊⒾⓄⓅⓈⒹⒻⒼⒽⒿⓀⓁⓏⓍⒸⓋⒷⓃⓂ/qwrtyuiopsdfghjklzxcvbnm/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;abbrev/^([a-z]).+$/$1/&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;        # 简拼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;abbrev/^([zcs]h).+$/$1/&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;       # zh,ch,sh等模糊音简拼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  # 输入时显示双拼编码而不展开&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;  translator/preedit_format&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: {}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;其他&quot;&gt;其他&lt;/h1&gt;
&lt;p&gt;如果想使用小鹤音形输入的话，可以去&lt;a href=&quot;https://github.com/kchen0x/rime-crane&quot;&gt;凇鹤拼音Github&lt;/a&gt;看看&lt;/p&gt;</content:encoded></item><item><title>简单修改Linux的默认emoji</title><link>https://blog.skyshadow.fun/posts/30/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/30/</guid><description>分享修改Linux上的默认emoji为鸿蒙，ios等的emoji，因为默认noto的太唐了</description><pubDate>Wed, 13 Aug 2025 11:08:43 GMT</pubDate><content:encoded>&lt;h1 id=&quot;先看看不同emoji的样式&quot;&gt;先看看不同emoji的样式&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;图一是Noto的，linux和大部分安卓系统自带emoji&lt;/li&gt;
&lt;li&gt;图二是HMOS的，华为鸿蒙的所有系统自带emoji&lt;/li&gt;
&lt;li&gt;图三是IOS的，苹果设备自带emoji&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2025/08/14/4zDCsLOHxMRNdkP.webp&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;Noto Emoji 样式&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/08/14/4zDCsLOHxMRNdkP.webp&quot; alt=&quot;Noto Emoji 样式&quot;&gt;&lt;/a&gt;
&lt;a href=&quot;https://s2.loli.net/2025/08/14/ZfvpOdXyoxA1DE9.webp&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;鸿蒙 Emoji 样式&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/08/14/ZfvpOdXyoxA1DE9.webp&quot; alt=&quot;鸿蒙 Emoji 样式&quot;&gt;&lt;/a&gt;
&lt;a href=&quot;https://s2.loli.net/2025/08/14/T5FeojAgSd9VNB2.webp&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;iOS Emoji 样式&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/08/14/T5FeojAgSd9VNB2.webp&quot; alt=&quot;iOS Emoji 样式&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;怎么修改呢&quot;&gt;怎么修改呢&lt;/h1&gt;
&lt;h2 id=&quot;简单方法&quot;&gt;简单方法&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;复制替换即可&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果是安卓的话可能还需要magisk模块来实现，但是linux可就简单多了，下载相应emoji的ttf字体后，重命名 &lt;strong&gt;NotoColorEmoji&lt;/strong&gt; ，然后复制到 /usr/share/fonts/truetype/noto 里即能完成emoji的切换
但这个方法简单，也有不足，emoji覆盖不全&lt;/p&gt;
&lt;h2 id=&quot;复杂方法&quot;&gt;复杂方法&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;修改linux的配置&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;修改配置&quot;&gt;修改配置&lt;/h3&gt;
&lt;p&gt;前往 &lt;strong&gt;.config/fontconfig/conf.d&lt;/strong&gt; 文件夹添加 &lt;strong&gt;01-hmos-emoji.conf&lt;/strong&gt;&lt;br&gt;
在 &lt;strong&gt;01-hmos-emoji.conf&lt;/strong&gt; 文件里输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;?&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;xml&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; version&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;1.0&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;?&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;!&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;DOCTYPE&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; fontconfig&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; SYSTEM&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;fonts.dtd&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;fontconfig&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;    &amp;#x3C;!-- 1. 将常见的emoji字体别名指向HMOS --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; binding&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;strong&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;Apple Color Emoji&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;prefer&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;HMOS Color Emoji&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;prefer&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; binding&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;strong&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;Segoe UI Emoji&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;prefer&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;HMOS Color Emoji&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;prefer&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; binding&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;strong&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;Noto Color Emoji&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;prefer&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;HMOS Color Emoji&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;prefer&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; binding&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;strong&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;emoji&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;prefer&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;HMOS Color Emoji&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;prefer&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;    &amp;#x3C;!-- 2. 针对所有字体匹配，添加HMOS到字体列表 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; target&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;pattern&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; name&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;family&quot;&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; compare&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;eq&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;sans-serif&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;edit&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; name&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;family&quot;&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; mode&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;prepend&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;HMOS Color Emoji&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;edit&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; target&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;pattern&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; name&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;family&quot;&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; compare&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;eq&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;serif&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;edit&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; name&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;family&quot;&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; mode&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;prepend&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;HMOS Color Emoji&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;edit&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; target&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;pattern&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; name&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;family&quot;&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; compare&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;eq&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;monospace&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;edit&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; name&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;family&quot;&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; mode&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;prepend&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;HMOS Color Emoji&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;edit&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt;fontconfig&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;如果想要系统级而不是用户级的话就把这个文件添加到 &lt;strong&gt;/etc/fonts/conf.d/&lt;/strong&gt; 里。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;将字体添加进系统字体&quot;&gt;将字体添加进系统字体&lt;/h3&gt;
&lt;p&gt;进入 &lt;strong&gt;/usr/share/fonts/truetype&lt;/strong&gt; 文件，创建一个 &lt;strong&gt;hmos&lt;/strong&gt; 文件夹，然后把HMOSColorEmojiCompat.ttf文件放进去即可&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;诶或许可以直接安装字体就行了👀。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;刷新字体缓存&quot;&gt;刷新字体缓存&lt;/h3&gt;
&lt;p&gt;shell里输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; fc-cache&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; -v&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;刷新缓存，然后重启电脑
可以通过以下命令检验字体是否被系统正确识别&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;fc-list&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;HMOS&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我的输出为&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;SkyShadowHero@SkyShadowHero-Deepin&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; ~/Deskto&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; fc-list&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;HMOS&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                                           &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;/usr/share/fonts/truetype/hmos/HMOSColorEmojiCompat.ttf:&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; HMOS&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; Color&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; Emoji:style=Regular&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;/home/SkyShadowHero/.local/share/fonts/HMOS&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; Color&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; Emoji/HMOSColorEmojiCompat.ttf:&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; HMOS&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; Color&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; Emoji:style=Regular&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即代表已成功识别&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;后言&quot;&gt;后言&lt;/h1&gt;
&lt;p&gt;其他的emoji字体也应该可以通过同样的方法替换，顺便分享一下HMOSColorEmojiCompat.ttf文件，&lt;del&gt;这是以前刷手机时，从一个鸿蒙的系统包里拆出来的
&lt;a href=&quot;https://www.123912.com/s/GeiFjv-e7vEh&quot;&gt;123云盘链接🔗&lt;/a&gt; 提取码:eQNA&lt;/del&gt;&lt;br&gt;
又从DevCo里面的镜像里提取了最新鸿蒙6的ttf字体出来,似乎是emoji unicode15.1的，&lt;a href=&quot;https://www.123865.com/s/GeiFjv-nxhEh?pwd=CtKW&quot;&gt;123云盘链接🔗&lt;/a&gt; 提取码:CtKW&lt;/p&gt;
&lt;h2 id=&quot;后后言&quot;&gt;后后言&lt;/h2&gt;
&lt;p&gt;&lt;del&gt;为了这个封面图，找不到好用明了的字体管理器，我甚至找llm用pyqt5重新做了一个，好神奇&lt;/del&gt;&lt;br&gt;
字体预览器&lt;a href=&quot;https://github.com/SkyShadowHero/AFontViewer&quot;&gt;Github仓库地址&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>此博客已转移至新Astro博客中</title><link>https://blog.skyshadow.fun/posts/29/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/29/</guid><description>简单分享一下这个博客从最开始的z-blog和hexo到现在astro的事</description><pubDate>Fri, 08 Aug 2025 09:14:43 GMT</pubDate><content:encoded>&lt;h1 id=&quot;先说说为什么会出现这个博客&quot;&gt;先说说为什么会出现这个博客&lt;/h1&gt;
&lt;p&gt;这个博客是hexo+butterfly和自己的一点美化做出来的，具体时间已经忘了，但翻看和一位同学的聊天记录，至少是在2022/10/28以前，也就是刚步入高中的时候&lt;/p&gt;
&lt;p&gt;当时高中会提前在暑假时军训，就认识了很多新同学，其中床对面的室友自我介绍说他是个计算机爱好者，恰巧我也喜欢玩电脑。&lt;br&gt;
高一也喜欢炫耀和分享，那位同学在那个暑假用z-blog做了自己的博客，而我用namelessmc做了一个神奇的论坛 &lt;del&gt;现在觉得自己想法太神奇了&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;独乐乐不如众乐乐，那位同学跟我说了论坛国内要申请什么什么的，做博客有多好多好的，所以后来我也用z-blog做了博客&lt;br&gt;
虽然我发现自己的博客和别人的有点不一样&lt;br&gt;
但一会就开学了，开学有个入学考试，考完后，额就放假了(因为疫情)&lt;br&gt;
这次放假放了一个月左右，在家也是干些无聊的（主要当时电脑差，玩游戏玩不了，前台挂个网课，后台真的什么都做不了）&lt;br&gt;
还是那句高一喜欢炫耀和分享，我在Q群里挺活跃，也喜欢把自己的博客给其他人看，当时还是z-blog&lt;br&gt;
&lt;del&gt;返校了还有人开心地问我啊你是不是群里的天影大侠呢&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;最后发现不一样的原因是我看到的那些博客好多都用的hexo&lt;br&gt;
当时看着什么nodejs,什么git还是觉得挺难&lt;br&gt;
但之前的z-blog用的都是很神奇的免费域名，什么.is.best，什么.gal，都是不知哪免费弄的，看到托管到github上有.github.io这个二级域名，挺想弄过去的&lt;/p&gt;
&lt;p&gt;所以高一应该就转到hexo+butterfly了，但肯定不早，因为我在一次运动会上用班上破电脑把我的网站给上面那位同学看，因为用的二级域名不安全所以跳到了一个神奇的网站 &lt;del&gt;可太神奇了&lt;/del&gt;&lt;br&gt;
不久后在github上还是嫖到了.is-cool.dev这个安全正常的二级域名，用在了我的hexo博客上&lt;br&gt;
以前博客有啥加啥，雪花特效，彩带背景，振动特效，烟花特效，访问地图，等等，看起来挺花的，内容的话就没有什么东西了，都是些没有用的。&lt;/p&gt;
&lt;p&gt;后来在高一高二慢慢删减修改成了现在的样子&lt;br&gt;
链接: &lt;a href=&quot;https://skyshadowhero.is-cool.dev&quot;&gt;天影大侠的小站&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;为什么会转移新博客呢&quot;&gt;为什么会转移新博客呢&lt;/h1&gt;
&lt;p&gt;现在高考结束了&lt;br&gt;
以前用butterfly的时候，就觉得每次要加新东西，都要去改别人的主题，去网上看教程加上别人做过的东西&lt;br&gt;
我想不可能一直这样吧&lt;/p&gt;
&lt;p&gt;而且hexo用起来网站加载速度太慢了，后来嫖了个cdn也很慢。&lt;br&gt;
所以就用astro做了一个，样式按照旧博客来做的用的Tailwindcss。&lt;br&gt;
在重写这个博客之前还用tailwindcss写了个个人主页，&lt;a href=&quot;https:skyshadow.fun&quot;&gt;在互联网留下一个脚印&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;域名是18岁给自己买的.fun域名(当时.top,.xyz那些都被注册了，谁知道现在这个域名这么坑)&lt;/p&gt;
&lt;p&gt;自己写markdown的样式(其实是手误不小心把astro默认的md样式css删了),写我的世界栅栏风格的分割线样式，写虽然丑但是有深度的代码块样式，写大屏和小屏不同的导航栏，写页脚这些，从头到脚都差不多自己编写（当然找了llm帮忙），虽然很乱，但知道哪个功能放在哪个文件，有bug会第一时间责备自己，而不是一个主题或框架的问题。&lt;/p&gt;
&lt;p&gt;现在还有很多没有完成，文章卡片分页(已完成)，最近文章卡片，图片放大查看(已完成)，标签页，分类页等等&lt;br&gt;
但能凑合着用，已经把主站迁移过来了&lt;/p&gt;
&lt;p&gt;链接: &lt;a href=&quot;https://blog.skyshadow.fun&quot;&gt;天影大侠的小站&lt;/a&gt;&lt;br&gt;
旧站也不会删，虽然只有自己会看了&lt;/p&gt;</content:encoded></item><item><title>分享一个python做的MCP应用</title><link>https://blog.skyshadow.fun/posts/28/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/28/</guid><description>分享一个python做的MCP应用，通过mcp+本地ollama来做一个能帮忙生成python代码，进入虚拟环境并自动安装依赖和运行的东西</description><pubDate>Wed, 06 Aug 2025 13:14:43 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;在deepin论坛发现UOS AI最近集成了MCP,然后还有个MCP场景大发现活动，&lt;a href=&quot;https://bbs.deepin.org/post/290282&quot;&gt;地址&lt;/a&gt;,就试了试，万一赢了个小鼠标呢。&lt;br&gt;
所以就找llm帮忙做了一个mcp应用，调用本地ollama的。&lt;/p&gt;
&lt;h1 id=&quot;介绍&quot;&gt;介绍&lt;/h1&gt;
&lt;p&gt;功能很简单，输入需求，如&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;请帮我 xxx&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;然后该mcp应用会实现以下功能&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;调用本地ollama模型来根据xxx生成相应python代码&lt;/li&gt;
&lt;li&gt;创建虚拟环境或使用已创建的虚拟环境&lt;/li&gt;
&lt;li&gt;自动安装依赖或你的llm通过输入 pip install xxx 来帮忙安装依赖&lt;/li&gt;
&lt;li&gt;执行代码，并发出日志&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这样就实现了一个几乎可以帮你完成任何任务的mcp工具！&lt;/p&gt;
&lt;p&gt;运行时会创建一个文件夹放生成的py,同时会使用一个共用的env，deepseek或其他llm在执行命令发现依赖问题时会尝试pip install xxx，把这个指令单独弄了出来识别并执行&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;简单演示&quot;&gt;简单演示&lt;/h1&gt;
&lt;p&gt;图中为Deepseek+UOS AI+这个mcp服务&lt;/p&gt;
&lt;h2 id=&quot;svg图片换色&quot;&gt;svg图片换色&lt;/h2&gt;
&lt;p&gt;把一个蓝色的b站小图标换为粉色&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2025/08/06/HBxj9Kwy3WvbmOg.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;.png&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/08/06/HBxj9Kwy3WvbmOg.png&quot; alt=&quot;.png&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;文字生成&quot;&gt;文字生成&lt;/h2&gt;
&lt;p&gt;在一个文本里生成一些废话&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2025/08/06/O9ELpVshiA8nmWv.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;.png&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/08/06/O9ELpVshiA8nmWv.png&quot; alt=&quot;.png&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;网络功能&quot;&gt;网络功能&lt;/h2&gt;
&lt;p&gt;抓取bing美图到本地&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2025/08/06/gPcVODvZrYUsLRi.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;.png&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/08/06/gPcVODvZrYUsLRi.png&quot; alt=&quot;.png&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;复杂任务&quot;&gt;复杂任务&lt;/h2&gt;
&lt;p&gt;将MiSans字体中的天影大侠提取出来绘制为白色图片并添加黑色边框&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2025/08/06/oONgCixVzvScmql.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;.png&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/08/06/oONgCixVzvScmql.png&quot; alt=&quot;.png&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;当然python有无限的可能&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;代码2025828修改&quot;&gt;代码(2025/8/28修改)&lt;/h1&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; os&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; re&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; sys&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; logging&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; subprocess&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; datetime&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; pathlib &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; typing &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Dict, Any, Optional, Set, Tuple&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 导入 MCP 核心库&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; mcp.server.fastmcp &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; FastMCP, Context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 导入 LangChain 和 Pydantic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; langchain_community.llms &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Ollama&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; pydantic &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; BaseModel, Field&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# --- 全局日志配置 (用于服务本身) ---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 这个 logger 用于记录服务启动、关闭等非任务相关的核心日志&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;global_logger &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; logging.getLogger(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;mcp_service&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; global_logger.handlers:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    global_logger.setLevel(logging.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;INFO&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    handler &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; logging.StreamHandler(sys.stdout)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    formatter &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; logging.Formatter(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%(asctime)s&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; - &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%(name)s&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; - &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%(levelname)s&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; - &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%(message)s&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    handler.setFormatter(formatter)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    global_logger.addHandler(handler)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# --- MCP 服务器定义 ---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;mcp &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; FastMCP(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;SkyShadowHero Task Execution Server&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# --- Pydantic 返回模型 ---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; ExecutionStage&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;BaseModel&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    code_generation: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    dependency_installation: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    execution: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; ExecutionResult&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;BaseModel&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    stages: ExecutionStage&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    code: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    output: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    error: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    work_dir: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    returncode: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;int&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; ServerInfo&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;BaseModel&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    name: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    model: Optional[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    status: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; CommandOutput&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;BaseModel&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    status: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    result: ExecutionResult&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    server: ServerInfo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# --- 配置管理 ---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; MCPConfig&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    _instance &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    config_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Path(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;__file__&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;).parent &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;mcp_config.json&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; __new__&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(cls):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; cls&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._instance &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;            cls&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._instance &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; super&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;__new__&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;cls&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;            cls&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._instance.load_config()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; cls&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._instance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; load_config&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.config_path.exists():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.config &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                &quot;mcpServers&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                    &quot;default&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                        &quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;deepseek-coder-v2:16b&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                        &quot;task_templates&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                            &quot;file_operations&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                                &quot;prompt&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                                    &quot;你是一个顶级的Python自动化专家。你的任务是根据用户的自然语言指令，生成一段完整、健壮、可直接在标准Python环境中执行的脚本。你拥有完全的创作自由，但必须严格遵守以下规范。&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                                    &quot;## 用户指令:&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                                    &quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{task}\n\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                                    &quot;## 代码生成规范 (必须严格遵守):&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                                    &quot;1.  **【代码纯净性】**: 你的输出必须是纯粹的Python代码。绝对禁止包含任何Markdown标记，尤其是 ` ```python ` 和 ` ``` `。&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                                    &quot;2.  **【依赖声明】**: 如果代码需要任何第三方库 (例如 `requests`, `pandas`)，必须在代码的最开始，使用 `# REQUIRE: &amp;#x3C;package_name&gt;` 的格式进行声明。**每个依赖独立一行**。如果不需要任何第三方库，则完全不要写 `# REQUIRE:` 注释。&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                                    &quot;3.  **【日志记录】**: 必须使用Python的 `logging` 模块。在脚本开始处配置好 `basicConfig`，确保日志同时输出到控制台(stdout)和当前工作目录下的 `task.log` 文件。在关键步骤和任何 `except` 块中，都必须使用 `logging.info()` 或 `logging.error()` 进行记录。&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                                    &quot;4.  **【错误处理】**: 所有可能失败的操作都必须被包含在 `try...except Exception as e:` 块中。&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                                    &quot;5.  **【成功信号】**: 在脚本所有操作成功完成的最后，必须调用 `print(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;任务成功完成&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;)`。&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                                    &quot;6.  **【完整性】**: 生成的代码必须是完整的、自包含的，包含所有必要的 `import` 语句。&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                                    &quot;现在，请根据用户指令生成代码。&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                                ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.save_config()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        else&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            with&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.config_path, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;r&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;encoding&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;utf-8&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; f:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;                self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.config &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; json.load(f)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; save_config&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        with&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.config_path, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;w&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;encoding&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;utf-8&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; f:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            json.dump(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.config, f, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;indent&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;ensure_ascii&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;False&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; get_server&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self, name: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) -&gt; Optional[Dict[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, Any]]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.config.get(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;mcpServers&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, {}).get(name)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# --- 【最终修复架构】核心逻辑封装 ---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; TaskWorkflow&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.config &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; MCPConfig().config&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.llm_cache &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.standard_libs &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._get_standard_libs()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        script_dir &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Path(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;__file__&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;).parent.resolve()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.shared_work_dir &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; script_dir &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;mcp_tasks&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.shared_work_dir.mkdir(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;exist_ok&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;正在初始化并检查共享虚拟环境...&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        try&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.venv_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.shared_work_dir &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;venv&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.python_executable, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.pip_executable &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._create_virtual_env(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.venv_path))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;共享虚拟环境已就绪。Python: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.python_executable&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;, Pip: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.pip_executable&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        except&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; Exception&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; e:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            global_logger.error(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;初始化共享虚拟环境失败: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;exc_info&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            raise&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; RuntimeError&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;无法创建或验证共享虚拟环境，服务无法启动。错误: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; _get_standard_libs&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self) -&gt; Set[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        common_libs &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;os&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;sys&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;json&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;re&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;logging&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;subprocess&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;pathlib&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;datetime&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;time&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;math&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;random&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;collections&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;itertools&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;functools&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;glob&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;shutil&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;tempfile&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;argparse&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;typing&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;__future__&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; sys.version_info &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            try&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                from&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; sys &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; stdlib_module_names&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                return&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; set&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(stdlib_module_names)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            except&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; ImportError&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; common_libs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; common_libs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    async&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; get_llm&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self, model_name: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) -&gt; Ollama:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; model_name &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.llm_cache:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;正在加载模型: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;model_name&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.llm_cache[model_name] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Ollama(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;model&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;model_name, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;temperature&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;top_p&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.9&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;timeout&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;300&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.llm_cache[model_name]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; _create_virtual_env&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self, venv_path_str: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) -&gt; Tuple[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        venv_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Path(venv_path_str)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; sys.platform &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;win32&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            python_exe &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; venv_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;Scripts&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;python.exe&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            pip_exe &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; venv_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;Scripts&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;pip.exe&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        else&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            python_exe &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; venv_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;bin&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;python&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            pip_exe &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; venv_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;bin&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;pip&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; python_exe.exists() &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; pip_exe.exists():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;共享虚拟环境不完整或不存在，正在创建于: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;venv_path_str&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            try&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                subprocess.run(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                    [sys.executable, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;-m&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;venv&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, venv_path_str],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;                    check&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;capture_output&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;timeout&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;120&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            except&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; subprocess.CalledProcessError &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; e:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                global_logger.error(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;创建虚拟环境失败: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;e.stderr&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                raise&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; RuntimeError&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;创建虚拟环境失败，错误: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;e.stderr&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; python_exe.exists() &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; pip_exe.exists():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;             raise&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; FileNotFoundError&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;虚拟环境创建后，未找到 Python/Pip 可执行文件。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;虚拟环境验证成功。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(python_exe), &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(pip_exe)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; _post_process_code&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self, generated_code: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) -&gt; Tuple[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, Set[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        cleaned_code &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; re.sub(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;```python&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-light-font-weight:bold;--shiki-dark:#72F088;--shiki-dark-font-weight:bold&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;```&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, generated_code).strip()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        required_deps &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; set&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(re.findall(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;#&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;\s&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;REQUIRE:&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;\s&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;(\S&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, cleaned_code))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        final_code &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.join([line &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; line &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; cleaned_code.split(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; line.strip().startswith(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;# REQUIRE:&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;代码后处理完成。提取的依赖: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;required_deps &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;无&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; final_code.strip(), required_deps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; _install_dependencies&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self, deps: Set[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;], task_work_dir: Path):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; deps:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;代码中未发现 # REQUIRE: 声明，跳过依赖安装。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        deps_to_install &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {dep &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; dep &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; deps &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; dep.lower() &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.standard_libs}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; deps_to_install:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;所有声明的依赖 &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(deps)&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; 均为标准库，无需安装。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;        # 确保文件名是 requirements.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        requirements_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; task_work_dir &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;requirements.txt&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        with&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(requirements_path, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;w&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;encoding&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;utf-8&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; f:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; dep &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; deps_to_install:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                f.write(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;dep&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;已生成依赖文件: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;requirements_path&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        command &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.pip_executable, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;install&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;-r&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(requirements_path)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;执行依赖安装命令: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos; &apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.join(command)&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        result &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; subprocess.run(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            command,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            cwd&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(task_work_dir),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            capture_output&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            timeout&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;300&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            check&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;False&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            encoding&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;utf-8&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; result.returncode &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            error_message &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;依赖安装失败: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;result.stderr&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            global_logger.error(error_message)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            raise&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; RuntimeError&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(error_message)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;依赖 &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(deps_to_install)&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; 安装成功。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; _execute_code&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self, code_to_execute: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, task_work_dir: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) -&gt; Dict[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, Any]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        script_name &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;generated_script.py&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        code_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; os.path.join(task_work_dir, script_name)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        with&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(code_path, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;w&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;encoding&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; f:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            f.write(code_to_execute)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;最终执行的脚本已保存至: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;code_path&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        command &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.python_executable, script_name]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;执行代码命令: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos; &apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.join(command)&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        result &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; subprocess.run(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            command,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            cwd&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;task_work_dir,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            capture_output&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            timeout&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;300&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            check&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;False&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            encoding&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;utf-8&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;output&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: result.stdout, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: result.stderr, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;returncode&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: result.returncode}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; _is_direct_command&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self, instruction: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) -&gt; &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;bool&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        common_commands &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;python&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;pip&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;uv&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;bash&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;sh&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;ls&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;rm&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;cp&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;mv&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;mkdir&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; any&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(instruction.strip().startswith(cmd) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; cmd &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; common_commands)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; _execute_direct_command&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self, command: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, task_work_dir: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) -&gt; Dict[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, Any]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;检测到直接命令，将在虚拟环境中执行: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; sys.platform &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;win32&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            activate_script &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Path(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.python_executable).parent &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;activate.bat&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            full_command &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;call &quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;activate_script&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        else&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            activate_script &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Path(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.python_executable).parent &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;activate&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            full_command &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;. &quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;activate_script&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        result &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; subprocess.run(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            full_command,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            cwd&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;task_work_dir,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            capture_output&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            timeout&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;300&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            check&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;False&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            encoding&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;utf-8&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            shell&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            executable&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;/bin/bash&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; sys.platform &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;win32&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;output&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: result.stdout, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: result.stderr, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;returncode&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: result.returncode}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    async&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; run_workflow&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self, instruction: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, server_name: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, ctx: Context):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        result &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;            &quot;stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                &quot;code_generation&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;pending&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                &quot;dependency_installation&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;pending&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;                &quot;execution&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;pending&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;            &quot;code&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;output&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;work_dir&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;returncode&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        try&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            timestamp &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; datetime.datetime.now().strftime(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;task_%Y%m&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;_%H%M%S&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            task_work_dir &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.shared_work_dir &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; timestamp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            task_work_dir.mkdir(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;exist_ok&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;work_dir&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(task_work_dir)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;任务 &apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;timestamp&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos; 启动，指令: &apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;instruction&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ctx.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;任务工作目录已创建: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;task_work_dir&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;            # --- 指令嗅探和模式切换 ---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._is_direct_command(instruction):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ctx.info(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;检测到直接命令模式。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;code_generation&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;skipped (direct command)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;dependency_installation&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;skipped (direct command)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;code&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;# Direct Command Execution&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;instruction&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;execution&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;pending&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ctx.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;正在直接执行命令: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;instruction&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                exec_result &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._execute_direct_command(instruction, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(task_work_dir))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                result.update(exec_result)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;          &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                is_successful &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; exec_result.get(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;returncode&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;execution&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;success&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; is_successful &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;failed&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                final_status &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;success&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; is_successful &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;failed&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;直接命令执行完成。状态: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;final_status&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;          &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: final_status, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;result&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: result, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: server_name, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;N/A (Direct Command)&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;active&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;            # --- 如果不是直接命令，则执行原有的 LLM 工作流 ---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ctx.info(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;进入 LLM 代码生成模式。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            server_config &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.config.get(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;mcpServers&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, {}).get(server_name)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; server_config: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;raise&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; ValueError&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;服务器 &apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;server_name&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos; 未配置&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            template &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; server_config[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;task_templates&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;file_operations&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            prompt &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; template[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;prompt&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;].format(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;task&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;instruction)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ctx.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;正在使用模型 &apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;server_config[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;model&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos; 生成代码...&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            llm &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.get_llm(server_config[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;model&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            generated_code &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; llm.ainvoke(prompt)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;code_generation&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;success&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ctx.info(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;代码生成成功。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            pure_code, dependencies &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._post_process_code(generated_code)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;code&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; pure_code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;dependency_installation&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;pending&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ctx.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;正在检查并安装依赖: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;dependencies &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;无&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._install_dependencies(dependencies, task_work_dir)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;dependency_installation&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;success&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ctx.info(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;所有依赖已就绪。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;execution&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;pending&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ctx.info(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;正在执行生成的代码...&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            exec_result &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._execute_code(pure_code, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(task_work_dir))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            result.update(exec_result)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            is_successful &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;任务成功完成&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; exec_result.get(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;output&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;execution&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;success&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; is_successful &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;failed&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            final_status &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;success&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; is_successful &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;failed&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;代码执行完成。状态: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;final_status&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: final_status, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;result&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: result, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: server_name, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: server_config.get(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;active&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        except&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; Exception&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; e:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            current_stage &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; next&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;((s &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; s, status &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;].items() &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; status &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;pending&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;unknown&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;][current_stage] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;failed&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            error_message &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;在 &apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;current_stage&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos; 阶段失败: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; error_message&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            global_logger.error(error_message, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;exc_info&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ctx.error(error_message)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; stage, status &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;].items():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; status &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;pending&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                    result[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;][stage] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;skipped&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;failed&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;result&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: result, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: server_name, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.config.get(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;mcpServers&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, {}).get(server_name, {}).get(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# --- 单例和工具定义 ---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;workflow_executor &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; TaskWorkflow()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;@mcp.tool&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; do_it_using_python&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    instruction: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Field(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;        description&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;用户用自然语言下达的、需要在本地计算机上执行的具体任务指令。例如：&apos;在桌面上创建一个名为&apos;todo.txt&apos;的文件&apos; 或 &apos;将/home/user/docs目录下的所有.log文件压缩成一个zip包&apos;。&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    server: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Field(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;default&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;default&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;description&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;要使用的服务器配置名称。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ctx: Context &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Field(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;exclude&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) -&gt; CommandOutput:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    当用户需要执行任何与文件、文件夹或系统相关的本地操作时，请使用此工具。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    此工具接收一条自然语言指令，将其转换为可执行的Python代码，并在安全的虚拟环境中运行，然后返回详细的执行结果。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ctx.info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;收到指令，开始处理: &apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;instruction&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        result_dict &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; workflow_executor.run_workflow(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            instruction&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;instruction,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            server_name&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;server,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            ctx&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;ctx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ctx.info(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;任务流程执行完毕。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; CommandOutput.model_validate(result_dict)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    except&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; Exception&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; e:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        global_logger.error(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;执行工具时发生严重错误: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;exc_info&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ctx.error(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;执行工具时发生严重错误: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; CommandOutput(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            status&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;failed&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            result&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;ExecutionResult(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;                stages&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;ExecutionStage(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;                    code_generation&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;failed&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;                    dependency_installation&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;skipped&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;                    execution&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;skipped&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;                code&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;                output&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;                error&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;执行工具时发生顶层错误: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;                work_dir&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;                returncode&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=-&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;            server&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;ServerInfo(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;server, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;model&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;None&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# --- 服务器启动---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    服务器主入口函数。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        subprocess.run([&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;ollama&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;list&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;], &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;check&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;capture_output&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        global_logger.info(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;Ollama 服务已在运行。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    except&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (subprocess.CalledProcessError, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;FileNotFoundError&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        global_logger.warning(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;Ollama服务未运行，请确保Ollama已安装并正在运行。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mcp.run()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; __name__&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;__main__&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    run()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;大功告成，可以使用mcp+ollama+python实现的万能工具了！&lt;/p&gt;</content:encoded></item><item><title>分享一个python做的我的世界mod批量下载工具</title><link>https://blog.skyshadow.fun/posts/20250730161627/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20250730161627/</guid><pubDate>Wed, 30 Jul 2025 16:16:27 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;Mojang太会刷版本号了，而每一次更新都要重新把自己想用的mod全部下载一遍&lt;br&gt;
为了节省时间，就做了这个东西&lt;br&gt;
找的mauns和deepseek帮忙&lt;br&gt;
只支持modrinth的mod下载，因为courseforge弄不来&lt;br&gt;
支持forge,fabric,quilt,neoforge&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;代码&quot;&gt;代码&lt;/h1&gt;
&lt;p&gt;使用前请先&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;pip install asyncio aiohttp tqdm&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 引入一些东西&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; os  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; asyncio  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; aiohttp  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tqdm &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tqdm  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; platform  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; zipfile  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; json  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; hashlib  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 颜色&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_RED&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\033&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;[91m&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_GREEN&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\033&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;[92m&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_YELLOW&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\033&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;[93m&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_BLUE&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\033&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;[94m&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_CYAN&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\033&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;[96m&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_MAGENTA&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\033&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;[95m&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_RESET&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\033&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;[0m&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_BOLD&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\033&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;[1m&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# print&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; print_color&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(message, color ): &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_RESET&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; print_title&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(message): print_color(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n{&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;=&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;=&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_CYAN&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_BOLD&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; print_success&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(message): print_color(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;✓ &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_GREEN&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; print_warning&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(message): print_color(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;⚠️ &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_YELLOW&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; print_error&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(message): print_color(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;✗ &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_RED&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; print_info&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(message): print_color(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;ℹ️ &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_BLUE&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; print_local&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(message): print_color(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;Found: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_MAGENTA&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; ModUpdater&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    MODRINTH_API_URL&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;https://api.modrinth.com/v2&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    USER_AGENT&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;一个mod下载工具&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    PATHS_FILE&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;mod_paths.json&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    TQDM_BAR_FORMAT&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{l_bar}{bar:20}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{n_fmt}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{total_fmt}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self, mc_version, mod_loader, mod_folder ):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mc_version &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; mc_version&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mod_loader &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; mod_loader&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mod_folder &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; mod_folder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.download_dir &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mc_version&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mod_loader&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        os.makedirs(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.download_dir, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;exist_ok&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;    @&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;staticmethod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; load_paths&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; os.path.exists(ModUpdater.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;PATHS_FILE&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;): &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        try&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            with&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(ModUpdater.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;PATHS_FILE&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;r&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;encoding&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;utf-8&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; f: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; json.load(f)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        except&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (json.JSONDecodeError, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;IOError&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;): &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;    @&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;staticmethod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; save_paths&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(paths):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        try&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            with&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(ModUpdater.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;PATHS_FILE&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;w&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;encoding&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;utf-8&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; f: json.dump(paths, f, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;indent&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        except&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; IOError&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; e: print_error(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;无法保存路径文件: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; _calculate_sha1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self, filepath):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        sha1 &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; hashlib.sha1()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        with&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(filepath, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;rb&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; f:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            while&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; chunk &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; f.read(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;8192&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                sha1.update(chunk)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; sha1.hexdigest()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    async&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; _api_request&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self, session, method, url, &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;kwargs):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        try&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            async&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; with&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; session.request(method, url, &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;**&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;kwargs) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; resp:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; resp.status &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 200&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; resp.json()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        except&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; aiohttp.ClientError: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;pass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    async&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; _get_project_info&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self, session, project_id ):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        url &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;MODRINTH_API_URL&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;/project/&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;project_id&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._api_request(session, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;GET&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, url)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    async&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; _download_file&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self, session, version_id, pbar):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        try&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            url &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;MODRINTH_API_URL&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;/version/&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;version_id&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            version_data &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._api_request(session, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;GET&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, url)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; version_data: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;raise&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; ValueError&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;无法获取版本信息&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            file_info &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; version_data[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            download_url, name &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; file_info[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;url&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;], file_info[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;filename&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; os.path.join(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.download_dir, name)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            async&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; with&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; session.get(download_url) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; r:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                r.raise_for_status()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                with&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(path, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;wb&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; f:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                    while&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                        chunk &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; r.content.read(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;8192&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                        if&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; chunk: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;break&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                        f.write(chunk)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            pbar.update(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; name, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        except&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; Exception&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            pbar.update(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;False&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    async&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        print_info(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;模组将被下载到: ./&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.download_dir&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;/&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        print_title(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;1. 扫描并识别本地模组&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        jar_files &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; [os.path.join(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mod_folder, f) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; f &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; os.listdir(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mod_folder) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; f.endswith(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;.jar&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        hashes &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._calculate_sha1(f) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; f &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tqdm(jar_files, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;desc&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;计算哈希&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;bar_format&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;TQDM_BAR_FORMAT&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;ascii&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos; -&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        local_projects &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        async&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; with&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; aiohttp.ClientSession(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;headers&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;User-Agent&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;USER_AGENT&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;} ) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; session:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            url &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;MODRINTH_API_URL&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;/version_files&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            version_data &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._api_request(session, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;POST&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, url, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;hashes&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: hashes, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;algorithm&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;sha1&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; version_data:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                print_error(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;无法从 Modrinth API 获取任何模组信息。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            print_info(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;从你选择的mod文件夹中找到以下模组:&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            project_ids &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {info[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;project_id&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; info &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; version_data.values()}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            project_infos &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; asyncio.gather(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._get_project_info(session, pid) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; pid &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; project_ids])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; info &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; project_infos:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; info:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                    local_projects[info[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;id&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; info&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                    print_local(info[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;title&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            unidentified_hashes &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; [h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; hashes &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; version_data]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            print_title(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;2. 下载 &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(local_projects)&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; 个mod&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            version_tasks &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; pid &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; local_projects.keys():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                url &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;MODRINTH_API_URL&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;/project/&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;pid&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;/version&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                params &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;loaders&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;[&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mod_loader&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;]&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;game_versions&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;[&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mc_version&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;]&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                version_tasks.append(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._api_request(session, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;GET&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, url, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;params&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;params))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            versions_results &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; asyncio.gather(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;version_tasks)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            download_tasks, failed_to_find_version &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; [], []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            project_ids_list &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(local_projects.keys())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; i, versions &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; enumerate&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(versions_results):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                pid &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; project_ids_list[i]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; versions:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                    download_tasks.append(versions[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;id&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                else&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                    failed_to_find_version.append(local_projects[pid][&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;title&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            download_results &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; download_tasks:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;                with&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tqdm(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;total&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(download_tasks), &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;desc&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;下载中&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;bar_format&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;TQDM_BAR_FORMAT&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;ascii&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos; -&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; pbar:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                    tasks_to_run &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._download_file(session, vid, pbar) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; vid &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; download_tasks]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                    download_results &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; asyncio.gather(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;tasks_to_run)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        print_title(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;3. 下载完成&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        successful &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; [name &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; name, success &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; download_results &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; success]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        failed_titles &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; [info[&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;title&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (pid, info), (name, success) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; zip&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(local_projects.items(), download_results) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; success]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        failed_titles.extend(failed_to_find_version)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        print_success(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;成功下载: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(successful)&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; 个&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; failed_titles:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            print_error(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;下载失败或未找到兼容版本: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(failed_titles))&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; 个&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; mod &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; sorted&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(failed_titles))): &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;  - &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;mod&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; unidentified_hashes:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            print_warning(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;无法识别 &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(unidentified_hashes)&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; 个 .jar 文件&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; get_user_mod_folder&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;():  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    paths &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ModUpdater.load_paths()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_YELLOW&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;请选择一个模组文件夹路径:&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_RESET&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; i, path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; enumerate&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(paths): &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;  &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    new_path_index &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(paths)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;  &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;new_path_index&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;. 手动输入新路径&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    choice &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    while&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; &amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; choice &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;&amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; new_path_index):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        try&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: choice &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_YELLOW&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;请输入您的选择 (0-&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;new_path_index&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;): &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_RESET&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        except&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; ValueError&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: choice &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; choice &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; new_path_index:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        new_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; input&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_YELLOW&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;请输入新的模组文件夹路径: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_RESET&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; os.path.isdir(new_path):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; new_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; paths:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                paths.append(new_path)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                ModUpdater.save_paths(paths)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; new_path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        else&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            print_error(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;错误: 路径 &apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;new_path&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos; 不存在或不是一个文件夹。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    else&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; paths[choice]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;():  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    print_title(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;一个mod下载工具&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mod_folder &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; get_user_mod_folder()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; mod_folder: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mc_version &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; input&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_YELLOW&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;请输入 Minecraft 版本 (例如 1.20.1): &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_RESET&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_YELLOW&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;请选择 Mod 加载器:&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_RESET&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    loaders &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;fabric&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;forge&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;neoforge&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;quilt&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; i, loader &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; enumerate&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(loaders, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;): &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;  &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;. &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;loader.capitalize()&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    choice &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    while&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; &amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; choice &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;&amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; len&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(loaders):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        try&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: choice &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_YELLOW&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;请输入您的选择 (1-&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(loaders)&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;): &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;C_RESET&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        except&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; ValueError&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: choice &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mod_loader &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; loaders[choice &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    updater &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ModUpdater(mc_version, mod_loader, mod_folder)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    await&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; updater.run()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; __name__&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;__main__&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; platform.system() &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;Windows&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        asyncio.run(main())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    except&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; KeyboardInterrupt&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        print_warning(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;程序被中断。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    finally&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        print_title(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;程序结束&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;使用方法&quot;&gt;使用方法&lt;/h1&gt;
&lt;p&gt;使用python打开，然后输入之前的版本的mod文件夹路径（添加了输入的路径保留功能的）&lt;br&gt;
选择mod加载器&lt;br&gt;
输入版本&lt;br&gt;
它就会下载到你启动该python程序目录下的1.21.1-fabric等文件夹里&lt;br&gt;
但有时还是有些mod下不到，只能一定程度上方便一些。&lt;/p&gt;</content:encoded></item><item><title>在linux上优雅地玩Minecraft和一些问题解决</title><link>https://blog.skyshadow.fun/posts/20250719131037/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20250719131037/</guid><pubDate>Sat, 19 Jul 2025 13:10:37 GMT</pubDate><content:encoded>&lt;h1 id=&quot;分享如何在linux上优雅地玩我的世界&quot;&gt;分享如何在Linux上优雅地玩我的世界&lt;/h1&gt;
&lt;p&gt;更多细节可以去arch或者deepin的wiki里的我的世界页面查看。&lt;br&gt;
&lt;a href=&quot;https://wiki.deepin.org/zh/%E5%BE%85%E5%88%86%E7%B1%BB/02_%E6%8C%89%E8%BD%AF%E4%BB%B6%E5%8A%9F%E8%83%BD%E5%88%92%E5%88%86/04_%E5%8F%AF%E5%AE%89%E8%A3%85%E7%9A%84%E6%B8%B8%E6%88%8F%E4%BB%8B%E7%BB%8D/%E6%B2%99%E7%9B%92%E6%B8%B8%E6%88%8F/%E6%88%91%E7%9A%84%E4%B8%96%E7%95%8C/%E6%88%91%E7%9A%84%E4%B8%96%E7%95%8Cmc&quot;&gt;我的世界 | DeepinWiki&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://wiki.archlinuxcn.org/wiki/Minecraft&quot;&gt;Minecraft - Arch Linux 中文维基&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(deepin wiki上更简单点，arch上更全面)&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;启动器&quot;&gt;启动器&lt;/h1&gt;
&lt;p&gt;Linux上有很多可以用的启动器，比如&lt;a href=&quot;https://www.minecraft.net/zh-hant/download&quot;&gt;官方启动器&lt;/a&gt;,&lt;a href=&quot;https://hmcl.huangyuhui.net/download/&quot;&gt;HMCL&lt;/a&gt;,&lt;a href=&quot;https://xmcl.app/zh/&quot;&gt;XMCL&lt;/a&gt;,&lt;a href=&quot;https://corona.studio/lx/download&quot;&gt;LauncherX&lt;/a&gt;,&lt;a href=&quot;https://modrinth.com/app&quot;&gt;Modrinth启动器&lt;/a&gt;等等。&lt;br&gt;
唯独可惜的是没有自认为最舒服的PCL2,但由社区开发的跨平台的PCL.Neo正在路上了，最迟明年就能在Linux上体验到pcl丝滑的动画了&lt;br&gt;
我目前用的是HMCL,因为用起来很熟悉，在用PCL2之前就用的它，再次用hmcl时，同样的名字，不一样的界面，还有更舒服的动画。&lt;/p&gt;
&lt;h2 id=&quot;附hmcl无法输入中文解决&quot;&gt;附:HMCL无法输入中文解决&lt;/h2&gt;
&lt;p&gt;用HMCL时最开始无法输入中文，&lt;del&gt;在启动器里几乎没有输入中文的需求&lt;/del&gt;，后来发现是javafx版本的原因。一开始下载的jdk21,所以hmcl运行时就会自下载javafx17,这个版本适配输入法有问题，所以直接更新java到jdk24即可，hmcl第一次启动时就会下载javafx24,这样在启动器里就可以输入中文了。&lt;/p&gt;
&lt;h1 id=&quot;mod&quot;&gt;MOD&lt;/h1&gt;
&lt;p&gt;mod的话有两个必要的mod：&lt;/p&gt;
&lt;h2 id=&quot;imblocker&quot;&gt;IMBlocker&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://modrinth.com/mod/imblocker-original&quot;&gt;modrinth介绍页&lt;/a&gt;&lt;br&gt;
这个mod可以在帮你切换输入法，比如在聊天界面上就能自动切换为中文输入，离开聊天页面就回到英文，避免影响游戏。&lt;br&gt;
当然在Windows上体验是满血的，非常优秀，但在Linux上似乎不会在游戏时屏蔽输入法切换操作，在游戏页面使用输入法切换快捷键输入法还是会反应，&lt;del&gt;也许是Deepin的问题?&lt;/del&gt;&lt;br&gt;
所以对于我来说最优解是不用CTRL的键位。&lt;/p&gt;
&lt;h2 id=&quot;fcitx5-enhancer&quot;&gt;Fcitx5-Enhancer&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://modrinth.com/mod/fcitx5-enhancer&quot;&gt;modrinth介绍页&lt;/a&gt;&lt;br&gt;
这个mod可以修复fcitx5在mc里的一个bug，就是当你用fcitx5输入时，如果点击退格键，极有可能输入法里预编辑的文本被删除，同时游戏里已写好的文本也被删了，这个mod可以修复此问题.&lt;/p&gt;
&lt;h1 id=&quot;nvidia卡独显启动&quot;&gt;Nvidia卡独显启动&lt;/h1&gt;
&lt;p&gt;这个方法来自&lt;a href=&quot;https://www.entropy-tree.top/2024/01/25/simple-nvidia-setup-for-linux/&quot;&gt;此博客&lt;/a&gt;&lt;br&gt;
在HMCL启动器的 &lt;strong&gt;版本管理-游戏设置-编辑高级设置&lt;/strong&gt; 或 &lt;strong&gt;设置-全局游戏设置-编辑高级设置&lt;/strong&gt; 里的&lt;strong&gt;环境变量&lt;/strong&gt; 里写上&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即可&lt;/p&gt;
&lt;h1 id=&quot;amd卡独显启动&quot;&gt;AMD卡独显启动&lt;/h1&gt;
&lt;p&gt;在HMCL启动器的 &lt;strong&gt;版本管理-游戏设置-编辑高级设置&lt;/strong&gt; 或 &lt;strong&gt;设置-全局游戏设置-编辑高级设置&lt;/strong&gt; 里的 &lt;strong&gt;环境变量&lt;/strong&gt; 里写上&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;DRI_PRIME=1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即可&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;现在启动XPlus等整合包，加上Derivative等光影，就可以优雅地在Linux里玩上mc了&lt;/p&gt;</content:encoded></item><item><title>分享自己新做的主页，太空主题</title><link>https://blog.skyshadow.fun/posts/20250713142200/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20250713142200/</guid><pubDate>Sun, 13 Jul 2025 14:22:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;在Codepen上转的时候看到了一个很厉害的2.5D动态地球，突然有了灵感，就用两天做了个个人网站。&lt;br&gt;
太空主题，页脚是根据一个月球的svg画的，感觉就像站在月球上一样，背景就是找到的那个动态地球了，还加上了一些动态的小星星。&lt;br&gt;
其他元素像加载动画和其他文字都是用的Tailwindcss做的，动画都是用在hover上的，手机端没有鼠标，所以相应的动画就显示不了。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;诶后来把这个问题解决了，现在触屏端和电脑端都能正常触发动画。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;网站标题为 &lt;strong&gt;在互联网留下一个脚印&lt;/strong&gt;,因为想到了第一个登上月球的人说的那句话。&lt;/p&gt;
&lt;h1 id=&quot;截图&quot;&gt;截图&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2025/07/13/yp8qNvgImExA19t.webp&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;image.webp&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/07/13/yp8qNvgImExA19t.webp&quot; alt=&quot;image.webp&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;链接&quot;&gt;链接&lt;/h1&gt;
&lt;p&gt;网站： &lt;a href=&quot;https://www.skyshadow.fun&quot;&gt;在互联网留下一个脚印 | 天影大侠&lt;/a&gt;&lt;br&gt;
同时也放在Gtihub上了，也分享一下&lt;br&gt;
Github：&lt;a href=&quot;https://github.com/SkyShadowHero/SkyShadowHero-Space-Themed-Website&quot;&gt;SkyShadowHero-Space-Themed-Website&lt;/a&gt;&lt;br&gt;
动态地球原地址: &lt;a href=&quot;https://codepen.io/ferronsays/pen/AwgQVG&quot;&gt;Codepen&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>博客首页大图模糊渐进式加载和夜间模式遮罩</title><link>https://blog.skyshadow.fun/posts/20250710101015/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20250710101015/</guid><pubDate>Thu, 10 Jul 2025 10:10:15 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;修改博客时觉得主页大图加载太慢，而且为了加载快一点已经把图片弄得很糊了，效果还是不好&lt;br&gt;
正好发现了这位大佬的文章，&lt;a href=&quot;https://blog.kouseki.cn/posts/4f72.html&quot;&gt;首页背景图渐进式加载，解决卡顿难题&lt;/a&gt;&lt;br&gt;
正好解决了加载过慢和图片不能太清晰的问题&lt;br&gt;
但夜间模式下的深色遮罩又没了，&lt;br&gt;
所以分享一下解决方法&lt;br&gt;
安知鱼和butterfly主题适用&lt;/p&gt;
&lt;h1 id=&quot;首页背景图渐进式加载转载&quot;&gt;首页背景图渐进式加载（转载）&lt;/h1&gt;
&lt;h2 id=&quot;新建文件&quot;&gt;新建文件&lt;/h2&gt;
&lt;p&gt;新建文件 &lt;strong&gt;source/js/imgloaded.js&lt;/strong&gt; 新增以下内容，并按照注释调整图片路径&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;// 首页头图加载优化  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@description&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; 实现medium的渐进加载背景的效果  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; ProgressiveLoad&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    constructor&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;smallSrc&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;largeSrc&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.smallSrc &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; smallSrc;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.largeSrc &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; largeSrc;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;initTpl&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;    /**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;     * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@description&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; 生成ui模板&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;     */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;    initTpl&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.container &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; document.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;createElement&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;div&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.smallStage &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; document.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;createElement&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;div&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.largeStage &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; document.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;createElement&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;div&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.smallImg &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; Image&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.largeImg &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; Image&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.container.className &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;pl-container&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.smallStage.className &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;pl-img pl-blur&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.largeStage.className &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;pl-img&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.container.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;appendChild&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.smallStage);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.container.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;appendChild&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.largeStage);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.smallImg.onload &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._onSmallLoaded.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;bind&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.largeImg.onload &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;._onLargeLoaded.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;bind&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;    /**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;     * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@description&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; 加载背景&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;     */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;    progressiveLoad&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.smallImg.src &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.smallSrc;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.largeImg.src &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.largeSrc;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;    /**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;     * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@description&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; 大图加载完成&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;     */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;    _onLargeLoaded&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.largeStage.classList.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;pl-visible&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.largeStage.style.backgroundImage &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; `url(&apos;${&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;largeSrc&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;}&apos;)`&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;    /**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;     * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@description&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; 小图加载完成&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;     */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;    _onSmallLoaded&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.smallStage.classList.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;pl-visible&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;      this&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.smallStage.style.backgroundImage &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; `url(&apos;${&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;smallSrc&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;}&apos;)`&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  }  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; executeLoad&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;执行渐进背景替换&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; isMobile&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; window.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;matchMedia&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;(max-width: 767px)&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;).matches;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; loader&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; ProgressiveLoad&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      isMobile &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; config.mobileSmallSrc &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; config.smallSrc,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      isMobile &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; config.mobileLargeSrc &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; config.largeSrc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;    // 和背景图颜色保持一致，防止高斯模糊后差异较大&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (target.children[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      target.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;insertBefore&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(loader.container, target.children[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    loader.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;progressiveLoad&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  };  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    smallSrc: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;/img/xiaotu.jpg&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;// 小图链接 尽可能配置小于100k的图片&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    largeSrc: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;/img/tu.jpg&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;// 大图链接 最终显示的图片&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mobileSmallSrc: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;/img/sjxt.jpg&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;// 手机端小图链接 尽可能配置小于100k的图片&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mobileLargeSrc: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;/img/sjdt.jpg&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;// 手机端大图链接 最终显示的图片&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    enableRoutes: [&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;/&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; initProgressiveLoad&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; target&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; document.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;getElementById&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;page-header&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (target &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; target.classList.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;contains&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;full_page&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;      executeLoad&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(config, target);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  }  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; onPJAXComplete&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; target&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; document.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;getElementById&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;page-header&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (target &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; target.classList.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;contains&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;full_page&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;      initProgressiveLoad&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(config);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  }  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  document.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;addEventListener&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;DOMContentLoaded&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;() {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;    initProgressiveLoad&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(config);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  });  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  document.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;addEventListener&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;pjax:complete&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;() {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;    onPJAXComplete&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(config);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  });  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;新建文件 &lt;strong&gt;label source/css/imgloaded.css&lt;/strong&gt; 新增以下内容，并按照注释自行决定调整内容&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/* 首页头图加载 */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;.pl-container&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  width&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  height&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  position&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;relative&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  overflow&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;hidden&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  will-change&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: transform; &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/* 添加性能优化 */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  animation&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: blur-to-clear &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; cubic-bezier&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;.62&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;.21&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;.25&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; normal&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; backwards&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; running&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, scale &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1.5&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; cubic-bezier&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;.62&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;.21&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;.25&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; both&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;.pl-img&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  width&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  height&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  position&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;absolute&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  background-position&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  background-size&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;cover&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  background-repeat&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;no-repeat&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  opacity&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  transition&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: opacity &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@keyframes&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; blur-to-clear&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  0%&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    filter&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;blur&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    opacity&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  }  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  100%&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    filter&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;blur&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    opacity&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  }  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@keyframes&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; scale&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  0%&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    transform&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;scale&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;translateZ&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    opacity&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  }  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  to&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    transform&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;scale&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;translateZ&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    opacity&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  }  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;.pl-visible&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  opacity&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;.pl-blur&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /* 小图锯齿多，增加高斯模糊 */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  filter&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;blur&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;引入文件&quot;&gt;引入文件&lt;/h2&gt;
&lt;p&gt;在inject里引入即可&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;inject:  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  head:  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - &amp;#x3C;link rel=&quot;stylesheet&quot; href=&quot;/css/imgloaded.css?1&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  bottom:  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - &amp;#x3C;script async data-pjax src=&quot;/js/imgloaded.js?1&quot;&gt;&amp;#x3C;/script&gt; # 首页图片渐进式加载&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;夜间模式深色遮罩&quot;&gt;夜间模式深色遮罩&lt;/h1&gt;
&lt;p&gt;也很简单，在css里加入这一段即可&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/* 深色模式遮罩 */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;data-theme&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;dark&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;.pl-container::after&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  content&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  position&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;absolute&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  top&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  left&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  width&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  height&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  background&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;rgba&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.3&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;); &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/* 30%透明度的黑色遮罩 */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  z-index&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;回到终端，执行hexo三连就完成了！&lt;/p&gt;</content:encoded></item><item><title>Deepin(或者其他Debian系Linux?)上准备安卓刷机环境</title><link>https://blog.skyshadow.fun/posts/20250709185539/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20250709185539/</guid><pubDate>Wed, 09 Jul 2025 18:55:39 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;在Deepin上用了好久了，一个需求就是能够给我的N11 5G稍微刷一下，防止有时死机之类的 &lt;del&gt;label 你不刷机怎么会死机呢?&lt;/del&gt; ，刚好Linux上也完全可以，就分享一下&lt;br&gt;
Debian和Ubuntu等应该通用&lt;/p&gt;
&lt;h1 id=&quot;adb-fastboot环境&quot;&gt;adb fastboot环境&lt;/h1&gt;
&lt;h2 id=&quot;方法一&quot;&gt;方法一&lt;/h2&gt;
&lt;p&gt;在终端输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; adb&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; fastboot&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即可&lt;/p&gt;
&lt;h2 id=&quot;方法二&quot;&gt;方法二&lt;/h2&gt;
&lt;p&gt;如果有的linux发行版自带仓库里没有的话，就去&lt;a href=&quot;https://developer.android.com/tools/releases/platform-tools?hl=zh-cn&quot;&gt;这个链接&lt;/a&gt;点击下载适用于Linux的SDK Platform-Tools,下载好后放到一个文件夹里，然后配置路径环境&lt;br&gt;
如果shell是bash，就输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; nano&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; ~/.bashrc&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果shell是zsh,就输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; nano&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; ~/.zshrc&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以此类推fish等其他shell,当然也可以把nano换成vim，看习惯&lt;br&gt;
然后在这个文件找个地方添上&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;export PATH=$PATH:/你放的目录/platform-tools  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后退出shell重进，或者source一下你编辑的文件即可&lt;/p&gt;
&lt;h1 id=&quot;magiskboot环境&quot;&gt;magiskboot环境&lt;/h1&gt;
&lt;p&gt;有时给boot分区换内核时，可以使用到magiskboot这个东西，很方便&lt;br&gt;
去Github下载对应架构的magiskboot文件，&lt;a href=&quot;https://github.com/magojohnji/magiskboot-linux&quot;&gt;Github链接&lt;/a&gt;&lt;br&gt;
然后把它放到一个目录里，然后就是上文中的方法二中的配置路径那一步&lt;br&gt;
当然也可以直接放同一个文件夹里&lt;br&gt;
随便说说magiskboot的简单用法:&lt;br&gt;
解包boot分区文件:&lt;br&gt;
在有提取出的boot.img目录下&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;magiskboot&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; unpack&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; -h&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; boot.img&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;打包boot分区文件&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;magiskboot&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; repack&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; boot.img&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; boot_new.img&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一般的内核分享的是个anykernel3包，里面的image.gz里的image文件就是内核&lt;br&gt;
所以只要把新的内核重命名为kernel后，重新打包在boot里就能快速替换内核，而不需要anykernel或者twrp等工具了&lt;/p&gt;</content:encoded></item><item><title>Deepin手动安装nvidia闭源显卡驱动</title><link>https://blog.skyshadow.fun/posts/20250702202900/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20250702202900/</guid><pubDate>Wed, 02 Jul 2025 20:29:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2025/07/03/PaXFWJ1RqeOlfVb.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;nfu&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/07/03/PaXFWJ1RqeOlfVb.png&quot; alt=&quot;nfu&quot;&gt;&lt;/a&gt;&lt;br&gt;
弄这个英伟达显卡让我一口气重刷了4次系统&lt;br&gt;
那就分享一下怎么手动刷入的和问题解决方法&lt;/p&gt;
&lt;h1 id=&quot;论坛方法&quot;&gt;论坛方法&lt;/h1&gt;
&lt;p&gt;只要不是一些较新的nvidia显卡就可以用这个方法&lt;br&gt;
原论坛链接：&lt;a href=&quot;https://bbs.deepin.org/post/238766&quot;&gt;这里&lt;/a&gt;&lt;br&gt;
简单重复一遍&lt;/p&gt;
&lt;h2 id=&quot;卸载原有驱动&quot;&gt;卸载原有驱动&lt;/h2&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pkexec&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; autoremove&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; nvidia-&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;添加32位架构并刷新源&quot;&gt;添加32位架构并刷新源&lt;/h2&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pkexec&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; dpkg&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; --add-architecture&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; i386&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pkexec&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; update&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;安装和执行nvidia-detect&quot;&gt;安装和执行nvidia-detect&lt;/h2&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pkexec&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; nvidia-detect&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;再输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;nvidia-detect&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;它可能会输出一段绿色的话，告诉你&lt;br&gt;
&lt;strong&gt;It is recommended to install the nvidia-driver或者其他内容比如nvidia-legacy-390xx-driver&lt;/strong&gt;&lt;br&gt;
如果你的显卡较新的话就会在这里提示你，然后请移步第二种方法&lt;/p&gt;
&lt;h2 id=&quot;安装nvidia驱动&quot;&gt;安装nvidia驱动&lt;/h2&gt;
&lt;p&gt;如果显示的是 &lt;strong&gt;nvidia-driver&lt;/strong&gt; ,那就终端输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pkexec&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; nvidia-driver&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; nvidia-settings&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; nvidia-smi&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果是其他的，那就输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pkexec&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; xxx&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;xxx是它显示的名字&lt;/p&gt;
&lt;h1 id=&quot;较新显卡的问题&quot;&gt;较新显卡的问题&lt;/h1&gt;
&lt;p&gt;如果你显卡比较新的话，输入 &lt;strong&gt;nvidia-detect&lt;/strong&gt; 后大概率它会告诉你sorry,然后推荐你安装较新的显卡驱动&lt;br&gt;
如果你执意输入 &lt;strong&gt;pkexec apt install nvidia-driver nvidia-settings nvidia-smi&lt;/strong&gt; 的话，安装里也没用，输入nvidia-smi后它会说&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;No devices were found  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在nvidia设置面板里也没有什么信息&lt;br&gt;
那就只能去安装英伟达官网里的驱动&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;{warning}此方法安装好驱动后有一定的危险性，请尽量不要再使用apt安装与显卡驱动有关的东西&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;最后还是用这个方法弄好了，所以分享一下.&lt;/p&gt;
&lt;h1 id=&quot;使用官网的驱动程序手动安装&quot;&gt;使用官网的驱动程序手动安装&lt;/h1&gt;
&lt;h2 id=&quot;去英伟达官网查找你的显卡对应驱动&quot;&gt;去英伟达官网查找你的显卡对应驱动&lt;/h2&gt;
&lt;p&gt;输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;lspci&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; -i&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; nvidia&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看显卡型号&lt;br&gt;
&lt;a href=&quot;https://www.nvidia.com/zh-tw/drivers/&quot;&gt;Nvidia驱动查找官网&lt;/a&gt;&lt;br&gt;
我的是Geforce RTX5060笔记本版的,那么我就选择&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Geforce  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Geforce Rtx 50 Series(Notebooks)   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;NVIDIA GeForce RTX 5060 Laptop GPU  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Linux 64-bit  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Chinese(Simplified)  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后点击寻找&lt;br&gt;
下载它推荐的或者dev的驱动，应该是个run后缀的文件&lt;/p&gt;
&lt;h2 id=&quot;安装驱动&quot;&gt;安装驱动&lt;/h2&gt;
&lt;p&gt;确保所有nvidia相关的东西都已删除，和论坛上说的一样&lt;br&gt;
如果是deepin系统的话，似乎要先关闭磐石保护系统，方法看这&lt;a href=&quot;https://bbs.deepin.org/zh/post/286633&quot;&gt;链接&lt;/a&gt;&lt;br&gt;
删除干净和关闭磐石系统后重启电脑&lt;br&gt;
然后在下载目录中打开shell,输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; ./xxx.run&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;xxx.run是你下的驱动文件名&lt;br&gt;
输入密码后进入安装界面&lt;br&gt;
如果它提示有nvidia等进程，说明没删干净，请删干净后重启再安装，不然可能会出现bug&lt;br&gt;
如果提示有nouveau等进程，自行去bing搜搜怎么禁用&lt;/p&gt;
&lt;h3 id=&quot;nvidia-proprietary和mitgpl选择&quot;&gt;NVIDIA Proprietary和MIT/GPL选择&lt;/h3&gt;
&lt;p&gt;前者是nvidia的专有内核，可能会更好，后者是开源协议，较新的显卡需要使用开源协议安装，否则也会出现&lt;br&gt;
&lt;strong&gt;NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;32位库安装&quot;&gt;32位库安装&lt;/h3&gt;
&lt;p&gt;如果你想玩steam的话，就必须要安装32位的兼容库，所以在出现有&lt;code&gt;Nvidia&apos;s 32-bit compatibility libraries&lt;/code&gt;字样的一个选项时就要选择yes&lt;br&gt;
但如果报错有unable啥的，就请先和方法一一样在shell里输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 添加i386架构支持&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; dpkg&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; --add-architecture&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; i386&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后再重新运行run文件&lt;/p&gt;
&lt;h3 id=&quot;一个重要选项&quot;&gt;一个重要选项&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Would you like to run the nvidia-xconfig utility to automatically update your X configuration file so that the NVIDIA X driver will be used when you restart X? Any pre-existing X configuration file will be backed up.&lt;/strong&gt;&lt;br&gt;
这个选择要选no,选yes的话其他人说的会开机黑屏，我一开始不知道也试了下，真开机黑屏&lt;br&gt;
如果不小心选了yes又懒得重刷的话，可以看看这个博客&lt;a href=&quot;https://www.cnblogs.com/izwb003/p/ubuntu_nvidia_blackscreen_solution.html&quot;&gt;链接&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;其他选项&quot;&gt;其他选项&lt;/h3&gt;
&lt;p&gt;continue install是继续安装，abort install是退出安装&lt;br&gt;
其他选项按照它默认的即可&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;其他博客中会推荐在tty环境下安装驱动，但我自己试了很多次在dde桌面环境下安装，重启后正常，所以应该可以放心安装吧&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;检查是否安装成功&quot;&gt;检查是否安装成功&lt;/h2&gt;
&lt;p&gt;输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;nvidia-smi&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;后有输出即可&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2025/07/03/XAIxSpzkiRCfBuw.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;我的输出&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/07/03/XAIxSpzkiRCfBuw.png&quot; alt=&quot;我的输出&quot;&gt;&lt;/a&gt;&lt;br&gt;
上图是我的输出&lt;br&gt;
我还试了下在deepin上玩漫威蜘蛛侠重制版，用deepin的统信Windows应用兼容引擎，&lt;br&gt;
在调试里只要设置好dxvk,vkd3d和wine版本后就能玩到满血流畅且可开光追的蜘蛛侠了！&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2025/07/02/etUBjyRA5QV1v2O.webp&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/07/02/etUBjyRA5QV1v2O.webp&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Deepin上firefox火狐浏览器缩放和圆角问题解决</title><link>https://blog.skyshadow.fun/posts/20250702194947/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20250702194947/</guid><pubDate>Wed, 02 Jul 2025 19:49:47 GMT</pubDate><content:encoded>&lt;h1 id=&quot;firefox在deepin上窗口圆角消失&quot;&gt;Firefox在Deepin上窗口圆角消失？&lt;/h1&gt;
&lt;p&gt;deepin系统有专门的窗口圆角设置，但firefox浏览器默认似乎还是直角窗口，解决方法也很简单&lt;br&gt;
点击右上角三横线菜单，依次点击 “更多工具“，“定制工具栏“，在左下角的“标题栏“那打勾即可，窗口圆角就会恢复&lt;/p&gt;
&lt;h1 id=&quot;firefox在笔记本上缩放不正常&quot;&gt;Firefox在笔记本上缩放不正常&lt;/h1&gt;
&lt;p&gt;笔记本在deepin上会自动全局缩放，在Windows上也是，但Firefox似乎会在开机后再缩放一次，看起来很怪，但也可以简单地解决&lt;br&gt;
在firefox顶部输入框里输入”&lt;strong&gt;about:config&lt;/strong&gt;”&lt;br&gt;
点击 “接受风险并继续“&lt;br&gt;
搜索“&lt;strong&gt;browser.display.os-zoom-behavior&lt;/strong&gt;”&lt;br&gt;
将此值设置为0即可&lt;br&gt;
重启后也不会缩放异常。&lt;/p&gt;</content:encoded></item><item><title>华硕天选6pro安装Deepin和Windows双系统分享和一些bug解决方法</title><link>https://blog.skyshadow.fun/posts/20250613103229/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20250613103229/</guid><pubDate>Fri, 13 Jun 2025 10:32:29 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;高考结束了，也是拥有了自己的第一台电脑 &lt;strong&gt;华硕天选6pro&lt;/strong&gt;，电脑到手就刷了个deepin系统双系统到G盘，系统适配上似乎没有一点bug，蓝牙、wifi、摄像头等都能正常使用，不用额外配置。Deepin作为最好的国产linux，界面是真好看，也挺流畅的，比C盘的Windows11好得多，&lt;del&gt;没想到文件管理器卡死的bug现在还有&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;就分享一下怎么刷入吧。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2025/06/13/HEvLcTg7YObRaFh.webp&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;6802922EA00C0569EEBE80CC1ADF0257.webp&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/06/13/HEvLcTg7YObRaFh.webp&quot; alt=&quot;6802922EA00C0569EEBE80CC1ADF0257.webp&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2025/06/13/DInRy7iZehOg9HA.webp&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;445A3026A2EF9123AE1300DD1084565F.webp&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/06/13/DInRy7iZehOg9HA.webp&quot; alt=&quot;445A3026A2EF9123AE1300DD1084565F.webp&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;前图是Deepin,后图是Windows11&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;关于deepin&quot;&gt;关于Deepin&lt;/h1&gt;
&lt;p&gt;国产第一的Linux，界面很好看，对我们来说使用很友好，内置方便的应用商城，里面安装东西很快，甚至都有HMCL,还有修改的更好用的wine。额反正我用起来很习惯，比其他linux都好用一点。&lt;/p&gt;
&lt;p&gt;这是它的官网&lt;a href=&quot;https://www.deepin.org/index/zh&quot;&gt;deepin - 基于Linux的开源国产操作系统&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;刷入&quot;&gt;刷入&lt;/h1&gt;
&lt;h2 id=&quot;制作安装u盘&quot;&gt;制作安装U盘&lt;/h2&gt;
&lt;p&gt;用的&lt;a href=&quot;https://www.ventoy.net/&quot;&gt;Ventoy&lt;/a&gt;制作刷入U盘，会把你的U盘清空，记得备份，做好后系统iso放进去即可&lt;/p&gt;
&lt;h2 id=&quot;一些设置和进入ventory&quot;&gt;一些设置和进入Ventory&lt;/h2&gt;
&lt;p&gt;开机时一直按住F2,&lt;del&gt;其实按一次就够了，只是这电脑开机太快了有时按不到&lt;/del&gt;，进入华硕的bios面板，其他的电脑可能是F12或F8,查查就是里。华硕的需要在高级设置里把安全启动和快速启动关了，看不懂的先设置为中文，如果不关的话大概率用ventory刷不上。然后回到主页面，在启动菜单（Boot Menu）里点击你的Ventory U盘。其他电脑也是用你的U盘来启动。&lt;/p&gt;
&lt;h2 id=&quot;刷入deepin&quot;&gt;刷入Deepin&lt;/h2&gt;
&lt;p&gt;选择你的iso镜像，两种启动模式，都试试，进入后会到Deepin的安装界面，Try开头的是试试Deepin系统，看看有没有bug, Install with kernel 6.x就是安装系统，点击后略过选择语言那些，之后可选择&lt;strong&gt;全盘安装&lt;/strong&gt;和&lt;strong&gt;自定义安装&lt;/strong&gt;，如果你想只用一个系统的话就用全盘安装，我想Windows11和Deepin双系统共存，所以自定义安装，新手选择后再选一个空的盘挂载“/”根分区即可，如果想自定义安装各分区也可以试试。然后就是等待它的安装。&lt;/p&gt;
&lt;h1 id=&quot;一些天选6pro上的问题&quot;&gt;一些天选6pro上的问题&lt;/h1&gt;
&lt;h2 id=&quot;在选择install-deepin-with-kernel-612时kernel-panic&quot;&gt;在选择install deepin with kernel 6.12时kernel panic&lt;/h2&gt;
&lt;p&gt;建议先安装6.6内核的，然后在系统里通过命令行升级内核&lt;br&gt;
手动升级内核的方法为&lt;br&gt;
用终端执行：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; linux-image-&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;*&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;（搜索可用内核）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果是fish shell的话可能需要输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;linux-image-*&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;找到想要升级的内核版本后，执行：&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;```&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;shell&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt install linux-image-[内核版本号，有的加后缀] linux-headers-[内核版本号，有的加后缀]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装对应版本的内核&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; linux-image-6.12.31-rolling&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; linux-headers-6.12.31-rolling&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;除了挂载的分区盘其他盘显示bitlocker锁定打开不了&quot;&gt;除了挂载“/”的分区盘，其他盘显示Bitlocker锁定打开不了&lt;/h2&gt;
&lt;p&gt;你在Windows11系统里打开了设备加密，所以所有盘都被Bitlocker锁了&lt;/p&gt;
&lt;p&gt;解决方法：在Window11系统里打开「设置」&gt;「隐私和安全性」&gt;「安全性」&gt;「设备加密」页面，关闭即可。&lt;/p&gt;
&lt;h2 id=&quot;另一个windows系统挂了要输入密匙才能进入&quot;&gt;另一个Windows系统挂了，要输入密匙才能进入&lt;/h2&gt;
&lt;p&gt;也是Bitlocker的原因，去它屏幕上显示的网页，登陆你电脑登陆的微软账号，它会有几个密匙，找第二列和电脑显示一样的，输入那很长的密匙即可&lt;/p&gt;
&lt;h2 id=&quot;使用nvidia-detect显示源里最新的nvidia驱动不支持geforce-5060-moblie的显卡&quot;&gt;使用nvidia-detect显示源里最新的nvidia驱动不支持Geforce 5060 moblie的显卡&lt;/h2&gt;
&lt;p&gt;截止该文章最后修改的2025年11月15日，deepin源里最新的驱动还是只有580的专有驱动，没有开源驱动（不是指社区开源驱动nouveau），所以目前只能用nvidia官网里下载的最新.run驱动，然后sudo sh ./xx.sh运行，并选择MIT开源协议。详细看我的另一个帖子&lt;a href=&quot;/posts/20250702202900&quot;&gt;Deepin手动安装nvidia闭源显卡驱动 &lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;{warning}注意：使用.run文件安装的驱动会和deepin源里与nvidia驱动相关东西冲突，安装后请尽量避免使用apt安装这些东西&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>分享一个python做的mask+图片快捷抠图工具</title><link>https://blog.skyshadow.fun/posts/20250610155030/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20250610155030/</guid><pubDate>Tue, 10 Jun 2025 15:50:30 GMT</pubDate><content:encoded>&lt;p&gt;分享用Python做的一个mask深度图+图片快捷抠图工具，这是以前为了给手机弄景深壁纸时做的，给自己做了个很简陋能用的，后来觉得有点方便，又有点bug，所以扔给deepseek改了改&lt;br&gt;
用了tkinter,cv2和numpy&lt;/p&gt;
&lt;h1 id=&quot;使用方法&quot;&gt;使用方法：&lt;/h1&gt;
&lt;p&gt;准备好图片文件和mask.png文件，运行，在弹出的用tkinter做的个简陋ui界面上选择主图片和深度图就行了&lt;br&gt;
阈值调得越大越精确，但不是越大越效果好，多试试即可&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;代码如下&quot;&gt;代码如下：&lt;/h1&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; cv2  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; numpy &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; np  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; os  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tkinter &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tkinter &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; filedialog, messagebox  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; ImageProcessorApp&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; __init__&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self, root):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.root &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; root&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.root.title(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;mask抠图&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.root.geometry(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;300x400&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        title_label &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Label(root, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;用image和mask来抠图&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;微软雅黑&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        title_label.pack(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pady&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.select_image_button &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Button(root, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;选择主图像&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.select_image)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.select_image_button.pack(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pady&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.select_mask_button &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Button(root, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;选择深度图&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.select_mask)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.select_mask_button.pack(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pady&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.process_button &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Button(root, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;处理图像&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.process_images)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.process_button.pack(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pady&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.image_label &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Label(root, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;未选择主图像&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.image_label.pack(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pady&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mask_label &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Label(root, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;未选择深度图&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mask_label.pack(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pady&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.result_label &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Label(root, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.result_label.pack(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pady&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.threshold_label &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Label(root, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;调整阈值:&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;微软雅黑&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.threshold_label.pack(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pady&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.threshold_scale &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Scale(root, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;from_&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;orient&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;tk.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;HORIZONTAL&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.threshold_scale.set(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;199&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.threshold_scale.pack(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pady&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        footer_label &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Label(root, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;Make by SkyShadowHeo with python&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;(With MIAI,to put it accurately)&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;微软雅黑&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        footer_label.pack(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;side&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;tk.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;BOTTOM&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pady&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.image_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mask_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; select_image&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.image_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; filedialog.askopenfilename(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;选择主图像&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;                                                      filetypes&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;[(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;图像文件&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;*.jpg;*.jpeg;*.png&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.image_path:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.image_label.config(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;已选择主图像: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;os.path.basename(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.image_path)&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; select_mask&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mask_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; filedialog.askopenfilename(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;选择深度图&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;                                                     filetypes&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;[(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;图像文件&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;*.jpg;*.jpeg;*.png&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mask_path:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;            self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mask_label.config(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;已选择深度图: &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;os.path.basename(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mask_path)&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; process_images&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(self):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.image_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mask_path:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            messagebox.showerror(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;错误&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;请确保已选择主图像和深度图。&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;            return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        image &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; cv2.imread(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.image_path)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        depth_map &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; cv2.imread(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.mask_path, cv2.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;IMREAD_GRAYSCALE&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; image.shape[:&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; depth_map.shape[:&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            depth_map &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; cv2.resize(depth_map, (image.shape[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;], image.shape[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]), &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;interpolation&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;cv2.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;INTER_CUBIC&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        normalized_depth &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; cv2.normalize(depth_map, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;None&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, cv2.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;NORM_MINMAX&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        threshold_value &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.threshold_scale.get()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        _, mask &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; cv2.threshold(normalized_depth, threshold_value, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, cv2.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;THRESH_BINARY&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        kernel &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; np.ones((&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;), np.uint8)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        mask &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; cv2.morphologyEx(mask, cv2.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;MORPH_CLOSE&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, kernel)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        mask &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; cv2.morphologyEx(mask, cv2.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;MORPH_OPEN&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, kernel)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        result &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; cv2.cvtColor(image, cv2.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;COLOR_BGR2BGRA&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        result[:, :, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; mask&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        output_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; os.path.join(os.getcwd(), &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;output_&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;threshold_value&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;.png&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        cv2.imwrite(output_path, result)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.result_label.config(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;处理结果已保存:&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;output_path&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; __name__&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;__main__&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    root &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Tk()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    app &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ImageProcessorApp(root)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    root.mainloop()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded></item><item><title>分享一个网站飘落雪花样式</title><link>https://blog.skyshadow.fun/posts/20250501091139/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20250501091139/</guid><pubDate>Thu, 01 May 2025 09:11:39 GMT</pubDate><content:encoded>&lt;p&gt;分享一个网站飘落雪花样式，效果如本页面所示，可和鼠标手指等有简单躲避互动&lt;/p&gt;
&lt;h1 id=&quot;使用方法&quot;&gt;使用方法：&lt;/h1&gt;
&lt;p&gt;在页面head或body里插入这三行即可&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;snow&quot;&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; style&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;position:fixed;top:0;left:0;width:100%;height:100%;z-index:99999;pointer-events:none&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; notMobile&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(navigator.userAgent.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;/(phone&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;pad&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;pod&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;iPhone&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;iPod&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;ios&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;iPad&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;Android&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;Mobile&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;BlackBerry&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;IEMobile&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;MQQBrowser&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;JUC&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;Fennec&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;wOSBrowser&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;BrowserNG&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;WebOS&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;Symbian&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;Windows Phone)/&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)));&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; async&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; type&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;text/javascript&quot;&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; src&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;https://cdn.jsdelivr.net/gh/Candinya/Kratos-Rebirth@latest/source/js/snow.min.js&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;本页面雪花样式可能被拉伸，请执行复制代码查看完整效果&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div&gt;&lt;canvas id=&quot;snow&quot; style=&quot;position:fixed;top:0;left:0;width:100%;height:100%;z-index:99999;pointer-events:none&quot;&gt;&lt;/canvas&gt;&lt;/div&gt;  
&lt;script&gt;const notMobile = (!(navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)));&lt;/script&gt;  
&lt;script async type=&quot;text/javascript&quot; src=&quot;https://cdn.jsdelivr.net/gh/Candinya/Kratos-Rebirth@latest/source/js/snow.min.js&quot;&gt;&lt;/script&gt;  </content:encoded></item><item><title>分享一个用python做的ttf字体转png图片的小程序</title><link>https://blog.skyshadow.fun/posts/20250413083804/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20250413083804/</guid><pubDate>Sun, 13 Apr 2025 08:38:04 GMT</pubDate><content:encoded>&lt;p&gt;分享一个用python做的ttf字体转png图片的小程序，设置好参数后输入想要生成的文字即可&lt;br&gt;
制作表盘时文字图片不用一个一个去ps抠了&lt;br&gt;
代码如下&lt;/p&gt;
&lt;hr&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 引入该用的库&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;正在准备中，请稍等...&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; os  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; matplotlib.pyplot &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; plt  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; fontTools.ttLib &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; TTFont  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; matplotlib.font_manager &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; FontProperties  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; matplotlib.patheffects &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; path_effects  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 这些是可以修改的参数&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;font_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;1.ttf&apos;&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  # 字体文件，你的字体名  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;output_dir &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;./output/&apos;&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; # 字体输出目录  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;dpi &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 60&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; # 值越大，生成的图片越大  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;hs &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 92&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; # 镂空字体大小  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;hw &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; # 镂空字体描边宽度  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;hc &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;black&quot;&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; # 镂空字体颜色  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;ss &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 100&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; # 实心字体大小  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;sc &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;black&quot;&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; # 实心字体颜色  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 来一句欢迎语&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;欢迎使用一个生成字体图片的小pyhton程序&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;请提前在py文件里设置相应的参数&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;made by 天影大侠&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 创建输出目录存&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; not&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; os.path.exists(output_dir):  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    os.makedirs(output_dir)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;i &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;欢迎给天影大侠点赞&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;欢迎给天影大侠点赞&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;    # 输入字符&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    input_text &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; input&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;请输入要生成图片的字符: &quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;正在生成中... 字符越多生成越久&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;    # 使用fontTools读取字体&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    font &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; TTFont(font_path)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;    # 生成实心字体和镂空字体的PNG图片&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; render_character&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(char, is_hollow&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;False&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;        # 替换非法字符，防止命名报错&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        valid_char &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; char.replace(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;?&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;问号&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;        # 使用matplotlib生成字体图像&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        fig, ax &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; plt.subplots(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;figsize&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1.2&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;dpi&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;dpi)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        ax.set_axis_off()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;        # 选择字体&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        prop &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; FontProperties(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;fname&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;font_path)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; is_hollow:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;            # 镂空字体&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            text &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ax.text(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, char, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;fontsize&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;hs, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;ha&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;center&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;va&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;center&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;fontproperties&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;prop, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;none&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;bold&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            text.set_path_effects([&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;                path_effects.withStroke(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;linewidth&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;hw, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;foreground&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;hc, &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;                                        capstyle&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;round&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;joinstyle&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;round&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 圆滑转角&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            ])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        else&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;            # 实心字体&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            ax.text(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, char, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;fontsize&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;ss, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;ha&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;center&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;va&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;center&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;fontproperties&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;prop, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;sc, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;bold&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;        # 调整边界&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        plt.subplots_adjust(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;left&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;right&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;top&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;bottom&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;        # 转换为透明背景的PNG&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        image_path &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; os.path.join(output_dir, &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;valid_char&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;_&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;hollow&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; is_hollow &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;solid&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;.png&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        plt.savefig(image_path, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;png&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;transparent&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        plt.close(fig)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;    # 渲染输入的每个字符&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; char &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; input_text:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        render_character(char, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;is_hollow&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;False&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 实心字体&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        render_character(char, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;is_hollow&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)   &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 镂空字体&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;    print&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;所有字符图像已生成！&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded></item><item><title>给你的网站后面加上一只会跟着鼠标动的小蜘蛛</title><link>https://blog.skyshadow.fun/posts/20250405160613/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20250405160613/</guid><pubDate>Sat, 05 Apr 2025 16:06:13 GMT</pubDate><content:encoded>&lt;p&gt;先看效果&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2025/04/05/ZpPAMLlQn82fV6e.gif&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;spider&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/05/ZpPAMLlQn82fV6e.gif&quot; alt=&quot;spider&quot;&gt;&lt;/a&gt;&lt;br&gt;
源码原地址：&lt;br&gt;
CodePen:&lt;a href=&quot;https://codepen.io/supah/pen/vYdwbQK&quot;&gt;Parametric Spider&lt;/a&gt;&lt;br&gt;
稍微修改了一下，去掉了设置和署名，分享一下代码&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;HTML里要引入&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://unpkg.co/gsap@3/dist/gsap.min.js&quot;&gt;https://unpkg.co/gsap@3/dist/gsap.min.js&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;和&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.7.9/dat.gui.min.js&quot;&gt;https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.7.9/dat.gui.min.js&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;然后再放上&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;spidercanvas&quot;&lt;/span&gt;&lt;span style=&quot;color:#6E011A;--shiki-light-font-style:italic;--shiki-dark:#FFB1AF;--shiki-dark-font-style:italic&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即可&lt;br&gt;
如果想要一个按钮可以打开或关闭它的话，可以加上&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; onclick&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;spider&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;()&quot;&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;spiderbutton&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;蜘蛛，启动！&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;JS文件:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/*--------------------  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;Vars  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;--------------------*/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; canvas&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; document.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;querySelector&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;#spidercanvas&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; ctx&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; canvas.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;getContext&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;2d&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; button&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; document.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;getElementById&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;spiderbutton&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; win&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  w: window.innerWidth,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  h: window.innerHeight  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; mouse&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  x: win.w &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  y: win.h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  lerpX: win.w &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  lerpY: win.h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  stepX: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  stepY: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  oldStepX: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  oldStepY: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  angle: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; opts&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  cellSize: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  pawRadius: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;94&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  pawHeight: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;200&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  pawRandomStep: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.2&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  bodyHeight: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  spiderOffsetX: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  spiderOffsetY: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  shadowY: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.3&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  speed: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.12&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  stop: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  jump: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; cols &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; rows &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;canvas.style.display &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;block&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/*--------------------  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;button  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;--------------------*/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; spider&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;() {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (canvas.style.display &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;none&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    canvas.style.display &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;block&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  } &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    canvas.style.display &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;none&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  }  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/*--------------------  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;Lerp  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;--------------------*/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; lerp&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; c) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; a &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; c &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; b;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/*--------------------  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;Random  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;--------------------*/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; random&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;range&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; start &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; range &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; range &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/*--------------------  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;Resize  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;--------------------*/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; handleResize&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; () &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  win.w &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; window.innerWidth;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  win.h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; window.innerHeight;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  canvas.width &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; win.w;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  canvas.height &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; win.h;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  cols &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;round&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(win.w &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; opts.cellSize) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  rows &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;round&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(win.h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; opts.cellSize) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;handleResize&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;window.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;addEventListener&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;resize&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, handleResize);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/*--------------------  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;Paws  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;--------------------*/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; Paws&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; [  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  { x: win.w &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, y: win.h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; },  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  { x: win.w &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, y: win.h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; },  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  { x: win.w &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, y: win.h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; },  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  { x: win.w &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, y: win.h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; },  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  { x: win.w &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, y: win.h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; },  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  { x: win.w &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, y: win.h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; },  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  { x: win.w &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, y: win.h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; },  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  { x: win.w &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, y: win.h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; }  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;];  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/*--------------------  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;Clear  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;--------------------*/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; clear&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; () &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  ctx.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;clearRect&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, win.w, win.h);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/*--------------------  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;Circle  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;--------------------*/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; circle&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  ctx.fillStyle &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; c;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  ctx.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;beginPath&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  ctx.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;ellipse&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(x, y, r, r, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, Math.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;PI&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  ctx.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;fill&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  ctx.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;closePath&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/*--------------------  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;Rect  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;--------------------*/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; rect&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  ctx.fillStyle &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; c;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  ctx.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;fillRect&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(x, y, r, r);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/*--------------------  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;Walk  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;--------------------*/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; walk&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; () &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; ind &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  Array&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    .&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;fill&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    .&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;forEach&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; theta&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (i &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; ===&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; x&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; random&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        mouse.x &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; cols &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; opts.pawRadius &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;sin&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(theta &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;PI&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        opts.pawRadius &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; opts.pawRandomStep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; y&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; random&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        mouse.y &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; rows &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; opts.pawRadius &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;cos&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(theta &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;PI&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        opts.pawRadius &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; opts.pawRandomStep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      gsap.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(Paws[ind&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;], {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        x,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        y,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        duration: opts.speed,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        ease: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;power3.out()&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        delay: ((i &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/*--------------------  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;Check Step  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;--------------------*/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; checkStep&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; () &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  mouse.stepX &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;round&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;((mouse.x &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; win.w) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (cols &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; opts.cellSize;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  mouse.stepY &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;round&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;((mouse.y &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; win.h) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (rows &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; opts.cellSize;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (mouse.oldStepX &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; mouse.stepX &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; mouse.oldStepY &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; mouse.stepY) {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;    walk&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  }  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  mouse.oldStepX &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; mouse.stepX;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  mouse.oldStepY &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; mouse.stepY;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  // rect(mouse.stepX, mouse.stepY, opts.cellSize, &apos;rgba(255, 0, 0, .1)&apos;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/*--------------------  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;Draw Spider  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;--------------------*/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; drawSpider&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; () &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; x&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; mouse.lerpX &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; opts.spiderOffsetX;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; y&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; mouse.lerpY &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; opts.spiderOffsetY;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  // Shadows  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  Paws.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;forEach&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ctx.strokeStyle &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;#eee&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ctx.lineWidth &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ctx.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;beginPath&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ctx.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;moveTo&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(x, y &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; opts.bodyHeight);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; x2&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; lerp&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(x, p.x, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; y2&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; lerp&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(y &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; opts.jump, p.y, opts.shadowY);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ctx.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;quadraticCurveTo&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(x2, y2, p.x, p.y);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ctx.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;stroke&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ctx.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;closePath&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  });  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  // Paws  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  Paws.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;forEach&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ctx.strokeStyle &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;black&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ctx.lineWidth &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ctx.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;beginPath&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ctx.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;moveTo&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(x, y &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; opts.jump);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; x1&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; lerp&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(x, p.x, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; y1&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; lerp&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(y &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; opts.jump, p.y &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; opts.pawHeight, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ctx.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;quadraticCurveTo&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(x1, y1, p.x, p.y);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ctx.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;stroke&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ctx.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;closePath&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  });  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  // Head  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/*--------------------  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;Draw Mouse  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;--------------------*/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; drawMouse&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; () &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  mouse.lerpX &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; lerp&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(mouse.lerpX, mouse.x, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  mouse.lerpY &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; lerp&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(mouse.lerpY, mouse.y, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (opts.stop) {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mouse.lerpX &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; win.w &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mouse.lerpY &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; win.h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mouse.x &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; win.w &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mouse.y &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; win.h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  }  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  checkStep&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/*--------------------  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;Draw  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;--------------------*/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; draw&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  clear&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  drawMouse&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  drawSpider&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  requestAnimationFrame&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(draw);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;draw&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;/*--------------------  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;Mouse  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;--------------------*/&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; handleMouseMove&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (opts.stop) {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mouse.lerpX &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; win.w &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mouse.lerpY &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; win.h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mouse.x &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; win.w &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mouse.y &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; win.h &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  } &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mouse.x &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; e.clientX;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    mouse.y &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; e.clientY;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  }  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; handleTouchMove&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  mouse.x &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; e.touches[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;].clientX;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  mouse.y &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; e.touches[&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;].clientY;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; handleMouseDown&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; () &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (opts.stop) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  gsap.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;killTweensOf&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(opts);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  gsap.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(opts, {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    jump: opts.bodyHeight,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    duration: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.5&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ease: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;power3.out&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  });  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; handleMouseUp&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; () &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (opts.stop) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  gsap.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;killTweensOf&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(opts);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  gsap.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(opts, {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    jump: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    duration: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    ease: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;elastic(1.4, 0.1)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  });  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;};  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;window.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;addEventListener&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;mousemove&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, handleMouseMove);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;window.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;addEventListener&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;touchstart&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, handleTouchMove);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;window.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;addEventListener&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;touchmove&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, handleTouchMove);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;window.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;addEventListener&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;mousedown&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, handleMouseDown);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;window.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;addEventListener&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;mouseup&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, handleMouseUp);  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;CSS文件:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;#spidercanvas&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  position&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;fixed&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  top&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  left&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  width&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  height&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  z-index&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;-1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;; #把它放在背景前，其他元素后，放在其他元素前也行  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded></item><item><title>安卓类原生生存指南分享</title><link>https://blog.skyshadow.fun/posts/20250405155131/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20250405155131/</guid><pubDate>Sat, 05 Apr 2025 15:51:31 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;好丑&lt;/p&gt;
&lt;h1 id=&quot;安卓类原生使用分享&quot;&gt;安卓类原生使用分享&lt;/h1&gt;
&lt;p&gt;分享一下类原生使用的一些小经验&lt;br&gt;
这系统桌面功耗有时比玩游戏还高👀&lt;br&gt;
都需要root后并且有核心破解与lsposed&lt;br&gt;
有点多，可以在右下角使用目录(新astro博客移动端还未添加目录)&lt;/p&gt;
&lt;h1 id=&quot;一dsu&quot;&gt;一.DSU&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/VegaBobo/DSU-Sideloader&quot;&gt;GitHub DSU-Sideloader&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;dsu是安卓11以上自带的一个功能，可以快捷地侧载一个系统，两个系统都可以正常使用，如设置密码等等。使用dsu-sideloader可以最快捷地体验一下类原生，毕竟不推荐给自己的主力机直接刷。&lt;/p&gt;
&lt;p&gt;dsu可以刷入通用镜像gsi或者你系统的类原生包等，&lt;/p&gt;
&lt;p&gt;通用镜像在这找到&lt;a href=&quot;https://github.com/phhusson/treble_experimentations/wiki/Generic-System-Image-%28GSI%29-list&quot;&gt;Generic System Image (GSI) list · phhusson/treble_experimentations Wiki · GitHub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;如果是做好了的类原生rom话，把payload.bin里的除了boot，dtbo，vbmeta和vbmeta为前缀的其他分区提取出来又压缩到一个zip里，放进dsu-sideloader即可，其他定制的系统也可以试试&lt;/p&gt;
&lt;p&gt;如果是gsi的话，就会有很多bug，如自动亮度跳跃，ims无法注册导致收发不了电话信息，所以最好找自己系统的包&lt;/p&gt;
&lt;h1 id=&quot;二美化&quot;&gt;二.美化&lt;/h1&gt;
&lt;h2 id=&quot;iconify&quot;&gt;iconify&lt;/h2&gt;
&lt;p&gt;这个用过类原生的应该都会用，aosp一般的美化都是这个软件，如果你的系统自带的美化足够的话推荐不用，因为用它容易系统界面死机等等问题，当然你可以把它后台保好，或者只使用lsposed区里的功能&lt;/p&gt;
&lt;p&gt;状态栏把窗口级模糊处理打开，模糊度设置为70可有如下效果&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2025/04/05/Fqz6MvxQ1XgcP2w.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;Screenshot20250212175908Evolution X Launcherpng&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/05/Fqz6MvxQ1XgcP2w.png&quot; alt=&quot;Screenshot20250212175908Evolution X Launcherpng&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Github链接:&lt;a href=&quot;https://github.com/iconify/iconify&quot;&gt; iconify&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;colorblendr&quot;&gt;colorblendr&lt;/h2&gt;
&lt;p&gt;这个是用来改material you配色的，可以把md3设计的软件背景色改亮一点或者改改配色，{% hideInline 虽然不得不说背景是那种淡色的好丑，不如纯白 %}&lt;/p&gt;
&lt;p&gt;Github链接:&lt;a href=&quot;https://github.com/Mahmud0808/ColorBlendr&quot;&gt;colorblendr&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;小窗&quot;&gt;小窗&lt;/h2&gt;
&lt;p&gt;一些系统都把米窗整合了进去，链接在这，支持安卓8到14&lt;/p&gt;
&lt;p&gt;Github:&lt;a href=&quot;https://github.com/sunshine0523/Mi-FreeForm&quot;&gt;Mi-Freeform&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;安卓15的话有从RisingOS提取出来的，下载链接&lt;a href=&quot;https://www.123pan.com/s/GeiFjv-t7vEh.html&quot;&gt;123网盘&lt;/a&gt; 提取码：1ESM&lt;/p&gt;
&lt;p&gt;当然自己更喜欢用二改的flyme样式米窗，更好看，可以原版米窗侧边栏和flyme样式的小窗一起用&lt;/p&gt;
&lt;p&gt;Flyme样式二改米窗Github:&lt;a href=&quot;https://github.com/Live-Block/Flyme-FreeForm&quot;&gt;Flyme-FreeForm&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;负一屏&quot;&gt;负一屏&lt;/h2&gt;
&lt;p&gt;Google的广告机负一屏没人想用吧，可以用SmartSpacer替换成放安卓小部件的&lt;/p&gt;
&lt;p&gt;Github:&lt;a href=&quot;https://github.com/KieronQuinn/Smartspacer&quot;&gt;Smartspacer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在lsposed里要勾选桌面启动器和Google应用&lt;/p&gt;
&lt;p&gt;只打开相应的负一屏功能就行了，里面的本机smartspace等功能不用开，开了经常需要重启系统界面&lt;/p&gt;
&lt;p&gt;负一屏可以改成这种&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2025/04/05/FscQo26TdIlhRDK.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;Screenshot20250212180005Smartspacerpng&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/05/FscQo26TdIlhRDK.png&quot; alt=&quot;Screenshot20250212180005Smartspacerpng&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;图标包&quot;&gt;图标包&lt;/h2&gt;
&lt;p&gt;图标包去酷安里找找就行了，一般的系统在更改图标包后只是更改了桌面图标，如果想要系统全覆盖的话(如最近任务卡片上)，可以用这个模块，Github:&lt;a href=&quot;https://github.com/RichardLuo0/global-icon-pack-android&quot;&gt;GitHub - RichardLuo0/global-icon-pack-android: An Xposed module for applying icon packs globally&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;字体和emoji&quot;&gt;字体和emoji&lt;/h2&gt;
&lt;p&gt;字体的话可以用这个字体模块，把你想更换的字体ttf放进去就行了&lt;/p&gt;
&lt;p&gt;Github: &lt;a href=&quot;https://github.com/lxgw/simple-cjk-font-magisk-module-template&quot;&gt;# CJK 字体 Magisk 模块模板&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;但安卓15好像没用，所以又因为一般的系统都会内置字体选择，可以选inter-vf，harmonyos-sans，ubuntu等字体，就可以直接把字体文件重命名为如ubuntu.ttf，然后用模块放进system/product/fonts里，再在系统的字体选择里选择ubuntu就行了&lt;/p&gt;
&lt;p&gt;emoji的话能找到很多ios的emoji模块，但觉得华为的更好看一点，所以用的华为的，分享一下&lt;a href=&quot;https://www.123pan.com/s/GeiFjv-6fvEh.html&quot;&gt;123网盘&lt;/a&gt;提取码：DLjW，把它命名为NotoColorEmoji.ttf后也放到system/product/fonts即可&lt;/p&gt;
&lt;p&gt;华为emoji长这样&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2025/04/05/TXEHCoLqdhjQvZP.jpg&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;dde653eb4d68f941d7b9966d997e4c68jpeg&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2025/04/05/TXEHCoLqdhjQvZP.jpg&quot; alt=&quot;dde653eb4d68f941d7b9966d997e4c68jpeg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;通知图标&quot;&gt;通知图标&lt;/h2&gt;
&lt;p&gt;把有些空白通知图标改为矢量图标的，不用的话有些通知看起来很难受，或者可以在iconify里打开彩色通知图标，像其他系统一样&lt;/p&gt;
&lt;p&gt;Github:&lt;a href=&quot;https://github.com/xudazhu1/NoticeFix&quot;&gt;NoticeFix&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;三功能&quot;&gt;三.功能&lt;/h1&gt;
&lt;h2 id=&quot;thanos&quot;&gt;Thanos&lt;/h2&gt;
&lt;p&gt;压后台，划卡关闭应用，管理自启动等，不用它的话一晚20格电有好受的，是付费软件，没r的话只能自显神通了，免费功能也够了。&lt;/p&gt;
&lt;p&gt;Github:&lt;a href=&quot;https://github.com/Tornaco/Thanox&quot;&gt;GitHub - Tornaco/Thanox: I am thanos! 😈 👌&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;mi-push&quot;&gt;mi-push&lt;/h2&gt;
&lt;p&gt;推送的，比hms麻烦一点，但酷安和QQ都接入了，还可以自定义通知格式，使用文档看这&lt;a href=&quot;https://bzmshang.top/MiPush-Framework_User-Guide&quot;&gt;MiPush Framework使用指南&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下载时要下载最新版的，看版本号，它网盘里的排序100是排在2前面的，要自己找最新版的，旧版可能用不了&lt;/p&gt;
&lt;h2 id=&quot;墓碑&quot;&gt;墓碑&lt;/h2&gt;
&lt;p&gt;怎么说呢，要用的可以用，我用的n11内核版本太低了，用起来并不好。&lt;/p&gt;
&lt;p&gt;还是分享一下&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://freezer.sakion.top/&quot;&gt;freezer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://app.myflv.cn/&quot;&gt;no-active&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;freezeit 额这个没更了，酷安有二改的还在更，可以试试&lt;/p&gt;
&lt;h1 id=&quot;四一些bug修复&quot;&gt;四.一些bug修复&lt;/h1&gt;
&lt;h2 id=&quot;酷安闪退&quot;&gt;酷安闪退&lt;/h2&gt;
&lt;p&gt;大概率Selinux宽容问题，可以找模块或者shell输入setenforce 0 暂时解决&lt;/p&gt;
&lt;h2 id=&quot;收发不了电话和短信&quot;&gt;收发不了电话和短信&lt;/h2&gt;
&lt;p&gt;如果你用的gsi的话，能打电话发短信才奇怪，如果是做好的rom话，一般不会有这个问题，如果有，用pixel ims弄一下，还不行的话网上说的要重刷底包，我建议的话，不刷系统算了&lt;/p&gt;
&lt;h2 id=&quot;用了魔法后某蓝底软件还是连接不上&quot;&gt;用了魔法后某蓝底软件还是连接不上&lt;/h2&gt;
&lt;p&gt;一些类原生连了梯子，某蓝底软件还是一直显示连接中，我这CrDroid和基于它的系统都这样，在Clash设置里关闭 允许应用绕过 可以解决&lt;/p&gt;
&lt;h1 id=&quot;五其他&quot;&gt;五.其他&lt;/h1&gt;
&lt;h2 id=&quot;系统软件&quot;&gt;系统软件&lt;/h2&gt;
&lt;p&gt;类原生上Google和moto的都好用，moto全家桶可在酷安找到，我这甚至找到了小米的大部分系统软件给类原生的mod版，大家想用的也自显神通找找吧&lt;/p&gt;
&lt;h2 id=&quot;其他软件&quot;&gt;其他软件&lt;/h2&gt;
&lt;h3 id=&quot;语燕输入法&quot;&gt;语燕输入法&lt;/h3&gt;
&lt;p&gt;Github:&lt;a href=&quot;https://github.com/gurecn/YuyanIme&quot;&gt;GitHub - gurecn/YuyanIme: 语燕拼音输入法-一款基于Rime定制开发的九键、全拼、双拼、手写、火星文等方案、支持悬浮、单手、数字行等键盘模式的中文输入法&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这是基于Rime的一个输入法，做的比其他同类输入法要更易用更美观，虽然和搜狗，百度等比起来还是略逊一点。&lt;/p&gt;
&lt;h3 id=&quot;清浊&quot;&gt;清浊&lt;/h3&gt;
&lt;p&gt;一个清理内存的软件，还有一言诗词小部件，负一屏上放的就是它，可以在酷安找到&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;后言&quot;&gt;后言&lt;/h1&gt;
&lt;p&gt;就分享到这了，大家觉得有帮助可以弄弄，自己的话早就没用类原生了，百日誓师后没碰过类原生，18以后能玩游戏了，就更不想弄这些了。&lt;/p&gt;
&lt;p&gt;这次是最后一次长假，既然都弄过了，就分享出来一下&lt;/p&gt;
&lt;p&gt;怎么说呢，弄类原生就像玩游戏一样&lt;/p&gt;
&lt;p&gt;但现在能玩真正的游戏了&lt;/p&gt;
&lt;p&gt;参考：酷安类原生板块和此帖&lt;a href=&quot;https://www.coolapk.com/feed/62657835?shareKey=YmFjMTlhMjFjYjI2NjdmMGU5NzI~&quot;&gt;一个帖子&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>【过时】用Canta删除手机自带的系统软件！</title><link>https://blog.skyshadow.fun/posts/20240215155250/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20240215155250/</guid><pubDate>Thu, 15 Feb 2024 15:52:50 GMT</pubDate><content:encoded>&lt;h3 id=&quot;前言&quot;&gt;前言&lt;/h3&gt;
&lt;p&gt;这里是2025年的天影大侠，Android删除系统软件的话用adb很方便了，这就是给懒人的一个麻烦方式，没有意义，如果root了的话，scene更方便，如果没root的话建议不要去动系统软件。&lt;/p&gt;
&lt;h3 id=&quot;问候&quot;&gt;问候&lt;/h3&gt;
&lt;p&gt;今天分享一个无需root即可删除安卓手机自带app的软件，Canta!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2024/02/18/hyzTBQg2H8cURVA.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;Canta&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2024/02/18/hyzTBQg2H8cURVA.png&quot; alt=&quot;Canta&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/samolego/Canta&quot;&gt;GitHub - samolego/Canta: Uninstall any Android app without root (Shizuku)!&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;要用到软件&quot;&gt;要用到软件！&lt;/h3&gt;
&lt;p&gt;shizuku和canta它自己！&lt;/p&gt;
&lt;p&gt;在这里看看&lt;a href=&quot;https://shizuku.rikka.app/zh-hans/&quot;&gt;Shizuku&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;canta的github见上文&lt;/p&gt;
&lt;p&gt;到相应的网站下载最新版本&lt;/p&gt;
&lt;h4 id=&quot;第一步shizuku激活&quot;&gt;第一步，shizuku激活！&lt;/h4&gt;
&lt;p&gt;这一步网上教程很多很多，大家可以去别的地方看看&lt;/p&gt;
&lt;p&gt;毕竟&lt;del&gt;懒得抄过来&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;这是官方的教程: &lt;a href=&quot;https://shizuku.rikka.app/zh-hans/guide/setup/&quot;&gt;https://shizuku.rikka.app/zh-hans/guide/setup/&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;第二步开始删除了&quot;&gt;第二步，开始删除了！&lt;/h4&gt;
&lt;p&gt;安装好下载的Canta，它会先请求shizuku权限，允许就好&lt;/p&gt;
&lt;p&gt;然后就能删除各种软件了包括系统软件&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2024/02/18/Qeo68pJjCgrAOR2.jpg&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;Screenshot20240218155329293orgsamolegocantaeditjpg&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2024/02/18/Qeo68pJjCgrAOR2.jpg&quot; alt=&quot;Screenshot20240218155329293orgsamolegocantaeditjpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;删除了还有记录，可以恢复，神奇的东西&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2024/02/18/N3E1sGPY7WM8tkd.jpg&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;Screenshot20240218155338105orgsamolegocantaeditjpg&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2024/02/18/N3E1sGPY7WM8tkd.jpg&quot; alt=&quot;Screenshot20240218155338105orgsamolegocantaeditjpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;一些没用的话&quot;&gt;一些没用的话&lt;/h4&gt;
&lt;p&gt;这个软件其实很简单，就是用adb命令删除软件&lt;/p&gt;
&lt;p&gt;如果你想试试的话，可以在shizuku runner里直接输入pm uninstall -k —user 0 [应用包名]&lt;/p&gt;
&lt;p&gt;或在其他终端里输入adb shell pm uninstall -k —user 0 [应用包名]&lt;/p&gt;
&lt;p&gt;但有现成的软件，为啥要自己动手呢&lt;/p&gt;
&lt;p&gt;最后吐槽一下，小米自带的浏览器还没用就1GB，不如via，几MB的大小&lt;/p&gt;</content:encoded></item><item><title>【过时】无需root给QQ添加模块！</title><link>https://blog.skyshadow.fun/posts/20240213100550/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20240213100550/</guid><pubDate>Tue, 13 Feb 2024 10:05:50 GMT</pubDate><content:encoded>&lt;h4 id=&quot;前言&quot;&gt;前言&lt;/h4&gt;
&lt;p&gt;这是2025年的天影大侠，这篇文章或许有用，但不建议QQ使用模块，会被风控，况且root后使用lsposed更方便，不root也没需要弄。&lt;/p&gt;
&lt;h4 id=&quot;问候&quot;&gt;问候&lt;/h4&gt;
&lt;p&gt;大家好，分享一下怎么给安卓QQ添加模块，QQNT版可用，且不需root！&lt;/p&gt;
&lt;h4 id=&quot;准备工具&quot;&gt;准备工具：&lt;/h4&gt;
&lt;p&gt;&lt;del&gt;shizuku,lspatchd&lt;/del&gt;,opatch(或onpatch),QQ,你的模块&lt;/p&gt;
&lt;p&gt;什么意思呢？&lt;/p&gt;
&lt;p&gt;Lsposed是一个不需要root就可以植入模块的Lsposed框架，可以分别去看看它们的GitHub&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/LSPosed/LSPatch&quot;&gt;LSPatch&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/LSPosed/LSPosed&quot;&gt;LSPosed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;后者需要root，前者已经很久没有更新了，且需要shizuku激活（这又是个麻烦事），所以我们可以直接使用lspatch的魔改版的修改版，onpatch！&lt;/p&gt;
&lt;p&gt;看看它们简单的关系吧&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2024/02/16/mpH1TNqeQws97f5.jpg&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;Screenshot20240216093259273orgtelegramgroupeditjpg&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2024/02/16/mpH1TNqeQws97f5.jpg&quot; alt=&quot;Screenshot20240216093259273orgtelegramgroupeditjpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;而且opatch和onpatch不需要使用shizuku，所以检测shizuku安装那变成了&lt;del&gt;检测原神是否安装&lt;/del&gt;，当然没安装也没事。&lt;/p&gt;
&lt;p&gt;onpatch 0.0.6的网盘下载链接：&lt;a href=&quot;https://www.123pan.com/s/GeiFjv-uKyQh.html&quot;&gt;Here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;当然QQ安装包自己准备，最新版也行&lt;/p&gt;
&lt;p&gt;模块的话这里以QAuxiliary为例这个模块功能很丰富，更新也较快&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/cinit/QAuxiliary&quot;&gt;QAuxiliary&lt;/a&gt;这是它的github，可在此下载最新的版本&lt;/p&gt;
&lt;p&gt;开始吧&lt;/p&gt;
&lt;h4 id=&quot;使用步骤&quot;&gt;使用步骤：&lt;/h4&gt;
&lt;p&gt;当然要先安装onpatch和QAuxiliary的安装包&lt;/p&gt;
&lt;p&gt;然后进入onpatch，点击左下角&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2024/02/16/OwWkoCSvxpmbD3J.jpg&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;IMG20240216094920jpg&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2024/02/16/OwWkoCSvxpmbD3J.jpg&quot; alt=&quot;IMG20240216094920jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;再点击那个+号，先要选择存储目录，选好后再点击从已存储的目录中选择你的QQ安装包&lt;/p&gt;
&lt;p&gt;，或选择已安装的应用&lt;/p&gt;
&lt;p&gt;进入后应该是这样子&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2024/02/16/ePGZuxzXHsUkCOf.jpg&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;Screenshot20240216095437153orglsposedonpatcheditjpg&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2024/02/16/ePGZuxzXHsUkCOf.jpg&quot; alt=&quot;Screenshot20240216095437153orglsposedonpatcheditjpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(注入修改器模式和集成&lt;del&gt;原神&lt;/del&gt;模式上面都有介绍，如果是前者的话，可以随时修改注入的模块，但自己使用起来容易掉模块且需要打开onpatch的自启动权限，后者的话把模块集成到安装包里，不会掉，但不能灵活地修改模块，自己选。)&lt;/p&gt;
&lt;p&gt;再将我们的QAuxiliary模块注入即可！&lt;/p&gt;
&lt;p&gt;现在进入QQ，在设置里应该就会出现QAuxiliary的设置了！&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2024/02/16/X2PJuhUEQOdIzar.jpg&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;IMG20240216100007jpg&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2024/02/16/X2PJuhUEQOdIzar.jpg&quot; alt=&quot;IMG20240216100007jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;模块推荐&quot;&gt;模块推荐！&lt;/h4&gt;
&lt;p&gt;分享一些好用的模块：&lt;/p&gt;
&lt;p&gt;一个很多功能的模块&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/cinit/QAuxiliary&quot;&gt;GitHub - cinit/QAuxiliary: QNotified phoenix - To make OICQ great again&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;也是一个很多功能的模块&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Suzhelan/QStory&quot;&gt;GitHub - Suzhelan/QStory&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;QQ省电模块&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/fankes/TSBattery&quot;&gt;GitHub - fankes/TSBattery: A new way to save your battery avoid cancer apps hacker it.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;自动打卡，点赞，续火花的模块&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/LuckyPray/XAutoDaily&quot;&gt;GitHub - LuckyPray/XAutoDaily: 一个基于QQ的全自动签到模块&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>使用typed.js来给你的网页添加打字效果吧</title><link>https://blog.skyshadow.fun/posts/20230812103054/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20230812103054/</guid><pubDate>Sat, 12 Aug 2023 10:30:54 GMT</pubDate><content:encoded>&lt;h1 id=&quot;使用typedjs来给你的网页添加打字效果吧&quot;&gt;使用typed.js来给你的网页添加打字效果吧&lt;/h1&gt;
&lt;p&gt;typed.js官网看这&lt;a href=&quot;https://mattboldt.com/demos/typed-js/&quot;&gt;JavaScript Animated Typing with Typed.js | by Matt Boldt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2023/08/18/adEJKrkPNVLsgDZ.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;typed.js&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/08/18/adEJKrkPNVLsgDZ.png&quot; alt=&quot;typed.js&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;先看看效果&quot;&gt;先看看效果:&lt;/h2&gt;
&lt;p&gt;&lt;span id=&quot;hello-world&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;右侧公告栏也是同样的方法&lt;/p&gt;
&lt;h2 id=&quot;使用指北&quot;&gt;使用指北：&lt;/h2&gt;
&lt;p&gt;先在head或body里引入js&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; src&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;https://unpkg.com/typed.js@2.0.16/dist/typed.umd.js&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后再创建一个自己的js文件，输入以下代码&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; typed &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; Typed&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;#hello-world&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  strings: [&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;Hello World!&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;]  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;});  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在引入typed.js的cdn后面引入你的js文件&lt;/p&gt;
&lt;p&gt;再在html里输入&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;hello-world&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你就可以看到你的打字效果了&lt;/p&gt;
&lt;p&gt;这里必须要span，如果是div的话光标会显示不正常，跑文字下一行去&lt;/p&gt;
&lt;p&gt;当然这只是最基本的用法，你还可以在js里添加一些自定义的&lt;/p&gt;
&lt;p&gt;如将strings替换为&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;  strings&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: [  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    &apos;你猜这些是啥！&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    &apos;你该干些啥！&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    &apos;用你自己的!&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    &apos;我去！&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  ],  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;并添加循环：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;  loop&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;  loopCount&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;Infinity&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;同时你可以在string中的文字里加上 ^3000 来让打字效果在此延迟3000毫秒再继续&lt;/p&gt;
&lt;p&gt;如&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;  strings&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: [  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    &apos;你猜这些^3000是啥！&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    &apos;你该^5000干些啥！&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    &apos;用你^2000自己的!&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    &apos;我去^3000！&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  ],  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;它就会无限循环打字这几行文字&lt;/p&gt;
&lt;p&gt;还可以设置打字速度，回溯速度&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;  typeSpeed&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;  backSpeed&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;typed.js自带很多可自定义的&lt;/p&gt;
&lt;p&gt;在&lt;a href=&quot;https://github.com/mattboldt/typed.js/&quot;&gt;GitHub - mattboldt/typed.js: A JavaScript Typing Animation Library&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;里可以看到所有可以的自定义项&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; typed &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; Typed&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;#element&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {array}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; strings&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; strings to be typed  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {string}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; stringsElement&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; ID of element containing string children  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  strings: [  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    &apos;These are the default values...&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    &apos;You know what you should do?&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    &apos;Use your own!&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;    &apos;Have a great day!&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  ],  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  stringsElement: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {number}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; typeSpeed&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; type speed in milliseconds  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  typeSpeed: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {number}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; startDelay&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; time before typing starts in milliseconds  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  startDelay: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {number}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; backSpeed&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; backspacing speed in milliseconds  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  backSpeed: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {boolean}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; smartBackspace&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; only backspace what doesn&apos;t match the previous string  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  smartBackspace: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {boolean}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; shuffle&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; shuffle the strings  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  shuffle: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {number}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; backDelay&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; time before backspacing in milliseconds  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  backDelay: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;700&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {boolean}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; fadeOut&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; Fade out instead of backspace  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {string}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; fadeOutClass&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; css class for fade animation  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {boolean}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; fadeOutDelay&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; Fade out delay in milliseconds  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  fadeOut: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  fadeOutClass: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;typed-fade-out&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  fadeOutDelay: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;500&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {boolean}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; loop&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; loop strings  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {number}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; loopCount&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; amount of loops  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  loop: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  loopCount: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;Infinity&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {boolean}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; showCursor&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; show cursor  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {string}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; cursorChar&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; character for cursor  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {boolean}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; autoInsertCss&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; insert CSS for cursor and fadeOut into HTML &amp;#x3C;head&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  showCursor: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  cursorChar: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;|&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  autoInsertCss: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {string}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; attr&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; attribute for typing  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * Ex: input placeholder, value, or just HTML text  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  attr: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {boolean}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; bindInputFocusEvents&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; bind to focus and blur if el is text input  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  bindInputFocusEvents: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@property&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {string}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; contentType&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt; &apos;html&apos; or &apos;null&apos; for plaintext  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  contentType: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;html&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * Before it begins typing  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {Typed}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  onBegin&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {},  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * All typing is complete  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {Typed}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  onComplete&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {},  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * Before each string is typed  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {number}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; arrayPos&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {Typed}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  preStringTyped&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;arrayPos&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {},  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * After each string is typed  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {number}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; arrayPos&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {Typed}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  onStringTyped&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;arrayPos&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {},  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * During looping, after last string is typed  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {Typed}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  onLastStringBackspaced&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {},  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * Typing has been stopped  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {number}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; arrayPos&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {Typed}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  onTypingPaused&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;arrayPos&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {},  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * Typing has been started after being stopped  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {number}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; arrayPos&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {Typed}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  onTypingResumed&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;arrayPos&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {},  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * After reset  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {Typed}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  onReset&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {},  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * After stop  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {number}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; arrayPos&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {Typed}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  onStop&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;arrayPos&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {},  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * After start  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {number}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; arrayPos&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {Typed}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  onStart&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;arrayPos&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {},  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * After destroy  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   * &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;@param&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt; {Typed}&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;   */&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;  onDestroy&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: (&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {},  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;});  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;一些有趣的&quot;&gt;一些有趣的&lt;/h2&gt;
&lt;p&gt;butterfly主题的话，主页副标题就使用了这个打字库&lt;/p&gt;
&lt;p&gt;所以如果你不引入它的cdn的话，在主页里也会正常显示&lt;/p&gt;
&lt;p&gt;这样就做了一个只会出现在主页的打字特效了！&lt;/p&gt;</content:encoded></item><item><title>分享:一个python身高计算器/滑稽</title><link>https://blog.skyshadow.fun/posts/20230811102738/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20230811102738/</guid><pubDate>Fri, 11 Aug 2023 10:27:38 GMT</pubDate><content:encoded>&lt;p&gt;分享用Python做的一个身高计算器&lt;br&gt;
当然不是真的了&lt;br&gt;
使用tkinter制作，先输入你的身高后点击计算，就计算出你的身高…&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;代码&quot;&gt;代码&lt;/h4&gt;
&lt;p&gt;如下：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tkinter &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; time  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; random  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;#函数&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; calculate_height&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;():  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    try&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        height &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; float&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(entry.get()) &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        result_label.config(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;计算中...&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        root.update()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;        for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; _ &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; range&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            random_code &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;.join(random.choice(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&amp;#x26;*()&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; _ &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; range&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;))  &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 生成随机的乱码&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            result_var.set(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;计算中...&quot;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; random_code)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            root.update()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;            time.sleep(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        result_var.set(&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;您的身高是 &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; 厘米&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;    except&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; ValueError&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        result_var.set(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;请输入有效的数字身高&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;root &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Tk()  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;root.title(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;身高计算器&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;root.geometry(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;400x200&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;label &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Label(root, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot; &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; \n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;请输入您的身高（厘米）:&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;Arial&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;))  &lt;/span&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 调整字体大小为14  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;label.pack()  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;entry &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Entry(root)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;entry.pack()  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;button &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Button(root, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;计算&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;calculate_height)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;button.pack()  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;result_var &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.StringVar()  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;result_label &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Label(root, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;textvariable&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;result_var)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;result_label.pack()  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;credit_label &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Label(root, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;天影大侠制作（非原创）&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;由最强AI驱动&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;anchor&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;se&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;credit_label.pack(&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;side&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;bottom&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;padx&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;pady&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;root.mainloop()  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4 id=&quot;演示&quot;&gt;演示&lt;/h4&gt;
&lt;p&gt;如下：&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/08/11/8l3DAij6SyRNxXL.gif&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;身高计算器&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/08/11/8l3DAij6SyRNxXL.gif&quot; alt=&quot;身高计算器&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>4种方法给你的我的世界开启n卡独显！</title><link>https://blog.skyshadow.fun/posts/20230806214618/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20230806214618/</guid><pubDate>Sun, 06 Aug 2023 21:46:18 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;这是之前随便找的几个方法，在之前的老电脑里适用，现在的新电脑应该不需要这些方法了吧。
Linux上的话可以去deepin的我的世界wiki上看看方法，n卡和amd卡都有。&lt;br&gt;
&lt;a href=&quot;https://wiki.deepin.org/zh/%E5%BE%85%E5%88%86%E7%B1%BB/02_%E6%8C%89%E8%BD%AF%E4%BB%B6%E5%8A%9F%E8%83%BD%E5%88%92%E5%88%86/04_%E5%8F%AF%E5%AE%89%E8%A3%85%E7%9A%84%E6%B8%B8%E6%88%8F%E4%BB%8B%E7%BB%8D/%E6%B2%99%E7%9B%92%E6%B8%B8%E6%88%8F/%E6%88%91%E7%9A%84%E4%B8%96%E7%95%8C/%E6%88%91%E7%9A%84%E4%B8%96%E7%95%8Cmc&quot;&gt;我的世界 | DeepinWiki&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;正文&quot;&gt;正文&lt;/h1&gt;
&lt;p&gt;大家好！&lt;br&gt;
当你玩我的世界开光影时，如果电脑差的话可能会当场回到电脑主屏幕并给你的电脑几分钟左右的“执行动作冷却期”&lt;br&gt;
当然很有可能你不小心用的电脑自带的集显，那么，也许打开独显游玩我的世界会有所帮助&lt;/p&gt;
&lt;p&gt;现在就看看怎么打开独显吧&lt;/p&gt;
&lt;h2 id=&quot;步骤1检查是否有独显&quot;&gt;步骤1：检查是否有独显&lt;/h2&gt;
&lt;p&gt;首先，我们需要确认你的计算机是否安装了独立显卡。你可以通过以下步骤在设备管理器中查看：&lt;br&gt;
在电脑里右键计算机，点击“属性“，再点击”设备管理器”。或者直接Win键+X，点击”设备管理器“&lt;br&gt;
展开”显示适配器”选项。&lt;/p&gt;
&lt;p&gt;如果你看到如下图所示，里面有两行或多行，就有戏&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2023/08/09/spVQdHDkbLuZaG8.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片png&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/08/09/spVQdHDkbLuZaG8.png&quot; alt=&quot;图片png&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;如果只有Intel HD Graphics，那就只有集显，没法使用独立显卡（Tips:图示的GeForce GT 620可能还没有集显好呢…）。&lt;/p&gt;
&lt;h2 id=&quot;方法1使用nvidia控制面板设置&quot;&gt;方法1：使用NVIDIA控制面板设置&lt;/h2&gt;
&lt;p&gt;如果你的计算机安装了NVIDIA独立显卡，并且已经安装了NVIDIA控制面板，你可以按照以下步骤设置我的世界使用独立显卡：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;右键点击桌面空白处，选择”NVIDIA控制面板”。&lt;br&gt;
在左侧导航栏中，点击”3D设置”或”3D设置管理”。&lt;br&gt;
在右侧页面中，选择”程序设置”选项卡。&lt;br&gt;
点击”添加”按钮，然后选择找到我的世界的java文件（可以打开任务管理器复制我的世界的Java的路径，也可以直接在启动器看看用的是哪个Java.exe或kavaw.exe）。&lt;br&gt;
在”选择首选图形处理器为以下程序”下拉菜单中，选择你的独立显卡。&lt;br&gt;
点击”应用”按钮保存设置。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;方法15解决nvidia控制面板不可用的问题&quot;&gt;方法1.5：解决NVIDIA控制面板不可用的问题&lt;/h2&gt;
&lt;p&gt;如果在方法1中，你发现NVIDIA控制面板不可用，可以试下以下解决方法：&lt;br&gt;
从NVIDIA官方网站下载并安装最新的驱动程序。&lt;/p&gt;
&lt;p&gt;或者看看这两个链接里的教程&lt;a href=&quot;https://blog.csdn.net/m0_50894027/article/details/112397828#:~:text=%E2%80%9C%E6%82%A8%E5%BD%93%E5%89%8D%E6%9C%AA%E4%BD%BF%E7%94%A8%E8%BF%9E%E6%8E%A5%E5%88%B0Nvidia%20GPU%E7%9A%84%E6%98%BE%E7%A4%BA%E5%99%A8%E2%80%9D%E5%92%8C%E2%80%9C%E6%98%BE%E5%8D%A1%E9%A9%B1%E5%8A%A8%E5%AE%89%E8%A3%85%E5%A4%B1%E8%B4%A5%E2%80%9D%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95%201%201.%20%E6%82%A8%E5%BD%93%E5%89%8D%E6%9C%AA%E4%BD%BF%E7%94%A8%E8%BF%9E%E6%8E%A5%E5%88%B0Nvidia%20GPU%E7%9A%84%E6%98%BE%E7%A4%BA%E5%99%A8%20%E5%9C%A8%E8%BD%AF%E7%A1%AC%E4%BB%B6%E6%B2%A1%E9%97%AE%E9%A2%98%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%EF%BC%8C%E4%B9%9F%E6%98%AF%E6%9C%89%E5%8F%AF%E8%83%BD%E5%87%BA%E7%8E%B0%E8%BF%99%E7%A7%8D%E6%83%85%E5%86%B5%E7%9A%84%E3%80%82%20%E5%8E%9F%E5%9B%A0%E6%98%AF%E4%BD%A0%E7%9A%84%E7%94%B5%E8%84%91%E7%AE%A1%E5%AE%B6%E5%B1%8F%E8%94%BD%E4%BA%86%E7%9B%B8%E5%BA%94%E8%BD%AF%E4%BB%B6%E3%80%82,3%203.%E8%BD%AF%E4%BB%B6%20NVIDIA%E7%9A%84%E9%A9%B1%E5%8A%A8%E4%B8%8B%E8%BD%BD%3A%20https%3A%2F%2Fwww.nvidia.cn%2Fgeforce%2Fdrivers%2F%20AMD%E7%9A%84%E9%A9%B1%E5%8A%A8%E4%B8%8B%E8%BD%BD%EF%BC%9A%20https%3A%2F%2Fwww.amd.com%2Fzh-hans%2Fsupport%20DDU%E4%B8%8B%E8%BD%BD%EF%BC%9A%20&quot;&gt;Link1&lt;/a&gt; &lt;a href=&quot;http://www.lotpc.com/dngz/8555.html&quot;&gt;Link2&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;方法2使用windows-10游戏模式&quot;&gt;方法2：使用Windows 10游戏模式&lt;/h2&gt;
&lt;p&gt;如果你的计算机是运行Windows 10及以上版本的操作系统，你可以使用内置的游戏模式来开启独立显卡：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;打开Windows设置。&lt;br&gt;
点击”游戏”选项，并在左侧导航栏中，选择”游戏模式”。&lt;br&gt;
在右侧页面中，切换”使用游戏模式”开关为打开状态，再在相关设置的图形设置里选择你的我的世界的Java.exe或javaw.exe的路径&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2023/08/09/OunMA2wDEctjmfh.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片png&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/08/09/OunMA2wDEctjmfh.png&quot; alt=&quot;图片png&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;方法3使用bios设置&quot;&gt;方法3：使用BIOS设置&lt;/h2&gt;
&lt;p&gt;这一方法看起来有些奇怪，且一些老显卡不适用&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;重启你的计算机，并在启动过程中按下F12等按键进入BIOS设置界面，就那个很蓝的设置界面。通常在启动时会显示一个提示信息告诉你应该按下哪个键。&lt;br&gt;
进入BIOS设置界面后，通过左右箭头选择Advanced”或”Graphics”菜单。&lt;br&gt;
在这个菜单选项下，可能会有一个名为”Primary Display”、“Graphics Configuration”的选项。使用箭头键选择该选项进入详细设置页面。&lt;br&gt;
在详细设置页面中，找到一个个名为”Primary Graphics Adapter”、“Primary Display Adapter”或类似名称的选项。&lt;br&gt;
使用键盘上的方向键或相关的功能键来选择独立显卡作为首选显卡。&lt;br&gt;
完成设置后，按Save and Exit的按键即可&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;方法4禁用集成显卡&quot;&gt;方法4：禁用集成显卡&lt;/h2&gt;
&lt;p&gt;你可以在设备管理器中禁用集成显卡（Windows7可能会出现不知名的错误！）&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;打开设备管理器，展开”显示适配器”选项。&lt;br&gt;
右键点击集成显卡就是那个Graphics的东西，选择”禁用设备”。（Windows7会要求重启电脑，Windows10不会）&lt;br&gt;
Warning！禁用集成显卡可能会导致其他应用程序或系统功能无法正常运行，所以请谨慎使用，并在需要时重新启用集成显卡。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;闲言&quot;&gt;闲言&lt;/h2&gt;
&lt;p&gt;现在就可以进入你的我的世界，并且开一个好的光影了！如果你的显卡好的话&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2023/08/09/NYiJ5VfWGEMLUKs.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片png&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/08/09/NYiJ5VfWGEMLUKs.png&quot; alt=&quot;图片png&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;哈哈当然我的不行…&lt;/p&gt;</content:encoded></item><item><title>转载:提问的智慧</title><link>https://blog.skyshadow.fun/posts/20230731175858/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20230731175858/</guid><pubDate>Mon, 31 Jul 2023 17:58:58 GMT</pubDate><content:encoded>&lt;h1 id=&quot;提问的智慧&quot;&gt;提问的智慧&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/pulls&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;PRs Welcome&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square&quot; alt=&quot;PRs Welcome&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How To Ask Questions The Smart Way&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Copyright © 2001,2006,2014 Eric S. Raymond, Rick Moen&lt;/p&gt;
&lt;p&gt;本指南英文版版权为 Eric S. Raymond, Rick Moen 所有。&lt;/p&gt;
&lt;p&gt;原文网址：&lt;a href=&quot;http://www.catb.org/~esr/faqs/smart-questions.html&quot;&gt;http://www.catb.org/~esr/faqs/smart-questions.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Copyleft 2001 by D.H.Grand(nOBODY/Ginux), 2010 by Gasolin, 2015 by Ryan Wu&lt;/p&gt;
&lt;p&gt;本中文指南是基于原文 3.10 版以及 2010 年由 &lt;a href=&quot;https://github.com/gasolin&quot;&gt;Gasolin&lt;/a&gt; 所翻译版本的最新翻译；&lt;/p&gt;
&lt;p&gt;协助指出翻译问题，&lt;strong&gt;请&lt;a href=&quot;https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/issues/new&quot;&gt;发 issue&lt;/a&gt;，或直接&lt;a href=&quot;https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/compare&quot;&gt;发 pull request&lt;/a&gt; 给我。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;本文另有&lt;a href=&quot;README.md&quot;&gt;繁體中文版&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id=&quot;原文版本历史&quot;&gt;&lt;a href=&quot;history.md&quot;&gt;原文版本历史&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&quot;目录&quot;&gt;目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%A3%B0%E6%98%8E&quot;&gt;声明&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%AE%80%E4%BB%8B&quot;&gt;简介&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%9C%A8%E6%8F%90%E9%97%AE%E4%B9%8B%E5%89%8D&quot;&gt;在提问之前&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%BD%93%E4%BD%A0%E6%8F%90%E9%97%AE%E6%97%B6&quot;&gt;当你提问时&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%85%8E%E9%80%89%E6%8F%90%E9%97%AE%E7%9A%84%E8%AE%BA%E5%9D%9B&quot;&gt;慎选提问的论坛&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#stack-overflow&quot;&gt;Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%BD%91%E7%AB%99%E5%92%8C-irc-%E8%AE%BA%E5%9D%9B&quot;&gt;网站和 IRC 论坛&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%AC%AC%E4%BA%8C%E6%AD%A5%E4%BD%BF%E7%94%A8%E9%A1%B9%E7%9B%AE%E9%82%AE%E4%BB%B6%E5%88%97%E8%A1%A8&quot;&gt;第二步，使用项目邮件列表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BD%BF%E7%94%A8%E6%9C%89%E6%84%8F%E4%B9%89%E4%B8%94%E6%8F%8F%E8%BF%B0%E6%98%8E%E7%A1%AE%E7%9A%84%E6%A0%87%E9%A2%98&quot;&gt;使用有意义且描述明确的标题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BD%BF%E9%97%AE%E9%A2%98%E5%AE%B9%E6%98%93%E5%9B%9E%E5%A4%8D&quot;&gt;使问题容易回复&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BD%BF%E7%94%A8%E6%B8%85%E6%99%B0%E3%80%81%E6%AD%A3%E7%A1%AE%E3%80%81%E7%B2%BE%E5%87%86%E4%B8%94%E5%90%88%E4%B9%8E%E8%AF%AD%E6%B3%95%E7%9A%84%E8%AF%AD%E5%8F%A5&quot;&gt;使用清晰、正确、精准且合乎语法的语句&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BD%BF%E7%94%A8%E6%98%93%E4%BA%8E%E8%AF%BB%E5%8F%96%E4%B8%94%E6%A0%87%E5%87%86%E7%9A%84%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F%E5%8F%91%E9%80%81%E9%97%AE%E9%A2%98&quot;&gt;使用易于读取且标准的文件格式发送问题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%B2%BE%E7%A1%AE%E5%9C%B0%E6%8F%8F%E8%BF%B0%E9%97%AE%E9%A2%98%E5%B9%B6%E8%A8%80%E4%B9%8B%E6%9C%89%E7%89%A9&quot;&gt;精确地描述问题并言之有物&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%AF%9D%E4%B8%8D%E5%9C%A8%E5%A4%9A%E8%80%8C%E5%9C%A8%E7%B2%BE&quot;&gt;话不在多而在精&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%88%AB%E5%8A%A8%E8%BE%84%E5%A3%B0%E7%A7%B0%E6%89%BE%E5%88%B0-bug&quot;&gt;别动辄声称找到 Bug&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BD%8E%E5%A3%B0%E4%B8%8B%E6%B0%94%E4%B8%8D%E8%83%BD%E4%BB%A3%E6%9B%BF%E4%BD%A0%E7%9A%84%E5%8A%9F%E8%AF%BE&quot;&gt;低声下气不能代替你的功课&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%8F%8F%E8%BF%B0%E9%97%AE%E9%A2%98%E7%97%87%E7%8A%B6%E8%80%8C%E9%9D%9E%E4%BD%A0%E7%9A%84%E7%8C%9C%E6%B5%8B&quot;&gt;描述问题症状而非你的猜测&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%8C%89%E5%8F%91%E7%94%9F%E6%97%B6%E9%97%B4%E5%85%88%E5%90%8E%E5%88%97%E5%87%BA%E9%97%AE%E9%A2%98%E7%97%87%E7%8A%B6&quot;&gt;按发生时间先后列出问题症状&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%8F%8F%E8%BF%B0%E7%9B%AE%E6%A0%87%E8%80%8C%E4%B8%8D%E6%98%AF%E8%BF%87%E7%A8%8B&quot;&gt;描述目标而不是过程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%88%AB%E8%A6%81%E6%B1%82%E4%BD%BF%E7%94%A8%E7%A7%81%E4%BA%BA%E7%94%B5%E9%82%AE%E5%9B%9E%E5%A4%8D&quot;&gt;别要求使用私人电邮回复&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%B8%85%E6%A5%9A%E6%98%8E%E7%A1%AE%E7%9A%84%E8%A1%A8%E8%BE%BE%E4%BD%A0%E7%9A%84%E9%97%AE%E9%A2%98%E4%BB%A5%E5%8F%8A%E9%9C%80%E6%B1%82&quot;&gt;清楚明确的表达你的问题以及需求&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%AF%A2%E9%97%AE%E6%9C%89%E5%85%B3%E4%BB%A3%E7%A0%81%E7%9A%84%E9%97%AE%E9%A2%98%E6%97%B6&quot;&gt;询问有关代码的问题时&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%88%AB%E6%8A%8A%E8%87%AA%E5%B7%B1%E5%AE%B6%E5%BA%AD%E4%BD%9C%E4%B8%9A%E7%9A%84%E9%97%AE%E9%A2%98%E8%B4%B4%E4%B8%8A%E6%9D%A5&quot;&gt;别把自己家庭作业的问题贴上来&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%8E%BB%E6%8E%89%E6%97%A0%E6%84%8F%E4%B9%89%E7%9A%84%E6%8F%90%E9%97%AE%E5%8F%A5&quot;&gt;去掉无意义的提问句&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%8D%B3%E4%BD%BF%E4%BD%A0%E5%BE%88%E6%80%A5%E4%B9%9F%E4%B8%8D%E8%A6%81%E5%9C%A8%E6%A0%87%E9%A2%98%E5%86%99%E7%B4%A7%E6%80%A5&quot;&gt;即使你很急也不要在标题写&lt;code&gt;紧急&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%A4%BC%E5%A4%9A%E4%BA%BA%E4%B8%8D%E6%80%AA%E8%80%8C%E4%B8%94%E6%9C%89%E6%97%B6%E8%BF%98%E5%BE%88%E6%9C%89%E5%B8%AE%E5%8A%A9&quot;&gt;礼多人不怪，而且有时还很有帮助&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3%E5%90%8E%E5%8A%A0%E4%B8%AA%E7%AE%80%E7%9F%AD%E7%9A%84%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E&quot;&gt;问题解决后，加个简短的补充说明&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%A6%82%E4%BD%95%E8%A7%A3%E8%AF%BB%E7%AD%94%E6%A1%88&quot;&gt;如何解读答案&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#rtfm-%E5%92%8C-stfw%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E4%BD%A0%E5%B7%B2%E5%AE%8C%E5%85%A8%E6%90%9E%E7%A0%B8%E4%BA%86&quot;&gt;RTFM 和 STFW：如何知道你已完全搞砸了&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%A6%82%E6%9E%9C%E8%BF%98%E6%98%AF%E6%90%9E%E4%B8%8D%E6%87%82&quot;&gt;如果还是搞不懂&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%A4%84%E7%90%86%E6%97%A0%E7%A4%BC%E7%9A%84%E5%9B%9E%E5%BA%94&quot;&gt;处理无礼的回应&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%E6%89%AE%E6%BC%94%E5%A4%B1%E8%B4%A5%E8%80%85&quot;&gt;如何避免扮演失败者&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%8D%E8%AF%A5%E9%97%AE%E7%9A%84%E9%97%AE%E9%A2%98&quot;&gt;不该问的问题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%A5%BD%E9%97%AE%E9%A2%98%E4%B8%8E%E8%A0%A2%E9%97%AE%E9%A2%98&quot;&gt;好问题与蠢问题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%A6%82%E6%9E%9C%E5%BE%97%E4%B8%8D%E5%88%B0%E5%9B%9E%E7%AD%94&quot;&gt;如果得不到回答&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%A6%82%E4%BD%95%E6%9B%B4%E5%A5%BD%E5%9C%B0%E5%9B%9E%E7%AD%94%E9%97%AE%E9%A2%98&quot;&gt;如何更好地回答问题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%9B%B8%E5%85%B3%E8%B5%84%E6%BA%90&quot;&gt;相关资源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E9%B8%A3%E8%B0%A2&quot;&gt;鸣谢&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;声明&quot;&gt;声明&lt;/h2&gt;
&lt;p&gt;许多项目在他们网站的帮助文档中链接了本指南。这很好，这正是我们想要的用途。但如果你是该项目管理员并试图创建指向本指南的超链接，请在超链接附近的显著位置注明：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;本指南不提供此项目的实际支持服务！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们已经深刻领教到缺少上述声明所带来的痛苦：我们将不停地被那些认为发布这本指南就意味着有责任解决世上所有技术问题的傻瓜苦苦纠缠。&lt;/p&gt;
&lt;p&gt;如果你因寻求某些帮助而阅读本指南，并在离开时还觉得可以从本文作者这里得到直接帮助，那你就是我们之前说的那些傻瓜之一。别问我们问题，我们只会忽略你。我们在这本指南中想教你如何从那些真正懂得你所遇到的软件或硬件问题的人处取得协助，而 99% 的情况下那不会是我们。除非你确定本指南的作者之一刚好是你所遇到的问题领域的专家，否则请不要打扰我们，这样大家都会开心一点。&lt;/p&gt;
&lt;h2 id=&quot;简介&quot;&gt;简介&lt;/h2&gt;
&lt;p&gt;在&lt;a href=&quot;http://www.catb.org/~esr/faqs/hacker-howto.html&quot;&gt;黑客&lt;/a&gt;的世界里，当你拋出一个技术问题时，最终是否能得到有用的回答，往往取决于你所提问和追问的方式。本指南将教你如何正确地提问以获得你满意的答案。&lt;/p&gt;
&lt;p&gt;现在开源（Open Source）软件已经相当盛行，您通常可以从其他更有经验的用户那里获得与黑客一样好的答案，这是件&lt;strong&gt;好事&lt;/strong&gt;；和黑客相比，用户们往往对那些新手常遇到的问题更宽容一些。尽管如此，以我们在此推荐的方式对待这些有经验的用户通常也是从他们那里获得有用答案的最有效方式。&lt;/p&gt;
&lt;p&gt;首先你应该明白，黑客们喜爱有挑战性的问题，或者能激发他们思维的好问题。如果我们并非如此，那我们也不会成为你想询问的对象。如果你给了我们一个值得反复咀嚼玩味的好问题，我们自会对你感激不尽。好问题是激励，是厚礼。好问题可以提高我们的理解力，而且通常会暴露我们以前从没意识到或者思考过的问题。对黑客而言，“好问题！”是诚挚的大力称赞。&lt;/p&gt;
&lt;p&gt;尽管如此，黑客们有着蔑视或傲慢面对简单问题的坏名声，这有时让我们看起来对新手、无知者似乎较有敌意，但其实不是那样的。&lt;/p&gt;
&lt;p&gt;我们不讳言我们对那些不愿思考、或者在发问前不做他们该做的事的人的蔑视。那些人是时间杀手 —— 他们只想索取，从不付出，消耗我们可用在更有趣的问题或更值得回答的人身上的时间。我们称这样的人为 &lt;code&gt;失败者（撸瑟）&lt;/code&gt; （由于历史原因，我们有时把它拼作 &lt;code&gt;lusers&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;我们意识到许多人只是想使用我们写的软件，他们对学习技术细节没有兴趣。对大多数人而言，电脑只是种工具，是种达到目的的手段而已。他们有自己的生活并且有更要紧的事要做。我们认可这点，也从不指望每个人都对这些让我们着迷的技术问题感兴趣。尽管如此，我们只为那些真正有兴趣并愿意积极参与问题解决的人调整回答问题的风格。这点不会变，也不该变：否则，我们就是在最擅长的事情上降低效率。&lt;/p&gt;
&lt;p&gt;我们（在很大程度上）是自愿的，从繁忙的生活中抽出时间来解答疑惑，而且时常被提问淹没。所以我们无情地滤掉一些话题，特别是拋弃那些看起来像失败者的家伙，以便更高效地利用时间来回答&lt;code&gt;赢家（winner）&lt;/code&gt;的问题。&lt;/p&gt;
&lt;p&gt;如果你厌恶我们的态度，高高在上，或过于傲慢，不妨也设身处地想想。我们并没有要求你向我们屈服 —— 事实上，我们大多数人非常乐意与你平等地交流，只要你付出小小努力来满足基本要求，我们就会欢迎你加入我们的文化。但让我们帮助那些不愿意帮助自己的人是没有效率的。无知没有关系，但装白痴就是不行。&lt;/p&gt;
&lt;p&gt;所以，你不必在技术上很在行才能吸引我们的注意，但你必须表现出能引导你变得在行的特质 —— 机敏、有想法、善于观察、乐于主动参与解决问题。如果你做不到这些使你与众不同的事情，我们建议你花点钱找家商业公司签个技术支持服务合同，而不是要求黑客个人无偿地帮助你。&lt;/p&gt;
&lt;p&gt;如果你决定向我们求助，当然你也不希望被视为失败者，更不愿成为失败者中的一员。能立刻得到快速并有效答案的最好方法，就是像赢家那样提问 —— 聪明、自信、有解决问题的思路，只是偶尔在特定的问题上需要获得一点帮助。&lt;/p&gt;
&lt;p&gt;（欢迎对本指南提出改进意见。你可以把你的建议发送至 &lt;a href=&quot;esr@thyrsus.com&quot;&gt;esr@thyrsus.com&lt;/a&gt; 或 &lt;a href=&quot;respond-auto@linuxmafia.com&quot;&gt;respond-auto@linuxmafia.com&lt;/a&gt;。然而请注意，本文并非&lt;a href=&quot;http://www.ietf.org/rfc/rfc1855.txt&quot;&gt;网络礼节&lt;/a&gt;的通用指南，而我们通常会拒绝无助于在技术论坛得到有用答案的建议）。&lt;/p&gt;
&lt;h2 id=&quot;在提问之前&quot;&gt;在提问之前&lt;/h2&gt;
&lt;p&gt;在你准备要通过电子邮件、新闻群组或者聊天室提出技术问题前，请先做到以下事情：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;尝试在你准备提问的论坛的旧文章中搜索答案。&lt;/li&gt;
&lt;li&gt;尝试上网搜索以找到答案。&lt;/li&gt;
&lt;li&gt;尝试阅读手册以找到答案。&lt;/li&gt;
&lt;li&gt;尝试阅读常见问题文件（FAQ）以找到答案。&lt;/li&gt;
&lt;li&gt;尝试自己检查或试验以找到答案。&lt;/li&gt;
&lt;li&gt;向你身边的强者朋友打听以找到答案。&lt;/li&gt;
&lt;li&gt;如果你是程序开发者，请尝试阅读源代码以找到答案。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;当你提出问题的时候，请先表明你已经做了上述的努力；这将有助于树立你并不是一个不劳而获且浪费别人的时间的提问者。如果你能一并表达在做了上述努力的过程中所&lt;strong&gt;学到&lt;/strong&gt;的东西会更好，因为我们更乐于回答那些表现出能从答案中学习的人的问题。&lt;/p&gt;
&lt;p&gt;运用某些策略，比如先用 Google 搜索你所遇到的各种错误信息（搜索 &lt;a href=&quot;http://groups.google.com/&quot;&gt;Google 论坛&lt;/a&gt;和网页），这样很可能直接就找到了能解决问题的文件或邮件列表线索。即使没有结果，在邮件列表或新闻组寻求帮助时加上一句 &lt;code&gt;我在 Google 中搜过下列句子但没有找到什么有用的东西&lt;/code&gt; 也是件好事，即使它只是表明了搜索引擎不能提供哪些帮助。这么做（加上搜索过的字串）也让遇到相似问题的其他人能被搜索引擎引导到你的提问来。&lt;/p&gt;
&lt;p&gt;别着急，不要指望几秒钟的 Google 搜索就能解决一个复杂的问题。在向专家求助之前，再阅读一下常见问题文件（FAQ）、放轻松、坐得舒服一些，再花点时间思考一下这个问题。相信我们，他们能从你的提问看出你做了多少阅读与思考，如果你是有备而来，将更有可能得到解答。不要将所有问题一股脑拋出，只因你的第一次搜索没有找到答案（或者找到太多答案）。&lt;/p&gt;
&lt;p&gt;准备好你的问题，再将问题仔细地思考过一遍，因为草率的发问只能得到草率的回答，或者根本得不到任何答案。越是能表现出在寻求帮助前你为解决问题所付出的努力，你越有可能得到实质性的帮助。&lt;/p&gt;
&lt;p&gt;小心别问错了问题。如果你的问题基于错误的假设，某个普通黑客（J. Random Hacker）多半会一边在心里想着&lt;code&gt;蠢问题…&lt;/code&gt;，一边用无意义的字面解释来答复你，希望着你会从问题的回答（而非你想得到的答案）中汲取教训。&lt;/p&gt;
&lt;p&gt;绝不要自以为&lt;strong&gt;够格&lt;/strong&gt;得到答案，你没有；你并没有。毕竟你没有为这种服务支付任何报酬。你将会是自己去&lt;strong&gt;挣到&lt;/strong&gt;一个答案，靠提出有内涵的、有趣的、有思维激励作用的问题 —— 一个有潜力能贡献社区经验的问题，而不仅仅是被动地从他人处索取知识。&lt;/p&gt;
&lt;p&gt;另一方面，表明你愿意在找答案的过程中做点什么是一个非常好的开端。&lt;code&gt;谁能给点提示？&lt;/code&gt;、&lt;code&gt;我的这个例子里缺了什么？&lt;/code&gt;以及&lt;code&gt;我应该检查什么地方&lt;/code&gt;比&lt;code&gt;请把我需要的确切的过程贴出来&lt;/code&gt;更容易得到答复。因为你表现出只要有人能指个正确方向，你就有完成它的能力和决心。&lt;/p&gt;
&lt;h2 id=&quot;当你提问时&quot;&gt;当你提问时&lt;/h2&gt;
&lt;h3 id=&quot;慎选提问的论坛&quot;&gt;慎选提问的论坛&lt;/h3&gt;
&lt;p&gt;小心选择你要提问的场合。如果你做了下述的事情，你很可能被忽略掉或者被看作失败者：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在与主题不合的论坛上贴出你的问题。&lt;/li&gt;
&lt;li&gt;在探讨进阶技术问题的论坛张贴非常初级的问题；反之亦然。&lt;/li&gt;
&lt;li&gt;在太多的不同新闻群组上重复转贴同样的问题（cross-post）。&lt;/li&gt;
&lt;li&gt;向既非熟人也没有义务解决你问题的人发送私人电邮。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;黑客会剔除掉那些搞错场合的问题，以保护他们沟通的渠道不被无关的东西淹没。你不会想让这种事发生在自己身上的。&lt;/p&gt;
&lt;p&gt;因此，第一步是找到对的论坛。再说一次，Google 和其它搜索引擎还是你的朋友，用它们来找到与你遭遇到困难的软硬件问题最相关的网站。通常那儿都有常见问题（FAQ）、邮件列表及相关说明文件的链接。如果你的努力（包括&lt;strong&gt;阅读&lt;/strong&gt; FAQ）都没有结果，网站上也许还有报告 Bug（Bug-reporting）的流程或链接，如果是这样，链过去看看。&lt;/p&gt;
&lt;p&gt;向陌生的人或论坛发送邮件最可能是风险最大的事情。举例来说，别假设一个提供丰富内容的网页的作者会想充当你的免费顾问。不要对你的问题是否会受到欢迎做太乐观的估计 —— 如果你不确定，那就向别处发送，或者压根别发。&lt;/p&gt;
&lt;p&gt;在选择论坛、新闻群组或邮件列表时，别太相信它的名字，先看看 FAQ 或者许可书以弄清楚你的问题是否切题。发文前先翻翻已有的话题，这样可以让你感受一下那里的文化。事实上，事先在新闻组或邮件列表的历史记录中搜索与你问题相关的关键词是个极好的主意，也许这样就找到答案了。即使没有，也能帮助你归纳出更好的问题。&lt;/p&gt;
&lt;p&gt;别像机关枪似的一次“扫射”所有的帮助渠道，这就像大喊大叫一样会使人不快。要一个一个地来。&lt;/p&gt;
&lt;p&gt;搞清楚你的主题！最典型的错误之一是在某种致力于跨平台可移植的语言、套件或工具的论坛中提关于 Unix 或 Windows 操作系统程序界面的问题。如果你不明白为什么这是大错，最好在搞清楚这之间差异之前什么也别问。&lt;/p&gt;
&lt;p&gt;一般来说，在仔细挑选的公共论坛中提问，会比在私有论坛中提同样的问题更容易得到有用的回答。有几个理由可以支持这点，一是看潜在的回复者有多少，二是看观众有多少。黑客较愿意回答那些能帮助到许多人的问题。&lt;/p&gt;
&lt;p&gt;可以理解的是，老练的黑客和一些热门软件的作者正在接受过多的错发信息。就像那根最后压垮骆驼背的稻草一样，你的加入也有可能使情况走向极端 —— 已经好几次了，一些热门软件的作者由于涌入其私人邮箱的大量不堪忍受的无用邮件而不再提供支持。&lt;/p&gt;
&lt;h3 id=&quot;stack-overflow&quot;&gt;Stack Overflow&lt;/h3&gt;
&lt;p&gt;搜索，&lt;em&gt;然后&lt;/em&gt;在 Stack Exchange 问。&lt;/p&gt;
&lt;p&gt;近年来，Stack Exchange 社区已经成为回答技术及其他问题的主要渠道，尤其是那些开放源码的项目。&lt;/p&gt;
&lt;p&gt;因为 Google 索引是即时的，在看 Stack Exchange 之前先在 Google 搜索。有很高的几率某人已经问了一个类似的问题，而且 Stack Exchange 网站们往往会是搜索结果中最前面几个。如果你在 Google 上没有找到任何答案，你再到特定相关主题的网站去找。用标签（Tag）搜索能让你更缩小你的搜索结果。&lt;/p&gt;
&lt;p&gt;如果你还是找不到任何对你的问题有用的内容，请把你的问题发在与它最相关的网站上。提问的时候请善用格式化工具，尤其注意为代码添加格式，并且添加相关的标签（特别是编程语言、操作系统或库/包的名称）。当有人要求你提供更多相关信息时，请编辑你的贴子来补充它们[译注：而不是发一个回帖或回答！]。如果你觉得一个答案对你有帮助，点击向上的箭头来为它投票；如果一个答案提供了问题的正确解决方案，点击投票按钮下方的对勾来将它标记为正解。&lt;/p&gt;
&lt;p&gt;Stack Exchange 已经成长到&lt;a href=&quot;https://stackexchange.com/sites&quot;&gt;超过一百个网站&lt;/a&gt;，以下是最常用的几个站：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Super User 是问一些通用的电脑问题，如果你的问题跟代码或是写程序无关，只是一些网络连线之类的，请到这里。&lt;/li&gt;
&lt;li&gt;Stack Overflow 是问写程序有关的问题。&lt;/li&gt;
&lt;li&gt;Server Fault 是问服务器和网管相关的问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;网站和-irc-论坛&quot;&gt;网站和 IRC 论坛&lt;/h3&gt;
&lt;p&gt;本地的用户群组（user group），或者你所用的 Linux 发行版本也许正在宣传他们的网页论坛或 IRC 频道，并提供新手帮助（在一些非英语国家，新手论坛很可能还是邮件列表），这些都是开始提问的好地方，特别是当你觉得遇到的也许只是相对简单或者很普通的问题时。有广告赞助的 IRC 频道是公开欢迎提问的地方，通常可以即时得到回应。&lt;/p&gt;
&lt;p&gt;事实上，如果程序出的问题只发生在特定 Linux 发行版提供的版本（这很常见），最好先去该发行版的论坛或邮件列表中提问，再到程序本身的论坛或邮件列表提问。（否则）该项目的黑客可能仅仅回复“使用&lt;strong&gt;我们的&lt;/strong&gt;版本”。&lt;/p&gt;
&lt;p&gt;在任何论坛发文以前，先确认一下有没有搜索功能。如果有，就试着搜索一下问题的几个关键词，也许这会有帮助。如果在此之前你已做过通用的网页搜索（你也该这样做），还是再搜索一下论坛，搜索引擎有可能没来得及索引此论坛的全部内容。&lt;/p&gt;
&lt;p&gt;通过论坛或 IRC 频道来提供用户支持服务有增长的趋势，电子邮件则大多为项目开发者间的交流而保留。所以最好先在论坛或 IRC 中寻求与该项目相关的协助。&lt;/p&gt;
&lt;p&gt;在使用 IRC 的时候，首先最好不要发布很长的问题描述，有些人称之为频道洪水。最好通过一句话的问题描述来开始聊天。&lt;/p&gt;
&lt;h3 id=&quot;第二步使用项目邮件列表&quot;&gt;第二步，使用项目邮件列表&lt;/h3&gt;
&lt;p&gt;当某个项目提供开发者邮件列表时，要向列表而不是其中的个别成员提问，即使你确信他能最好地回答你的问题。查一查项目的文件和首页，找到项目的邮件列表并使用它。有几个很好的理由支持我们采用这种办法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;任何好到需要向个别开发者提出的问题，也将对整个项目群组有益。反之，如果你认为自己的问题对整个项目群组来说太愚蠢，那这也不能成为骚扰个别开发者的理由。&lt;/li&gt;
&lt;li&gt;向列表提问可以分散开发者的负担，个别开发者（尤其是项目领导人）也许太忙以至于没法回答你的问题。&lt;/li&gt;
&lt;li&gt;大多数邮件列表都会被存档，那些被存档的内容将被搜索引擎索引。如果你向列表提问并得到解答，将来其他人可以通过网页搜索找到你的问题和答案，也就不用再次发问了。&lt;/li&gt;
&lt;li&gt;如果某些问题经常被问到，开发者可以利用此信息来改进说明文件或软件本身，以使其更清楚。如果只是私下提问，就没有人能看到最常见问题的完整场景。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果一个项目既有“用户”也有“开发者”（或“黑客”）邮件列表或论坛，而你又不会动到那些源代码，那么就向“用户”列表或论坛提问。不要假设自己会在开发者列表中受到欢迎，那些人多半会将你的提问视为干扰他们开发的噪音。&lt;/p&gt;
&lt;p&gt;然而，如果你&lt;strong&gt;确信&lt;/strong&gt;你的问题很特别，而且在“用户”列表或论坛中几天都没有回复，可以试试前往“开发者”列表或论坛发问。建议你在张贴前最好先暗地里观察几天以了解那里的行事方式（事实上这是参与任何私有或半私有列表的好主意）&lt;/p&gt;
&lt;p&gt;如果你找不到一个项目的邮件列表，而只能查到项目维护者的电子邮件地址，尽管向他发信。即使是在这种情况下，也别假设（项目）邮件列表不存在。在你的电子邮件中，请陈述你已经试过但没有找到合适的邮件列表，也提及你不反对将自己的邮件转发给他人（许多人认为，即使没什么秘密，私人电子邮件也不应该被公开。通过允许将你的电子邮件转发他人，你给了相应人员处置你邮件的选择）。&lt;/p&gt;
&lt;h3 id=&quot;使用有意义且描述明确的标题&quot;&gt;使用有意义且描述明确的标题&lt;/h3&gt;
&lt;p&gt;在邮件列表、新闻群组或论坛中，大约 50 字以内的标题是抓住资深专家注意力的好机会。别用喋喋不休的&lt;code&gt;帮帮忙&lt;/code&gt;、&lt;code&gt;跪求&lt;/code&gt;、&lt;code&gt;急&lt;/code&gt;（更别说&lt;code&gt;救命啊！！！！&lt;/code&gt;这样让人反感的话，用这种标题会被条件反射式地忽略）来浪费这个机会。不要妄想用你的痛苦程度来打动我们，而应该是在这点空间中使用极简单扼要的描述方式来提出问题。&lt;/p&gt;
&lt;p&gt;一个好标题范例是&lt;code&gt;目标 —— 差异&lt;/code&gt;式的描述，许多技术支持组织就是这样做的。在&lt;code&gt;目标&lt;/code&gt;部分指出是哪一个或哪一组东西有问题，在&lt;code&gt;差异&lt;/code&gt;部分则描述与期望的行为不一致的地方。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;蠢问题：救命啊！我的笔记本电脑不能正常显示了！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;聪明问题：X.org 6.8.1 的鼠标指针会变形，某牌显卡 MV1005 芯片组。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;更聪明问题：X.org 6.8.1 的鼠标指针，在某牌显卡 MV1005 芯片组环境下 - 会变形。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;编写&lt;code&gt;目标 —— 差异&lt;/code&gt; 式描述的过程有助于你组织对问题的细致思考。是什么被影响了？ 仅仅是鼠标指针或者还有其它图形？只在 X.org 的 X 版中出现？或只是出现在 6.8.1 版中？ 是针对某牌显卡芯片组？或者只是其中的 MV1005 型号？ 一个黑客只需瞄一眼就能够立即明白你的环境&lt;strong&gt;和&lt;/strong&gt;你遇到的问题。&lt;/p&gt;
&lt;p&gt;总而言之，请想像一下你正在一个只显示标题的存档讨论串（Thread）索引中查寻。让你的标题更好地反映问题，可使下一个搜索类似问题的人能够关注这个讨论串，而不用再次提问相同的问题。&lt;/p&gt;
&lt;p&gt;如果你想在回复中提出问题，记得要修改内容标题，以表明你是在问一个问题， 一个看起来像 &lt;code&gt;Re: 测试&lt;/code&gt; 或者 &lt;code&gt;Re: 新 bug&lt;/code&gt; 的标题很难引起足够重视。另外，在不影响连贯性之下，适当引用并删减前文的内容，能给新来的读者留下线索。&lt;/p&gt;
&lt;p&gt;对于讨论串，不要直接点击回复来开始一个全新的讨论串，这将限制你的观众。因为有些邮件阅读程序，比如 mutt ，允许用户按讨论串排序并通过折叠讨论串来隐藏消息，这样做的人永远看不到你发的消息。&lt;/p&gt;
&lt;p&gt;仅仅改变标题还不够。mutt 和其它一些邮件阅读程序还会检查邮件标题以外的其它信息，以便为其指定讨论串。所以宁可发一个全新的邮件。&lt;/p&gt;
&lt;p&gt;在网页论坛上，好的提问方式稍有不同，因为讨论串与特定的信息紧密结合，并且通常在讨论串外就看不到里面的内容，故通过回复提问，而非改变标题是可接受的。不是所有论坛都允许在回复中出现分离的标题，而且这样做了基本上没有人会去看。不过，通过回复提问，这本身就是暧昧的做法，因为它们只会被正在查看该标题的人读到。所以，除非你&lt;strong&gt;只想&lt;/strong&gt;在该讨论串当前活跃的人群中提问，不然还是另起炉灶比较好。&lt;/p&gt;
&lt;h3 id=&quot;使问题容易回复&quot;&gt;使问题容易回复&lt;/h3&gt;
&lt;p&gt;以&lt;code&gt;请将你的回复发送到……&lt;/code&gt;来结束你的问题多半会使你得不到回答。如果你觉得花几秒钟在邮件客户端设置一下回复地址都麻烦，我们也觉得花几秒钟思考你的问题更麻烦。如果你的邮件程序不支持这样做，&lt;a href=&quot;http://linuxmafia.com/faq/Mail/muas.html&quot;&gt;换个好点的&lt;/a&gt;；如果是操作系统不支持这种邮件程序，也换个好点的。&lt;/p&gt;
&lt;p&gt;在论坛，要求通过电子邮件回复是非常无礼的，除非你认为回复的信息可能比较敏感（有人会为了某些未知的原因，只让你而不是整个论坛知道答案）。如果你只是想在有人回复讨论串时得到电子邮件提醒，可以要求网页论坛发送给你。几乎所有论坛都支持诸如&lt;code&gt;追踪此讨论串&lt;/code&gt;、&lt;code&gt;有回复时发送邮件提醒&lt;/code&gt;等功能。&lt;/p&gt;
&lt;h3 id=&quot;使用清晰正确精准且合乎语法的语句&quot;&gt;&lt;a name=&quot;使用清晰、正确、精准且合乎语法的语句&quot;&gt;使用清晰、正确、精准且合乎语法的语句&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;我们从经验中发现，粗心的提问者通常也会粗心地写程序与思考（我敢打包票）。回答粗心大意者的问题很不值得，我们宁愿把时间耗在别处。&lt;/p&gt;
&lt;p&gt;正确的拼写、标点符号和大小写是很重要的。一般来说，如果你觉得这样做很麻烦，不想在乎这些，那我们也觉得麻烦，不想在乎你的提问。花点额外的精力斟酌一下字句，用不着太僵硬与正式 —— 事实上，黑客文化很看重能准确地使用非正式、俚语和幽默的语句。但它&lt;strong&gt;必须很&lt;/strong&gt;准确，而且有迹象表明你是在思考和关注问题。&lt;/p&gt;
&lt;p&gt;正确地拼写、使用标点和大小写，不要将&lt;code&gt;its&lt;/code&gt;混淆为&lt;code&gt;it&apos;s&lt;/code&gt;，&lt;code&gt;loose&lt;/code&gt;搞成&lt;code&gt;lose&lt;/code&gt;或者将&lt;code&gt;discrete&lt;/code&gt;弄成&lt;code&gt;discreet&lt;/code&gt;。不要&lt;strong&gt;全部用大写&lt;/strong&gt;，这会被视为无礼的大声嚷嚷（全部小写也好不到哪去，因为不易阅读。&lt;a href=&quot;http://en.wikipedia.org/wiki/Alan_Cox&quot;&gt;Alan Cox&lt;/a&gt; 也许可以这样做，但你不行）。&lt;/p&gt;
&lt;p&gt;更白话的说，如果你写得像是个半文盲[译注：&lt;a href=&quot;http://zh.wikipedia.org/wiki/%E5%B0%8F%E7%99%BD&quot;&gt;小白&lt;/a&gt;]，那多半得不到理睬。也不要使用即时通信中的简写或&lt;a href=&quot;http://zh.wikipedia.org/wiki/%E7%81%AB%E6%98%9F%E6%96%87&quot;&gt;火星文&lt;/a&gt;，如将&lt;code&gt;的&lt;/code&gt;简化为&lt;code&gt;d&lt;/code&gt;会使你看起来像一个为了少打几个键而省字的小白。更糟的是，如果像个小孩似地鬼画符那绝对是在找死，可以肯定没人会理你（或者最多是给你一大堆指责与挖苦）。&lt;/p&gt;
&lt;p&gt;如果在使用非母语的论坛提问，你可以犯点拼写和语法上的小错，但决不能在思考上马虎（没错，我们通常能弄清两者的分别）。同时，除非你知道回复者使用的语言，否则请使用英语书写。繁忙的黑客一般会直接删除用他们看不懂的语言写的消息。在网络上英语是通用语言，用英语书写可以将你的问题在尚未被阅读就被直接删除的可能性降到最低。&lt;/p&gt;
&lt;p&gt;如果英文是你的外语（Second language），提示潜在回复者你有潜在的语言困难是很好的：&lt;br&gt;
[译注：以下附上原文以供使用]&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;English is not my native language; please excuse typing errors.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;英文不是我的母语，请原谅我的错字或语法。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;If you speak $LANGUAGE, please email/PM me;
I may need assistance translating my question.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;如果你说&lt;strong&gt;某语言&lt;/strong&gt;，请向我发电邮/私信；&lt;/li&gt;
&lt;li&gt;我需要有人协助我翻译我的问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;I am familiar with the technical terms,
but some slang expressions and idioms are difficult for me.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;我对技术名词很熟悉，但对于俗语或是特别用法不甚了解。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;I’ve posted my question in $LANGUAGE and English.
I’ll be glad to translate responses, if you only use one or the other.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;我把我的问题用&lt;strong&gt;某语言&lt;/strong&gt;和英文写出来。&lt;/li&gt;
&lt;li&gt;如果你只用其中的一种语言回答，我会乐意将回复翻译成为你使用的语言。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;使用易于读取且标准的文件格式发送问题&quot;&gt;使用易于读取且标准的文件格式发送问题&lt;/h3&gt;
&lt;p&gt;如果你人为地将问题搞得难以阅读，它多半会被忽略，人们更愿读易懂的问题，所以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用纯文字而不是 HTML (&lt;a href=&quot;http://archive.birdhouse.org/etc/evilmail.html&quot;&gt;关闭 HTML&lt;/a&gt; 并不难）。&lt;/li&gt;
&lt;li&gt;使用 MIME 附件通常是可以的，前提是真正有内容（譬如附带的源代码或 patch），而不仅仅是邮件程序生成的模板（譬如只是信件内容的拷贝）。&lt;/li&gt;
&lt;li&gt;不要发送一段文字只是一行句子但自动换行后会变成多行的邮件（这使得回复部分内容非常困难）。设想你的读者是在 80 个字符宽的终端机上阅读邮件，最好设置你的换行分割点小于 80 字。&lt;/li&gt;
&lt;li&gt;但是，对一些特殊的文件&lt;strong&gt;不要&lt;/strong&gt;设置固定宽度（譬如日志文件拷贝或会话记录）。数据应该原样包含，让回复者有信心他们看到的是和你看到的一样的东西。&lt;/li&gt;
&lt;li&gt;在英语论坛中，不要使用&lt;code&gt;Quoted-Printable&lt;/code&gt; MIME 编码发送消息。这种编码对于张贴非 ASCII 语言可能是必须的，但很多邮件程序并不支持这种编码。当它们处理换行时，那些文本中四处散布的&lt;code&gt;=20&lt;/code&gt;符号既难看也分散注意力，甚至有可能破坏内容的语意。&lt;/li&gt;
&lt;li&gt;绝对，&lt;strong&gt;永远&lt;/strong&gt;不要指望黑客们阅读使用封闭格式编写的文档，像微软公司的 Word 或 Excel 文件等。大多数黑客对此的反应就像有人将还在冒热气的猪粪倒在你家门口时你的反应一样。即便他们能够处理，他们也很厌恶这么做。&lt;/li&gt;
&lt;li&gt;如果你从使用 Windows 的电脑发送电子邮件，关闭微软愚蠢的&lt;code&gt;智能引号&lt;/code&gt;功能 （从[选项] &gt; [校订] &gt; [自动校正选项]，勾选掉&lt;code&gt;智能引号&lt;/code&gt;单选框），以免在你的邮件中到处散布垃圾字符。&lt;/li&gt;
&lt;li&gt;在论坛，勿滥用&lt;code&gt;表情符号&lt;/code&gt;和&lt;code&gt;HTML&lt;/code&gt;功能（当它们提供时）。一两个表情符号通常没有问题，但花哨的彩色文本倾向于使人认为你是个无能之辈。过滥地使用表情符号、色彩和字体会使你看来像个傻笑的小姑娘。这通常不是个好主意，除非你只是对性而不是对答案感兴趣。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你使用图形用户界面的邮件程序（如微软公司的 Outlook 或者其它类似的），注意它们的默认设置不一定满足这些要求。大多数这类程序有基于选单的&lt;code&gt;查看源代码&lt;/code&gt;命令，用它来检查发送文件夹中的邮件，以确保发送的是纯文本文件同时没有一些奇怪的字符。&lt;/p&gt;
&lt;h3 id=&quot;精确地描述问题并言之有物&quot;&gt;精确地描述问题并言之有物&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;仔细、清楚地描述你的问题或 Bug 的症状。&lt;/li&gt;
&lt;li&gt;描述问题发生的环境（机器配置、操作系统、应用程序、以及相关的信息），提供经销商的发行版和版本号（如：&lt;code&gt;Fedora Core 4&lt;/code&gt;、&lt;code&gt;Slackware 9.1&lt;/code&gt;等）。&lt;/li&gt;
&lt;li&gt;描述在提问前你是怎样去研究和理解这个问题的。&lt;/li&gt;
&lt;li&gt;描述在提问前为确定问题而采取的诊断步骤。&lt;/li&gt;
&lt;li&gt;描述最近做过什么可能相关的硬件或软件变更。&lt;/li&gt;
&lt;li&gt;尽可能地提供一个可以&lt;code&gt;重现这个问题的可控环境&lt;/code&gt;的方法。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;尽量去揣测一个黑客会怎样反问你，在你提问之前预先将黑客们可能提出的问题回答一遍。&lt;/p&gt;
&lt;p&gt;以上几点中，当你报告的是你认为可能在代码中的问题时，给黑客一个可以重现你的问题的环境尤其重要。当你这么做时，你得到有效的回答的机会和速度都会大大的提升。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.chiark.greenend.org.uk/~sgtatham/&quot;&gt;Simon Tatham&lt;/a&gt; 写过一篇名为《&lt;a href=&quot;http://www.chiark.greenend.org.uk/~sgtatham/bugs-cn.html&quot;&gt;如何有效的报告 Bug&lt;/a&gt;》的出色文章。强力推荐你也读一读。&lt;/p&gt;
&lt;h3 id=&quot;话不在多而在精&quot;&gt;话不在多而在精&lt;/h3&gt;
&lt;p&gt;你需要提供精确有内容的信息。这并不是要求你简单的把成堆的出错代码或者资料完全转录到你的提问中。如果你有庞大而复杂的测试样例能重现程序挂掉的情境，尽量将它剪裁得越小越好。&lt;/p&gt;
&lt;p&gt;这样做的用处至少有三点。&lt;br&gt;
第一，表现出你为简化问题付出了努力，这可以使你得到回答的机会增加；&lt;br&gt;
第二，简化问题使你更有可能得到&lt;strong&gt;有用&lt;/strong&gt;的答案；&lt;br&gt;
第三，在精炼你的 bug 报告的过程中，你很可能就自己找到了解决方法或权宜之计。&lt;/p&gt;
&lt;h3 id=&quot;别动辄声称找到-bug&quot;&gt;别动辄声称找到 Bug&lt;/h3&gt;
&lt;p&gt;当你在使用软件中遇到问题，除非你非常、&lt;strong&gt;非常&lt;/strong&gt;的有根据，不要动辄声称找到了 Bug。提示：除非你能提供解决问题的源代码补丁，或者提供回归测试来表明前一版本中行为不正确，否则你都多半不够完全确信。这同样适用在网页和文件，如果你（声称）发现了文件的&lt;code&gt;Bug&lt;/code&gt;，你应该能提供相应位置的修正或替代文件。&lt;/p&gt;
&lt;p&gt;请记得，还有其他许多用户没遇到你发现的问题，否则你在阅读文件或搜索网页时就应该发现了（你在抱怨前&lt;a href=&quot;#%E5%9C%A8%E6%8F%90%E9%97%AE%E4%B9%8B%E5%89%8D&quot;&gt;已经做了这些，是吧&lt;/a&gt;？）。这也意味着很有可能是你弄错了而不是软件本身有问题。&lt;/p&gt;
&lt;p&gt;编写软件的人总是非常辛苦地使它尽可能完美。如果你声称找到了 Bug，也就是在质疑他们的能力，即使你是对的，也有可能会冒犯到其中某部分人。当你在标题中嚷嚷着有&lt;code&gt;Bug&lt;/code&gt;时，这尤其严重。&lt;/p&gt;
&lt;p&gt;提问时，即使你私下非常确信已经发现一个真正的 Bug，最好写得像是&lt;strong&gt;你&lt;/strong&gt;做错了什么。如果真的有 Bug，你会在回复中看到这点。这样做的话，如果真有 Bug，维护者就会向你道歉，这总比你惹恼别人然后欠别人一个道歉要好一点。&lt;/p&gt;
&lt;h3 id=&quot;低声下气不能代替你的功课&quot;&gt;低声下气不能代替你的功课&lt;/h3&gt;
&lt;p&gt;有些人明白他们不该粗鲁或傲慢的提问并要求得到答复，但他们选择另一个极端 —— 低声下气：&lt;code&gt;我知道我只是个可悲的新手，一个撸瑟，但...&lt;/code&gt;。这既使人困扰，也没有用，尤其是伴随着与实际问题含糊不清的描述时更令人反感。&lt;/p&gt;
&lt;p&gt;别用原始灵长类动物的把戏来浪费你我的时间。取而代之的是，尽可能清楚地描述背景条件和你的问题情况。这比低声下气更好地定位了你的位置。&lt;/p&gt;
&lt;p&gt;有时网页论坛会设有专为新手提问的版面，如果你真的认为遇到了初学者的问题，到那去就是了，但一样别那么低声下气。&lt;/p&gt;
&lt;h3 id=&quot;描述问题症状而非你的猜测&quot;&gt;描述问题症状而非你的猜测&lt;/h3&gt;
&lt;p&gt;告诉黑客们你认为问题是怎样造成的并没什么帮助。（如果你的推断如此有效，还用向别人求助吗？），因此要确信你原原本本告诉了他们问题的症状，而不是你的解释和理论；让黑客们来推测和诊断。如果你认为陈述自己的猜测很重要，清楚地说明这只是你的猜测，并描述为什么它们不起作用。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;蠢问题&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我在编译内核时接连遇到 SIG11 错误，
我怀疑某条飞线搭在主板的走线上了，这种情况应该怎样检查最好？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;聪明问题&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我的组装电脑是 FIC-PA2007 主机板搭载 AMD K6/233 CPU（威盛 Apollo VP2 芯片组），
256MB Corsair PC133 SDRAM 内存，在编译内核时，从开机 20 分钟以后就频频产生 SIG11 错误，
但是在头 20 分钟内从没发生过相同的问题。重新启动也没有用，但是关机一晚上就又能工作 20 分钟。
所有内存都换过了，没有效果。相关部分的标准编译记录如下…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;由于以上这点似乎让许多人觉得难以配合，这里有句话可以提醒你：&lt;code&gt;所有的诊断专家都来自密苏里州。&lt;/code&gt; 美国国务院的官方座右铭则是：&lt;code&gt;让我看看&lt;/code&gt;（出自国会议员 Willard D. Vandiver 在 1899 年时的讲话：&lt;code&gt;我来自一个出产玉米，棉花，牛蒡和民主党人的国家，滔滔雄辩既不能说服我，也不会让我满意。我来自密苏里州，你必须让我看看。&lt;/code&gt;） 针对诊断者而言，这并不是一种怀疑，而只是一种真实而有用的需求，以便让他们看到的是与你看到的原始证据尽可能一致的东西，而不是你的猜测与归纳的结论。所以，大方地展示给我们看吧！&lt;/p&gt;
&lt;h3 id=&quot;按发生时间先后列出问题症状&quot;&gt;按发生时间先后列出问题症状&lt;/h3&gt;
&lt;p&gt;问题发生前的一系列操作，往往就是对找出问题最有帮助的线索。因此，你的说明里应该包含你的操作步骤，以及机器和软件的反应，直到问题发生。在命令行处理的情况下，提供一段操作记录（例如运行脚本工具所生成的），并引用相关的若干行（如 20 行）记录会非常有帮助。&lt;/p&gt;
&lt;p&gt;如果挂掉的程序有诊断选项（如 -v 的详述开关），试着选择这些能在记录中增加调试信息的选项。记住，&lt;code&gt;多&lt;/code&gt;不等于&lt;code&gt;好&lt;/code&gt;。试着选取适当的调试级别以便提供有用的信息而不是让读者淹没在垃圾中。&lt;/p&gt;
&lt;p&gt;如果你的说明很长（如超过四个段落），在开头简述问题，接下来再按时间顺序详述会有所帮助。这样黑客们在读你的记录时就知道该注意哪些内容了。&lt;/p&gt;
&lt;h3 id=&quot;描述目标而不是过程&quot;&gt;描述目标而不是过程&lt;/h3&gt;
&lt;p&gt;如果你想弄清楚如何做某事（而不是报告一个 Bug），在开头就描述你的目标，然后才陈述重现你所卡住的特定步骤。&lt;/p&gt;
&lt;p&gt;经常寻求技术帮助的人在心中有个更高层次的目标，而他们在自以为能达到目标的特定道路上被卡住了，然后跑来问该怎么走，但没有意识到这条路本身就有问题。结果要费很大的劲才能搞定。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;蠢问题&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我怎样才能从某绘图程序的颜色选择器中取得十六进制的 RGB 值？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;聪明问题&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我正试着用替换一幅图片的色码（color table）成自己选定的色码，我现在知道的唯一方法是编辑每个色码区块（table slot），
但却无法从某绘图程序的颜色选择器取得十六进制的 RGB 值。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;第二种提问法比较聪明，你可能得到像是&lt;code&gt;建议采用另一个更合适的工具&lt;/code&gt;的回复。&lt;/p&gt;
&lt;h3 id=&quot;别要求使用私人电邮回复&quot;&gt;别要求使用私人电邮回复&lt;/h3&gt;
&lt;p&gt;黑客们认为问题的解决过程应该公开、透明，此过程中如果更有经验的人注意到不完整或者不当之处，最初的回复才能够、也应该被纠正。同时，作为提供帮助者可以得到一些奖励，奖励就是他的能力和学识被其他同行看到。&lt;/p&gt;
&lt;p&gt;当你要求私下回复时，这个过程和奖励都被中止。别这样做，让&lt;strong&gt;回复者&lt;/strong&gt;来决定是否私下回答 —— 如果他真这么做了，通常是因为他认为问题编写太差或者太肤浅，以至于不可能使其他人产生兴趣。&lt;/p&gt;
&lt;p&gt;这条规则存在一条有限的例外，如果你确信提问可能会引来大量雷同的回复时，那么这个神奇的提问句会是&lt;code&gt;向我发电邮，我将为论坛归纳这些回复&lt;/code&gt;。试着将邮件列表或新闻群组从洪水般的雷同回复中解救出来是非常有礼貌的 —— 但你必须信守诺言。&lt;/p&gt;
&lt;h3 id=&quot;清楚明确地表达你的问题以及需求&quot;&gt;清楚明确地表达你的问题以及需求&lt;/h3&gt;
&lt;p&gt;漫无边际的提问是近乎无休无止的时间黑洞。最有可能给你有用答案的人通常也正是最忙的人（他们忙是因为要亲自完成大部分工作）。这样的人对无节制的时间黑洞相当厌恶，所以他们也倾向于厌恶那些漫无边际的提问。&lt;/p&gt;
&lt;p&gt;如果你明确表述需要回答者做什么（如提供指点、发送一段代码、检查你的补丁、或是其他等等），就最有可能得到有用的答案。因为这会定出一个时间和精力的上限，便于回答者能集中精力来帮你。这么做很棒。&lt;/p&gt;
&lt;p&gt;要理解专家们所处的世界，请把专业技能想像为充裕的资源，而回复的时间则是稀缺的资源。你要求他们奉献的时间越少，你越有可能从真正专业而且很忙的专家那里得到解答。&lt;/p&gt;
&lt;p&gt;所以，界定一下你的问题，使专家花在辨识你的问题和回答所需要付出的时间减到最少，这技巧对你获得有用的答案相当有帮助 —— 但这技巧通常和简化问题有所区别。因此，问&lt;code&gt;我想更好地理解 X，可否指点一下哪有好一点说明？&lt;/code&gt;通常比问&lt;code&gt;你能解释一下 X 吗？&lt;/code&gt;更好。如果你的代码不能运作，通常请别人看看哪里有问题，比要求别人替你改正要明智得多。&lt;/p&gt;
&lt;h3 id=&quot;询问有关代码的问题时&quot;&gt;询问有关代码的问题时&lt;/h3&gt;
&lt;p&gt;如果没有提示别人应该从何入手，别要求他人帮你调试有问题的代码。张贴几百行的代码，然后说一声：&lt;code&gt;它不能工作&lt;/code&gt;会让你完全被忽略。只贴几十行代码，然后说一句：&lt;code&gt;在第七行以后，我期待它显示 &amp;#x3C;x&gt;，但实际出现的是 &amp;#x3C;y&gt;&lt;/code&gt;比较有可能让你得到回应。&lt;/p&gt;
&lt;p&gt;最有效描述程序问题的方法是提供最精简的 Bug 展示测试用例（bug-demonstrating test case）。什么是最精简的测试用例？那是问题的缩影；一小个程序片段能&lt;strong&gt;刚好&lt;/strong&gt;展示出程序的异常行为，而不包含其他令人分散注意力的内容。怎么制作最精简的测试用例？如果你知道哪一行或哪一段代码会造成异常的行为，复制下来并加入足够重现这个状况的代码（例如，足以让这段代码能被编译/直译/被应用程序处理）。如果你无法将问题缩减到一个特定区块，就复制一份代码并移除不影响产生问题行为的部分。总之，测试用例越小越好（查看&lt;a href=&quot;#%E8%AF%9D%E4%B8%8D%E5%9C%A8%E5%A4%9A%E8%80%8C%E5%9C%A8%E7%B2%BE&quot;&gt;话不在多而在精&lt;/a&gt;一节）。&lt;/p&gt;
&lt;p&gt;一般而言，要得到一段相当精简的测试用例并不太容易，但永远先尝试这样做是一个好习惯。这种方式可以帮助你了解如何自行解决这个问题 —— 而且即使你的尝试不成功，黑客们也会看到你在尝试取得答案的过程中付出了努力，这可以让他们更愿意与你合作。&lt;/p&gt;
&lt;p&gt;如果你只是想让别人帮忙审查（Review）一下代码，在信的开头就要说出来，并且一定要提到你认为哪一部分特别需要关注以及为什么。&lt;/p&gt;
&lt;h3 id=&quot;别把自己家庭作业的问题贴上来&quot;&gt;别把自己家庭作业的问题贴上来&lt;/h3&gt;
&lt;p&gt;黑客们很擅长分辨哪些问题是家庭作业式的问题；因为我们中的大多数都曾自己解决这类问题。同样，这些问题得由&lt;strong&gt;你&lt;/strong&gt;来搞定，你会从中学到东西。你可以要求给点提示，但别要求得到完整的解决方案。&lt;/p&gt;
&lt;p&gt;如果你怀疑自己碰到了一个家庭作业式的问题，但仍然无法解决，试试在用户群组，论坛或（最后一招）在项目的&lt;strong&gt;用户&lt;/strong&gt;邮件列表或论坛中提问。尽管黑客们&lt;strong&gt;会&lt;/strong&gt;看出来，但一些有经验的用户也许仍会给你一些提示。&lt;/p&gt;
&lt;h3 id=&quot;去掉无意义的提问句&quot;&gt;去掉无意义的提问句&lt;/h3&gt;
&lt;p&gt;避免用无意义的话结束提问，例如&lt;code&gt;有人能帮我吗？&lt;/code&gt;或者&lt;code&gt;这有答案吗？&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;首先：如果你对问题的描述不是很好，这样问更是画蛇添足。&lt;/p&gt;
&lt;p&gt;其次：由于这样问是画蛇添足，黑客们会很厌烦你 —— 而且通常会用逻辑上正确，但毫无意义的回答来表示他们的蔑视， 例如：&lt;code&gt;没错，有人能帮你&lt;/code&gt;或者&lt;code&gt;不，没答案&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;一般来说，避免用 &lt;code&gt;是或否&lt;/code&gt;、&lt;code&gt;对或错&lt;/code&gt;、&lt;code&gt;有或没有&lt;/code&gt;类型的问句，除非你想得到&lt;a href=&quot;https://strcat.de/questions-with-yes-or-no-answers.html&quot;&gt;是或否类型的回答&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&quot;即使你很急也不要在标题写紧急&quot;&gt;即使你很急也不要在标题写&lt;code&gt;紧急&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;这是你的问题，不是我们的。宣称&lt;code&gt;紧急&lt;/code&gt;极有可能事与愿违：大多数黑客会直接删除无礼和自私地企图即时引起关注的问题。更严重的是，&lt;code&gt;紧急&lt;/code&gt;这个字（或是其他企图引起关注的标题）通常会被垃圾信过滤器过滤掉 —— 你希望能看到你问题的人可能永远也看不到。&lt;/p&gt;
&lt;p&gt;有半个例外的情况是，如果你是在一些很高调，会使黑客们兴奋的地方，也许值得这样去做。在这种情况下，如果你有时间压力，也很有礼貌地提到这点，人们也许会有兴趣回答快一点。&lt;/p&gt;
&lt;p&gt;当然，这风险很大，因为黑客们兴奋的点多半与你的不同。譬如从 NASA 国际空间站（International Space Station）发这样的标题没有问题，但用自我感觉良好的慈善行为或政治原因发肯定不行。事实上，张贴诸如&lt;code&gt;紧急：帮我救救这个毛茸茸的小海豹！&lt;/code&gt;肯定让你被黑客忽略或惹恼他们，即使他们认为毛茸茸的小海豹很重要。&lt;/p&gt;
&lt;p&gt;如果你觉得这点很不可思议，最好再把这份指南剩下的内容多读几遍，直到你弄懂了再发文。&lt;/p&gt;
&lt;h3 id=&quot;礼多人不怪而且有时还很有帮助&quot;&gt;礼多人不怪，而且有时还很有帮助&lt;/h3&gt;
&lt;p&gt;彬彬有礼，多用&lt;code&gt;请&lt;/code&gt;和&lt;code&gt;谢谢您的关注&lt;/code&gt;，或&lt;code&gt;谢谢你的关照&lt;/code&gt;。让大家都知道你对他们花时间免费提供帮助心存感激。&lt;/p&gt;
&lt;p&gt;坦白说，这一点并没有比使用清晰、正确、精准且合乎语法和避免使用专用格式重要（也不能取而代之）。黑客们一般宁可读有点唐突但技术上鲜明的 Bug 报告，而不是那种有礼但含糊的报告。（如果这点让你不解，记住我们是按问题能教给我们什么来评价问题的价值的）&lt;/p&gt;
&lt;p&gt;然而，如果你有一串的问题待解决，客气一点肯定会增加你得到有用回应的机会。&lt;/p&gt;
&lt;p&gt;（我们注意到，自从本指南发布后，从资深黑客那里得到的唯一严重缺陷反馈，就是对预先道谢这一条。一些黑客觉得&lt;code&gt;先谢了&lt;/code&gt;意味着事后就不用再感谢任何人的暗示。我们的建议是要么先说&lt;code&gt;先谢了&lt;/code&gt;，&lt;strong&gt;然后&lt;/strong&gt;事后再对回复者表示感谢，或者换种方式表达感激，譬如用&lt;code&gt;谢谢你的关注&lt;/code&gt;或&lt;code&gt;谢谢你的关照&lt;/code&gt;。）&lt;/p&gt;
&lt;h3 id=&quot;问题解决后加个简短的补充说明&quot;&gt;问题解决后，加个简短的补充说明&lt;/h3&gt;
&lt;p&gt;问题解决后，向所有帮助过你的人发个说明，让他们知道问题是怎样解决的，并再一次向他们表示感谢。如果问题在新闻组或者邮件列表中引起了广泛关注，应该在那里贴一个说明比较恰当。&lt;/p&gt;
&lt;p&gt;最理想的方式是向最初提问的话题回复此消息，并在标题中包含&lt;code&gt;已修正&lt;/code&gt;，&lt;code&gt;已解决&lt;/code&gt;或其它同等含义的明显标记。在人来人往的邮件列表里，一个看见讨论串&lt;code&gt;问题 X&lt;/code&gt;和&lt;code&gt;问题 X - 已解决&lt;/code&gt;的潜在回复者就明白不用再浪费时间了（除非他个人觉得&lt;code&gt;问题 X&lt;/code&gt;有趣），因此可以利用此时间去解决其它问题。&lt;/p&gt;
&lt;p&gt;补充说明不必很长或是很深入；简单的一句&lt;code&gt;你好，原来是网线出了问题！谢谢大家 – Bill&lt;/code&gt;比什么也不说要来的好。事实上，除非结论真的很有技术含量，否则简短可爱的小结比长篇大论更好。说明问题是怎样解决的，但大可不必将解决问题的过程复述一遍。&lt;/p&gt;
&lt;p&gt;对于有深度的问题，张贴调试记录的摘要是有帮助的。描述问题的最终状态，说明是什么解决了问题，在此&lt;strong&gt;之后&lt;/strong&gt;才指明可以避免的盲点。避免盲点的部分应放在正确的解决方案和其它总结材料之后，而不要将此信息搞成侦探推理小说。列出那些帮助过你的名字，会让你交到更多朋友。&lt;/p&gt;
&lt;p&gt;除了有礼貌和有内涵以外，这种类型的补充也有助于他人在邮件列表/新闻群组/论坛中搜索到真正解决你问题的方案，让他们也从中受益。&lt;/p&gt;
&lt;p&gt;至少，这种补充有助于让每位参与协助的人因问题的解决而从中得到满足感。如果你自己不是技术专家或者黑客，那就相信我们，这种感觉对于那些你向他们求助的大师或者专家而言，是非常重要的。问题悬而未决会让人灰心；黑客们渴望看到问题被解决。好人有好报，满足他们的渴望，你会在下次提问时尝到甜头。&lt;/p&gt;
&lt;p&gt;思考一下怎样才能避免他人将来也遇到类似的问题，自问写一份文件或加个常见问题（FAQ）会不会有帮助。如果是的话就将它们发给维护者。&lt;/p&gt;
&lt;p&gt;在黑客中，这种良好的后继行动实际上比传统的礼节更为重要，也是你如何透过善待他人而赢得声誉的方式，这是非常有价值的资产。&lt;/p&gt;
&lt;h2 id=&quot;如何解读答案&quot;&gt;如何解读答案&lt;/h2&gt;
&lt;p&gt;&lt;a id=&quot;rtfm&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;rtfm-和-stfw如何知道你已完全搞砸了&quot;&gt;RTFM 和 STFW：如何知道你已完全搞砸了&lt;/h3&gt;
&lt;p&gt;有一个古老而神圣的传统：如果你收到&lt;code&gt;RTFM（Read The Fucking Manual）&lt;/code&gt;的回应，回答者认为你&lt;strong&gt;应该去读他妈的手册&lt;/strong&gt;。当然，基本上他是对的，你应该去读一读。&lt;/p&gt;
&lt;p&gt;RTFM 有一个年轻的亲戚。如果你收到&lt;code&gt;STFW（Search The Fucking Web）&lt;/code&gt;的回应，回答者认为你&lt;strong&gt;应该到他妈的网上搜索&lt;/strong&gt;。那人多半也是对的，去搜索一下吧。（更温和一点的说法是 &lt;strong&gt;&lt;a href=&quot;http://lmgtfy.com/&quot;&gt;Google 是你的朋友&lt;/a&gt;&lt;/strong&gt;！）&lt;/p&gt;
&lt;p&gt;在论坛，你也可能被要求去爬爬论坛的旧文。事实上，有人甚至可能热心地为你提供以前解决此问题的讨论串。但不要依赖这种关照，提问前应该先搜索一下旧文。&lt;/p&gt;
&lt;p&gt;通常，用这两句之一回答你的人会给你一份包含你需要内容的手册或者一个网址，而且他们打这些字的时候也正在读着。这些答复意味着回答者认为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;你需要的信息非常容易获得&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;你自己去搜索这些信息比灌给你，能让你学到更多&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;你不应该因此不爽；&lt;strong&gt;依照黑客的标准，他已经表示了对你一定程度的关注，而没有对你的要求视而不见&lt;/strong&gt;。你应该对他祖母般的慈祥表示感谢。&lt;/p&gt;
&lt;h3 id=&quot;如果还是搞不懂&quot;&gt;如果还是搞不懂&lt;/h3&gt;
&lt;p&gt;如果你看不懂回应，别立刻要求对方解释。像你以前试着自己解决问题时那样（利用手册，FAQ，网络，身边的高手），先试着去搞懂他的回应。如果你真的需要对方解释，记得表现出你已经从中学到了点什么。&lt;/p&gt;
&lt;p&gt;比方说，如果我回答你：&lt;code&gt;看来似乎是 zentry 卡住了；你应该先清除它。&lt;/code&gt;，然后，这是一个&lt;strong&gt;很糟的&lt;/strong&gt;后续问题回应：&lt;code&gt;zentry 是什么？&lt;/code&gt; &lt;strong&gt;好&lt;/strong&gt;的问法应该是这样：&lt;code&gt;哦~~~我看过说明了但是只有 -z 和 -p 两个参数中提到了 zentries，而且还都没有清楚的解释如何清除它。你是指这两个中的哪一个吗？还是我看漏了什么？&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&quot;处理无礼的回应&quot;&gt;处理无礼的回应&lt;/h3&gt;
&lt;p&gt;很多黑客圈子中看似无礼的行为并不是存心冒犯。相反，它是直截了当，一针见血式的交流风格，这种风格更注重解决问题，而不是使人感觉舒服而却模模糊糊。&lt;/p&gt;
&lt;p&gt;如果你觉得被冒犯了，试着平静地反应。如果有人真的做了出格的事，邮件列表、新闻群组或论坛中的前辈多半会招呼他。如果这&lt;strong&gt;没有&lt;/strong&gt;发生而你却发火了，那么你发火对象的言语可能在黑客社区中看起来是正常的，而&lt;strong&gt;你&lt;/strong&gt;将被视为有错的一方，这将伤害到你获取信息或帮助的机会。&lt;/p&gt;
&lt;p&gt;另一方面，你偶尔真的会碰到无礼和无聊的言行。与上述相反，对真正的冒犯者狠狠地打击，用犀利的语言将其驳得体无完肤都是可以接受的。然而，在行事之前一定要非常非常的有根据。纠正无礼的言论与开始一场毫无意义的口水战仅一线之隔，黑客们自己莽撞地越线的情况并不鲜见。如果你是新手或外人，避开这种莽撞的机会并不高。如果你想得到的是信息而不是消磨时光，这时最好不要把手放在键盘上以免冒险。&lt;/p&gt;
&lt;p&gt;（有些人断言很多黑客都有轻度的自闭症或亚斯伯格综合症，缺少用于润滑人类社会&lt;strong&gt;正常&lt;/strong&gt;交往所需的神经。这既可能是真也可能是假的。如果你自己不是黑客，兴许你认为我们脑袋有问题还能帮助你应付我们的古怪行为。只管这么干好了，我们不在乎。我们&lt;strong&gt;喜欢&lt;/strong&gt;我们现在这个样子，并且通常对病患标记都有站得住脚的怀疑。）&lt;/p&gt;
&lt;p&gt;Jeff Bigler 的观察总结和这个相关也值得一读 (&lt;strong&gt;&lt;a href=&quot;http://www.mit.edu/~jcb/tact.html&quot;&gt;tact filters&lt;/a&gt;&lt;/strong&gt;)。&lt;/p&gt;
&lt;p&gt;在下一节，我们会谈到另一个问题，当&lt;strong&gt;你&lt;/strong&gt;行为不当时所会受到的&lt;code&gt;冒犯&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&quot;如何避免扮演失败者&quot;&gt;如何避免扮演失败者&lt;/h2&gt;
&lt;p&gt;在黑客社区的论坛中，你以本指南所描述的或类似的方式，可能会有那么几次搞砸了。而你会在公开场合中被告知你是如何搞砸的，也许攻击的言语中还会带点夹七夹八的颜色。&lt;/p&gt;
&lt;p&gt;这种事发生以后，你能做的最糟糕的事莫过于哀嚎你的遭遇、宣称被言语攻击、要求道歉、高声尖叫、憋闷气、威胁诉诸法律、向其雇主报怨、不去关马桶盖等等。相反地，你该这么做：&lt;/p&gt;
&lt;p&gt;熬过去，这很正常。事实上，它是有益健康且合理的。&lt;/p&gt;
&lt;p&gt;社区的标准不会自行维持，它们是通过参与者积极而&lt;strong&gt;公开地&lt;/strong&gt;执行来维持的。不要哭嚎所有的批评都应该通过私下的邮件传送，它不是这样运作的。当有人评论你的一个说法有误或者提出不同看法时，坚持声称受到个人攻击也毫无益处，这些都是失败者的态度。&lt;/p&gt;
&lt;p&gt;也有其它的黑客论坛，受过高礼节要求的误导，禁止参与者张贴任何对别人帖子挑毛病的消息，并声称&lt;code&gt;如果你不想帮助用户就闭嘴。&lt;/code&gt; 结果造成有想法的参与者纷纷离开，这么做只会使它们沦为毫无意义的唠叨与无用的技术论坛。&lt;/p&gt;
&lt;p&gt;夸张的讲法是：你要的是“友善”（以上述方式）还是有用？两个里面挑一个。&lt;/p&gt;
&lt;p&gt;记着：当黑客说你搞砸了，并且（无论多么刺耳）告诉你别再这样做时，他正在为关心&lt;strong&gt;你&lt;/strong&gt;和&lt;strong&gt;他的社区&lt;/strong&gt;而行动。对他而言，不理你并将你从他的生活中滤掉更简单。如果你无法做到感谢，至少要表现得有点尊严，别大声哀嚎，也别因为自己是个有戏剧性超级敏感的灵魂和自以为有资格的新来者，就指望别人像对待脆弱的洋娃娃那样对你。&lt;/p&gt;
&lt;p&gt;有时候，即使你没有搞砸（或者只是在他的想像中你搞砸了），有些人也会无缘无故地攻击你本人。在这种情况下，抱怨倒是&lt;strong&gt;真的&lt;/strong&gt;会把问题搞砸。&lt;/p&gt;
&lt;p&gt;这些来找麻烦的人要么是毫无办法但自以为是专家的不中用家伙，要么就是测试你是否真会搞砸的心理专家。其它读者要么不理睬，要么用自己的方式对付他们。这些来找麻烦的人在给他们自己找麻烦，这点你不用操心。&lt;/p&gt;
&lt;p&gt;也别让自己卷入口水战，最好不要理睬大多数的口水战 —— 当然，这是在你检验它们只是口水战，并且未指出你有搞砸的地方，同时也没有巧妙地将问题真正的答案藏于其后（这也是有可能的）。&lt;/p&gt;
&lt;h2 id=&quot;不该问的问题&quot;&gt;不该问的问题&lt;/h2&gt;
&lt;p&gt;以下是几个经典蠢问题，以及黑客没回答时心中所想的：&lt;/p&gt;
&lt;p&gt;问题：&lt;a href=&quot;#q1&quot;&gt;我能在哪找到 X 程序或 X 资源？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;问题：&lt;a href=&quot;#q2&quot;&gt;我怎样用 X 做 Y？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;问题：&lt;a href=&quot;#q3&quot;&gt;如何设定我的 shell 提示？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;问题：&lt;a href=&quot;#q4&quot;&gt;我可以用 Bass-o-matic 文件转换工具将 AcmeCorp 文件转换为 TeX 格式吗？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;问题：&lt;a href=&quot;#q5&quot;&gt;我的程序/设定/SQL 语句没有用&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;问题：&lt;a href=&quot;#q6&quot;&gt;我的 Windows 电脑有问题，你能帮我吗？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;问题：&lt;a href=&quot;#q7&quot;&gt;我的程序不会动了，我认为系统工具 X 有问题&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;问题：&lt;a href=&quot;#q8&quot;&gt;我在安装 Linux（或者 X ）时有问题，你能帮我吗？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;问题：&lt;a href=&quot;#q9&quot;&gt;我怎么才能破解 root 帐号/窃取 OP 特权/读别人的邮件呢？&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a id=&quot;q1&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;问题：我能在哪找到 X 程序或 X 资源？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;回答：就在我找到它的地方啊，白痴 —— 搜索引擎的那一头。天哪！难道还有人不会用 &lt;a href=&quot;https://www.google.com&quot;&gt;Google&lt;/a&gt; 吗？&lt;/p&gt;
&lt;p&gt;&lt;a id=&quot;q2&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;问题：我怎样用 X 做 Y？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;回答：如果你想解决的是 Y ，提问时别给出可能并不恰当的方法。这种问题说明提问者不但对 X 完全无知，也对 Y 要解决的问题糊涂，还被特定形势禁锢了思维。最好忽略这种人，等他们把问题搞清楚了再说。&lt;/p&gt;
&lt;p&gt;&lt;a id=&quot;q3&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;问题：如何设定我的 shell 提示？？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;回答：如果你有足够的智慧提这个问题，你也该有足够的智慧去 &lt;a href=&quot;#RTFM&quot;&gt;RTFM&lt;/a&gt;，然后自己去找出来。&lt;/p&gt;
&lt;p&gt;&lt;a id=&quot;q4&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;问题：我可以用 Bass-o-matic 文件转换工具将 AcmeCorp 文件转换为 TeX 格式吗？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;回答：试试看就知道了。如果你试过，你就知道了答案，就不用浪费我的时间了。&lt;/p&gt;
&lt;p&gt;&lt;a id=&quot;q5&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;问题：我的{程序/设定/SQL 语句}没有用&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;回答：这不算是问题吧，我对要我问你二十个问题才找得出你真正问题的问题没兴趣 —— 我有更有意思的事要做呢。在看到这类问题的时候，我的反应通常不外如下三种&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你还有什么要补充的吗？&lt;/li&gt;
&lt;li&gt;真糟糕，希望你能搞定。&lt;/li&gt;
&lt;li&gt;这关我屁事？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a id=&quot;q6&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;问题：我的 Windows 电脑有问题，你能帮我吗？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;回答：能啊，扔掉微软的垃圾，换个像 Linux 或 BSD 的开源操作系统吧。&lt;/p&gt;
&lt;p&gt;注意：如果程序有官方版 Windows 或者与 Windows 有互动（如 Samba），你&lt;strong&gt;可以&lt;/strong&gt;问与 Windows 相关的问题，只是别对问题是由 Windows 操作系统而不是程序本身造成的回复感到惊讶， 因为 Windows 一般来说实在太烂，这种说法通常都是对的。&lt;/p&gt;
&lt;p&gt;&lt;a id=&quot;q7&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;问题：我的程序不会动了，我认为系统工具 X 有问题&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;回答：你完全有可能是第一个注意到被成千上万用户反复使用的系统调用与函数库文件有明显缺陷的人，更有可能的是你完全没有根据。不同凡响的说法需要不同凡响的证据，当你这样声称时，你必须有清楚而详尽的缺陷说明文件作后盾。&lt;/p&gt;
&lt;p&gt;&lt;a id=&quot;q8&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;问题：我在安装 Linux（或者 X ）时有问题，你能帮我吗？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;回答：不能，我只有亲自在你的电脑上动手才能找到毛病。还是去找你当地的 Linux 使用群组者寻求实际的指导吧（你能在&lt;a href=&quot;http://www.linux.org/groups/index.html&quot;&gt;这儿&lt;/a&gt;找到用户群组的清单）。&lt;/p&gt;
&lt;p&gt;注意：如果安装问题与某 Linux 的发行版有关，在它的邮件列表、论坛或本地用户群组中提问也许是恰当的。此时，应描述问题的准确细节。在此之前，先用 &lt;code&gt;Linux&lt;/code&gt; 和&lt;strong&gt;所有&lt;/strong&gt;被怀疑的硬件作关键词仔细搜索。&lt;/p&gt;
&lt;p&gt;&lt;a id=&quot;q9&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;问题：我怎么才能破解 root 帐号/窃取 OP 特权/读别人的邮件呢？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;回答：想要这样做，说明了你是个卑鄙小人；想找个黑客帮你，说明你是个白痴！&lt;/p&gt;
&lt;h2 id=&quot;好问题与蠢问题&quot;&gt;好问题与蠢问题&lt;/h2&gt;
&lt;p&gt;最后，我将透过举一些例子，来说明怎样聪明的提问；同一个问题的两种问法被放在一起，一种是愚蠢的，另一种才是明智的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;蠢问题&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我可以在哪儿找到关于 Foonly Flurbamatic 的资料？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这种问法无非想得到 &lt;a href=&quot;#RTFM&quot;&gt;STFW&lt;/a&gt; 这样的回答。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;聪明问题&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我用 Google 搜索过 “Foonly Flurbamatic 2600”，但是没找到有用的结果。谁知道上哪儿去找对这种设备编程的资料？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这个问题已经 STFW 过了，看起来他真的遇到了麻烦。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;蠢问题&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我从 foo 项目找来的源码没法编译。它怎么这么烂？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;他觉得都是别人的错，这个傲慢自大的提问者。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;聪明问题&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;foo 项目代码在 Nulix 6.2 版下无法编译通过。我读过了 FAQ，但里面没有提到跟 Nulix 有关的问题。这是我编译过程的记录，我有什么做的不对的地方吗？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;提问者已经指明了环境，也读过了 FAQ，还列出了错误，并且他没有把问题的责任推到别人头上，他的问题值得被关注。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;蠢问题&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我的主机板有问题了，谁来帮我？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;某黑客对这类问题的回答通常是：&lt;code&gt;好的，还要帮你拍拍背和换尿布吗？&lt;/code&gt;，然后按下删除键。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;聪明问题&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我在 S2464 主机板上试过了 X 、 Y 和 Z ，但没什么作用，我又试了 A 、 B 和 C 。请注意当我尝试 C 时的奇怪现象。显然 florbish 正在 grommicking，但结果出人意料。通常在 Athlon MP 主机板上引起 grommicking 的原因是什么？有谁知道接下来我该做些什么测试才能找出问题？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这个家伙，从另一个角度来看，值得去回答他。他表现出了解决问题的能力，而不是坐等天上掉答案。&lt;/p&gt;
&lt;p&gt;在最后一个问题中，注意&lt;code&gt;告诉我答案&lt;/code&gt;和&lt;code&gt;给我启示，指出我还应该做什么诊断工作&lt;/code&gt;之间微妙而又重要的区别。&lt;/p&gt;
&lt;p&gt;事实上，后一个问题源自于 2001 年 8 月在 Linux 内核邮件列表（lkml）上的一个真实的提问。我（Eric）就是那个提出问题的人。我在 Tyan S2464 主板上观察到了这种无法解释的锁定现象，列表成员们提供了解决这一问题的重要信息。&lt;/p&gt;
&lt;p&gt;通过我的提问方法，我给了别人可以咀嚼玩味的东西；我设法让人们很容易参与并且被吸引进来。我显示了自己具备和他们同等的能力，并邀请他们与我共同探讨。通过告诉他们我所走过的弯路，以避免他们再浪费时间，我也表明了对他们宝贵时间的尊重。&lt;/p&gt;
&lt;p&gt;事后，当我向每个人表示感谢，并且赞赏这次良好的讨论经历的时候，一个 Linux 内核邮件列表的成员表示，他觉得我的问题得到解决并非由于我是这个列表中的&lt;strong&gt;名&lt;/strong&gt;人，而是因为我用了正确的方式来提问。&lt;/p&gt;
&lt;p&gt;黑客从某种角度来说是拥有丰富知识但缺乏人情味的家伙；我相信他是对的，如果我&lt;strong&gt;像&lt;/strong&gt;个乞讨者那样提问，不论我是谁，一定会惹恼某些人或者被他们忽视。他建议我记下这件事，这直接导致了本指南的出现。&lt;/p&gt;
&lt;h2 id=&quot;如果得不到回答&quot;&gt;如果得不到回答&lt;/h2&gt;
&lt;p&gt;如果仍得不到回答，请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。没有回应不代表你被忽视，虽然不可否认这种差别很难区分。&lt;/p&gt;
&lt;p&gt;总的来说，简单地重复张贴问题是个很糟的点子。这将被视为无意义的喧闹。有点耐心，知道你问题答案的人可能生活在不同的时区，可能正在睡觉，也有可能你的问题一开始就没有组织好。&lt;/p&gt;
&lt;p&gt;你可以通过其他渠道获得帮助，这些渠道通常更适合初学者的需要。&lt;/p&gt;
&lt;p&gt;有许多网上的以及本地的用户群组，由热情的软件爱好者（即使他们可能从没亲自写过任何软件）组成。通常人们组建这样的团体来互相帮助并帮助新手。&lt;/p&gt;
&lt;p&gt;另外，你可以向很多商业公司寻求帮助，不论公司大还是小。别为要付费才能获得帮助而感到沮丧！毕竟，假使你的汽车发动机汽缸密封圈爆掉了 —— 完全可能如此 —— 你还得把它送到修车铺，并且为维修付费。就算软件没花费你一分钱，你也不能强求技术支持总是免费的。&lt;/p&gt;
&lt;p&gt;对像是 Linux 这种大众化的软件，每个开发者至少会对应到上万名用户。根本不可能由一个人来处理来自上万名用户的求助电话。要知道，即使你要为这些协助付费，和你所购买的同类软件相比，你所付出的也是微不足道的（通常封闭源代码软件的技术支持费用比开源软件的要高得多，且内容也没那么丰富）。&lt;/p&gt;
&lt;h2 id=&quot;如何更好地回答问题&quot;&gt;如何更好地回答问题&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;态度和善一点。&lt;/strong&gt; 问题带来的压力常使人显得无礼或愚蠢，其实并不是这样。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;对初犯者私下回复。&lt;/strong&gt; 对那些坦诚犯错之人没有必要当众羞辱，一个真正的新手也许连怎么搜索或在哪找常见问题都不知道。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;如果你不确定，一定要说出来！&lt;/strong&gt; 一个听起来权威的错误回复比没有还要糟，别因为听起来像个专家很好玩，就给别人乱指路。要谦虚和诚实，给提问者与同行都树个好榜样。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;如果帮不了忙，也别妨碍他。&lt;/strong&gt; 不要在实际步骤上开玩笑，那样也许会毁了提问者的设置 —— 有些可怜的呆瓜会把它当成真的指令。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;试探性的反问以引出更多的细节。&lt;/strong&gt; 如果你做得好，提问者可以学到点东西 —— 你也可以。试试将蠢问题转变成好问题，别忘了我们都曾是新手。&lt;/p&gt;
&lt;p&gt;尽管对那些懒虫抱怨一声 RTFM 是正当的，但能给出文档的链接（即使只是建议个 Google 搜索关键词）会更好。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;如果你决定回答，就请给出好的答案。&lt;/strong&gt; 当别人正在用错误的工具或方法时别建议笨拙的权宜之计（workaround），应推荐更好的工具，重新界定问题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正面地回答问题！&lt;/strong&gt; 如果这个提问者已经很深入的研究而且也表明已经试过 X 、 Y 、 Z 、 A 、 B 、 C 但没得到结果，回答 &lt;code&gt;试试看 A 或是 B&lt;/code&gt; 或者 &lt;code&gt;试试 X 、 Y 、 Z 、 A 、 B 、 C&lt;/code&gt; 并附上一个链接一点用都没有。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;帮助你的社区从问题中学习。&lt;/strong&gt; 当回复一个好问题时，问问自己&lt;code&gt;如何修改相关文件或常见问题文件以免再次解答同样的问题？&lt;/code&gt;，接着再向文件维护者发一份补丁。&lt;/p&gt;
&lt;p&gt;如果你在研究一番后才作出了回答，&lt;strong&gt;展现你的技巧而不是直接端出结果&lt;/strong&gt;。毕竟&lt;code&gt;授人以鱼不如授人以渔&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&quot;相关资源&quot;&gt;相关资源&lt;/h2&gt;
&lt;p&gt;如果你需要个人电脑、Unix 系统和网络如何运作的基础知识，参阅 &lt;a href=&quot;http://en.tldp.org/HOWTO/Unix-and-Internet-Fundamentals-HOWTO/&quot;&gt;Unix 系统和网络基本原理&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;当你发布软件或补丁时，试着按&lt;a href=&quot;http://en.tldp.org/HOWTO/Software-Release-Practice-HOWTO/index.html&quot;&gt;软件发布实践&lt;/a&gt;操作。&lt;/p&gt;
&lt;h2 id=&quot;鸣谢&quot;&gt;鸣谢&lt;/h2&gt;
&lt;p&gt;Evelyn Mitchel 贡献了一些愚蠢问题例子并启发了编写&lt;code&gt;如何更好地回答问题&lt;/code&gt;这一节， Mikhail Ramendik 贡献了一些特别有价值的建议和改进。&lt;/p&gt;</content:encoded></item><item><title>给你的网页右下角添加个可拖拽弹跳的石蒜模拟器</title><link>https://blog.skyshadow.fun/posts/20230730213903/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20230730213903/</guid><pubDate>Sun, 30 Jul 2023 21:39:03 GMT</pubDate><content:encoded>&lt;p&gt;大家好&lt;/p&gt;
&lt;p&gt;不小心在别人博客那看到了个Sakana! Widget，就是在你的网页右下角添加个可拉着玩的小组件&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2023/07/31/kO156eTzPUYJ9tK.gif&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;一个gif.png&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/31/kO156eTzPUYJ9tK.gif&quot; alt=&quot;一个gif.png&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;自己试了下，用起来不错&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2023/07/30/OVtosZiAKRBcFXG.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片封面.png&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/30/OVtosZiAKRBcFXG.png&quot; alt=&quot;图片封面.png&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;就分享一下怎么弄的吧&lt;/p&gt;
&lt;p&gt;先看这里-&gt; &lt;a href=&quot;https://github.com/dsrkafuu/sakana-widget&quot;&gt;Github Here&lt;/a&gt;,如果你只想弄上面预设的这两个小人的话，引用一下上面网站里现成代码即可，以下为做一个自己的方法&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;看看我的组件效果&quot;&gt;看看我的组件效果&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2023/07/30/gHTZStP3UdpFs8M.gif&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;1690722215828gif&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/30/gHTZStP3UdpFs8M.gif&quot; alt=&quot;1690722215828gif&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;第一步&quot;&gt;第一步&lt;/h4&gt;
&lt;p&gt;(先说明一下，本人使用的方法可能和Github上写的有点不一样，毕竟它上面的看不太懂…)&lt;/p&gt;
&lt;p&gt;先创建一个js文件在你的public/js文件夹里，我这里取名为sakana-init.js&lt;/p&gt;
&lt;p&gt;输入以下代码&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; initSakanaWidget&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;() {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; xxx&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; SakanaWidget.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;getCharacter&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;chisato&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  xxx.image &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;url&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  SakanaWidget.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;registerCharacter&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;xxx&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, xxx);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  new&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; SakanaWidget&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;({  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    character: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;xxx&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    controls: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    initialState: { i: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, r: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  }).&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;mount&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;#sakana-widget&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;里面的xxx即为你想给你的组件小人取的名，没多大用，&lt;/p&gt;
&lt;p&gt;xxx.image里输入你的图片链接即可（要透明且大小为宽高比例1：1的图片）&lt;/p&gt;
&lt;p&gt;character和control,initialState等下面会说明其用处&lt;/p&gt;
&lt;p&gt;当然在后面得加上一个网页加载时自动执行initSakanaWidget()的代码以及引入所需要的js，在这引入比在head标签前要好一点&lt;br&gt;
我这找ChatGPT生成了一个，自己能用&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;document.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;addEventListener&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;DOMContentLoaded&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, () &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; script&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; document.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;createElement&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;script&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  script.src &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;https://cdn.jsdelivr.net/npm/sakana-widget@2.5.0/lib/sakana.min.js&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  script.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;onload&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; () &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;    initSakanaWidget&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  };  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  document.body.&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;appendChild&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(script);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;});  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;第二步&quot;&gt;第二步&lt;/h4&gt;
&lt;p&gt;在你的css文件里引入以下css:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;#sakana-widget&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  position&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;fixed&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  right&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;  bottom&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;位置可以随便弄，你甚至也可以加上”z-index: -1;“让它成为背景&lt;/p&gt;
&lt;h4 id=&quot;第三步&quot;&gt;第三步&lt;/h4&gt;
&lt;p&gt;inject你的js和css以及这个组件原本所需要的css等，js最好放在body前，css可以放在head前&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;# 组件需要的css&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;link&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; rel&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; href&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;https://cdn.jsdelivr.net/npm/sakana-widget@2.5.0/lib/sakana.min.css&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;# 你的js和css&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; src&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;xxx/sakana-init.js&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;link&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; rel&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; href&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;xxx/mycss.css&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;再在body里把你的组件容器放上去即可&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;sakana-widget&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样一个简单的石蒜模拟器网页小组件就完成了&lt;/p&gt;
&lt;h4 id=&quot;其它配置&quot;&gt;其它配置&lt;/h4&gt;
&lt;p&gt;这个组件有很多的可配置的地方，详细的可以看&lt;a href=&quot;https://github.com/dsrkafuu/sakana-widget/blob/main/README.zh.md&quot;&gt;Github&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这里复制一下它的类型定义和构造函数选项&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# 类型定义&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;export interface SakanaWidgetState {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   * 惯性  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   */  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  i: number;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   * 粘性  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   */  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  s: number;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   * 衰减  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   */  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  d: number;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   * 角度  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   */  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  r: number;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   * 高度  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   */  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  y: number;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   * 垂直速度  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   */  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  t: number;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   * 水平速度  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   */  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  w: number;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;export interface SakanaWidgetCharacter {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  image: string;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  initialState: SakanaWidgetState;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# 构造函数选项&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;export interface SakanaWidgetOptions {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   * 组件大小，默认 `200`  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   */  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  size?: number;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   * 自动适应容器大小 (最小 120px)，默认 `false`  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   */  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  autoFit?: boolean;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   * 角色，默认 `chisato`  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   */  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  character?: &apos;chisato&apos; | &apos;takina&apos;;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   * 控制栏，默认 `true`  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   */  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  controls?: boolean;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   * 展示支撑杆，默认 `true`  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   */  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  rod?: boolean;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   * 可拖动，默认 `true`  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   */  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  draggable?: boolean;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   * canvas 线条设置，默认 `#b4b4b4` &amp;#x26; `10`  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   */  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  stroke?: {  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    color?: string;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    width?: number;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  };  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   * 停止动画的阈值，默认 `0.1`  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   */  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  threshold?: number;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /**  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   * 旋转角度，默认 `0`  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   */  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  rotate?: number;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;具体怎么用呢&lt;/p&gt;
&lt;p&gt;看看第一步的这个代码&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;  new&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; SakanaWidget&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;({  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    character: &lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;xxx&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    controls: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    initialState: { i: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, r: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  }).&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt;mount&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;#sakana-widget&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;);  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;}  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;把你想添加的依次加上就行了&lt;/p&gt;
&lt;p&gt;这样你的网页应该就会有个可拖拽弹跳的石蒜模拟器了！&lt;/p&gt;</content:encoded></item><item><title>在你的html或文章里运行python</title><link>https://blog.skyshadow.fun/posts/20230723170219/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20230723170219/</guid><pubDate>Sun, 23 Jul 2023 17:02:19 GMT</pubDate><content:encoded>&lt;h4 id=&quot;前言&quot;&gt;前言&lt;/h4&gt;
&lt;p&gt;这里是2025年的天影大侠，这不知道从哪找的个东西，都忘了自己弄过这个。&lt;/p&gt;
&lt;h4 id=&quot;问候&quot;&gt;问候&lt;/h4&gt;
&lt;p&gt;大家好&lt;/p&gt;
&lt;p&gt;发文章的时候总是只能发代码，不能运行&lt;br&gt;
现在发现了一个东西，可以在你的文章中直接运行python&lt;br&gt;
它就是pyscript，来看看吧&lt;/p&gt;
&lt;p&gt;[官方文档](&lt;a href=&quot;https://docs.pyscript.net/latest/&quot;&gt;PyScript — PyScript documentation&lt;/a&gt;)在这&amp;#x3C;—&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href=&quot;https://pyscript.net/assets/images/pyscript-sticker-black.svg&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;Pyscript&quot;&gt;&lt;img src=&quot;https://pyscript.net/assets/images/pyscript-sticker-black.svg&quot; alt=&quot;Pyscript&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;第一步&quot;&gt;第一步&lt;/h4&gt;
&lt;p&gt;想要在你的文章中运行python代码，请先在前引入pyscript的css和js&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;link&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; rel&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; href&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;https://pyscript.net/latest/pyscript.css&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; /&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; defer&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; src&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;https://pyscript.net/latest/pyscript.js&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;第二步&quot;&gt;第二步&lt;/h4&gt;
&lt;p&gt;在你的文章body里添加，并在标签前插入你的python代码&lt;br&gt;
比如&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;py-script&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    print(&apos;Hello World!&apos;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;py-script&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当然，也可以先在style标签前修改一下pyscript输出的样式，这里随便改一下&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;    py-script&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        width&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        height&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        font-size&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        text-align&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;        position&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;absolute&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;运行结果如下;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2023/07/23/YJGdox2stULDNvq.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;运行hello world&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/23/YJGdox2stULDNvq.png&quot; alt=&quot;运行hello world&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;第三步&quot;&gt;第三步&lt;/h4&gt;
&lt;p&gt;运行是没有问题，但每次打开网页时都要加载一段时间来下载pyodide&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2023/07/23/V65OPz9qCuwTFSr.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;下载pyodide中&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/23/V65OPz9qCuwTFSr.png&quot; alt=&quot;下载pyodide中&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下载太慢了，毕竟没人想进入一个网页还得加载好半天吧&lt;/p&gt;
&lt;p&gt;根据&lt;a href=&quot;https://docs.pyscript.net/latest/tutorials/py-config-interpreter.html&quot;&gt;文档&lt;/a&gt;，在body里引入以下代码:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;py-config&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;      [[interpreters]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        src = &quot;XXX&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        name = &quot;pyodide-0.23.4&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;        lang = &quot;python&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;py-config&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后你就可以在标签前写上自己的python代码来运行了&lt;/p&gt;
&lt;h4 id=&quot;其它&quot;&gt;其它&lt;/h4&gt;
&lt;p&gt;这只是最基本的print用法，你也可以在标签前引入其他python包，此标签应放在标签前，如&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;py-env&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; - numpy  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; - matplotlib  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;py-env&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即引入了numpy和matplotlib&lt;br&gt;
也可以直接引入.whl，如&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;py-env&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; - &apos;http://xxx.com/xxx.whl&apos;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#024C1A;--shiki-dark:#72F088&quot;&gt;py-env&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那要怎么放在文章里呢？&lt;br&gt;
其实可以直接把html写在文章的index.md里，它在网页上会正常显示的&lt;/p&gt;
&lt;h4 id=&quot;废话&quot;&gt;废话&lt;/h4&gt;
&lt;p&gt;这个pyscript自己用起来觉得还是不如js&lt;br&gt;
毕竟加载的太慢了，要下载Pyodide的文件&lt;br&gt;
更多更详细的教程还请移步[官方文档](&lt;a href=&quot;https://docs.pyscript.net/latest/index.html&quot;&gt;PyScript — PyScript documentation&lt;/a&gt;)&lt;/p&gt;</content:encoded></item><item><title>【失效】网易云音乐搜索分享</title><link>https://blog.skyshadow.fun/posts/20230716145320/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20230716145320/</guid><description>自己做了一个网易云音乐搜索音乐的网站，可以过来看看</description><pubDate>Sun, 16 Jul 2023 14:53:20 GMT</pubDate><content:encoded>&lt;p&gt;做了网易云音乐搜索的网站，我的世界风格&lt;br&gt;
用的Vercel部署&lt;a href=&quot;https://github.com/Binaryify/NeteaseCloudMusicApi&quot;&gt;网易云音乐api&lt;/a&gt; ，域名是国内的，访问可能会有点慢&lt;br&gt;
目前只有搜索音乐的功能，制作简陋&lt;br&gt;
但做起来图一乐&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;在&lt;a href=&quot;https://skyshadowhero.github.io/music/&quot;&gt;博客右上角&lt;/a&gt; 里可以看到&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href=&quot;https://s2.loli.net/2023/07/16/3PsBivaUgW8C5rz.gif&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;演示&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/16/3PsBivaUgW8C5rz.gif&quot; alt=&quot;演示&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>给你的网站添加个页面加载进度条</title><link>https://blog.skyshadow.fun/posts/20230715152359/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20230715152359/</guid><description>给你的网站添加一个页面加载进度条而已</description><pubDate>Sat, 15 Jul 2023 15:23:59 GMT</pubDate><content:encoded>&lt;p&gt;大家好&lt;br&gt;
无意中发现了一个能制作自动页面加载进度条的网页&lt;br&gt;
测试了一下，效果不错&lt;br&gt;
发来给大家试试&lt;br&gt;
网站在这：&lt;a href=&quot;https://codebyzach.github.io/pace/&quot;&gt;https://codebyzach.github.io/pace/&lt;/a&gt;&lt;br&gt;
进入后会有一个既炫酷又平平无奇的加载动画&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/07/15/LGCsEkFozJgty24.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/15/LGCsEkFozJgty24.png&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;br&gt;
向下翻可以看到预设的一些加载动画&lt;br&gt;
先选择颜色，再选择样式&lt;br&gt;
样式随便选一个，就loading bar吧&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/07/15/aO2nF46Il1mZjAN.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/15/aO2nF46Il1mZjAN.png&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;br&gt;
点击DOWNLOAD&lt;br&gt;
然后将它放在你的网站上，我就放在&lt;a href=&quot;https://skyshadowhero.github.io/css/loading-bar.css%E9%87%8C%E7%9A%84&quot;&gt;https://skyshadowhero.github.io/css/loading-bar.css里的&lt;/a&gt;&lt;br&gt;
然后复制网站中Get Start里中间的的代码，并将红色方框里的路径改为你所放的css文件路径&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/07/15/IbmCJp4yGYiQjoa.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/15/IbmCJp4yGYiQjoa.png&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;br&gt;
然后将编辑好的代码放进html文件里的标签前即可&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;如果使用的Hexo+Butterfly搭建博客的话可以直接将此两行代码放在_config.butterfly.yml里的相关位置&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/07/15/YgdbTW3p8AhXuIS.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/15/YgdbTW3p8AhXuIS.png&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;br&gt;
在bash中输入hexo g -d后进入网页，你的页面加载进度条就出现了&lt;br&gt;
效果如下图：&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/07/15/WLhbzkEjl5o6fVp.gif&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/15/WLhbzkEjl5o6fVp.gif&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>【过时】拥有一个动态透明的QQ头像（非小世界）</title><link>https://blog.skyshadow.fun/posts/20230714185051/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20230714185051/</guid><description>分享如何拥有一个透明或动态的QQ头像</description><pubDate>Fri, 14 Jul 2023 18:50:51 GMT</pubDate><content:encoded>&lt;h2 id=&quot;已过时用模块可以更快捷&quot;&gt;已过时，用模块可以更快捷&lt;/h2&gt;
&lt;p&gt;大家好！&lt;br&gt;
今天发一下QQ透明和动态头像的教程&lt;br&gt;
为了方便，这里就用一个透明动态头像来进行演示！&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/07/14/ieOu5A4Zm7CpTSl.gif&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;滑稽&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/14/ieOu5A4Zm7CpTSl.gif&quot; alt=&quot;滑稽&quot;&gt;&lt;/a&gt;&lt;br&gt;
如上图，就这个滑稽脸&lt;/p&gt;
&lt;h3 id=&quot;step1&quot;&gt;Step1:&lt;/h3&gt;
&lt;p&gt;下载软件：&lt;br&gt;
就1.2MB的小软件，不要害怕: (&lt;br&gt;
&lt;a href=&quot;https://share.weiyun.com/HuZ9hF4s&quot;&gt;下载Link&lt;/a&gt;&lt;br&gt;
当然了，建议进群下载，群链接在软件右下角可看到&lt;/p&gt;
&lt;h3 id=&quot;step2&quot;&gt;Step2:&lt;/h3&gt;
&lt;p&gt;登录QQ并打开软件：&lt;br&gt;
登录QQ，新版旧版都行，亲测TIM也可以&lt;br&gt;
双击下载的 透明头像.exe&lt;br&gt;
如果报错“无法成功完成操作，因为文件包含病毒或潜在的垃圾软件”就前往&lt;a href=&quot;https://zhuanlan.zhihu.com/p/408613024&quot;&gt;知乎&lt;/a&gt;看看&lt;br&gt;
打开后应是这样&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/07/14/roGU3lEP16MJf9Z.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/14/roGU3lEP16MJf9Z.png&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;step3&quot;&gt;Step3：&lt;/h3&gt;
&lt;p&gt;点击上传图片，在文件类型中选择.gif(看你要上传什么头像，我这是gif的)&lt;br&gt;
选择我们的gif&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/07/14/YLNizV5JjvDoeKh.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;选择&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/14/YLNizV5JjvDoeKh.png&quot; alt=&quot;选择&quot;&gt;&lt;/a&gt;&lt;br&gt;
点击 打开(&lt;/p&gt;
&lt;h3 id=&quot;step4&quot;&gt;Step4：&lt;/h3&gt;
&lt;p&gt;在上方选择你登录的QQ号后，点击修改头像&lt;br&gt;
自此，你的透明动态头像就上传成功了！&lt;br&gt;
如图：（当然它是在动的）&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/07/14/kdhbUTrHeSMo5G3.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/14/kdhbUTrHeSMo5G3.png&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;br&gt;
如果有问题可点击软件上的加群&lt;br&gt;
当然可以直接上传透明图片&lt;br&gt;
图片如下（你不会看不到吧..）&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/07/15/eQJHz5wBgNn4sj2.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;透明图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/15/eQJHz5wBgNn4sj2.png&quot; alt=&quot;透明图片&quot;&gt;&lt;/a&gt;&lt;br&gt;
图片在上：）&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;图片最大只能1MB&lt;br&gt;
如果没有电脑的话，听说用模块也可以达到同样的效果&lt;br&gt;
要不就直接用QQ小世界吧&lt;/p&gt;</content:encoded></item><item><title>分享：一个Python桌面时钟</title><link>https://blog.skyshadow.fun/posts/20230204161300/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20230204161300/</guid><description>就分享一个简单的python桌面时钟</description><pubDate>Sat, 04 Feb 2023 16:13:00 GMT</pubDate><content:encoded>&lt;h3 id=&quot;前言&quot;&gt;前言&lt;/h3&gt;
&lt;p&gt;这里是2025年的天影大侠，这东西是网课的时候做的，把钉钉放着，自己却在翻python文档，好神奇。&lt;/p&gt;
&lt;h3 id=&quot;正文&quot;&gt;正文&lt;/h3&gt;
&lt;p&gt;分享用Python做的一个桌面时钟&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/07/15/aHYwBnZo2OT86zr.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;桌面时钟&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/07/15/aHYwBnZo2OT86zr.png&quot; alt=&quot;桌面时钟&quot;&gt;&lt;/a&gt;&lt;br&gt;
代码如下，有注释，一目了然：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;#引入一些东西&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tkinter &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tkinter &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; messagebox  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; time  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;#设置主窗口&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;root &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Tk()  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;#设置窗口标题&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;root.title(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;桌面时钟&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;#设置窗口透明度&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;root.attributes(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;-alpha&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0.95&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;#设置窗口置顶&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;root.attributes(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;-topmost&apos;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;#设置一些有用的变量&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;#size,color,font可自行修改&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;size &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt; 40&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;width &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; size&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;25&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;height &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; size&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;color &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;black&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;font &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &quot;微软雅黑&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;#将窗口显示到屏幕正中央并设置窗口大小&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;screenwidth &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; root.winfo_screenwidth()  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;screenheight &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; root.winfo_screenheight()  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;size_geo &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; (width, height, (screenwidth&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;width)&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, (screenheight&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;height)&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;root.geometry(size_geo)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;root.resizable(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 获取时间的函数&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#622CBC;--shiki-dark:#DBB7FF&quot;&gt; gettime&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;():  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;    # 获取当前时间&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    dstr.set(time.strftime(&lt;/span&gt;&lt;span style=&quot;color:#032563;--shiki-dark:#ADDCFF&quot;&gt;&quot;%H:%M:%S&quot;&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;    # 每隔 1s 调用一次 gettime()函数来获取时间&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;    root.after(&lt;/span&gt;&lt;span style=&quot;color:#023B95;--shiki-dark:#91CBFF&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;, gettime)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 生成动态字符串&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;dstr &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.StringVar()  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 利用 textvariable 来实现文本变化&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;lb &lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt; tk.Label(root,&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;textvariable&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;dstr,&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;fg&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;color,&lt;/span&gt;&lt;span style=&quot;color:#702C00;--shiki-dark:#FFB757&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;color:#A0111F;--shiki-dark:#FF9492&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;(font,size))  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;#把时钟放上窗口&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;lb.pack()  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 调用生成时间的函数&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;gettime()  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#66707B;--shiki-dark:#BDC4CC&quot;&gt;# 显示窗口&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#0E1116;--shiki-dark:#F0F3F6&quot;&gt;root.mainloop()  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;拿着用用没问题&lt;/p&gt;</content:encoded></item><item><title>【过时】做一个我的世界风格的Logo！</title><link>https://blog.skyshadow.fun/posts/20230126201947/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20230126201947/</guid><description>拥有一个我的世界风格的Logo，已过时，目前有更简单的取代方法</description><pubDate>Thu, 26 Jan 2023 20:19:47 GMT</pubDate><content:encoded>&lt;h3 id=&quot;前言&quot;&gt;前言&lt;/h3&gt;
&lt;p&gt;这里是2025年的天影大侠，这好像是我的第一篇文章，或许有用，但会的大佬可以用ps或blender，就当个分享吧&lt;/p&gt;
&lt;h3 id=&quot;前言-1&quot;&gt;前言&lt;/h3&gt;
&lt;p&gt;已过时！用blockbench更快捷。&lt;br&gt;
大家好，看看下面这张独特的404图片，是不是自己也想做一个Minecraft风格的Logo呢？&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/01/18/k6vUSYbpOloXDLQ.jpg&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;404&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/01/18/k6vUSYbpOloXDLQ.jpg&quot; alt=&quot;404&quot;&gt;&lt;/a&gt;&lt;br&gt;
教程这就来了！（由一个叫MrBrose的大佬原创，点&lt;a href=&quot;https://mrbrose.github.io/&quot;&gt;这里&lt;/a&gt;去他的主页  ）&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;第一步&quot;&gt;第一步！&lt;/h3&gt;
&lt;p&gt;下载我的世界动画制作器（Mine-imator）&lt;br&gt;
&lt;a href=&quot;http://www.mineimator.com/images/index_head_logo.png&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://www.mineimator.com/images/index_head_logo.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;mine-imator&quot;&gt;&lt;img src=&quot;http://www.mineimator.com/images/index_head_logo.png&quot; alt=&quot;mine-imator&quot;&gt;&lt;/a&gt;&lt;br&gt;
这个软件呢就是一个专门制作我的世界动画的东西&lt;br&gt;
点击下边这个大大的按钮下载&lt;br&gt;
&lt;a href=&quot;https://www.mineimator.com/dl/mineimator-installer&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://www.mineimator.com/images/index_download.png&quot; data-fancybox=&quot;gallery&quot;&gt;&lt;img src=&quot;https://www.mineimator.com/images/index_download.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;br&gt;
下载好后，你就能做一般的我的世界动画了&lt;br&gt;
但我们要做的是我的世界风格的Logo&lt;br&gt;
这时就需要第二步&lt;/p&gt;
&lt;h3 id=&quot;第二步&quot;&gt;第二步！&lt;/h3&gt;
&lt;p&gt;下载由&lt;strong&gt;ShinyGHASTTear大佬制作的我的世界字母模型&lt;/strong&gt;&lt;br&gt;
&lt;a href=&quot;https://cdn.discordapp.com/attachments/817318046216486914/999816845777453096/MC_Letters.png&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://cdn.discordapp.com/attachments/817318046216486914/999816845777453096/MC_Letters.png&quot; data-fancybox=&quot;gallery&quot;&gt;&lt;img src=&quot;https://cdn.discordapp.com/attachments/817318046216486914/999816845777453096/MC_Letters.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;br&gt;
点击下面这个小小的文字下载&lt;br&gt;
&lt;a href=&quot;https://www.mediafire.com/file/7jtxh2khp2hl842/YM%27s_MC_Letters_up01.zip/file&quot;&gt;下载！&lt;/a&gt;&lt;br&gt;
下载好后，打开Mine-imator，进入第三步，可自由发挥&lt;/p&gt;
&lt;h3 id=&quot;第三步&quot;&gt;第三步！&lt;/h3&gt;
&lt;p&gt;进入Mine-imator后，点击这个New Project&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/01/26/YuZklsWBUptTDRa.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/01/26/YuZklsWBUptTDRa.png&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;之后Name（名字），Author（制作者），Description（介绍），随便填&lt;br&gt;
创好后应该会进入这个界面&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/01/26/5BJRnc6p3vrmGEe.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/01/26/5BJRnc6p3vrmGEe.png&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;看到左上角那个工作台了没，点它&lt;br&gt;
圈起来的就是要用的&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/01/26/xrmIGjq4QsTWzuc.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/01/26/xrmIGjq4QsTWzuc.png&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;br&gt;
点击地形，点击Scenery，“Import from world”就是从我的世界官方默认路径里的地图里抠出来一点地形（也可以用其他路径的地图）&lt;br&gt;
“Browse”就是从一些地形文件里导入，有预设的，也可以自己从我的世界地图里扣&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/01/26/Hdf7ZJo64IgQpeC.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/01/26/Hdf7ZJo64IgQpeC.png&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;br&gt;
我这里就用预设的演示，按住右键并用WASD来移动！控制鼠标也行。&lt;br&gt;
光源的话自己琢磨，不用也没啥大问题&lt;br&gt;
然后点击自定义模型&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/01/26/Kj7V6IBZRy3Pzi4.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/01/26/Kj7V6IBZRy3Pzi4.png&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;br&gt;
这时候解压你下载的字体模型包&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/01/26/7RbBNVxSiTMsKF4.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/01/26/7RbBNVxSiTMsKF4.png&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;br&gt;
导入你所想做的模型和想要的材质样式（只有字母数字和一些标点。。），这里用A字母做演示（苦力怕脸在A的背面，将Y旋转180度即可）&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/01/26/bunV8KzqErWDkjw.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/01/26/bunV8KzqErWDkjw.png&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;br&gt;
在右下角选择A（父节点），控制箭头来移动字母，旋转Rotation中的X轴来使字母向上偏转&lt;br&gt;
偷偷加个光源&lt;br&gt;
然后添加摄像头，将摄像头的Parent设置为A（父节点的A），如果有多个字母就设置为最中间那个字母为Parent，主要是让Logo出现在摄像机的中间，自己控制XYX也行，控制Position中的YZ来移动摄像头，控制Rotation中的X来让摄像头向上偏转&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/01/26/UKfw1qxd7W9vSh3.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/01/26/UKfw1qxd7W9vSh3.png&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;br&gt;
之后点击这个按钮[&lt;a href=&quot;https://s2.loli.net/2023/01/26/qcSZIbwaMhG9XfF.png&quot; data-fancybox=&quot;gallery&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/01/26/qcSZIbwaMhG9XfF.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/01/26/7lnTXpMFWLZ1sIv.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/01/26/7lnTXpMFWLZ1sIv.png&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;br&gt;
再点击保存&lt;/p&gt;
&lt;h3 id=&quot;第四步&quot;&gt;第四步！&lt;/h3&gt;
&lt;p&gt;看看你的图片，右下角怎么会有水印？&lt;br&gt;
可以点击右上角那个小黄星来Upgrade，它会然你去一个网页&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/01/28/GBFfpD1EuMHoq9h.png&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/01/28/GBFfpD1EuMHoq9h.png&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;br&gt;
选择I’d rather not donate后点击Get Key，将它弹出的Key复制到Mine-imator即可！再次保存，就没有水印了&lt;br&gt;
&lt;a href=&quot;https://s2.loli.net/2023/01/28/yrtq1vhFZimRcfp.jpg&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;图片&quot;&gt;&lt;img src=&quot;https://s2.loli.net/2023/01/28/yrtq1vhFZimRcfp.jpg&quot; alt=&quot;图片&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>分享：一些VBS小资源</title><link>https://blog.skyshadow.fun/posts/20230118155219/</link><guid isPermaLink="true">https://blog.skyshadow.fun/posts/20230118155219/</guid><description>分享一些天影大侠在网课期间糊弄同学的vbs代码，开箱即用</description><pubDate>Wed, 18 Jan 2023 15:52:19 GMT</pubDate><content:encoded>&lt;h3 id=&quot;前言&quot;&gt;前言&lt;/h3&gt;
&lt;p&gt;这里是2025年的天影大侠，这是网课期间上网找的，当个分享吧&lt;/p&gt;
&lt;h3 id=&quot;正文&quot;&gt;正文&lt;/h3&gt;
&lt;p&gt;VBS是什么?&lt;br&gt;
VBS是基于Visual Basic的脚本语言。VBS的全称是：Microsoft Visual Basic Script Edition。（微软公司可视化BASIC脚本版）。&lt;br&gt;
大家可以百度查查关于vbs的其他信息，天影大侠这里贴心地准备了&lt;a href=&quot;https://baike.baidu.com/item/VBS/1700748&quot;&gt;百度百科链接&lt;/a&gt;…&lt;br&gt;
当然了，和你们一样，我只是一个新手，碰vbs都是为了整蛊好友们&lt;br&gt;
所以，这里就分享天影大侠在网上找到的一些vbs资源&lt;br&gt;
中文部分可自行修改&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;一个问题如不选择是则永不能退出&quot;&gt;一个问题，如不选择”是”，则永不能退出！&lt;/h3&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;do  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;a =msgbox(&quot;问题内容！！！&quot;,vbYesNoCancel,&quot;问题标题&quot;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if a =vbYes then  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;msgbox &quot;Yes回答内容&quot;,,&quot;标题&quot;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;exit do  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;elseif a =vbNo then  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;b =msgbox(&quot;你完了&quot;,vbYesNo,&quot;你完了。&quot;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if b =vbYes then  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;msgbox &quot;你完了！&quot;,,&quot;你完了！！！&quot;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;else  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;msgbox &quot;你完了！！！&quot;,,&quot;你完了。。。&quot;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;end if  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;else  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;d =msgbox(&quot;你完了！！！&quot;,vbYesNo,&quot;你完了——&quot;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if d =vbYes then  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;msgbox &quot;你完了！&quot;,,&quot;你完了！！！&quot;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;else  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;msgbox &quot;你完了。。。&quot;,,&quot;你完了！！！&quot;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;end if  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;end if  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;loop  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;你完了无论点击什么都不会关闭可在任务管理器里关闭&quot;&gt;你完了，无论点击什么都不会关闭，可在任务管理器里关闭&lt;/h3&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;do  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;a =msgbox(&quot;你完了。。。&quot;,vbYesNoCancel,&quot;你完了&quot;)  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if a =vbYes then  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    b =msgbox(&quot;你完了&quot;,vbYesNo,&quot;你完了。&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    if b =vbYes then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    msgbox &quot;你完了！&quot;,,&quot;你完了！！！&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    msgbox &quot;你完了！！！&quot;,,&quot;你完了。。。&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    end if&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;elseif a =vbNo then  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    b =msgbox(&quot;你完了&quot;,vbYesNo,&quot;你完了。&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    if b =vbYes then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    msgbox &quot;你完了！&quot;,,&quot;你完了！！！&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    msgbox &quot;你完了！！！&quot;,,&quot;你完了。。。&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    end if&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;else  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    d =msgbox(&quot;你完了！！！&quot;,vbYesNo,&quot;你完了——&quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    if d =vbYes then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    msgbox &quot;你完了！&quot;,,&quot;你完了！！！&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    msgbox &quot;你完了。。。&quot;,,&quot;你完了！！！&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    end if&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;end if  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;loop  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;打开有惊喜无限弹窗关机即可解决&quot;&gt;打开有惊喜，无限弹窗！关机即可解决&lt;/h3&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light-high-contrast github-dark-high-contrast&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#0a0c10;color:#0e1116;--shiki-dark:#f0f3f6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;do  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;wscript.createobject(&quot;wscript.shell&quot;).run &quot;mshta vbscript:msgbox(&quot;&quot;惊喜&quot;&quot;)(windows.close)&quot;,vhide  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;loop  &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;看到了吧，领一个去整蛊朋友多是一件美事…&lt;/p&gt;</content:encoded></item></channel></rss>