Add plugin event bus code-language-update and code-language-change - #15610
Conversation
code-languages-prepare/changecode-language-before and code-language-change
|
@Vanessa219 哪里改坏了? 下次改之前先跟我说一下嘛,这样基本全都改回去了,改回来好麻烦的 |
|
还有,叫 code-languages-prepare 是因为等后面需要的时候会再加一个 code-language-before 用来修改代码语言元素,现在用了 before 以后添加的就不知道叫什么了 |
|
改坏了的地方参见截图对比。 这个看上去就是修改代码语言的 |
|
截图没看出来什么问题 |
|
顺序和默认选项不对,相关的是 #15404 |
|
不是,图里没有自定义语言。是标注的123的顺序不一致,还有修改前是第三行高亮,修改后是第二行高亮。这个需求是#15404 里面修改的,感觉不仅被改回去了,还改的有点不太对。
|
|
jav 是自定义语言,我移动到列表末尾了 我觉得一般来说用户都是输入内置的语言,毕竟只有内置的语言有高亮,所以自定义语言我就丢到最后了,没必要放前面占地方 |
|
这个是用户输入的搜索关键字,自定义语言应该是通过插件 "code-language-before" 添加的。 |
|
我的意思就是用户如果将代码块设置为 jav 语言,那么 jav 就是用户使用的自定义语言,我的这个概念是这么理解。 当然通过 code-language-before 添加的也可以叫自定义语言。 总之 jav 在末尾是符合预期的。 |
|
但是一般来说都不会有人只输入一个 j 的吧,而且按两三下键盘方向键 ↑ 就行了,不用一直按 ↓ 我觉得把非内置语言放在顶部不合理,没什么人用的选项占了最明显的位置 |
|
就目前这样,我觉得挺好的。 |
|
要不我发个投票贴看看其他用户的想法? |
|
现在这个设计也是你建议的,为什么要推翻呢。感觉用下来挺方便的,不管用户要输入什么都很快捷和方便。因为当前选中的是最合理的,如果想要搜索的关键字也可以很快插入。用上键翻到最后一条,一般用户没这个思维。 |
|
现在的设计就挺好的,没必要改 |
|
我很难接受搜索语言的时候要跨两个我用不着的选项去看选中的语言:
底线是最多有一个选项,要么把“清空”干掉,要么把自定义语言放到末尾去 上次提 搜索代码块语言,默认选择首个内置语言候选项 #15404 就是别扭得受不了了,但我发现自定义语言还在前面的话就依旧别扭 |
|
这样其他用户不好用啊 |
|
以及还有一个问题是目前插件没法修改“清空”选项和自定义语言选项的排序,只能固定在最前面 |
|
|
低频使用我认可,同时我也认为:
扩写一下就是:在输入框有文本的时候,使用自定义语言那个选项替代“清空”选项,删光输入框文本之后又显示清空按钮。默认选中的选项是“清空”按钮下的第一个选项。 我认为这个方案和以下情况不冲突:
我应当是尽量把描述与之前保持一致了,如果仍需进一步解释我可以稍微补充。看了一下15404的修改,感觉现在这个方案应该是还有一个问题:输入的语言与某个内置语言一致时应当如何显示。 |
把自定义语言放到末尾的话倒是可以直接隐藏 |
code-language-update and code-language-changecode-language-before and code-language-change
code-language-before and code-language-changecode-language-update and code-language-change
|
要不就像 notion 和 wolai 那样都不显示了,把清空换成纯文本。这个可以新启一个 issue 了。 |
* commit 'b699675b9726e23a5b7286fdae814016d4713616': (61 commits) 🔖 Release v3.3.1 🔖 Release v3.3.1 🎨 Clean code 🎨 siyuan-note#15736 📝 Update changelogs 📝 Move changelogs v3.2.x 🎨 siyuan-note#15610 🎨 Improve database template field grouping siyuan-note#15687 🎨 Improve database rollup template rendering siyuan-note#15722 🎨 反链面板移除元素后,文档分屏且为空会重复添加空块 🎨 Improve database rollup template rendering siyuan-note#15722 🎨 Improve av ⚡ siyuan-note#15734 🐛 siyuan-note#14269 🎨 Improve av 🎨 Block ref search and global search results display reference counts siyuan-note#15721 🎨 siyuan-note#15693 🚨 🚨 ✨ dynamic icon use current date as default (siyuan-note#15693) ...
|
自定义语言选项是要有的,毕竟有人用。我还是觉得把自定义语言放到末尾更合适 |
@Achuan-2 我刚刚看了一下代码确实没有处理别名,大写的 R 不算自定义语言。我会 PR 改进一下,如果输入 "R" 的话, R 语言应该是默认选中的首个选项。这样的话你能接受把自定义语言排序在最后吗? |
|
目前自定义语言排序放在前面,不管是输入大写(有些人可能喜欢输入大写的代码语言),还是自定义语言和备注都可以,我觉得这种交互方式就是比较好的,目前用了这么久都很舒服 用不到的人,直接按enter就是选定语言列表里的语言了,也完全没影响,只不过现在你觉得自定义语言碍眼而已 要减少前面的选项可以把清空按钮放在输入框右侧,变成一个按钮 |
这样的话就没法用键盘方向键选中了,所以不行 |
|
你个人平时需要输入什么自定义语言吗? |
那就把清空按钮和自定义语言按钮做成一个按钮,动态替换
自定义语言是无法穷尽的,需求也是会变的,不如保留直接自定义的入口,而不是藏起来。自定义语言功能是什么探索款吗,像电子设备一样加钱看电路板(需要花费额外精力了解到自定义语言功能在列表最下方) |
|
还是要看实际的用户需求,理论上有但实际不会用的就不应该考虑了 |







