VSCode撸猫插件vscode-cats它来了,一起来云撸猫吧

简介: VSCode撸猫插件vscode-cats它来了,一起来云撸猫吧

前言


本月活动主题是代码吸猫,大约两周以前,我写了一篇如何给 VSCode 和个人网站添加 live2d 喵咪的博客,没想到得到了众多大佬的喜爱,但大佬们想要简单快乐的撸猫,给VSCode和网站领养喵咪 一起快乐撸猫 实现撸猫有几分繁琐,用户体验性不佳。


因此为了让众多大佬更舒服的撸猫,我将撸猫功能封装成 vscode-cats 插件,同时已经将 vscode-cats 0.0.1 成功发布在 VSCode 应用市场上。如果想下载插件,

VSCode 扩展中直接搜索 vscode-cats 安装


💥💥💥💥💥💥💥💥 撒花~~~ 庆祝一下 ~~~💥💥💥💥💥💥💥💥

传送门:



插件实现思路


本插件的开发模式是通过修改 VSCode 自身文件来实现的, VSCode 官方并不推荐(连文档都没有),但即使这样,还是有大佬成功探索出这种模式,在此致敬一下此类项目的先导者: vscode-background开发者


撸猫插件的思路与 vscode-background 类似,background 插件通过修改 workbench 目录下 css 文件实现,撸猫插件通过修改 workbench 目录下 workbench.html 实现。


插件功能


目前撸猫插件还处于新生期,喵咪只能配置下面几个属性:


配置 描述
vscode-cats.enabled true:启用插件、false:禁用插件
vscode-cats.model 更换喵咪
vscode-cats.modelWidth 自定义喵咪宽度
vscode-cats.modelHeight 自定义喵咪高度
vscode-cats.moveX 自定义喵咪水平位置
vscode-cats.moveY 自定义喵咪垂直位置
vscode-cats.opacity 设置喵咪透明度
vscode-cats.position 设置喵咪左右定位


后续开发


后续开发,我现在还没完全设想好,目前脑袋里有的想法暂时想添加喵咪对话功能和背景音乐功能


对话功能


设想一下,当你写代码写的正酣时,可爱的喵咪还在卖力的夸奖你,那感觉不可谓不舒服啊,飘飘然如羽化登仙。


急求: 夸奖、吹捧、乐逗等喵言


背景音乐


光看文字还是有几分单调,如果能加上点简单的喵音,糯糯的、软软的,疲乏时听起来还是很舒服的。


看板娘


其实 live2d 喵咪只占一小部分,如果有大佬想要漂亮的小姐姐和帅气的小哥哥,也可以添加(😎😎😎)。


更多


大佬们,如果有更多好的想法,可以在评论区留言,咱们可以共同交流,寻求实现方案。


注意


  1. 如果想卸载 vscode-cats 插件,尽量关掉配置项 vscode-cats.enabled ,再进行卸载。
  2. 插件是通过修改 VSCode 自身文件实现的,因此在初次安装,或者 VSCode 升级的时候,会出现损坏提示,请选择 【不再提示】。如果实在介意此提示请不要安装此扩展!!!
  3. 因为是第一次开发插件,插件开发经验较少,阿包不能保证是否存在 bug 。如果有大佬下载后不能正常使用,给阿包留言一下。


解决【不再提示】警告


因为上述实现方法直接修改 VscodeJavaScript 文件,重启 Vscode 后有可能会有 code 文件错误的警告,我们来解决这种情况:


方法一


  1. 开命令行,安装 Fix VSCode Checksums,键入命令:


code --install-extension lehni.vscode-fix-checksums
复制代码


  1. 打开 Vscode ,快捷键 Ctrl + Shift + P 输入命令:


Fix Checksums:Apply
复制代码


方法二


打开 VSCode 扩展搜索 Fix VSCode Checksums 插件


image.png


插件实现核心


最后交待一下插件的大致实现核心吧。


getHTML.ts


撸猫插件的核心,当安装插件后或者开启撸猫插件时替换原 VSCodeworkbench.html 里的代码。


export default function (
  config: any,
  extName: string,
  version: string
): string {
  let model: string = config.model;
  let modelWidth: number = config.modelWidth;
  let modelHeight: number = config.modelHeight;
  let moveX: number = config.moveX;
  let moveY: number = config.moveY;
  let opacity: number = config.opacity;
  let position: string = config.position;
  return ` <!-- /*ext-${extName}-start*/ -->
  <!-- /*ext.${extName}.ver.${version}*/ -->
  <!-- Copyright (C) Microsoft Corporation. All rights reserved. -->
  <!DOCTYPE html>
  <html>
    <head>
      <meta charset="utf-8" />
      <meta
        http-equiv="Content-Security-Policy"
        content="default-src 'none'; img-src 'self' https: data: blob: vscode-remote-resource:; media-src 'none'; frame-src 'self' vscode-webview: https://*.vscode-webview-test.com; object-src 'self'; script-src * 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; connect-src 'self' https:; font-src 'self' https: vscode-remote-resource:;"
      />
    </head>
    <style type="text/css">
      #live2dcanvas {
        border: 0 !important;
      }
    </style>
    <body aria-label="">
      <div id="live2d-widget">
        <canvas
          id="live2dcanvas"
          width="${modelWidth}"
          height="${modelHeight}"
          style="
            position: fixed;
            width: ${modelWidth}px;
            height: ${modelHeight}px;
            opacity: ${opacity};
            transition: opacity 300ms ease-in-out;
            ${position}: ${moveX + 20}px;
            bottom: ${moveY + 20}px;
            z-index: 99999;
            pointer-events: none;
            border: 0;
          "
        ></canvas>
      </div>
    </body>
    <!-- Init Bootstrap Helpers -->
    <script src="../../../../bootstrap.js"></script>
    <script src="../../../../vs/loader.js"></script>
    <script src="../../../../bootstrap-window.js"></script>
    <!-- Startup via workbench.js -->
    <script src="workbench.js"></script>
    <script
      type="text/javascript"
      src="https://cdn.jsdelivr.net/npm/live2d-widget@3.0.4/lib/L2Dwidget.min.js?_=1557308476616"
    ></script>
    <script type="text/javascript">
      L2Dwidget.init({
        model: {
          jsonPath:
            "https://unpkg.com/live2d-widget-model-${model}/assets/${model}.model.json",
        },
        display: {
          superSample: 2,
          width: ${modelHeight},
          height: ${modelHeight},
          position: "${position}",
          hOffset:  ${moveX + 20},
          vOffset:  ${moveY + 20},
        },
        react: {
          opacityDefault: ${opacity}
        }
      });
    </script>
  </html>
  `;
}
复制代码


