46 lines
4.1 KiB
Markdown
46 lines
4.1 KiB
Markdown
# 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 实际列出的可用主题只有默认和暗色两个?)
|
||
- 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。
|