4.1 KiB
Pineapple Notepad?
说明
这是一个用来实验 KDE Framework (主要是 Widgets 相关的组件)以及 Scintilla 的项目,此项目本身(至少目前)不是一个能用的文本编辑器,甚至可以说实际上什么功能都没有。
KF6
现阶段,MSYS2 仓库的 KF6 组件已足以构建基本的应用程序,并包括一些优点。
- KXmlGui: 提供了一个便于创建与管理 QAction 的框架,可以便于将 Action 注册到菜单栏、工具栏,甚至还有一个命令搜索条。工具栏中的项目可由用户自由调整。
xxxxui.rc
- KConfig: 提供了一个基于 XML 文件生成配置管理工具类的解决方案。
xxx.kcfg
(配置文件结构本体)与xxx.kcfgc
(如何生成工具类的配置) - KConfigWidgets: 一系列配套组件,包括:
- KConfigDialog: 提供一个包括多个页的配置对话框,将若干页面加入此对话框,且根据 KConfig 生成的工具类自动更新每个页面的控件(页面内的控件需使用
kcfg_配置名称
作为对象名称)。 - KHamburgerMenu: 汉堡菜单
- KStyleManager: 用于初始化 breeze 主题(和配置似乎没啥关系..)
- KColorSchemeMenu: 提供切换主题的菜单项(MSYS2 下,KColorSchemeMenu 实际列出的可用主题只有默认和暗色两个?)
- KConfigDialog: 提供一个包括多个页的配置对话框,将若干页面加入此对话框,且根据 KConfig 生成的工具类自动更新每个页面的控件(页面内的控件需使用
- KIconTheme: 初始化图标主题,需要在 QApplication 构造之前调用初始化,并且看上去需要配合什么别的东西才能做到颜色正确...
QSciScintilla
是一个第三方的 Scintilla Qt binding,提供了 Qt 5 与 Qt 6 的支持,提供了 C++ 与 Python 的支持(当然这里只试了 C++)。好处是确实是对 Scintilla 有一定程度的包装,简化了一些常见需求的实现复杂程度,缺点是其所基于的 Scintilla 版本太低,(直接提供了)支持的语言少,一些旧的 API 实际有点奇怪,且其已经进入维护状态,即便可能继续支持新的 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。