文件操作方法


另外最重要的就是文件的读取,修改,保存三大方法。


/**
 * 设置文件内容
 *
 * @param {string} filePath 文件路径
 * @param {string} content
 */
export const saveContent = function (filePath, content: string): void {
  fs.writeFileSync(filePath, content, "utf-8");
};
/**
 * 获取文件内容
 *  @param {string} filePath 文件路径
 */
export const getContent = function (filePath): string {
  return fs.readFileSync(filePath, "utf-8");
};
/**
 * 获取workbench为原始代码
 *
 * @private
 * @returns {string}
 */
export const renewHTML = function (): string {
  let nowContent = originHtml();
  return nowContent;
};
复制代码


总结


有了文件的读取、修改、保存和 getHTML 就可以轻松的实现 workbench.html 文件内容的更改。其余部分的实现等我再慢慢跟大家道来。


相关文章
|
3月前
|
iOS开发 MacOS
【Mac系统】解决Vscode中LeetCode插件不能刷剑指offer题库
文章讨论了解决Mac系统中Vscode里LeetCode插件无法刷剑指Offer题库的问题,并提供了一些相关的使用技巧和资源链接。
229 1
|
28天前
|
自然语言处理 JavaScript 开发者
通义灵码插件:VSCode 的智能编程助手
通义灵码插件:VSCode 的智能编程助手
230 3
|
1月前
|
前端开发 JavaScript 编译器
2024最新VSCode实用插件推荐,开发效率遥遥领先!超全面,快收藏~
【10月更文挑战第11天】2024最新VSCode实用插件推荐,开发效率遥遥领先!超全面,快收藏~
65 0
2024最新VSCode实用插件推荐,开发效率遥遥领先!超全面,快收藏~
|
3月前
|
前端开发 Go
vscode10大常用插件
本文介绍了前端开发中常用的工具及VSCode必备插件。推荐使用VSCode作为入门工具,并介绍了WebStorm和HBuilder等其他选项。VSCode插件包括:Open-In-Browser、live-server、Beautify、Code Runner、Image Preview、Path Intellisense、Turbo Console Log、css-auto-prefix、Bracket Pair Colorizer 和 Auto Rename Tag,这些插件能够显著提升开发效率和代码质量。此外,还提供了录制Gif图的工具GifCam。
133 5
vscode10大常用插件
|
2月前
|
人工智能 C++ 开发者
verilog vscode 与AI 插件
【9月更文挑战第11天】在Verilog开发中,使用Visual Studio Code(VS Code)结合AI插件能显著提升效率。VS Code提供强大的编辑功能,如语法高亮、自动补全和代码格式化;便捷的调试功能,支持多种调试器;以及丰富的插件生态。AI插件则可自动生成代码、优化现有代码、检测并修复错误,还能自动生成文档。常用插件包括Verilog AI Assistant和Verilog Language Server,可根据需求选择合适的工具组合,提高开发效率和代码质量。
123 2
|
3月前
|
前端开发 IDE 开发工具
OpenSumi问题之OpenSumi 对于 VS Code 插件生态要如何支持
OpenSumi问题之OpenSumi 对于 VS Code 插件生态要如何支持
|
3月前
|
JSON 前端开发 JavaScript
这 2 个插件,让你的 vscode更牛逼
这 2 个插件,让你的 vscode更牛逼
|
3月前
vscode——Prettier插件保存自动格式化
vscode——Prettier插件保存自动格式化
168 0
|
3月前
|
JavaScript Linux iOS开发
【Mac系统】Vscode使用LeetCode插件报错‘leetcode.toggleLeetCodeCn‘ not found
在Mac系统下使用VSCode的LeetCode插件时遇到“leetcode.toggleleetcodecn”命令找不到的错误解决方法,主要是通过从Nodejs官网下载并安装最新版本的Node.js来解决环境配置问题。
225 0
|
4月前
|
JavaScript IDE 开发工具
vue3【2024版】开发环境搭建(含官网和nvm下载切换最新版node,修改node下载源,创建项目,启动项目,安装vscode插件Vue - Official)
vue3【2024版】开发环境搭建(含官网和nvm下载切换最新版node,修改node下载源,创建项目,启动项目,安装vscode插件Vue - Official)
278 3