前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Monaco 代码编辑器主题配置实践

Monaco 代码编辑器主题配置实践

作者头像
上山打老虎了
发布2024-05-16 16:55:29
3320
发布2024-05-16 16:55:29
举报
文章被收录于专栏:Article

背景

Monaco 编辑器是目前 VS code 代码编辑器的开源内核,在功能上基本碾压同类的其他代码编辑器,同时得益于丰富的插件体系,目前很多市面上在线 IDE 工具也都是基于此做了二次开发,包括 Coding 的 Cloud Studio 产品,以及 LeetCode 里的代码编辑器都是 Monaco,影响力可见一斑。

对于开源方案,大多数的情况下我们都需要二次修改以适配最终的业务产品形态,因此我们也有修改编辑器主题的诉求。

思路

通过代码捞出所有的配置,自己一个个去实验。

Playground:https://microsoft.github.io/monaco-editor/playground.html

代码语言:javascript
复制
const colors = _amdLoaderGlobal.require('vs/platform/registry/common/platform').Registry.data.get('base.contributions.colors').colorSchema.properties;
monaco.editor.create(document.getElementById("container"), {
	value: JSON.stringify(colors, null, 2),
	language: "json"
});

其次参照文档,寻求完整的解释含义,不要只看 StackOverflow 上或者网络上其他地方的评论给出的配置参数,有些是有使用前提的,比如鼠标滚轮事件,默认情况下 Monaco 在代码编辑器容器里不对该事件做冒泡,也就导致当你在编辑器里用鼠标滚轮滚动到底部时,也无法触发页面的滚动,因此需要将该配置设置为 false

Optional alwaysConsumeMouseWheel?: boolean Always consume mouse wheel events (always call preventDefault() and stopPropagation() on the browser events). Defaults to true. NOTE: This option cannot be updated using updateOptions() https://microsoft.github.io/monaco-editor/typedoc/interfaces/editor.IEditorScrollbarOptions.html#alwaysConsumeMouseWheel

所以这个配置只能在初始化编辑器的阶段就设置。不看文档自己瞎折腾必定失败。

React 应用

由于前端目前都在使用 Vue 或者 React,图省事的话,我们可以使用第三方的 @monaco-editor/react 库就不需要关心配置相关的事情,开箱即用,底层也是依赖了微软的 monaco-editor ,在业务层我们只需要关心 @monaco-editor/react 提供的 API 即可。

这里给出一个实际应用,我们所关心的 API 基本上就这几个,剩下的可以参照文档。

代码语言:javascript
复制
<Editor
  height="250px"
  defaultLanguage="sql"
  options={{ // 初始化时就需要设置的配置放在这里
    scrollbar: {
      useShadows: false,
      alwaysConsumeMouseWheel: false
    }
  }}
  theme="editorTheme" // 自定义主题
  beforeMount={handleEditorBeforeMount} // 编辑器加载前
  onMount={handleEditorDidMount} // 编辑器加载后
  value={content} // 编辑器内容文本
  onChange={handleEditorChange} // 监听内容变化
/>

TODO

  • 后续给一份配置好的主题参数
  • 加载优化方案
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024年05月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 思路
  • React 应用
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档