Linux环境下Notepad–插件开发指南
在开始开发前,需安装以下工具和库:
build-essential(包含gcc/g++、make等);qt5-default(Qt5核心库)、qttools5-dev-tools(Qt Creator及uic、moc等工具);通过以下命令安装(Ubuntu/Debian为例):
sudo apt-get install build-essential qt5-default qttools5-dev-tools
若使用Fedora/RHEL,替换为:
sudo dnf install gcc-c++ qt5-devel qt5-linguist
此外,需从Notepad–官方仓库克隆源码,以便后续参考插件结构和API:
git clone https://gitcode.com/GitHub_Trending/no/notepad--
遵循Notepad–的插件组织规范,推荐的项目目录结构如下(以“文本大小写转换”插件为例):
src/plugin/helloworld/
├── helloworld.pro # Qt项目配置文件(定义构建规则、依赖项)
├── CMakeLists.txt # CMake构建脚本(可选,替代qmake)
├── helloworldexport.cpp # 插件入口实现(导出核心函数)
├── qttestclass.h # 主窗口类头文件(定义UI和逻辑接口)
├── qttestclass.cpp # 主窗口类实现(处理用户交互)
└── qttestclass.ui # UI界面设计文件(通过Qt Designer创建)
该结构便于主程序自动发现和加载插件,同时分离了界面、逻辑和入口代码。
Notepad–插件必须实现两个导出函数,用于主程序识别和调用插件:
NDD_PROC_IDENTIFY:插件身份标识该函数返回插件的基本信息(名称、版本、作者、菜单类型等),主程序通过此信息在“插件”菜单下创建对应项。
#include <pluginGl.h> // Notepad--插件API头文件
NDD_EXPORT bool NDD_PROC_IDENTIFY(NDD_PROC_DATA* pData) {
pData->m_strPlugName = "文本大小写转换"; // 插件名称(显示在菜单)
pData->m_strComment = "支持选中文本的大小写转换"; // 插件描述
pData->m_version = "v1.0"; // 版本号(格式:v主版本.次版本)
pData->m_auther = "开发者名称"; // 作者信息
pData->m_menuType = 1; // 菜单类型:1=在“工具”菜单下创建子菜单
return true; // 返回true表示标识成功
}
NDD_PROC_MAIN:插件主逻辑入口该函数是插件的核心,主程序通过此函数调用插件的具体功能。需通过getCurEdit()获取当前编辑器句柄(QsciScintilla对象),实现对文本的操作。
#include <pluginGl.h>
#include "qttestclass.h" // 自定义主窗口类
NDD_EXPORT int NDD_PROC_MAIN(QWidget* pNotepad, const QString& strFileName,
std::function<QsciScintilla*()> getCurEdit,
std::function<bool(int, void*)> pluginCallBack,
NDD_PROC_DATA* pData) {
QsciScintilla* pEdit = getCurEdit(); // 获取当前编辑器实例
if (!pEdit) {
qDebug() << "未获取到编辑器实例!";
return -1; // 返回-1表示执行失败
}
QtTestClass dlg(pNotepad, pEdit); // 创建自定义对话框(继承自QWidget)
dlg.exec(); // 显示对话框,等待用户操作
return 0; // 返回0表示执行成功
}
其中,QtTestClass是对话框类,用于实现具体的UI交互(如“转换为大写”“转换为小写”按钮),并通过QsciScintilla的API修改文本内容。
使用Qt Creator打开.pro项目文件(如helloworld.pro),配置构建套件(选择与Notepad–编译时一致的Qt版本),点击“构建”按钮即可生成插件文件(Linux下为.so动态库)。
若使用命令行编译,需编写CMakeLists.txt(或直接使用qmake+make):
cd src/plugin/helloworld
qmake # 生成Makefile
make -j4 # 编译(-j4表示使用4线程加速)
make install # 安装到Notepad--插件目录
编译成功后,插件文件(如libhelloworld.so)会自动复制到Notepad–的插件目录(Linux下为~/.local/share/notepad--/plugins/)。无需额外配置,重启Notepad–后,插件会在“插件”菜单下显示(如“文本大小写转换”)。
NDD_PROC_IDENTIFY和NDD_PROC_MAIN的官方原型,避免手动修改参数类型。.pro文件中添加依赖:QT += core gui widgets
CONFIG += link_pkgconfig
PKGCONFIG += qscintilla2
或通过命令行链接:g++ -fPIC -shared helloworld.cpp -o libhelloworld.so $(pkg-config --cflags --libs Qt5Widgets qscintilla2)
.pro文件中添加:CODECFORSRC = UTF-8
CODECFORTR = UTF-8
然后重新运行qmake。m_menuType字段控制菜单显示方式(如m_menuType=1表示在“工具”菜单下创建子菜单),并在NDD_PROC_MAIN中实现具体功能。QsciScintilla的API(如text()获取文本、setText()设置文本),结合正则表达式实现变量命名转换(如下划线转驼峰式)。QProcess调用系统命令(如yapf格式化Python代码、clang-format格式化C++代码),并将结果返回到编辑器。