play around with Scintilla and Lexilla

This commit is contained in:
2024-07-02 23:47:26 +08:00
parent d7c71f41b2
commit 727a2ec214
992 changed files with 281111 additions and 195 deletions

View File

@ -2,7 +2,9 @@
## 说明
这是一个用来实验 KDE Framework 的项目(主要是 Widgets 相关的组件),此项目本身(至少目前)不是一个能用的文本编辑器,甚至可以说实际上什么功能都没有。
这是一个用来实验 KDE Framework (主要是 Widgets 相关的组件)以及 Scintilla 的项目,此项目本身(至少目前)不是一个能用的文本编辑器,甚至可以说实际上什么功能都没有。
### KF6
现阶段MSYS2 仓库的 KF6 组件已足以构建基本的应用程序,并包括一些优点。
@ -14,3 +16,30 @@
- KStyleManager: 用于初始化 breeze 主题(和配置似乎没啥关系..
- KColorSchemeMenu: 提供切换主题的菜单项MSYS2 下KColorSchemeMenu 实际列出的可用主题只有默认和暗色两个?)
- KIconTheme: 初始化图标主题,需要在 QApplication 构造之前调用初始化,并且看上去需要配合什么别的东西才能做到颜色正确...
### QSciScintilla
是一个第三方的 Scintilla Qt binding提供了 Qt 5 与 Qt 6 的支持,提供了 C++ 与 Python 的支持(当然这里只试了 C++)。好处是确实是对 Scintilla 有一定程度的包装,简化了一些常见需求的实现复杂程度,缺点是其所基于的 Scintilla 版本太低,(直接提供了)支持的语言少,一些旧的 API 实际有点奇怪,且其[已经进入维护状态](https://www.riverbankcomputing.com/pipermail/qscintilla/2024-June/001634.html),即便可能继续支持新的 Qt 但可能不会跟进新的 Scintilla 版本了。
值得注意的是QSciScintilla 的许可是 GPL/商业 二选一,原始 Scintilla 的许可则宽松很多。
目前实际在使用 QSciScintilla 的 Notepad++ 仿品可能只有 Notepad--。
### Scintilla 与 Lexilla
Scintilla 本体事实上是有 Qt 支持的,但就目前体验而言,一方面要写很多的琐碎业务逻辑代码来实现具体的一些特性,一方面其对 Qt 的支持也不算太深(比如 QColor 要自己转成 int再一方面至少 Scintilla 550在高分屏缩放的情况有细线问题不清楚是不是用法不对。Lexer 是 Scintilla 针对语法高亮的解决方案,而 Lexilla 是 Scintilla 5 起独立出来的专门放各种 Lexer 的项目。QSciScintilla 基于的 Scintilla 版本是 3.x所以自然用不了这个。
尽管这里尝试过程中遇到了比较多的奇怪问题,但至少看现有的其它 Notepad++ 仿品还是有选了直接用 Scintilla+Lexilla 的方案,比如 NotepadNext以及不太算仿品的 Textosaurus。
### 关于此项目与 Notepad++ clones
目前看到的 Notepad++ 仿品或者不太近似的编辑器都很有意思:
- notepadqq基于 CodeMirror前端技术当前不再活跃维护
- Textosaurus基于 Scintilla 与 Qt当前不再活跃维护
- NotepadNext基于 Scintilla 与 Qt活跃项目不过有一些 Notepad++ 的特色功能还没搬过去
- Notepad--:基于 QSciScintilla曾是开源项目较新版本是闭源项目存在许可协议合规问题活跃项目特色功能搬的比较全但存在一些明显的缺陷
此项目的初衷事实是测 KF测 KF 后发现 XMLGUI 这一套确实适合做类似 Notepad++ 这种菜单项特别多的东西,于是也体验了下 Scintilla发现开发体验要写的琐碎代码太多非常 tedious于是趁早放弃
一部分我觉得常用的 Notepad++ 特色功能,我会考虑贡献到 Kate/KTextEditor并且其实已经贡献了一个了然后至少目前继续用 Kate。