Add plugin event bus
code-languages-prepareandcode-languages-change本 PR 有几个改进:
给选项添加 data-id 属性( 给常用菜单的 button 添加 data-id 属性 #12518 )
给选项添加 b3-list-item--focus 类名之前先检查元素是否被隐藏,兼容用户使用 CSS 隐藏了选项的情况
把搜索时的自定义语言移动到列表末尾,因为使用自定义语言是更低频的
增加事件
code-languages-prepare和code-languages-change,能够通过插件实现这几个需求:根据最近使用来调整代码块语言选择列表 #6479代码块选择语言时,能否将最近使用过的语言放在列表最上方? #9964 代码块语言选择列表,应添加已使用的代码风格 #11507p.s. 还需要修改 https://github.com/siyuan-note/petal
我简单试了一下可以实现这样的效果:
video.webm
另外,对于第 4 点,还有一份 AI 的总结:
代码语言钩子 API
概述
思源笔记提供了两个代码语言相关的钩子:
code-languages-prepare: 在显示代码语言列表前触发,允许插件修改可用的代码语言列表code-languages-change: 在用户更改代码语言后触发,允许插件执行相应的操作事件详情
code-languages-prepare 钩子
code-languages-prepare{ languages: string[] }languages: 包含所有可用代码语言的数组code-languages-change 钩子
code-languages-change{ language: string, languageChanges: Array<{oldLanguage: string, languageElement: HTMLElement}>, protyle: IProtyle }language: 新的语言名称(空字符串表示清除语言)languageChanges: 语言变更信息数组,每个元素包含 oldLanguage 和 languageElementprotyle: 编辑器实例使用方法
1. 基本用法
2. 添加自定义语言
3. 移除特定语言
4. 重新排序语言
5. 过滤语言
6. 使用 code-languages-change 钩子
注意事项
languages数组,而不是创建新的数组完整示例
相关文件
app/src/protyle/toolbar/index.ts- 钩子触发位置app/src/types/index.d.ts- 事件类型定义app/src/plugin/EventBus.ts- 事件总线实现